static int dsaschema_parse_oc(const char *fname, int lineno, char *line, char **argv) { LDAPObjectClass *oc; int code; const char *err; 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); return 1; } if (oc->oc_oid == NULL) { fprintf(stderr, "%s: line %d: objectclass has no OID\n", fname, lineno); return 1; } code = oc_add(oc, 0, NULL, NULL, &err); if (code) { fprintf(stderr, "%s: line %d: %s: \"%s\"\n", fname, lineno, ldap_scherr2str(code), err); return 1; } ldap_memfree(oc); return 0; }
int parse_oc( struct config_args_s *c, ObjectClass **soc, ObjectClass *prev ) { LDAPObjectClass *oc; int code; const char *err; char *line = strchr( c->line, '(' ); oc = ldap_str2objectclass(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL ); if ( !oc ) { snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s before %s", c->argv[0], ldap_scherr2str( code ), err ); Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s %s\n", c->log, c->cr_msg ); oc_usage(); return 1; } if ( oc->oc_oid == NULL ) { snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: OID is missing", c->argv[0] ); Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s %s\n", c->log, c->cr_msg ); oc_usage(); code = 1; goto done; } code = oc_add( oc, 1, soc, prev, &err ); if ( code ) { snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s: \"%s\"", c->argv[0], scherr2str(code), err); Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE, "%s %s\n", c->log, c->cr_msg ); code = 1; goto done; } done:; if ( code ) { ldap_objectclass_free( oc ); } else { ldap_memfree( oc ); } return code; }