initial commit
This commit is contained in:
commit
221518bebf
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
.idea/
|
||||
venv/
|
||||
|
||||
__pycache__
|
||||
*.py[cod]
|
2
README.md
Normal file
2
README.md
Normal file
@ -0,0 +1,2 @@
|
||||
# pylldap
|
||||
Creating a Python package to work with my [LLDAP](https://github.com/lldap/lldap) setup
|
7
config.json
Normal file
7
config.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"ldap_server": "ldap://192.168.100.2:3890",
|
||||
"bind_dn": "uid=ldap_ro,ou=people,dc=juggalol,dc=com",
|
||||
"bind_password": "p@ssw0rd!",
|
||||
"user_dn": "ou=people,dc=juggalol,dc=com",
|
||||
"group_dn": "ou=groups,dc=juggalol,dc=com"
|
||||
}
|
1
lldap/__init__.py
Normal file
1
lldap/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from .lldap import LLDAP
|
66
lldap/lldap.py
Normal file
66
lldap/lldap.py
Normal file
@ -0,0 +1,66 @@
|
||||
import logging
|
||||
from ldap3 import Server, Connection, ALL
|
||||
from ldap3.core.exceptions import LDAPException
|
||||
|
||||
|
||||
class LLDAP:
|
||||
def __init__(
|
||||
self,
|
||||
ldap_server: str,
|
||||
bind_dn: str,
|
||||
bind_password: str,
|
||||
user_dn: str = "ou=people,dc=example,dc=com",
|
||||
group_dn: str = "ou=people,dc=example,dc=com"
|
||||
):
|
||||
self.bind_dn = bind_dn
|
||||
self.bind_password = bind_password
|
||||
|
||||
self.server = Server(ldap_server, get_info=ALL)
|
||||
self.conn = None
|
||||
|
||||
self.user_dn = user_dn
|
||||
self.group_dn = group_dn
|
||||
|
||||
def do_bind(self):
|
||||
try:
|
||||
if not self.conn:
|
||||
self.conn = Connection(
|
||||
self.server,
|
||||
user=self.bind_dn,
|
||||
password=self.bind_password,
|
||||
auto_bind=True
|
||||
)
|
||||
logging.info("Successfully bound to LDAP server.")
|
||||
except LDAPException as e:
|
||||
logging.error(f"Failed to bind to LDAP server: {e}")
|
||||
raise
|
||||
|
||||
def do_unbind(self):
|
||||
if self.conn:
|
||||
self.conn.unbind()
|
||||
self.conn = None
|
||||
logging.info("Successfully unbound from the LDAP server.")
|
||||
|
||||
def list_groups(self):
|
||||
try:
|
||||
self.do_bind()
|
||||
self.conn.search(self.group_dn, "(objectClass=*)", attributes=['cn'])
|
||||
entries = self.conn.entries
|
||||
return entries
|
||||
except LDAPException as e:
|
||||
logging.error(f"Error during LDAP search: {e}")
|
||||
raise
|
||||
finally:
|
||||
self.do_unbind()
|
||||
|
||||
def list_users(self):
|
||||
try:
|
||||
self.do_bind()
|
||||
self.conn.search(self.user_dn, "(uid=*)", attributes=['dn'])
|
||||
entries = self.conn.entries
|
||||
return entries
|
||||
except LDAPException as e:
|
||||
logging.error(f"Error during LDAP search: {e}")
|
||||
raise
|
||||
finally:
|
||||
self.do_unbind()
|
1
lldap/requirements.txt
Normal file
1
lldap/requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
ldap3
|
43
main.py
Normal file
43
main.py
Normal file
@ -0,0 +1,43 @@
|
||||
"""LDAP authentication and authorization testing"""
|
||||
import json
|
||||
import logging
|
||||
import lldap
|
||||
from ldap3.core.exceptions import LDAPException
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
def load_config(path: str) -> dict:
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return json.loads(f.read())
|
||||
|
||||
|
||||
def main():
|
||||
config = load_config("config.json")
|
||||
ldap = lldap.LLDAP(
|
||||
ldap_server=config['ldap_server'],
|
||||
bind_dn=config['bind_dn'],
|
||||
bind_password=config['bind_password'],
|
||||
user_dn=config['user_dn'],
|
||||
group_dn=config['group_dn']
|
||||
)
|
||||
|
||||
# List all groups
|
||||
try:
|
||||
entries = ldap.list_groups()
|
||||
for entry in entries:
|
||||
print(entry)
|
||||
except LDAPException:
|
||||
logging.error("Failed to list groups due to LDAP error.")
|
||||
|
||||
# List all users
|
||||
try:
|
||||
entries = ldap.list_users()
|
||||
for entry in entries:
|
||||
print(entry)
|
||||
except LDAPException:
|
||||
logging.error("Failed to list users due to LDAP error")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user