]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/init.c
LDAP C-API changes
[openldap] / libraries / libldap / init.c
index 9836277748145557cf9b12267f824fb1b694f6e3..c79bdb93cfa3b9bdc77f9be3461842cff0ceeb85 100644 (file)
@@ -7,7 +7,6 @@
 #include <ac/string.h>
 #include <ac/ctype.h>
 #include <ac/time.h>
-extern char *strdup (const char *);
 
 #include "ldap-int.h"
 #include "ldapconfig.h"
@@ -73,6 +72,11 @@ static void openldap_ldap_init_w_conf(const char *file)
        char *cmd, *opt;
        char *start, *end;
 
+       if (file == NULL) {
+               /* no file name */
+               return;
+       }
+
        fp = fopen(file, "r");
        if(fp == NULL) {
                /* could not open file */
@@ -157,7 +161,7 @@ static void openldap_ldap_init_w_conf(const char *file)
 
                        case ATTR_STRING:
                                if (* (char**) p != NULL) free(* (char**) p);
-                               * (char**) p = strdup(opt);
+                               * (char**) p = ldap_strdup(opt);
                                break;
                        }
                }
@@ -166,17 +170,25 @@ static void openldap_ldap_init_w_conf(const char *file)
 
 static void openldap_ldap_init_w_userconf(const char *file)
 {
-       char *home = getenv("HOME");
+       char *home;
        char *path;
-       
+
+       if (file == NULL) {
+               /* no file name */
+               return;
+       }
+
+       home = getenv("HOME");
+
        if (home != NULL) {
                path = malloc(strlen(home) + strlen(file) + 3);
        } else {
                path = malloc(strlen(file) + 3);
        }
 
-
        if(home != NULL && path != NULL) {
+               /* we assume UNIX path syntax is used... */
+
                /* try ~/file */
                sprintf(path, "%s/%s", home, file);
                openldap_ldap_init_w_conf(path);
@@ -186,14 +198,12 @@ static void openldap_ldap_init_w_userconf(const char *file)
                openldap_ldap_init_w_conf(path);
        }
 
+       if(path != NULL) {
+               free(path);
+       }
+
        /* try file */
        openldap_ldap_init_w_conf(file);
-
-       if(path == NULL) {
-               /* try .file */
-               sprintf(path, ".%s", file);
-               openldap_ldap_init_w_conf(path);
-       }
 }
 
 static void openldap_ldap_init_w_env(const char *prefix)
@@ -258,7 +268,7 @@ static void openldap_ldap_init_w_env(const char *prefix)
                        if (*value == '\0') {
                                * (char**) p = NULL;
                        } else {
-                               * (char**) p = strdup(value);
+                               * (char**) p = ldap_strdup(value);
                        }
                        break;
                }
@@ -276,7 +286,7 @@ void openldap_ldap_initialize( void )
        gopts.ldo_timelimit = LDAP_NO_LIMIT;
        gopts.ldo_sizelimit = LDAP_NO_LIMIT;
 
-       gopts.ldo_defhost = strdup("localhost");
+       gopts.ldo_defhost = ldap_strdup("localhost");
        gopts.ldo_defport = LDAP_PORT;
 
        gopts.ldo_refhoplimit = LDAP_DEFAULT_REFHOPLIMIT;
@@ -290,6 +300,15 @@ void openldap_ldap_initialize( void )
 
        openldap_ldap_init_w_conf(DEFAULT_LDAP_CONF_FILE);
        openldap_ldap_init_w_userconf(DEFAULT_LDAP_USERRC_FILE);
+
+       {
+               char *altfile = getenv("LDAPRC");
+
+               if( altfile != NULL ) {
+                       openldap_ldap_init_w_conf( altfile );
+               }
+       }
+
        openldap_ldap_init_w_env(NULL);
 
        openldap_ldap_initialized = 1;