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 );
"%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;
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;
}
"%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
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;
"%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 ) {
- ldap_attributetype_free( at );
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;
}