X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsaslauthz.c;h=7a1dd7836e47c4b1eeb6f8adbb20e2229c6135c4;hb=a32f8c079addfe1cc4592e4c905bf72f69aba2ad;hp=d6511b8256235b63c94e61ef7e7ee99bf9929365;hpb=428c15d883bb48feebb901ed7934e787c1e08165;p=openldap diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c index d6511b8256..7a1dd7836e 100644 --- a/servers/slapd/saslauthz.c +++ b/servers/slapd/saslauthz.c @@ -98,7 +98,7 @@ static int slap_parseURI( struct berval *uri, bv.bv_val = uri->bv_val + sizeof("dn:")-1; bv.bv_val += strspn( bv.bv_val, " " ); -is_dn: bv.bv_len = uri->bv_len - (bv.bv_val - uri->bv_val); +is_dn: bv.bv_len = uri->bv_len - (bv.bv_val - uri->bv_val); rc = dnNormalize2( NULL, &bv, searchbase ); if( rc == LDAP_SUCCESS ) { @@ -199,6 +199,8 @@ int slap_sasl_regexp_config( const char *match, const char *replace ) SaslRegexp = (SaslRegexp_t *) ch_realloc( (char *) SaslRegexp, (nSaslRegexp + 1) * sizeof(SaslRegexp_t) ); + reg = &SaslRegexp[nSaslRegexp]; + reg->sr_match = ch_strdup( match ); reg->sr_replace = ch_strdup( replace ); @@ -284,7 +286,6 @@ static void slap_sasl_rx_exp( static int slap_sasl_regexp( struct berval *in, struct berval *out ) { char *saslname = in->bv_val; - char *scope[] = { "base", "one", "sub" }; SaslRegexp_t *reg; int i; @@ -333,14 +334,14 @@ static int slap_sasl_regexp( struct berval *in, struct berval *out ) } /* Two empty callback functions to avoid sending results */ -static void sasl_sc_r( Connection *conn, Operation *o, ber_tag_t tag, +void slap_cb_null_response( Connection *conn, Operation *o, ber_tag_t tag, ber_int_t msgid, ber_int_t err, const char *matched, const char *text, BerVarray ref, const char *resoid, struct berval *resdata, struct berval *sasldata, LDAPControl **c) { } -static void sasl_sc_s( Connection *conn, Operation *o, ber_int_t err, +void slap_cb_null_sresult( Connection *conn, Operation *o, ber_int_t err, const char *matched, const char *text, BerVarray refs, LDAPControl **c, int nentries) { @@ -384,11 +385,11 @@ void slap_sasl2dn( Connection *conn, struct berval *saslname, struct berval *sasldn ) { int rc; - Backend *be; + Backend *be = NULL; struct berval dn = { 0, NULL }; int scope = LDAP_SCOPE_BASE; Filter *filter = NULL; - slap_callback cb = {sasl_sc_r, sasl_sc_s, sasl_sc_sasl2dn, NULL}; + slap_callback cb = {slap_cb_null_response, slap_cb_null_sresult, sasl_sc_sasl2dn, NULL}; Operation op = {0}; struct berval regout = { 0, NULL }; @@ -448,6 +449,7 @@ void slap_sasl2dn( Connection *conn, op.o_callback = &cb; op.o_time = slap_get_time(); op.o_do_not_cache = 1; + op.o_threadctx = conn->c_sasl_bindop->o_threadctx; (*be->be_search)( be, conn, &op, NULL, &dn, scope, LDAP_DEREF_NEVER, 1, 0, @@ -508,7 +510,7 @@ int slap_sasl_match(Connection *conn, struct berval *rule, struct berval *assert Filter *filter=NULL; regex_t reg; smatch_info sm; - slap_callback cb = { sasl_sc_r, sasl_sc_s, sasl_sc_smatch, NULL }; + slap_callback cb = { slap_cb_null_response, slap_cb_null_sresult, sasl_sc_smatch, NULL }; Operation op = {0}; #ifdef NEW_LOGGING @@ -568,6 +570,7 @@ int slap_sasl_match(Connection *conn, struct berval *rule, struct berval *assert op.o_callback = &cb; op.o_time = slap_get_time(); op.o_do_not_cache = 1; + op.o_threadctx = conn->c_sasl_bindop->o_threadctx; (*be->be_search)( be, conn, &op, /*base=*/NULL, &searchbase, scope, /*deref=*/1, /*sizelimit=*/0, /*time=*/0, filter, /*fstr=*/NULL, @@ -621,7 +624,7 @@ slap_sasl_check_authz( Connection *conn, assertDN->bv_val, ad->ad_cname.bv_val, searchDN->bv_val); #endif - rc = backend_attribute( NULL, NULL, NULL, NULL, searchDN, ad, &vals ); + rc = backend_attribute( NULL, NULL, conn->c_sasl_bindop, NULL, searchDN, ad, &vals ); if( rc != LDAP_SUCCESS ) goto COMPLETE;