@@ -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