mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
on't use freed memory; streamline parse error reporting
This commit is contained in:
parent
2b0bccc74c
commit
42bf993798
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user