openldap/servers/slapd/schemaparse.c
Hallvard Furuseth 7e6ad5100c Protoized, moved extern definitions to .h files, fixed related bugs.
Most function and variable definitions are now preceded by its extern
definition, for error checking.  Retyped a number of functions, usually
to return void.  Fixed a number of printf format errors.

API changes (in ldap/include):
  Added avl_dup_ok, avl_prefixapply, removed ber_fatten (probably typo
  for ber_flatten), retyped ldap_sort_strcasecmp, grew lutil.h.

A number of `extern' declarations are left (some added by protoize), to
be cleaned away later.  Mostly strdup(), strcasecmp(), mktemp(), optind,
optarg, errno.
1998-11-15 22:40:11 +00:00

80 lines
1.6 KiB
C

/* schemaparse.c - routines to parse config file objectclass definitions */
#include "portable.h"
#include <stdio.h>
#include <ac/string.h>
#include <ac/socket.h>
#include "slap.h"
struct objclass *global_oc;
int global_schemacheck;
static void oc_usage(void);
void
parse_oc(
Backend *be,
char *fname,
int lineno,
int argc,
char **argv
)
{
int i;
char last;
struct objclass *oc;
struct objclass **ocp;
oc = (struct objclass *) ch_calloc( 1, sizeof(struct objclass) );
oc->oc_name = strdup( argv[1] );
for ( i = 2; i < argc; i++ ) {
/* required attributes */
if ( strcasecmp( argv[i], "requires" ) == 0 ) {
do {
i++;
if ( i < argc ) {
last = argv[i][strlen( argv[i] ) - 1];
charray_merge( &oc->oc_required,
str2charray( argv[i], "," ) );
}
} while ( i < argc && last == ',' );
/* optional attributes */
} else if ( strcasecmp( argv[i], "allows" ) == 0 ) {
do {
i++;
if ( i < argc ) {
last = argv[i][strlen( argv[i] ) - 1];
charray_merge( &oc->oc_allowed,
str2charray( argv[i], "," ) );
}
} while ( i < argc && last == ',' );
} else {
fprintf( stderr,
"%s: line %d: expecting \"requires\" or \"allows\" got \"%s\"\n",
fname, lineno, argv[i] );
oc_usage();
}
}
ocp = &global_oc;
while ( *ocp != NULL ) {
ocp = &(*ocp)->oc_next;
}
*ocp = oc;
}
static void
oc_usage( void )
{
fprintf( stderr, "<oc clause> ::= objectclass <ocname>\n" );
fprintf( stderr, " [ requires <attrlist> ]\n" );
fprintf( stderr, " [ allows <attrlist> ]\n" );
exit( 1 );
}