s4/schema: don't crash if we don't have subClassOf
authorAndrew Tridgell <tridge@samba.org>
Thu, 10 Sep 2009 02:06:20 +0000 (12:06 +1000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 10 Sep 2009 02:12:49 +0000 (12:12 +1000)
source4/dsdb/schema/schema_inferiors.c

index 63ddb4a424ec299a973679e2ee09841e42fa617a..b0ecc08600be69401397b0b712417cf351270207 100644 (file)
@@ -49,7 +49,8 @@ static char **schema_supclasses(struct dsdb_schema *schema, struct dsdb_class *s
        }
 
        /* Cope with 'top SUP top', ie top is subClassOf top */ 
-       if (strcmp(schema_class->lDAPDisplayName, schema_class->subClassOf) == 0) {
+       if (schema_class->subClassOf &&
+           strcmp(schema_class->lDAPDisplayName, schema_class->subClassOf) == 0) {
                schema_class->supclasses = list;
                return list;
        }
@@ -132,7 +133,11 @@ static void schema_create_subclasses(struct dsdb_schema *schema)
 
        for (schema_class=schema->classes; schema_class; schema_class=schema_class->next) {
                struct dsdb_class *schema_class2 = dsdb_class_by_lDAPDisplayName(schema, schema_class->subClassOf);
-               if (schema_class != schema_class2) {
+               if (schema_class2 == NULL) {
+                       DEBUG(0,("ERROR: no subClassOf for '%s'\n", schema_class->lDAPDisplayName));
+                       continue;
+               }
+               if (schema_class2 && schema_class != schema_class2) {
                        if (schema_class2->subclasses_direct == NULL) {
                                schema_class2->subclasses_direct = str_list_make_empty(schema_class2);
                        }