Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
f37e7757
Commit
f37e7757
authored
Mar 28, 2017
by
Ondřej Kuzník
Committed by
Ondřej Kuzník
Nov 17, 2020
Browse files
Response handling, exploit optional bervals
parent
2fbc8ca4
Changes
4
Hide whitespace changes
Inline
Side-by-side
servers/lloadd/operation.c
View file @
f37e7757
...
...
@@ -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
)
{
...
...
servers/lloadd/proto-slap.h
View file @
f37e7757
...
...
@@ -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
);
...
...
servers/lloadd/slap.h
View file @
f37e7757
...
...
@@ -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
;
...
...
servers/lloadd/upstream.c
View file @
f37e7757
...
...
@@ -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
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment