예제 #1
0
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;
}
예제 #2
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;
}