]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schemaparse.c
Another concurrency typo.
[openldap] / servers / slapd / schemaparse.c
index 96e01f09b0afa5ea0e2d454b5b5925ee0e02b0fb..900263c84aaa000056f1d0b32fd238a2d4265ab5 100644 (file)
@@ -29,16 +29,17 @@ parse_oc(
        struct objclass **ocp;
 
        oc = (struct objclass *) ch_calloc( 1, sizeof(struct objclass) );
-       oc->oc_name = strdup( argv[1] );
+       oc->oc_name = ch_strdup( argv[1] );
        for ( i = 2; i < argc; i++ ) {
                /* required attributes */
                if ( strcasecmp( argv[i], "requires" ) == 0 ) {
                        do {
                                i++;
                                if ( i < argc ) {
+                                       char **s = str2charray( argv[i], "," );
                                        last = argv[i][strlen( argv[i] ) - 1];
-                                       charray_merge( &oc->oc_required,
-                                               str2charray( argv[i], "," ) );
+                                       charray_merge( &oc->oc_required, s );
+                                       charray_free( s );
                                }
                        } while ( i < argc && last == ',' );
 
@@ -47,9 +48,11 @@ parse_oc(
                        do {
                                i++;
                                if ( i < argc ) {
+                                       char **s = str2charray( argv[i], "," );
                                        last = argv[i][strlen( argv[i] ) - 1];
-                                       charray_merge( &oc->oc_allowed,
-                                               str2charray( argv[i], "," ) );
+                                       
+                                       charray_merge( &oc->oc_allowed, s );
+                                       charray_free( s );
                                }
                        } while ( i < argc && last == ',' );