X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Faclparse.c;h=d0de1d1d436b79530e574459ec2afff043cdf3f5;hb=350544db0309df18fead3d55e3b5c3fe5d4f7dfb;hp=cc208217bbb1a7bc39ca3bf27cebe9c1ce8b87cf;hpb=ea9c01404eddb8b4666cca2f9dc46d2acdef1ff3;p=openldap diff --git a/servers/slapd/aclparse.c b/servers/slapd/aclparse.c index cc208217bb..d0de1d1d43 100644 --- a/servers/slapd/aclparse.c +++ b/servers/slapd/aclparse.c @@ -12,27 +12,22 @@ #include "slap.h" -extern Filter *str2filter(); -extern struct acl *global_acl; -extern char **str2charray(); -extern char *dn_upcase(); - -static void split(); -static void acl_append(); -static void access_append(); -static void acl_usage(); +static void split(char *line, int splitchar, char **left, char **right); +static void acl_append(struct acl **l, struct acl *a); +static void access_append(struct access **l, struct access *a); +static void acl_usage(void); #ifdef LDAP_DEBUG -static void print_acl(); -static void print_access(); +static void print_acl(struct acl *a); +static void print_access(struct access *b); #endif -int +static int regtest(char *fname, int lineno, char *pat) { int e; regex_t re; char buf[512]; - int size; + unsigned size; char *sp; char *dp; @@ -125,7 +120,7 @@ parse_acl( fname, lineno, right, buf ); acl_usage(); } - a->acl_dnpat = strdup( ".*" ); + a->acl_dnpat = ch_strdup( ".*" ); continue; } @@ -157,7 +152,7 @@ parse_acl( acl_usage(); } else { - a->acl_dnpat = dn_upcase(strdup( right )); + a->acl_dnpat = dn_upcase(ch_strdup( right )); } } else if ( strncasecmp( left, "attr", 4 ) == 0 ) { @@ -165,7 +160,7 @@ parse_acl( alist = str2charray( right, "," ); charray_merge( &a->acl_attrs, alist ); - free( alist ); + charray_free( alist ); } else { fprintf( stderr, "%s: line %d: expecting got \"%s\"\n", @@ -199,14 +194,14 @@ parse_acl( /* get */ split( argv[i], '=', &left, &right ); if ( strcasecmp( argv[i], "*" ) == 0 ) { - b->a_dnpat = strdup( ".*" ); + b->a_dnpat = ch_strdup( ".*" ); } else if ( strcasecmp( argv[i], "self" ) == 0 ) { - b->a_dnpat = strdup( "self" ); + b->a_dnpat = ch_strdup( "self" ); } else if ( strcasecmp( left, "dn" ) == 0 ) { regtest(fname, lineno, right); - b->a_dnpat = dn_upcase( strdup( right ) ); + b->a_dnpat = dn_upcase( ch_strdup( right ) ); } else if ( strcasecmp( left, "dnattr" ) == 0 ) { - b->a_dnattr = strdup( right ); + b->a_dnattr = ch_strdup( right ); #ifdef SLAPD_ACLGROUPS } else if ( strcasecmp( left, "group" ) == 0 ) { @@ -222,21 +217,21 @@ parse_acl( *name++ = '\0'; } - b->a_group = dn_upcase(strdup( right )); + b->a_group = dn_upcase(ch_strdup( right )); if (value && *value) { - b->a_objectclassvalue = strdup(value); + b->a_objectclassvalue = ch_strdup(value); *--value = '/'; } else - b->a_objectclassvalue = strdup("groupOfNames"); + b->a_objectclassvalue = ch_strdup("groupOfNames"); if (name && *name) { - b->a_groupattrname = strdup(name); + b->a_groupattrname = ch_strdup(name); *--name = '/'; } else - b->a_groupattrname = strdup("member"); + b->a_groupattrname = ch_strdup("member"); @@ -244,7 +239,7 @@ parse_acl( } else if ( strcasecmp( left, "domain" ) == 0 ) { char *s; regtest(fname, lineno, right); - b->a_domainpat = strdup( right ); + b->a_domainpat = ch_strdup( right ); /* normalize the domain */ for ( s = b->a_domainpat; *s; s++ ) { @@ -252,7 +247,7 @@ parse_acl( } } else if ( strcasecmp( left, "addr" ) == 0 ) { regtest(fname, lineno, right); - b->a_addrpat = strdup( right ); + b->a_addrpat = ch_strdup( right ); } else { fprintf( stderr, "%s: line %d: expecting got \"%s\"\n", @@ -293,9 +288,10 @@ parse_acl( } else { - if (ldap_debug&LDAP_DEBUG_ACL) - print_acl(a); - +#ifdef LDAP_DEBUG + if (ldap_debug & LDAP_DEBUG_ACL) + print_acl(a); +#endif if ( a->acl_access == NULL ) { fprintf( stderr, @@ -368,7 +364,7 @@ str2access( char *str ) } static void -acl_usage() +acl_usage( void ) { fprintf( stderr, "\n ::= access to [ by ]+ \n" ); fprintf( stderr, " ::= * | [dn=] [filter=] [attrs=]\n" ); @@ -416,7 +412,8 @@ acl_append( struct acl **l, struct acl *a ) static void print_access( struct access *b ) { - printf( "\tby" ); + fprintf( stderr, "\tby" ); + if ( b->a_dnpat != NULL ) { fprintf( stderr, " dn=%s", b->a_dnpat ); } else if ( b->a_addrpat != NULL ) {