From daebf2716458cbd485f81c5da84e8d4539275484 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sun, 22 Sep 2002 18:34:53 +0000 Subject: [PATCH] Pth support, +oc, modules, and value find init --- servers/slapd/ad.c | 65 +++++++++++++++++++++++++------- servers/slapd/daemon.c | 4 +- servers/slapd/tools/slapcommon.c | 4 ++ servers/slapd/value.c | 2 +- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/servers/slapd/ad.c b/servers/slapd/ad.c index 89cf5ab1ea..f7fa76241b 100644 --- a/servers/slapd/ad.c +++ b/servers/slapd/ad.c @@ -434,27 +434,38 @@ int ad_inlist( int rc; if ( attrs->an_desc ) { - if ( is_ad_subtype( desc, attrs->an_desc )) + if ( desc == attrs->an_desc ) { return 1; + } + + /* + * EXTENSION: if requested description is preceeded by an + * a '-' character, do not match on subtypes. + */ + if ( attrs->an_name.bv_val[0] != '-' && + is_ad_subtype( desc, attrs->an_desc )) + { + return 1; + } + continue; } /* - * EXTENSION: see if requested description is an object class + * EXTENSION: see if requested description is +objectClass * if so, return attributes which the class requires/allows */ oc = attrs->an_oc; if( oc == NULL && attrs->an_name.bv_val ) { switch( attrs->an_name.bv_val[0] ) { - case '+': - case '-': { + case '+': { /* new way */ struct berval ocname; ocname.bv_len = attrs->an_name.bv_len - 1; ocname.bv_val = &attrs->an_name.bv_val[1]; oc = oc_bvfind( &ocname ); } break; - default: - oc = oc_bvfind( &attrs->an_name ); + default: /* old (deprecated) way */ + oc = oc_bvfind( &attrs->an_name ); } attrs->an_oc = oc; } @@ -628,18 +639,46 @@ str2anlist( AttributeName *an, char *in, const char *brkstr ) ber_str2bv(s, 0, 1, &anew->an_name); slap_bv2ad(&anew->an_name, &anew->an_desc, &text); if ( !anew->an_desc ) { - anew->an_oc = oc_bvfind( &anew->an_name ); - if ( !anew->an_oc ) { - free( an ); - /* overwrites input string on error! */ - strcpy( in, s ); - return NULL; + switch( anew->an_name.bv_val[0] ) { + case '-': { + struct berval adname; + adname.bv_len = anew->an_name.bv_len - 1; + adname.bv_val = &anew->an_name.bv_val[1]; + slap_bv2ad(&adname, &anew->an_desc, &text); + if ( !anew->an_desc ) { + free( an ); + /* overwrites input string on error! */ + strcpy( in, s ); + return NULL; + } + } break; + case '+': { + struct berval ocname; + ocname.bv_len = anew->an_name.bv_len - 1; + ocname.bv_val = &anew->an_name.bv_val[1]; + anew->an_oc = oc_bvfind( &ocname ); + if ( !anew->an_oc ) { + free( an ); + /* overwrites input string on error! */ + strcpy( in, s ); + return NULL; + } + } break; + default: + /* old (deprecated) way */ + anew->an_oc = oc_bvfind( &anew->an_name ); + if ( !anew->an_oc ) { + free( an ); + /* overwrites input string on error! */ + strcpy( in, s ); + return NULL; + } } } anew++; } - anew->an_name.bv_val = NULL; + anew->an_name.bv_val = NULL; free( str ); return( an ); } diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 151b6d395b..94de3b729b 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -49,7 +49,7 @@ Listener **slap_listeners = NULL; static ber_socket_t wake_sds[2]; -#ifdef NO_THREADS +#if defined(NO_THREADS) || defined(HAVE_GNU_PTH) static int waking; #define WAKE_LISTENER(w) \ ((w && !waking) ? tcp_write( wake_sds[1], "0", 1 ), waking=1 : 0) @@ -1315,7 +1315,7 @@ slapd_daemon_task( if( FD_ISSET( wake_sds[0], &readfds ) ) { char c[BUFSIZ]; tcp_read( wake_sds[0], c, sizeof(c) ); -#ifdef NO_THREADS +#if defined(NO_THREADS) || defined(HAVE_GNU_PTH) waking = 0; #endif continue; diff --git a/servers/slapd/tools/slapcommon.c b/servers/slapd/tools/slapcommon.c index 91f971106d..2004511a67 100644 --- a/servers/slapd/tools/slapcommon.c +++ b/servers/slapd/tools/slapcommon.c @@ -286,6 +286,10 @@ void slap_tool_destroy( void ) slap_shutdown( be ); slap_destroy(); #ifdef SLAPD_MODULES + if ( slapMode == SLAP_SERVER_MODE ) { + /* always false. just pulls in necessary symbol references. */ + lutil_uuidstr(NULL, 0); + } module_kill(); #endif schema_destroy(); diff --git a/servers/slapd/value.c b/servers/slapd/value.c index c53da1e9eb..b1288d0736 100644 --- a/servers/slapd/value.c +++ b/servers/slapd/value.c @@ -350,7 +350,7 @@ int value_find_ex( } if( mr->smr_syntax->ssyn_normalize ) { - struct berval nval_tmp; + struct berval nval_tmp = { 0, NULL }; rc = mr->smr_syntax->ssyn_normalize( mr->smr_syntax, -- 2.39.5