on't use freed memory; streamline parse error reporting

This commit is contained in:
Pierangelo Masarati 2006-01-21 10:41:41 +00:00
parent 2b0bccc74c
commit 42bf993798

View File

@ -124,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 );
@ -147,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;
@ -176,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;
}
@ -186,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
@ -245,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;
@ -268,23 +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 ) {
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;
}