]> git.sur5r.net Git - openldap/commitdiff
ITS#8273 Windows file:// URL fixup
authorHoward Chu <hyc@openldap.org>
Mon, 19 Oct 2015 07:52:28 +0000 (08:52 +0100)
committerHoward Chu <hyc@openldap.org>
Mon, 19 Oct 2015 07:52:28 +0000 (08:52 +0100)
libraries/libldap/fetch.c

index 1d68fda0c42d8b1b937fe33f345f40aa076fab45..6c65d82f14ebdd419948dec5b3508773c6a15201 100644 (file)
@@ -50,9 +50,22 @@ ldif_open_url(
                /* we don't check for LDAP_DIRSEP since URLs should contain '/' */
                if ( urlstr[0] == '/' && urlstr[1] == '/' ) {
                        urlstr += 2;
-                       /* path must be absolute if authority is present */
-                       if ( urlstr[0] != '/' )
+                       /* path must be absolute if authority is present
+                        * technically, file://hostname/path is also legal but we don't
+                        * accept a non-empty hostname
+                        */
+                       if ( urlstr[0] != '/' ) {
+#ifdef _WIN32
+                               /* An absolute path in improper file://C:/foo/bar format */
+                               if ( urlstr[1] != ':' )
+#endif
                                return NULL;
+                       }
+#ifdef _WIN32
+                       /* An absolute path in proper file:///C:/foo/bar format */
+                       if ( urlstr[2] == ':' )
+                               urlstr++;
+#endif
                }
 
                p = ber_strdup( urlstr );