Skip to content

Commit 6dfd47e

Browse files
committed
possibly fixed ldap_plugin, thanks rakeshsingh
1 parent e1f2919 commit 6dfd47e

File tree

1 file changed

+16
-125
lines changed

1 file changed

+16
-125
lines changed

py4web/utils/auth_plugins/ldap_plugin.py

Lines changed: 16 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -217,36 +217,20 @@ def __init__(
217217
self.groups = groups
218218

219219
def check_credentials(self, username, password):
220-
server = self.server
221-
port = self.port
222220
base_dn = self.base_dn
223221
mode = self.mode
224-
secure = self.secure
225-
self_signed_certificate = self.self_signed_certificate
226-
cert_path = self.cert_path
227-
cert_file = self.cert_file
228-
cacert_path = self.cacert_path
229-
cacert_file = self.cacert_file
230-
key_file = self.key_file
231222
bind_dn = self.bind_dn
232223
bind_pw = self.bind_pw
233224
filterstr = self.filterstr
234225
username_attrib = self.username_attrib
235226
custom_scope = self.custom_scope
236-
allowed_groups = self.allowed_groups
237227
manage_user = self.manage_user
238228
user_firstname_attrib = self.user_firstname_attrib
239229
user_lastname_attrib = self.user_lastname_attrib
240230
user_mail_attrib = self.user_mail_attrib
241231
manage_groups = self.manage_groups
242-
manage_groups_callback = self.manage_groups_callback
243232
db = self.db
244-
group_dn = self.db
245-
group_name_attrib = self.group_name_attrib
246-
group_member_attrib = self.group_member_attrib
247-
group_filterstr = self.group_filterstr
248233
group_mapping = self.group_mapping
249-
tls = self.tls
250234
logger = self.logger
251235

252236
if password == "": # http://tools.ietf.org/html/rfc4513#section-5.1.2
@@ -554,37 +538,7 @@ def check_credentials(self, username, password):
554538
return False
555539

556540
def is_user_in_allowed_groups(self, username, password=None):
557-
server = self.server
558-
port = self.port
559-
base_dn = self.base_dn
560-
mode = self.mode
561-
secure = self.secure
562-
self_signed_certificate = self.self_signed_certificate
563-
cert_path = self.cert_path
564-
cert_file = self.cert_file
565-
cacert_path = self.cacert_path
566-
cacert_file = self.cacert_file
567-
key_file = self.key_file
568-
bind_dn = self.bind_dn
569-
bind_pw = self.bind_pw
570-
filterstr = self.filterstr
571-
username_attrib = self.username_attrib
572-
custom_scope = self.custom_scope
573541
allowed_groups = self.allowed_groups
574-
manage_user = self.manage_user
575-
user_firstname_attrib = self.user_firstname_attrib
576-
user_lastname_attrib = self.user_lastname_attrib
577-
user_mail_attrib = self.user_mail_attrib
578-
manage_groups = self.manage_groups
579-
manage_groups_callback = self.manage_groups_callback
580-
db = self.db
581-
group_dn = self.db
582-
group_name_attrib = self.group_name_attrib
583-
group_member_attrib = self.group_member_attrib
584-
group_filterstr = self.group_filterstr
585-
group_mapping = self.group_mapping
586-
tls = self.tls
587-
logger = self.logger
588542

589543
"""
590544
Figure out if the username is a member of an allowed group
@@ -613,36 +567,9 @@ def do_manage_groups(self, con, username, group_mapping={}):
613567
ones in py4web's application database or create new groups
614568
according to ldap.
615569
"""
616-
server = self.server
617-
port = self.port
618-
base_dn = self.base_dn
619-
mode = self.mode
620-
secure = self.secure
621-
self_signed_certificate = self.self_signed_certificate
622-
cert_path = self.cert_path
623-
cert_file = self.cert_file
624-
cacert_path = self.cacert_path
625-
cacert_file = self.cacert_file
626-
key_file = self.key_file
627-
bind_dn = self.bind_dn
628-
bind_pw = self.bind_pw
629-
filterstr = self.filterstr
630-
username_attrib = self.username_attrib
631-
custom_scope = self.custom_scope
632-
allowed_groups = self.allowed_groups
633-
manage_user = self.manage_user
634-
user_firstname_attrib = self.user_firstname_attrib
635-
user_lastname_attrib = self.user_lastname_attrib
636-
user_mail_attrib = self.user_mail_attrib
637-
manage_groups = self.manage_groups
638570
manage_groups_callback = self.manage_groups_callback
639571
db = self.db
640-
group_dn = self.db
641-
group_name_attrib = self.group_name_attrib
642-
group_member_attrib = self.group_member_attrib
643-
group_filterstr = self.group_filterstr
644572
group_mapping = self.group_mapping
645-
tls = self.tls
646573
logger = self.logger
647574
groups = self.groups
648575

@@ -732,33 +659,12 @@ def _init_ldap(self):
732659

733660
server = self.server
734661
port = self.port
735-
base_dn = self.base_dn
736-
mode = self.mode
737662
secure = self.secure
738663
self_signed_certificate = self.self_signed_certificate
739-
cert_path = self.cert_path
740664
cert_file = self.cert_file
741665
cacert_path = self.cacert_path
742666
cacert_file = self.cacert_file
743667
key_file = self.key_file
744-
bind_dn = self.bind_dn
745-
bind_pw = self.bind_pw
746-
filterstr = self.filterstr
747-
username_attrib = self.username_attrib
748-
custom_scope = self.custom_scope
749-
allowed_groups = self.allowed_groups
750-
manage_user = self.manage_user
751-
user_firstname_attrib = self.user_firstname_attrib
752-
user_lastname_attrib = self.user_lastname_attrib
753-
user_mail_attrib = self.user_mail_attrib
754-
manage_groups = self.manage_groups
755-
manage_groups_callback = self.manage_groups_callback
756-
db = self.db
757-
group_dn = self.db
758-
group_name_attrib = self.group_name_attrib
759-
group_member_attrib = self.group_member_attrib
760-
group_filterstr = self.group_filterstr
761-
group_mapping = self.group_mapping
762668
tls = self.tls
763669
logger = self.logger
764670

@@ -794,43 +700,23 @@ def _init_ldap(self):
794700
con.start_tls_s()
795701
return con
796702

797-
def get_user_groups_from_ldap(self, con, username):
703+
def get_user_groups_from_ldap(self, username=None, password=None):
798704
"""
799705
Get all group names from ldap where the user is in
800706
"""
801-
802-
server = self.server
803-
port = self.port
707+
bind_dn = self.bind_dn
804708
base_dn = self.base_dn
805709
mode = self.mode
806-
secure = self.secure
807-
self_signed_certificate = self.self_signed_certificate
808-
cert_path = self.cert_path
809-
cert_file = self.cert_file
810-
cacert_path = self.cacert_path
811-
cacert_file = self.cacert_file
812-
key_file = self.key_file
813-
bind_dn = self.bind_dn
814-
bind_pw = self.bind_pw
815710
filterstr = self.filterstr
816-
username_attrib = self.username_attrib
817-
custom_scope = self.custom_scope
818-
allowed_groups = self.allowed_groups
819-
manage_user = self.manage_user
820-
user_firstname_attrib = self.user_firstname_attrib
821-
user_lastname_attrib = self.user_lastname_attrib
822-
user_mail_attrib = self.user_mail_attrib
823-
manage_groups = self.manage_groups
824-
manage_groups_callback = self.manage_groups_callback
825-
db = self.db
826711
group_dn = self.group_dn
827712
group_name_attrib = self.group_name_attrib
828713
group_member_attrib = self.group_member_attrib
829714
group_filterstr = self.group_filterstr
830-
group_mapping = self.group_mapping
831-
tls = self.tls
832715
logger = self.logger
833-
groups = self.groups
716+
717+
# if username is None, return empty list
718+
if username is None:
719+
return []
834720

835721
logger.info("[%s] Get user groups from ldap" % str(username))
836722
#
@@ -847,7 +733,17 @@ def get_user_groups_from_ldap(self, con, username):
847733
domain.append(x.split("=")[-1])
848734
username = "%s@%s" % (username, ".".join(domain))
849735
username_bare = username.split("@")[0]
736+
con = self._init_ldap()
850737
con.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
738+
try:
739+
if bind_dn:
740+
# need to search directory with an admin account 1st
741+
con.simple_bind_s(bind_dn, bind_pw)
742+
else:
743+
# credentials should be in the form of [email protected]
744+
con.simple_bind_s(username, password)
745+
except (ldap.INVALID_CREDENTIALS, ldap.OPERATIONS_ERROR):
746+
return []
851747
# In cases where ForestDnsZones and DomainDnsZones are found,
852748
# result will look like the following:
853749
# ['ldap://ForestDnsZones.domain.com/DC=ForestDnsZones,
@@ -880,14 +776,9 @@ def get_user_groups_from_ldap(self, con, username):
880776
ldap_groups_of_the_user.append(
881777
str(group[group_name_attrib][0], encoding="utf-8")
882778
)
883-
print(ldap_groups_of_the_user)
884779

885780
logger.debug("User groups: %s" % ldap_groups_of_the_user)
886781
return list(ldap_groups_of_the_user)
887782

888-
if filterstr[0] == "(" and filterstr[-1] == ")": # rfc4515 syntax
889-
filterstr = filterstr[1:-1] # parens added again where used
890-
return []
891-
892783
def check_credentials(self, username, password):
893784
return self.is_user_in_allowed_groups(username, password)

0 commit comments

Comments
 (0)