Skip to content

Commit a08c499

Browse files
committed
Python3 compatibility
1 parent 221c17f commit a08c499

File tree

1 file changed

+15
-24
lines changed

1 file changed

+15
-24
lines changed

genserv.py

+15-24
Original file line numberDiff line numberDiff line change
@@ -165,37 +165,28 @@ def doLdapLogin(username, password):
165165
if LdapServer == None or LdapServer == "":
166166
return False
167167
try:
168-
import ldap
169-
except ImportError:
170-
LogError("LDAP import not found, run 'sudo apt-get -y install python-ldap'")
171-
return False
172-
173-
conn = ldap.initialize(LdapServer)
174-
conn.protocol_version = 3
175-
conn.set_option(ldap.OPT_REFERRALS, 0)
176-
try:
177-
conn.simple_bind_s(username, password)
178-
except:
179-
LogError("Invalid login via LDAP: " + username)
168+
from ldap3 import Server, Connection, ALL, NTLM
169+
except ImportError as importException:
170+
LogError("LDAP3 import not found, run 'sudo pip install ldap3 && sudo pip3 install ldap3'")
171+
LogError(importException)
180172
return False
181173

182174
HasAdmin = False
183175
HasReadOnly = False
184176
SplitName = username.split('\\')
177+
DomainName = SplitName[0]
178+
DomainName = DomainName.strip()
185179
AccountName = SplitName[1]
186180
AccountName = AccountName.strip()
187-
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
188-
search_filter="(&(objectClass=*)(member=uid="+AccountName+",$LdapBase))"
189-
account_filter = "sAMAccountName="+AccountName
190-
results = conn.search_s(LdapBase, ldap.SCOPE_SUBTREE, account_filter, ['memberOf'])
191-
for result in results:
192-
if type(result[1]) is dict:
193-
for groupList in result[1].values():
194-
for group in groupList:
195-
if group.upper().find("CN="+LdapAdminGroup.upper()+",") >= 0:
196-
HasAdmin = True
197-
elif group.upper().find("CN="+LdapReadOnlyGroup.upper()+",") >= 0:
198-
HasReadOnly = True
181+
server = Server(LdapServer, get_info=ALL)
182+
conn = Connection(server, user='{}\\{}'.format(DomainName, AccountName), password=password, authentication=NTLM, auto_bind=True)
183+
conn.search('dc=skipfire,dc=local', '(&(objectclass=user)(sAMAccountName='+AccountName+'))', attributes=['memberOf'])
184+
for user in sorted(conn.entries):
185+
for group in user.memberOf:
186+
if group.upper().find("CN="+LdapAdminGroup.upper()) >= 0:
187+
HasAdmin = True
188+
elif group.upper().find("CN="+LdapReadOnlyGroup.upper()) >= 0:
189+
HasReadOnly = True
199190

200191
session['logged_in'] = HasAdmin or HasReadOnly
201192
session['write_access'] = HasAdmin

0 commit comments

Comments
 (0)