[Fedora-directory-commits] ldapserver/ldap/admin/src create_instance.c, 1.46, 1.47

Richard Allen Megginson (rmeggins) fedora-directory-commits at redhat.com
Fri Feb 23 18:40:30 UTC 2007


Author: rmeggins

Update of /cvs/dirsec/ldapserver/ldap/admin/src
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25228/ldapserver/ldap/admin/src

Modified Files:
	create_instance.c 
Log Message:
Resolves: bug 229825
Bug Description: aci with bogus uid= dn created by ds_newinst
Reviewed by: nhosoi (Thanks!)
Fix Description: Unknown to me until just now, PL_strdup(NULL) will return "" - the empty string.  The code in config_suitespot() expects that empty or unused fields are NULL.  The solution is to create a create_instance_strdup() wrapper around PL_strdup() and use that in cases where the argument may be NULL.  I checked create_instance.c.  Every other place where PL_strdup is used, the argument is checked for NULL first.  So these are the only places affected.  Instance creation works fine after this change and does not create the offending aci.
Platforms tested: RHEL4
Flag Day: no
Doc impact: no 



Index: create_instance.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/create_instance.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- create_instance.c	23 Feb 2007 04:10:50 -0000	1.46
+++ create_instance.c	23 Feb 2007 18:40:27 -0000	1.47
@@ -338,6 +338,7 @@
 char *create_instance_concatenate(char *, char *, int);
 int create_instance_mkdir(char *, int);
 char *create_instance_mkdir_p(char *, char *, int, struct passwd *);
+static char *create_instance_strdup(const char *);
 
 #if defined( SOLARIS )
 /*
@@ -1311,6 +1312,16 @@
     return 1;
 }
 
+static char *create_instance_strdup(const char *s)
+{
+    char *result = NULL;
+    if (s) {
+        result = PL_strdup(s);
+    }
+
+    return result;
+}
+
 #if defined( SOLARIS )
 /*
  * Solaris 9+ specific installation
@@ -4063,23 +4074,23 @@
 
     memset( &query_vars, 0, sizeof(query_vars) );
     if (!cf->use_existing_user_ds)
-        query_vars.suffix = PL_strdup( cf->suffix );
-    query_vars.ssAdmID = PL_strdup( cf->cfg_sspt_uid );
-    query_vars.ssAdmPW1 = PL_strdup( cf->cfg_sspt_uidpw );
-    query_vars.ssAdmPW2 = PL_strdup( cf->cfg_sspt_uidpw );
-    query_vars.rootDN = PL_strdup( cf->rootdn ); 
-    query_vars.rootPW = PL_strdup( cf->rootpw );
-    query_vars.admin_domain = PL_strdup( cf->admin_domain );
-    query_vars.netscaperoot = PL_strdup( cf->netscaperoot );
-    query_vars.testconfig = PL_strdup( cf->testconfig );
-    query_vars.consumerDN = PL_strdup(cf->consumerdn);
-    query_vars.consumerPW = PL_strdup(cf->consumerhashedpw);
+        query_vars.suffix = create_instance_strdup( cf->suffix );
+    query_vars.ssAdmID = create_instance_strdup( cf->cfg_sspt_uid );
+    query_vars.ssAdmPW1 = create_instance_strdup( cf->cfg_sspt_uidpw );
+    query_vars.ssAdmPW2 = create_instance_strdup( cf->cfg_sspt_uidpw );
+    query_vars.rootDN = create_instance_strdup( cf->rootdn ); 
+    query_vars.rootPW = create_instance_strdup( cf->rootpw );
+    query_vars.admin_domain = create_instance_strdup( cf->admin_domain );
+    query_vars.netscaperoot = create_instance_strdup( cf->netscaperoot );
+    query_vars.testconfig = create_instance_strdup( cf->testconfig );
+    query_vars.consumerDN = create_instance_strdup(cf->consumerdn);
+    query_vars.consumerPW = create_instance_strdup(cf->consumerhashedpw);
     if (cf->cfg_sspt && !strcmp(cf->cfg_sspt, "1"))
         query_vars.cfg_sspt = 1;
     else
         query_vars.cfg_sspt = 0;
 
-    query_vars.config_admin_uid = PL_strdup(cf->cfg_sspt_uid);
+    query_vars.config_admin_uid = create_instance_strdup(cf->cfg_sspt_uid);
 
     memset(&slapd_conf, 0, sizeof(SLAPD_CONFIG));
     if (sroot)




More information about the Fedora-directory-commits mailing list