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
da74650a
Commit
da74650a
authored
Jun 16, 2000
by
Kurt Zeilenga
Browse files
Also eliminated by dnssrv referral.c code
parent
5e04ed8c
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-dnssrv/request.c
deleted
100644 → 0
View file @
5e04ed8c
/* add.c - DNS SRV backend request handler */
/* $OpenLDAP$ */
/*
* Copyright 2000 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include
"portable.h"
#include
<stdio.h>
#include
<ac/string.h>
#include
<ac/socket.h>
#include
"slap.h"
#include
"back-dnssrv.h"
int
dnssrv_back_request
(
Backend
*
be
,
Connection
*
conn
,
Operation
*
op
,
const
char
*
dn
,
const
char
*
ndn
,
int
scope
,
Filter
*
filter
,
char
**
attrs
,
int
attrsonly
)
{
int
i
;
int
rc
;
char
*
domain
=
NULL
;
char
*
hostlist
=
NULL
;
char
**
hosts
=
NULL
;
struct
berval
**
urls
=
NULL
;
int
manageDSAit
=
get_manageDSAit
(
op
);
if
(
ndn
==
NULL
||
*
ndn
==
'\0'
)
{
send_ldap_result
(
conn
,
op
,
LDAP_UNWILLING_TO_PERFORM
,
NULL
,
"operation upon null (empty) DN disallowed"
,
NULL
,
NULL
);
goto
done
;
}
if
(
ldap_dn2domain
(
dn
,
&
domain
)
)
{
send_ldap_result
(
conn
,
op
,
LDAP_REFERRAL
,
NULL
,
NULL
,
default_referral
,
NULL
);
goto
done
;
}
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: dn=
\"
%s
\"
-> domain=
\"
%s
\"\n
"
,
dn
==
NULL
?
""
:
dn
,
domain
==
NULL
?
""
:
domain
,
0
);
if
(
rc
=
ldap_domain2hostlist
(
domain
,
&
hostlist
)
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: domain2hostlist returned %d
\n
"
,
rc
,
0
,
0
);
send_ldap_result
(
conn
,
op
,
LDAP_NO_SUCH_OBJECT
,
NULL
,
"no DNS SRV RR available for DN"
,
NULL
,
NULL
);
goto
done
;
}
hosts
=
str2charray
(
hostlist
,
" "
);
if
(
hosts
==
NULL
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: str2charrary error
\n
"
,
0
,
0
,
0
);
send_ldap_result
(
conn
,
op
,
LDAP_OTHER
,
NULL
,
"problem processing DNS SRV records for DN"
,
NULL
,
NULL
);
goto
done
;
}
for
(
i
=
0
;
hosts
[
i
]
!=
NULL
;
i
++
)
{
struct
berval
*
url
=
ch_malloc
(
sizeof
(
struct
berval
)
);
url
->
bv_len
=
sizeof
(
"ldap://"
)
-
1
+
strlen
(
hosts
[
i
]);
url
->
bv_val
=
ch_malloc
(
url
->
bv_len
+
1
);
strcpy
(
url
->
bv_val
,
"ldap://"
);
strcpy
(
&
url
->
bv_val
[
sizeof
(
"ldap://"
)
-
1
],
hosts
[
i
]
);
if
(
ber_bvecadd
(
&
urls
,
url
)
<
0
)
{
ber_bvfree
(
url
);
send_ldap_result
(
conn
,
op
,
LDAP_OTHER
,
NULL
,
"problem processing DNS SRV records for DN"
,
NULL
,
NULL
);
goto
done
;
}
}
Statslog
(
LDAP_DEBUG_STATS
,
"conn=%ld op=%d DNSSRV p=%d dn=
\"
%s
\"
url=
\"
%s
\"\n
"
,
op
->
o_connid
,
op
->
o_opid
,
op
->
o_protocol
,
dn
,
urls
[
0
]
->
bv_val
);
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: %sdn=
\"
%s
\"
-> url=
\"
%s
\"\n
"
,
manageDSAit
?
"ManageDSAit "
:
""
,
dn
==
NULL
?
""
:
dn
,
urls
[
0
]
->
bv_val
);
if
(
manageDSAit
)
{
char
*
refdn
,
*
nrefdn
;
rc
=
ldap_domain2dn
(
domain
,
&
refdn
);
if
(
rc
!=
LDAP_SUCCESS
)
{
send_ldap_result
(
conn
,
op
,
LDAP_OTHER
,
NULL
,
"DNS SRV problem processing manageDSAit control"
,
NULL
,
NULL
);
goto
done
;
}
nrefdn
=
ch_strdup
(
refdn
);
dn_normalize
(
nrefdn
);
if
(
strcmp
(
nrefdn
,
ndn
)
!=
0
)
{
/* requested dn is subordinate */
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: dn=
\"
%s
\"
subordindate to refdn=
\"
%s
\"\n
"
,
dn
==
NULL
?
""
:
dn
,
refdn
==
NULL
?
""
:
refdn
,
NULL
);
send_ldap_result
(
conn
,
op
,
LDAP_NO_SUCH_OBJECT
,
refdn
,
NULL
,
NULL
,
NULL
);
}
else
if
(
op
->
o_tag
!=
LDAP_REQ_SEARCH
)
{
send_ldap_result
(
conn
,
op
,
LDAP_UNWILLING_TO_PERFORM
,
dn
,
"DNS SRV ManageDSAIT control disallowed"
,
NULL
,
NULL
);
}
else
if
(
scope
!=
LDAP_SCOPE_ONELEVEL
)
{
struct
berval
val
;
struct
berval
*
vals
[
2
];
Entry
*
e
=
ch_calloc
(
1
,
sizeof
(
Entry
)
);
AttributeDescription
*
ad_objectClass
=
slap_schema
.
si_ad_objectClass
;
AttributeDescription
*
ad_ref
=
slap_schema
.
si_ad_ref
;
e
->
e_dn
=
strdup
(
dn
);
e
->
e_ndn
=
strdup
(
ndn
);
e
->
e_attrs
=
NULL
;
e
->
e_private
=
NULL
;
vals
[
0
]
=
&
val
;
vals
[
1
]
=
NULL
;
val
.
bv_val
=
"top"
;
val
.
bv_len
=
sizeof
(
"top"
)
-
1
;
attr_merge
(
e
,
ad_objectClass
,
vals
);
val
.
bv_val
=
"referral"
;
val
.
bv_len
=
sizeof
(
"referral"
)
-
1
;
attr_merge
(
e
,
ad_objectClass
,
vals
);
val
.
bv_val
=
"extensibleObject"
;
val
.
bv_len
=
sizeof
(
"extensibleObject"
)
-
1
;
attr_merge
(
e
,
ad_objectClass
,
vals
);
{
AttributeDescription
*
ad
=
NULL
;
const
char
*
text
;
rc
=
slap_str2ad
(
"dc"
,
&
ad
,
&
text
);
if
(
rc
==
LDAP_SUCCESS
)
{
char
*
p
;
val
.
bv_val
=
ch_strdup
(
domain
);
p
=
strchr
(
val
.
bv_val
,
'.'
);
if
(
p
==
val
.
bv_val
)
{
val
.
bv_val
[
1
]
=
'\0'
;
}
else
if
(
p
!=
NULL
)
{
*
p
=
'\0'
;
}
val
.
bv_len
=
strlen
(
val
.
bv_val
);
attr_merge
(
e
,
ad
,
vals
);
ad_free
(
ad
,
1
);
}
}
{
AttributeDescription
*
ad
=
NULL
;
const
char
*
text
;
rc
=
slap_str2ad
(
"associatedDomain"
,
&
ad
,
&
text
);
if
(
rc
==
LDAP_SUCCESS
)
{
val
.
bv_val
=
domain
;
val
.
bv_len
=
strlen
(
domain
);
attr_merge
(
e
,
ad
,
vals
);
ad_free
(
ad
,
1
);
}
}
attr_merge
(
e
,
ad_ref
,
urls
);
rc
=
test_filter
(
be
,
conn
,
op
,
e
,
filter
);
if
(
rc
==
LDAP_COMPARE_TRUE
)
{
send_search_entry
(
be
,
conn
,
op
,
e
,
attrs
,
attrsonly
,
NULL
);
}
entry_free
(
e
);
send_ldap_result
(
conn
,
op
,
LDAP_SUCCESS
,
NULL
,
NULL
,
NULL
,
NULL
);
}
else
{
send_ldap_result
(
conn
,
op
,
LDAP_SUCCESS
,
NULL
,
NULL
,
NULL
,
NULL
);
}
free
(
refdn
);
free
(
nrefdn
);
}
else
{
send_ldap_result
(
conn
,
op
,
LDAP_REFERRAL
,
NULL
,
"DNS SRV generated referrals"
,
urls
,
NULL
);
}
done:
if
(
domain
!=
NULL
)
ch_free
(
domain
);
if
(
hostlist
!=
NULL
)
ch_free
(
hostlist
);
if
(
hosts
!=
NULL
)
charray_free
(
hosts
);
if
(
urls
!=
NULL
)
ber_bvecfree
(
urls
);
return
0
;
}
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