From 7400191ba8c283cc3a4c266191f9637807c34e44 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Sat, 9 Nov 2002 14:46:00 +0000 Subject: [PATCH] cleanup str2adlist --- servers/slapd/ad.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/servers/slapd/ad.c b/servers/slapd/ad.c index f7fa76241b..9740fb0fdf 100644 --- a/servers/slapd/ad.c +++ b/servers/slapd/ad.c @@ -601,8 +601,16 @@ an_find( return( 0 ); } -/* Convert a delimited string into a list of AttributeNames; Add on - * to an existing list if it was given. +/* + * Convert a delimited string into a list of AttributeNames; + * add on to an existing list if it was given. If the string + * is not a valid attribute name, if a '-' is prepended it is + * skipped and the remaining name is tried again; if a '+' is + * prepended, an objectclass name is searched instead. + * + * NOTE: currently, if a valid attribute name is not found, + * the same string is also checked as valid objectclass name; + * however, this behavior is deprecated. */ AttributeName * str2anlist( AttributeName *an, char *in, const char *brkstr ) @@ -647,11 +655,15 @@ str2anlist( AttributeName *an, char *in, const char *brkstr ) slap_bv2ad(&adname, &anew->an_desc, &text); if ( !anew->an_desc ) { free( an ); - /* overwrites input string on error! */ + /* + * overwrites input string + * on error! + */ strcpy( in, s ); return NULL; } } break; + case '+': { struct berval ocname; ocname.bv_len = anew->an_name.bv_len - 1; @@ -659,11 +671,15 @@ str2anlist( AttributeName *an, char *in, const char *brkstr ) anew->an_oc = oc_bvfind( &ocname ); if ( !anew->an_oc ) { free( an ); - /* overwrites input string on error! */ + /* + * overwrites input string + * on error! + */ strcpy( in, s ); return NULL; } } break; + default: /* old (deprecated) way */ anew->an_oc = oc_bvfind( &anew->an_name ); -- 2.39.5