X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fschemaparse.c;h=f802f1ad59a541ee2cc774fb9746ca62aa435911;hb=19838fe2ef8161be435454490284baf98d73df88;hp=d0b0d5b77a26c2721048efe64ddafe25bf20ae79;hpb=04391a9ec6b2f9c2e395dfab468bcde9e5ab8213;p=openldap diff --git a/servers/slapd/schemaparse.c b/servers/slapd/schemaparse.c index d0b0d5b77a..f802f1ad59 100644 --- a/servers/slapd/schemaparse.c +++ b/servers/slapd/schemaparse.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -25,8 +25,6 @@ #include "slap.h" #include "ldap_schema.h" -int global_schemacheck = 1; /* schemacheck ON is default */ - static void oc_usage(void); static void at_usage(void); @@ -126,17 +124,17 @@ cr_usage( void ) int parse_cr( - const char *fname, - int lineno, - char *line, - char **argv, - ContentRule **scr ) + const char *fname, + int lineno, + char *line, + char **argv, + ContentRule **scr ) { LDAPContentRule *cr; int code; const char *err; - cr = ldap_str2contentrule(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); + cr = ldap_str2contentrule( line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !cr ) { fprintf( stderr, "%s: line %d: %s before %s\n", fname, lineno, ldap_scherr2str(code), err ); @@ -149,27 +147,36 @@ parse_cr( "%s: line %d: Content rule has no OID\n", fname, lineno ); cr_usage(); - return 1; + code = 1; + goto done; } - code = cr_add(cr,1,scr,&err); + code = cr_add( cr, 1, scr, &err ); if ( code ) { fprintf( stderr, "%s: line %d: %s: \"%s\"\n", - fname, lineno, scherr2str(code), err); - return 1; + fname, lineno, scherr2str( code ), err ); + code = 1; + goto done; } - ldap_memfree(cr); - return 0; +done:; + if ( code ) { + ldap_contentrule_free( cr ); + + } else { + ldap_memfree( cr ); + } + + return code; } int parse_oc( - const char *fname, - int lineno, - char *line, - char **argv, - ObjectClass **soc ) + const char *fname, + int lineno, + char *line, + char **argv, + ObjectClass **soc ) { LDAPObjectClass *oc; int code; @@ -178,7 +185,7 @@ parse_oc( oc = ldap_str2objectclass(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !oc ) { fprintf( stderr, "%s: line %d: %s before %s\n", - fname, lineno, ldap_scherr2str(code), err ); + fname, lineno, ldap_scherr2str( code ), err ); oc_usage(); return 1; } @@ -188,18 +195,27 @@ parse_oc( "%s: line %d: objectclass has no OID\n", fname, lineno ); oc_usage(); - return 1; + code = 1; + goto done; } - code = oc_add(oc,1,soc,&err); + code = oc_add( oc, 1, soc, &err ); if ( code ) { fprintf( stderr, "%s: line %d: %s: \"%s\"\n", - fname, lineno, scherr2str(code), err); - return 1; + fname, lineno, scherr2str( code ), err ); + code = 1; + goto done; } - ldap_memfree(oc); - return 0; +done:; + if ( code ) { + ldap_objectclass_free( oc ); + + } else { + ldap_memfree( oc ); + } + + return code; } static void @@ -247,11 +263,11 @@ at_usage( void ) int parse_at( - const char *fname, - int lineno, - char *line, - char **argv, - AttributeType **sat ) + const char *fname, + int lineno, + char *line, + char **argv, + AttributeType **sat ) { LDAPAttributeType *at; int code; @@ -270,22 +286,33 @@ parse_at( "%s: line %d: attributeType has no OID\n", fname, lineno ); at_usage(); - return 1; + code = 1; + goto done; } /* operational attributes should be defined internally */ if ( at->at_usage ) { fprintf( stderr, "%s: line %d: attribute type \"%s\" is operational\n", fname, lineno, at->at_oid ); - return 1; + code = 1; + goto done; } - code = at_add(at,1,sat,&err); + code = at_add( at, 1, sat, &err); if ( code ) { fprintf( stderr, "%s: line %d: %s: \"%s\"\n", fname, lineno, scherr2str(code), err); - return 1; + code = 1; + goto done; } - ldap_memfree(at); - return 0; + +done:; + if ( code ) { + ldap_attributetype_free( at ); + + } else { + ldap_memfree( at ); + } + + return code; }