summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2012-07-15 12:47:23 +0000
committerArthur de Jong <arthur@arthurdejong.org>2012-07-15 12:47:23 +0000
commit6b0d47b940736286b096e2ba25b191933ee0b13c (patch)
tree3f645bd12c923649c61d7784cde373b3052532ed
parentcd04e6a41c802e89a60f591abe9c8c301afffbd9 (diff)
properly set most LDAP options from configuration
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1717 ef36b2f9-881f-0410-afb5-c4e39611909c
-rwxr-xr-xpynslcd/pynslcd.py42
1 files changed, 40 insertions, 2 deletions
diff --git a/pynslcd/pynslcd.py b/pynslcd/pynslcd.py
index a053ad5..8ebd981 100755
--- a/pynslcd/pynslcd.py
+++ b/pynslcd/pynslcd.py
@@ -174,7 +174,7 @@ def getpeercred(fd):
import socket
SO_PEERCRED = 17
creds = fd.getsockopt(socket.SOL_SOCKET, SO_PEERCRED, struct.calcsize('3i'))
- pid, uid, gid = struct.unpack('3i',creds)
+ pid, uid, gid = struct.unpack('3i', creds)
return uid, gid, pid
@@ -234,8 +234,29 @@ def disable_nss_ldap():
ctypes.c_int.in_dll(lib, '_nss_ldap_enablelookups').value = 0
-def worker():
+def get_connection():
+ """Return a connection to the LDAP server."""
session = ldap.initialize(cfg.uri)
+ # set session-specific LDAP options
+ if cfg.ldap_version:
+ session.set_option(ldap.OPT_PROTOCOL_VERSION, cfg.ldap_version)
+ if cfg.deref:
+ session.set_option(ldap.OPT_DEREF, cfg.deref)
+ if cfg.timelimit:
+ session.set_option(ldap.OPT_TIMELIMIT, cfg.timelimit)
+ session.set_option(ldap.OPT_TIMEOUT, cfg.timelimit)
+ session.set_option(ldap.OPT_NETWORK_TIMEOUT, cfg.timelimit)
+ if cfg.referrals:
+ session.set_option(ldap.OPT_REFERRALS, cfg.referrals)
+ session.set_option(ldap.OPT_RESTART, True)
+ # TODO: register a connection callback (like dis?connect_cb() in myldap.c)
+ if cfg.ssl or cfg.uri.startswith('ldaps://'):
+ session.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_HARD)
+ return session
+
+
+def worker():
+ session = get_connection()
while True:
try:
acceptconnection(session)
@@ -316,6 +337,23 @@ if __name__ == '__main__':
os.setuid(u.pw_uid)
os.environ['HOME'] = u.pw_dir
logging.info('accepting connections')
+ # set global LDAP configuration
+ if cfg.tls_reqcert is not None:
+ ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, cfg.tls_reqcert)
+ if cfg.tls_cacertdir:
+ ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, cfg.tls_cacertdir)
+ if cfg.tls_cacertfile:
+ ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, cfg.tls_cacertfile)
+ if cfg.tls_randfile:
+ ldap.set_option(ldap.OPT_X_TLS_RANDOM_FILE, cfg.tls_randfile)
+ if cfg.tls_randfile:
+ ldap.set_option(ldap.OPT_X_TLS_RANDOM_FILE, cfg.tls_randfile)
+ if cfg.tls_ciphers:
+ ldap.set_option(ldap.OPT_X_TLS_CIPHER_SUITE, cfg.tls_ciphers)
+ if cfg.tls_cert:
+ ldap.set_option(ldap.OPT_X_TLS_CERTFILE, cfg.tls_cert)
+ if cfg.tls_key:
+ ldap.set_option(ldap.OPT_X_TLS_KEYFILE, cfg.tls_key)
# start worker threads
threads = []
for i in range(cfg.threads):