[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#4662) ldap_create needs lock?



Full_Name: Bernie Volz
Version: All
OS: Linux
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (64.102.254.33)


In ldap_create, if multiple threads are calling ldap_init (or one of the other
initialization functions), they may compete to initialize the global options and
this results in a segmentation fault.

	*ldp = NULL;
	/* Get pointer to global option structure */
	if ( (gopts = LDAP_INT_GLOBAL_OPT()) == NULL) {
		return LDAP_NO_MEMORY;
	}

	/* Initialize the global options, if not already done. */
	if( gopts->ldo_valid != LDAP_INITIALIZED ) {
		ldap_int_initialize(gopts, NULL);
		if ( gopts->ldo_valid != LDAP_INITIALIZED )
			return LDAP_LOCAL_ERROR;
	}

Shouldn't the above code be conditionalized on LDAP_R_COMPILE and use a static
global mutex to assure that only one thread is testing and potentially
initializing the global options.