Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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):