mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
Response handling, exploit optional bervals
This commit is contained in:
parent
2fbc8ca473
commit
f37e7757b1
@ -18,6 +18,69 @@
|
||||
#include "lutil.h"
|
||||
#include "slap.h"
|
||||
|
||||
ber_tag_t
|
||||
slap_req2res( ber_tag_t tag )
|
||||
{
|
||||
switch ( tag ) {
|
||||
case LDAP_REQ_ADD:
|
||||
case LDAP_REQ_BIND:
|
||||
case LDAP_REQ_COMPARE:
|
||||
case LDAP_REQ_EXTENDED:
|
||||
case LDAP_REQ_MODIFY:
|
||||
case LDAP_REQ_MODRDN:
|
||||
tag++;
|
||||
break;
|
||||
|
||||
case LDAP_REQ_DELETE:
|
||||
tag = LDAP_RES_DELETE;
|
||||
break;
|
||||
|
||||
case LDAP_REQ_ABANDON:
|
||||
case LDAP_REQ_UNBIND:
|
||||
tag = LBER_SEQUENCE;
|
||||
break;
|
||||
|
||||
case LDAP_REQ_SEARCH:
|
||||
tag = LDAP_RES_SEARCH_RESULT;
|
||||
break;
|
||||
|
||||
default:
|
||||
tag = LBER_SEQUENCE;
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
const char *
|
||||
slap_msgtype2str( ber_tag_t tag )
|
||||
{
|
||||
switch ( tag ) {
|
||||
case LDAP_REQ_ABANDON: return "abandon request";
|
||||
case LDAP_REQ_ADD: return "add request";
|
||||
case LDAP_REQ_BIND: return "bind request";
|
||||
case LDAP_REQ_COMPARE: return "compare request";
|
||||
case LDAP_REQ_DELETE: return "delete request";
|
||||
case LDAP_REQ_EXTENDED: return "extended request";
|
||||
case LDAP_REQ_MODIFY: return "modify request";
|
||||
case LDAP_REQ_RENAME: return "rename request";
|
||||
case LDAP_REQ_SEARCH: return "search request";
|
||||
case LDAP_REQ_UNBIND: return "unbind request";
|
||||
|
||||
case LDAP_RES_ADD: return "add result";
|
||||
case LDAP_RES_BIND: return "bind result";
|
||||
case LDAP_RES_COMPARE: return "compare result";
|
||||
case LDAP_RES_DELETE: return "delete result";
|
||||
case LDAP_RES_EXTENDED: return "extended result";
|
||||
case LDAP_RES_INTERMEDIATE: return "intermediate response";
|
||||
case LDAP_RES_MODIFY: return "modify result";
|
||||
case LDAP_RES_RENAME: return "rename result";
|
||||
case LDAP_RES_SEARCH_ENTRY: return "search-entry response";
|
||||
case LDAP_RES_SEARCH_REFERENCE: return "search-reference response";
|
||||
case LDAP_RES_SEARCH_RESULT: return "search result";
|
||||
}
|
||||
return "unknown message";
|
||||
}
|
||||
|
||||
int
|
||||
operation_client_cmp( const void *left, const void *right )
|
||||
{
|
||||
|
@ -136,6 +136,7 @@ LDAP_SLAPD_V (const char *) slapd_slp_attrs;
|
||||
/*
|
||||
* operation.c
|
||||
*/
|
||||
LDAP_SLAPD_F (const char *) slap_msgtype2str( ber_tag_t tag );
|
||||
LDAP_SLAPD_F (int) operation_upstream_cmp( const void *l, const void *r );
|
||||
LDAP_SLAPD_F (int) operation_client_cmp( const void *l, const void *r );
|
||||
LDAP_SLAPD_F (void *) operation_process( void *ctx, void *arg );
|
||||
|
@ -92,6 +92,8 @@ LDAP_BEGIN_DECL
|
||||
/* unknown config file directive */
|
||||
#define SLAP_CONF_UNKNOWN ( -1026 )
|
||||
|
||||
#define BER_BV_OPTIONAL( bv ) ( BER_BVISNULL( bv ) ? NULL : ( bv ) )
|
||||
|
||||
LDAP_SLAPD_V (int) slap_debug;
|
||||
|
||||
typedef unsigned long slap_mask_t;
|
||||
|
@ -227,8 +227,8 @@ upstream_bind_cb( evutil_socket_t s, short what, void *arg )
|
||||
|
||||
if ( msgid != ( c->c_next_msgid - 1 ) || tag != LDAP_RES_BIND ) {
|
||||
Debug( LDAP_DEBUG_ANY, "upstream_bind_cb:"
|
||||
" unexpected response from server, msgid=%d tag=%lu\n",
|
||||
msgid, tag );
|
||||
" unexpected %s from server, msgid=%d\n",
|
||||
slap_msgtype2str( tag ), msgid );
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -305,7 +305,6 @@ upstream_bind( void *ctx, void *arg )
|
||||
struct event *event;
|
||||
ber_int_t msgid;
|
||||
evutil_socket_t s;
|
||||
int rc;
|
||||
|
||||
assert( ber );
|
||||
|
||||
@ -334,25 +333,18 @@ upstream_bind( void *ctx, void *arg )
|
||||
ldap_pvt_thread_mutex_lock( &b->b_mutex );
|
||||
if ( b->b_bindconf.sb_method == LDAP_AUTH_SIMPLE ) {
|
||||
/* simple bind */
|
||||
rc = ber_printf( ber, "{it{iOtON}}",
|
||||
ber_printf( ber, "{it{iOtON}}",
|
||||
msgid, LDAP_REQ_BIND, LDAP_VERSION3,
|
||||
&b->b_bindconf.sb_binddn, LDAP_AUTH_SIMPLE,
|
||||
&b->b_bindconf.sb_cred );
|
||||
|
||||
#ifdef HAVE_CYRUS_SASL
|
||||
} else {
|
||||
BerValue cred;
|
||||
if ( BER_BVISNULL( &cred ) ) {
|
||||
rc = ber_printf( ber, "{it{iOt{sN}N}}",
|
||||
msgid, LDAP_REQ_BIND, LDAP_VERSION3,
|
||||
&b->b_bindconf.sb_binddn, LDAP_AUTH_SASL,
|
||||
b->b_bindconf.sb_method );
|
||||
} else {
|
||||
rc = ber_printf( ber, "{it{iOt{sON}N}}",
|
||||
msgid, LDAP_REQ_BIND, LDAP_VERSION3,
|
||||
&b->b_bindconf.sb_binddn, LDAP_AUTH_SASL,
|
||||
b->b_bindconf.sb_method, &cred );
|
||||
}
|
||||
BerValue cred = BER_BVNULL;
|
||||
ber_printf( ber, "{it{iOt{OON}N}}",
|
||||
msgid, LDAP_REQ_BIND, LDAP_VERSION3,
|
||||
&b->b_bindconf.sb_binddn, LDAP_AUTH_SASL,
|
||||
&b->b_bindconf.sb_saslmech, BER_BV_OPTIONAL( &cred ) );
|
||||
#endif /* HAVE_CYRUS_SASL */
|
||||
}
|
||||
ldap_pvt_thread_mutex_unlock( &b->b_mutex );
|
||||
|
Loading…
Reference in New Issue
Block a user