]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/init.c
Cast char* argument to hh_to_c() to Byte*
[openldap] / libraries / libldap / init.c
index 3801899ceba76c077f8fbd809be377f4f4b09558..ae298ff23d8a2819a040aa7a2ed5651a517f43b8 100644 (file)
@@ -1,3 +1,7 @@
+/*
+ * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 #include "portable.h"
 
 #include <stdio.h>
@@ -11,7 +15,7 @@
 #include "ldap-int.h"
 #include "ldapconfig.h"
 
-struct ldapoptions openldap_ldap_global_options; 
+struct ldapoptions openldap_ldap_global_options = { LDAP_DEBUG_NONE };  
 
 #undef gopts
 #define gopts openldap_ldap_global_options
@@ -72,6 +76,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 */
@@ -83,14 +92,15 @@ static void openldap_ldap_init_w_conf(const char *file)
                if(*start == '#') continue;
 
                /* trim leading white space */
-               while((*start != '\0') && isspace(*start)) start++;
+               while((*start != '\0') && isspace((unsigned char) *start))
+                       start++;
 
                /* anything left? */
                if(*start == '\0') continue;
 
                /* trim trailing white space */
                end = &start[strlen(start)-1];
-               while(isspace(*end)) end--;
+               while(isspace((unsigned char)*end)) end--;
                end[1] = '\0';
 
                /* anything left? */
@@ -99,7 +109,7 @@ static void openldap_ldap_init_w_conf(const char *file)
 
                /* parse the command */
                cmd=start;
-               while((*start != '\0') && !isspace(*start)) {
+               while((*start != '\0') && !isspace((unsigned char)*start)) {
                        start++;
                }
                if(*start == '\0') {
@@ -110,7 +120,7 @@ static void openldap_ldap_init_w_conf(const char *file)
                *start++ = '\0';
 
                /* we must have some non-whitespace to skip */
-               while(isspace(*start)) start++;
+               while(isspace((unsigned char)*start)) start++;
                opt = start;
 
                for(i=0; attrs[i].type != ATTR_NONE; i++) {
@@ -156,7 +166,7 @@ static void openldap_ldap_init_w_conf(const char *file)
 
                        case ATTR_STRING:
                                if (* (char**) p != NULL) free(* (char**) p);
-                               * (char**) p = ldap_strdup(opt);
+                               * (char**) p = strdup(opt);
                                break;
                        }
                }
@@ -165,17 +175,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);
@@ -185,6 +203,10 @@ 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);
 }
@@ -251,7 +273,7 @@ static void openldap_ldap_init_w_env(const char *prefix)
                        if (*value == '\0') {
                                * (char**) p = NULL;
                        } else {
-                               * (char**) p = ldap_strdup(value);
+                               * (char**) p = strdup(value);
                        }
                        break;
                }
@@ -264,12 +286,16 @@ void openldap_ldap_initialize( void )
                return;
        }
 
+       ldap_pvt_init_utils();
+
        gopts.ldo_version =     LDAP_VERSION2;
        gopts.ldo_deref =       LDAP_DEREF_NEVER;
        gopts.ldo_timelimit = LDAP_NO_LIMIT;
        gopts.ldo_sizelimit = LDAP_NO_LIMIT;
 
-       gopts.ldo_defhost = ldap_strdup("localhost");
+       gopts.ldo_debug = 0;
+
+       gopts.ldo_defhost = strdup("localhost");
        gopts.ldo_defport = LDAP_PORT;
 
        gopts.ldo_refhoplimit = LDAP_DEFAULT_REFHOPLIMIT;
@@ -281,18 +307,30 @@ void openldap_ldap_initialize( void )
        LDAP_BOOL_SET(&gopts, LDAP_BOOL_REFERRALS);
 #endif
 
+       openldap_ldap_initialized = 1;
+
+       if( getenv("LDAPNOINIT") != NULL ) {
+               return;
+       }
+
        openldap_ldap_init_w_conf(DEFAULT_LDAP_CONF_FILE);
        openldap_ldap_init_w_userconf(DEFAULT_LDAP_USERRC_FILE);
 
        {
-               char *altfile = getenv("LDAPRC");
+               char *altfile = getenv("LDAPCONF");
 
                if( altfile != NULL ) {
                        openldap_ldap_init_w_conf( altfile );
                }
        }
 
-       openldap_ldap_init_w_env(NULL);
+       {
+               char *altfile = getenv("LDAPRC");
 
-       openldap_ldap_initialized = 1;
+               if( altfile != NULL ) {
+                       openldap_ldap_init_w_userconf( altfile );
+               }
+       }
+
+       openldap_ldap_init_w_env(NULL);
 }