Add support for TIMEOUT in ldap.conf, mapping to the OpenLDAP
LDAP_OPT_TIMEOUT. There is no corresponding option for mozilla-derived LDAP SDKs but we can pass the timeout parameter to ldap_search_ext_s() or ldap_search_st() when possible.
This commit is contained in:
2
NEWS
2
NEWS
@@ -76,6 +76,8 @@ What's new in Sudo 1.7.5?
|
|||||||
* NETWORK_TIMEOUT is now an alias for BIND_TIMELIMIT in ldap.conf for
|
* NETWORK_TIMEOUT is now an alias for BIND_TIMELIMIT in ldap.conf for
|
||||||
compatibility with OpenLDAP configuration files.
|
compatibility with OpenLDAP configuration files.
|
||||||
|
|
||||||
|
* The LDAP API TIMEOUT parameter is now honored in ldap.conf.
|
||||||
|
|
||||||
What's new in Sudo 1.7.4p4?
|
What's new in Sudo 1.7.4p4?
|
||||||
|
|
||||||
* A potential security issue has been fixed with respect to the handling
|
* A potential security issue has been fixed with respect to the handling
|
||||||
|
@@ -283,6 +283,9 @@
|
|||||||
/* Define to 1 if you have the `ldap_search_ext_s' function. */
|
/* Define to 1 if you have the `ldap_search_ext_s' function. */
|
||||||
#undef HAVE_LDAP_SEARCH_EXT_S
|
#undef HAVE_LDAP_SEARCH_EXT_S
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ldap_search_st' function. */
|
||||||
|
#undef HAVE_LDAP_SEARCH_ST
|
||||||
|
|
||||||
/* Define to 1 if you have the `ldap_ssl_client_init' function. */
|
/* Define to 1 if you have the `ldap_ssl_client_init' function. */
|
||||||
#undef HAVE_LDAP_SSL_CLIENT_INIT
|
#undef HAVE_LDAP_SSL_CLIENT_INIT
|
||||||
|
|
||||||
|
15
configure
vendored
15
configure
vendored
@@ -18194,7 +18194,7 @@ fi
|
|||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
for ac_func in ldap_initialize ldap_start_tls_s ldapssl_init ldapssl_set_strength ldap_search_ext_s ldap_unbind_ext_s ldap_str2dn ldap_create ldap_sasl_bind_s ldap_ssl_client_init ldap_start_tls_s_np
|
for ac_func in ldap_initialize ldap_start_tls_s ldapssl_init ldapssl_set_strength ldap_unbind_ext_s ldap_str2dn ldap_create ldap_sasl_bind_s ldap_ssl_client_init ldap_start_tls_s_np
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
@@ -18204,6 +18204,19 @@ eval as_val=\$$as_ac_var
|
|||||||
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for ac_func in ldap_search_ext_s ldap_search_st
|
||||||
|
do :
|
||||||
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
eval as_val=\$$as_ac_var
|
||||||
|
if test "x$as_val" = x""yes; then :
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
||||||
|
_ACEOF
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@@ -2668,7 +2668,8 @@ if test ${with_ldap-'no'} != "no"; then
|
|||||||
|
|
||||||
AC_CHECK_HEADERS([sasl/sasl.h] [sasl.h], [AC_CHECK_FUNCS(ldap_sasl_interactive_bind_s)], [break])
|
AC_CHECK_HEADERS([sasl/sasl.h] [sasl.h], [AC_CHECK_FUNCS(ldap_sasl_interactive_bind_s)], [break])
|
||||||
AC_CHECK_HEADERS([ldap_ssl.h] [mps/ldap_ssl.h], [break], [], [#include <ldap.h>])
|
AC_CHECK_HEADERS([ldap_ssl.h] [mps/ldap_ssl.h], [break], [], [#include <ldap.h>])
|
||||||
AC_CHECK_FUNCS(ldap_initialize ldap_start_tls_s ldapssl_init ldapssl_set_strength ldap_search_ext_s ldap_unbind_ext_s ldap_str2dn ldap_create ldap_sasl_bind_s ldap_ssl_client_init ldap_start_tls_s_np)
|
AC_CHECK_FUNCS(ldap_initialize ldap_start_tls_s ldapssl_init ldapssl_set_strength ldap_unbind_ext_s ldap_str2dn ldap_create ldap_sasl_bind_s ldap_ssl_client_init ldap_start_tls_s_np)
|
||||||
|
AC_CHECK_FUNCS(ldap_search_ext_s ldap_search_st, [break])
|
||||||
|
|
||||||
if test X"$check_gss_krb5_ccache_name" = X"yes"; then
|
if test X"$check_gss_krb5_ccache_name" = X"yes"; then
|
||||||
AC_CHECK_LIB(gssapi, gss_krb5_ccache_name,
|
AC_CHECK_LIB(gssapi, gss_krb5_ccache_name,
|
||||||
|
@@ -341,6 +341,10 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
The TTIIMMEELLIIMMIITT parameter specifies the amount of time, in seconds,
|
The TTIIMMEELLIIMMIITT parameter specifies the amount of time, in seconds,
|
||||||
to wait for a response to an LDAP query.
|
to wait for a response to an LDAP query.
|
||||||
|
|
||||||
|
TTIIMMEEOOUUTT seconds
|
||||||
|
The TTIIMMEEOOUUTT parameter specifies the amount of time, in seconds, to
|
||||||
|
wait for a response from the various LDAP APIs.
|
||||||
|
|
||||||
SSUUDDOOEERRSS__BBAASSEE base
|
SSUUDDOOEERRSS__BBAASSEE base
|
||||||
The base DN to use when performing ssuuddoo LDAP queries. Typically
|
The base DN to use when performing ssuuddoo LDAP queries. Typically
|
||||||
this is of the form ou=SUDOers,dc=example,dc=com for the domain
|
this is of the form ou=SUDOers,dc=example,dc=com for the domain
|
||||||
@@ -384,10 +388,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
|
|
||||||
SSSSLL on/true/yes/off/false/no
|
SSSSLL on/true/yes/off/false/no
|
||||||
If the SSSSLL parameter is set to on, true or yes, TLS (SSL)
|
If the SSSSLL parameter is set to on, true or yes, TLS (SSL)
|
||||||
encryption is always used when communicating with the LDAP server.
|
|
||||||
Typically, this involves connecting to the server on port 636
|
|
||||||
(ldaps).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -400,6 +400,10 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
encryption is always used when communicating with the LDAP server.
|
||||||
|
Typically, this involves connecting to the server on port 636
|
||||||
|
(ldaps).
|
||||||
|
|
||||||
SSSSLL start_tls
|
SSSSLL start_tls
|
||||||
If the SSSSLL parameter is set to start_tls, the LDAP server
|
If the SSSSLL parameter is set to start_tls, the LDAP server
|
||||||
connection is initiated normally and TLS encryption is begun before
|
connection is initiated normally and TLS encryption is begun before
|
||||||
@@ -451,10 +455,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
When using Netscape-derived libraries, this file may also contain
|
When using Netscape-derived libraries, this file may also contain
|
||||||
Certificate Authority certificates.
|
Certificate Authority certificates.
|
||||||
|
|
||||||
TTLLSS__KKEEYY file name
|
|
||||||
The path to a file containing the private key which matches the
|
|
||||||
certificate specified by TTLLSS__CCEERRTT. The private key must not be
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0b3 January 10, 2011 7
|
1.8.0b3 January 10, 2011 7
|
||||||
@@ -466,6 +466,9 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
TTLLSS__KKEEYY file name
|
||||||
|
The path to a file containing the private key which matches the
|
||||||
|
certificate specified by TTLLSS__CCEERRTT. The private key must not be
|
||||||
password-protected. The key type depends on the LDAP libraries
|
password-protected. The key type depends on the LDAP libraries
|
||||||
used.
|
used.
|
||||||
|
|
||||||
@@ -517,9 +520,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
Sudo looks for a line beginning with sudoers: and uses this to
|
Sudo looks for a line beginning with sudoers: and uses this to
|
||||||
determine the search order. Note that ssuuddoo does not stop searching
|
determine the search order. Note that ssuuddoo does not stop searching
|
||||||
after the first match and later matches take precedence over earlier
|
after the first match and later matches take precedence over earlier
|
||||||
ones.
|
|
||||||
|
|
||||||
The following sources are recognized:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -532,6 +532,10 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
ones.
|
||||||
|
|
||||||
|
The following sources are recognized:
|
||||||
|
|
||||||
files read sudoers from F</etc/sudoers>
|
files read sudoers from F</etc/sudoers>
|
||||||
ldap read sudoers from LDAP
|
ldap read sudoers from LDAP
|
||||||
|
|
||||||
@@ -583,10 +587,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
|
|
||||||
sudoers = files
|
sudoers = files
|
||||||
|
|
||||||
FFIILLEESS
|
|
||||||
_/_e_t_c_/_l_d_a_p_._c_o_n_f LDAP configuration file
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0b3 January 10, 2011 9
|
1.8.0b3 January 10, 2011 9
|
||||||
@@ -598,6 +598,9 @@ FFIILLEESS
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
FFIILLEESS
|
||||||
|
_/_e_t_c_/_l_d_a_p_._c_o_n_f LDAP configuration file
|
||||||
|
|
||||||
_/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f determines sudoers source order
|
_/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f determines sudoers source order
|
||||||
|
|
||||||
_/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f determines sudoers source order on AIX
|
_/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f determines sudoers source order on AIX
|
||||||
@@ -649,9 +652,6 @@ EEXXAAMMPPLLEESS
|
|||||||
# Define if you want to use port 389 and switch to
|
# Define if you want to use port 389 and switch to
|
||||||
# encryption before the bind credentials are sent.
|
# encryption before the bind credentials are sent.
|
||||||
# Only supported by LDAP servers that support the start_tls
|
# Only supported by LDAP servers that support the start_tls
|
||||||
# extension such as OpenLDAP.
|
|
||||||
#ssl start_tls
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -664,6 +664,9 @@ EEXXAAMMPPLLEESS
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
# extension such as OpenLDAP.
|
||||||
|
#ssl start_tls
|
||||||
|
#
|
||||||
# Additional TLS options follow that allow tweaking of the
|
# Additional TLS options follow that allow tweaking of the
|
||||||
# SSL/TLS connection.
|
# SSL/TLS connection.
|
||||||
#
|
#
|
||||||
@@ -715,9 +718,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
#tls_cert /var/ldap
|
#tls_cert /var/ldap
|
||||||
#tls_key /var/ldap
|
#tls_key /var/ldap
|
||||||
#
|
#
|
||||||
# If using SASL authentication for LDAP (OpenSSL)
|
|
||||||
# use_sasl yes
|
|
||||||
# sasl_auth_id <SASL user name>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -730,6 +730,9 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
# If using SASL authentication for LDAP (OpenSSL)
|
||||||
|
# use_sasl yes
|
||||||
|
# sasl_auth_id <SASL user name>
|
||||||
# rootuse_sasl yes
|
# rootuse_sasl yes
|
||||||
# rootsasl_auth_id <SASL user name for root access>
|
# rootsasl_auth_id <SASL user name for root access>
|
||||||
# sasl_secprops none
|
# sasl_secprops none
|
||||||
@@ -781,9 +784,6 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
attributetype ( 1.3.6.1.4.1.15953.9.1.7
|
attributetype ( 1.3.6.1.4.1.15953.9.1.7
|
||||||
NAME 'sudoRunAsGroup'
|
NAME 'sudoRunAsGroup'
|
||||||
DESC 'Group(s) impersonated by sudo'
|
DESC 'Group(s) impersonated by sudo'
|
||||||
EQUALITY caseExactIA5Match
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -796,6 +796,9 @@ SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
|||||||
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
EQUALITY caseExactIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||||
|
|
||||||
attributetype ( 1.3.6.1.4.1.15953.9.1.8
|
attributetype ( 1.3.6.1.4.1.15953.9.1.8
|
||||||
NAME 'sudoNotBefore'
|
NAME 'sudoNotBefore'
|
||||||
DESC 'Start of time interval for which the entry is valid'
|
DESC 'Start of time interval for which the entry is valid'
|
||||||
@@ -847,12 +850,75 @@ DDIISSCCLLAAIIMMEERR
|
|||||||
including, but not limited to, the implied warranties of
|
including, but not limited to, the implied warranties of
|
||||||
merchantability and fitness for a particular purpose are disclaimed.
|
merchantability and fitness for a particular purpose are disclaimed.
|
||||||
See the LICENSE file distributed with ssuuddoo or
|
See the LICENSE file distributed with ssuuddoo or
|
||||||
http://www.sudo.ws/sudo/license.html for complete details.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1.8.0b3 January 10, 2011 13
|
1.8.0b3 January 10, 2011 13
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUDOERS.LDAP(4) MAINTENANCE COMMANDS SUDOERS.LDAP(4)
|
||||||
|
|
||||||
|
|
||||||
|
http://www.sudo.ws/sudo/license.html for complete details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1.8.0b3 January 10, 2011 14
|
||||||
|
|
||||||
|
|
||||||
|
@@ -431,6 +431,10 @@ An alias for \fB\s-1BIND_TIMELIMIT\s0\fR.
|
|||||||
.IX Item "TIMELIMIT seconds"
|
.IX Item "TIMELIMIT seconds"
|
||||||
The \fB\s-1TIMELIMIT\s0\fR parameter specifies the amount of time, in seconds,
|
The \fB\s-1TIMELIMIT\s0\fR parameter specifies the amount of time, in seconds,
|
||||||
to wait for a response to an \s-1LDAP\s0 query.
|
to wait for a response to an \s-1LDAP\s0 query.
|
||||||
|
.IP "\fB\s-1TIMEOUT\s0\fR seconds" 4
|
||||||
|
.IX Item "TIMEOUT seconds"
|
||||||
|
The \fB\s-1TIMEOUT\s0\fR parameter specifies the amount of time, in seconds,
|
||||||
|
to wait for a response from the various \s-1LDAP\s0 APIs.
|
||||||
.IP "\fB\s-1SUDOERS_BASE\s0\fR base" 4
|
.IP "\fB\s-1SUDOERS_BASE\s0\fR base" 4
|
||||||
.IX Item "SUDOERS_BASE base"
|
.IX Item "SUDOERS_BASE base"
|
||||||
The base \s-1DN\s0 to use when performing \fBsudo\fR \s-1LDAP\s0 queries. Typically
|
The base \s-1DN\s0 to use when performing \fBsudo\fR \s-1LDAP\s0 queries. Typically
|
||||||
|
@@ -335,6 +335,11 @@ An alias for B<BIND_TIMELIMIT>.
|
|||||||
The B<TIMELIMIT> parameter specifies the amount of time, in seconds,
|
The B<TIMELIMIT> parameter specifies the amount of time, in seconds,
|
||||||
to wait for a response to an LDAP query.
|
to wait for a response to an LDAP query.
|
||||||
|
|
||||||
|
=item B<TIMEOUT> seconds
|
||||||
|
|
||||||
|
The B<TIMEOUT> parameter specifies the amount of time, in seconds,
|
||||||
|
to wait for a response from the various LDAP APIs.
|
||||||
|
|
||||||
=item B<SUDOERS_BASE> base
|
=item B<SUDOERS_BASE> base
|
||||||
|
|
||||||
The base DN to use when performing B<sudo> LDAP queries. Typically
|
The base DN to use when performing B<sudo> LDAP queries. Typically
|
||||||
|
@@ -97,8 +97,13 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_LDAP_SEARCH_EXT_S
|
#ifndef HAVE_LDAP_SEARCH_EXT_S
|
||||||
#define ldap_search_ext_s(a, b, c, d, e, f, g, h, i, j, k) \
|
# ifdef HAVE_LDAP_SEARCH_ST
|
||||||
|
# define ldap_search_ext_s(a, b, c, d, e, f, g, h, i, j, k) \
|
||||||
|
ldap_search_st(a, b, c, d, e, f, i, k)
|
||||||
|
# else
|
||||||
|
# define ldap_search_ext_s(a, b, c, d, e, f, g, h, i, j, k) \
|
||||||
ldap_search_s(a, b, c, d, e, f, k)
|
ldap_search_s(a, b, c, d, e, f, k)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LDAP_FOREACH(var, ld, res) \
|
#define LDAP_FOREACH(var, ld, res) \
|
||||||
@@ -184,6 +189,7 @@ static struct ldap_config {
|
|||||||
int ldap_debug;
|
int ldap_debug;
|
||||||
int tls_checkpeer;
|
int tls_checkpeer;
|
||||||
int timelimit;
|
int timelimit;
|
||||||
|
int timeout;
|
||||||
int bind_timelimit;
|
int bind_timelimit;
|
||||||
int use_sasl;
|
int use_sasl;
|
||||||
int rootuse_sasl;
|
int rootuse_sasl;
|
||||||
@@ -270,6 +276,10 @@ static struct ldap_config_table ldap_conf_table[] = {
|
|||||||
&ldap_conf.bind_timelimit },
|
&ldap_conf.bind_timelimit },
|
||||||
#endif
|
#endif
|
||||||
{ "timelimit", CONF_INT, TRUE, LDAP_OPT_TIMELIMIT, &ldap_conf.timelimit },
|
{ "timelimit", CONF_INT, TRUE, LDAP_OPT_TIMELIMIT, &ldap_conf.timelimit },
|
||||||
|
#ifdef LDAP_OPT_TIMEOUT
|
||||||
|
{ "timeout", CONF_INT, TRUE, -1 /* needs timeval, set manually */,
|
||||||
|
&ldap_conf.timeout },
|
||||||
|
#endif
|
||||||
{ "binddn", CONF_STR, FALSE, -1, &ldap_conf.binddn },
|
{ "binddn", CONF_STR, FALSE, -1, &ldap_conf.binddn },
|
||||||
{ "bindpw", CONF_STR, FALSE, -1, &ldap_conf.bindpw },
|
{ "bindpw", CONF_STR, FALSE, -1, &ldap_conf.bindpw },
|
||||||
{ "rootbinddn", CONF_STR, FALSE, -1, &ldap_conf.rootbinddn },
|
{ "rootbinddn", CONF_STR, FALSE, -1, &ldap_conf.rootbinddn },
|
||||||
@@ -1075,6 +1085,7 @@ sudo_ldap_read_config(void)
|
|||||||
ldap_conf.port = -1;
|
ldap_conf.port = -1;
|
||||||
ldap_conf.tls_checkpeer = -1;
|
ldap_conf.tls_checkpeer = -1;
|
||||||
ldap_conf.timelimit = -1;
|
ldap_conf.timelimit = -1;
|
||||||
|
ldap_conf.timeout = -1;
|
||||||
ldap_conf.bind_timelimit = -1;
|
ldap_conf.bind_timelimit = -1;
|
||||||
ldap_conf.use_sasl = -1;
|
ldap_conf.use_sasl = -1;
|
||||||
ldap_conf.rootuse_sasl = -1;
|
ldap_conf.rootuse_sasl = -1;
|
||||||
@@ -1137,9 +1148,6 @@ sudo_ldap_read_config(void)
|
|||||||
if (!ldap_conf.host)
|
if (!ldap_conf.host)
|
||||||
ldap_conf.host = estrdup("localhost");
|
ldap_conf.host = estrdup("localhost");
|
||||||
|
|
||||||
if (ldap_conf.bind_timelimit > 0)
|
|
||||||
ldap_conf.bind_timelimit *= 1000; /* convert to ms */
|
|
||||||
|
|
||||||
if (ldap_conf.debug > 1) {
|
if (ldap_conf.debug > 1) {
|
||||||
sudo_printf(SUDO_CONV_ERROR_MSG, "LDAP Config Summary\n");
|
sudo_printf(SUDO_CONV_ERROR_MSG, "LDAP Config Summary\n");
|
||||||
sudo_printf(SUDO_CONV_ERROR_MSG, "===================\n");
|
sudo_printf(SUDO_CONV_ERROR_MSG, "===================\n");
|
||||||
@@ -1232,6 +1240,9 @@ sudo_ldap_read_config(void)
|
|||||||
if (!ldap_conf.base)
|
if (!ldap_conf.base)
|
||||||
return(FALSE); /* if no base is defined, ignore LDAP */
|
return(FALSE); /* if no base is defined, ignore LDAP */
|
||||||
|
|
||||||
|
if (ldap_conf.bind_timelimit > 0)
|
||||||
|
ldap_conf.bind_timelimit *= 1000; /* convert to ms */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Interpret SSL option
|
* Interpret SSL option
|
||||||
*/
|
*/
|
||||||
@@ -1344,6 +1355,7 @@ sudo_ldap_display_defaults(struct sudo_nss *nss, struct passwd *pw,
|
|||||||
struct lbuf *lbuf)
|
struct lbuf *lbuf)
|
||||||
{
|
{
|
||||||
struct berval **bv, **p;
|
struct berval **bv, **p;
|
||||||
|
struct timeval tv, *tvp = NULL;
|
||||||
struct ldap_config_list_str *base;
|
struct ldap_config_list_str *base;
|
||||||
struct sudo_ldap_handle *handle = nss->handle;
|
struct sudo_ldap_handle *handle = nss->handle;
|
||||||
LDAP *ld;
|
LDAP *ld;
|
||||||
@@ -1356,9 +1368,14 @@ sudo_ldap_display_defaults(struct sudo_nss *nss, struct passwd *pw,
|
|||||||
ld = handle->ld;
|
ld = handle->ld;
|
||||||
|
|
||||||
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
||||||
|
if (ldap_conf.timeout > 0) {
|
||||||
|
tv.tv_sec = ldap_conf.timeout;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
tvp = &tv;
|
||||||
|
}
|
||||||
result = NULL;
|
result = NULL;
|
||||||
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE,
|
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE,
|
||||||
"cn=defaults", NULL, 0, NULL, NULL, NULL, 0, &result);
|
"cn=defaults", NULL, 0, NULL, NULL, tvp, 0, &result);
|
||||||
if (rc == LDAP_SUCCESS && (entry = ldap_first_entry(ld, result))) {
|
if (rc == LDAP_SUCCESS && (entry = ldap_first_entry(ld, result))) {
|
||||||
bv = ldap_get_values_len(ld, entry, "sudoOption");
|
bv = ldap_get_values_len(ld, entry, "sudoOption");
|
||||||
if (bv != NULL) {
|
if (bv != NULL) {
|
||||||
@@ -1705,6 +1722,22 @@ sudo_ldap_set_options(LDAP *ld)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LDAP_OPT_TIMEOUT
|
||||||
|
/* Convert timeout to a timeval */
|
||||||
|
if (ldap_conf.timeout > 0) {
|
||||||
|
struct timeval tv;
|
||||||
|
tv.tv_sec = ldap_conf.timeout;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
rc = ldap_set_option(ld, LDAP_OPT_TIMEOUT, &tv);
|
||||||
|
if (rc != LDAP_OPT_SUCCESS) {
|
||||||
|
warningx("ldap_set_option(TIMEOUT, %ld): %s",
|
||||||
|
(long)tv.tv_sec, ldap_err2string(rc));
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
DPRINTF(("ldap_set_option(LDAP_OPT_TIMEOUT, %ld)",
|
||||||
|
(long)tv.tv_sec), 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef LDAP_OPT_NETWORK_TIMEOUT
|
#ifdef LDAP_OPT_NETWORK_TIMEOUT
|
||||||
/* Convert bind_timelimit to a timeval */
|
/* Convert bind_timelimit to a timeval */
|
||||||
if (ldap_conf.bind_timelimit > 0) {
|
if (ldap_conf.bind_timelimit > 0) {
|
||||||
@@ -1968,6 +2001,7 @@ sudo_ldap_setdefs(struct sudo_nss *nss)
|
|||||||
{
|
{
|
||||||
struct ldap_config_list_str *base;
|
struct ldap_config_list_str *base;
|
||||||
struct sudo_ldap_handle *handle = nss->handle;
|
struct sudo_ldap_handle *handle = nss->handle;
|
||||||
|
struct timeval tv, *tvp = NULL;
|
||||||
LDAP *ld;
|
LDAP *ld;
|
||||||
LDAPMessage *entry, *result;
|
LDAPMessage *entry, *result;
|
||||||
int rc;
|
int rc;
|
||||||
@@ -1977,6 +2011,11 @@ sudo_ldap_setdefs(struct sudo_nss *nss)
|
|||||||
ld = handle->ld;
|
ld = handle->ld;
|
||||||
|
|
||||||
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
||||||
|
if (ldap_conf.timeout > 0) {
|
||||||
|
tv.tv_sec = ldap_conf.timeout;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
tvp = &tv;
|
||||||
|
}
|
||||||
result = NULL;
|
result = NULL;
|
||||||
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE,
|
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE,
|
||||||
"cn=defaults", NULL, 0, NULL, NULL, NULL, 0, &result);
|
"cn=defaults", NULL, 0, NULL, NULL, NULL, 0, &result);
|
||||||
@@ -2219,6 +2258,7 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw)
|
|||||||
struct sudo_ldap_handle *handle = nss->handle;
|
struct sudo_ldap_handle *handle = nss->handle;
|
||||||
struct ldap_config_list_str *base;
|
struct ldap_config_list_str *base;
|
||||||
struct ldap_result *lres;
|
struct ldap_result *lres;
|
||||||
|
struct timeval tv, *tvp = NULL;
|
||||||
LDAPMessage *entry, *result;
|
LDAPMessage *entry, *result;
|
||||||
LDAP *ld = handle->ld;
|
LDAP *ld = handle->ld;
|
||||||
int do_netgr, rc;
|
int do_netgr, rc;
|
||||||
@@ -2264,6 +2304,11 @@ sudo_ldap_result_get(struct sudo_nss *nss, struct passwd *pw)
|
|||||||
DPRINTF(("ldap search '%s'", filt), 1);
|
DPRINTF(("ldap search '%s'", filt), 1);
|
||||||
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
for (base = ldap_conf.base; base != NULL; base = base->next) {
|
||||||
DPRINTF(("searching from base '%s'", base->val), 1);
|
DPRINTF(("searching from base '%s'", base->val), 1);
|
||||||
|
if (ldap_conf.timeout > 0) {
|
||||||
|
tv.tv_sec = ldap_conf.timeout;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
tvp = &tv;
|
||||||
|
}
|
||||||
result = NULL;
|
result = NULL;
|
||||||
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt,
|
rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt,
|
||||||
NULL, 0, NULL, NULL, NULL, 0, &result);
|
NULL, 0, NULL, NULL, NULL, 0, &result);
|
||||||
|
Reference in New Issue
Block a user