Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Nadezhda Ivanova
OpenLDAP
Commits
73b9ffc3
Commit
73b9ffc3
authored
Jun 16, 2000
by
Kurt Zeilenga
Browse files
Add referral generator
parent
09e087c8
Changes
1
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-dnssrv/referral.c
0 → 100644
View file @
73b9ffc3
/* referral.c - DNS SRV backend referral 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
"external.h"
int
dnssrv_back_referrals
(
Backend
*
be
,
Connection
*
conn
,
Operation
*
op
,
const
char
*
dn
,
const
char
*
ndn
,
const
char
**
text
)
{
int
i
;
int
rc
=
LDAP_OTHER
;
char
*
domain
=
NULL
;
char
*
hostlist
=
NULL
;
char
**
hosts
=
NULL
;
struct
berval
**
urls
=
NULL
;
if
(
ndn
==
NULL
||
*
ndn
==
'\0'
)
{
*
text
=
"operation upon null (empty) DN disallowed"
;
return
LDAP_UNWILLING_TO_PERFORM
;
}
if
(
get_manageDSAit
(
op
)
)
{
if
(
op
->
o_tag
==
LDAP_REQ_SEARCH
)
{
return
LDAP_SUCCESS
;
}
*
text
=
"DNS SRV problem processing manageDSAit control"
;
return
LDAP_OTHER
;
}
if
(
ldap_dn2domain
(
dn
,
&
domain
)
)
{
send_ldap_result
(
conn
,
op
,
LDAP_REFERRAL
,
NULL
,
NULL
,
default_referral
,
NULL
);
return
LDAP_REFERRAL
;
}
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
);
*
text
=
"no DNS SRV RR available for DN"
;
rc
=
LDAP_NO_SUCH_OBJECT
;
goto
done
;
}
hosts
=
str2charray
(
hostlist
,
" "
);
if
(
hosts
==
NULL
)
{
Debug
(
LDAP_DEBUG_TRACE
,
"DNSSRV: str2charrary error
\n
"
,
0
,
0
,
0
);
*
text
=
"problem processing DNS SRV records for DN"
;
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
);
*
text
=
"problem processing DNS SRV records for DN"
;
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: dn=
\"
%s
\"
-> url=
\"
%s
\"\n
"
,
dn
==
NULL
?
""
:
dn
,
urls
[
0
]
->
bv_val
,
0
);
send_ldap_result
(
conn
,
op
,
rc
=
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
);
ber_bvecfree
(
urls
);
return
rc
;
}
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