Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
openldap
OpenLDAP
Commits
ef1664b0
Commit
ef1664b0
authored
Jun 17, 2000
by
Kurt Zeilenga
Browse files
Reimplement search_candidate support for scope, referrals, and aliases.
Uses auto/static storage to avoid unnecessary malloc/free calls.
parent
bfbe3e49
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-ldbm/search.c
View file @
ef1664b0
...
...
@@ -38,8 +38,7 @@ ldbm_back_search(
Filter
*
filter
,
const
char
*
filterstr
,
char
**
attrs
,
int
attrsonly
)
int
attrsonly
)
{
struct
ldbminfo
*
li
=
(
struct
ldbminfo
*
)
be
->
be_private
;
int
rc
,
err
;
...
...
@@ -339,8 +338,7 @@ done:
static
ID_BLOCK
*
base_candidate
(
Backend
*
be
,
Entry
*
e
)
Entry
*
e
)
{
ID_BLOCK
*
idl
;
...
...
@@ -360,11 +358,51 @@ search_candidates(
Filter
*
filter
,
int
scope
,
int
deref
,
int
manageDSAit
)
int
manageDSAit
)
{
ID_BLOCK
*
candidates
;
candidates
=
filter_candidates
(
be
,
filter
);
Filter
f
,
fand
,
rf
,
af
,
xf
;
AttributeAssertion
aa_ref
,
aa_alias
;
static
struct
berval
bv_ref
=
{
sizeof
(
"REFERRAL"
)
-
1
,
"REFERRAL"
};
static
struct
berval
bv_alias
=
{
sizeof
(
"ALIAS"
)
-
1
,
"ALIAS"
};
Debug
(
LDAP_DEBUG_TRACE
,
"search_candidates: base=
\"
%s
\"
s=%d d=%d
\n
"
,
e
->
e_ndn
,
scope
,
deref
);
xf
.
f_or
=
filter
;
xf
.
f_choice
=
LDAP_FILTER_OR
;
xf
.
f_next
=
NULL
;
if
(
!
manageDSAit
)
{
/* match referrals */
rf
.
f_choice
=
LDAP_FILTER_EQUALITY
;
rf
.
f_ava
=
&
aa_ref
;
rf
.
f_av_desc
=
slap_schema
.
si_ad_objectClass
;
rf
.
f_av_value
=
&
bv_ref
;
rf
.
f_next
=
xf
.
f_or
;
xf
.
f_or
=
&
rf
;
}
if
(
deref
&
LDAP_DEREF_SEARCHING
)
{
/* match aliases */
af
.
f_choice
=
LDAP_FILTER_EQUALITY
;
af
.
f_ava
=
&
aa_alias
;
af
.
f_av_desc
=
slap_schema
.
si_ad_objectClass
;
af
.
f_av_value
=
&
bv_alias
;
af
.
f_next
=
xf
.
f_or
;
xf
.
f_or
=
&
af
;
}
f
.
f_next
=
NULL
;
f
.
f_choice
=
LDAP_FILTER_AND
;
f
.
f_and
=
&
fand
;
fand
.
f_choice
=
scope
==
LDAP_SCOPE_SUBTREE
?
SLAPD_FILTER_DN_SUBTREE
:
SLAPD_FILTER_DN_ONE
;
fand
.
f_dn
=
e
->
e_ndn
;
fand
.
f_next
=
xf
.
f_or
==
filter
?
filter
:
&
xf
;
candidates
=
filter_candidates
(
be
,
&
f
);
return
(
candidates
);
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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