Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/kakwa/ldapcherry
Browse files Browse the repository at this point in the history
  • Loading branch information
kakwa committed Jun 17, 2016
2 parents ab81f42 + f7bbff4 commit ffac999
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 72 deletions.
22 changes: 9 additions & 13 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,26 @@
sudo: required
dist: trusty
language: python

env:
- TRAVIS="yes"

before_install:
- '[ "$TEST_PEP8" == "1" ] || curl https://ftp-master.debian.org/keys/archive-key-7.0.asc | sudo apt-key add -'
- '[ "$TEST_PEP8" == "1" ] || echo "deb http://http.debian.net/debian wheezy-backports main" | sudo tee -a /etc/apt/sources.list'
- '[ "$TEST_PEP8" == "1" ] || echo "deb http://http.debian.net/debian wheezy main" | sudo tee -a /etc/apt/sources.list'
- '[ "$TEST_PEP8" == "1" ] || sudo /sbin/ifconfig'
- '[ "$TEST_PEP8" == "1" ] || sudo apt-get update -qq'
- '[ "$TEST_PEP8" == "1" ] || sudo rm /etc/dpkg/dpkg.cfg.d/multiarch'
- '[ "$TEST_PEP8" == "1" ] || sudo ./tests/test_env/deploy.sh'

language: python
python:
- "2.7"
# - "3.2"
# - "3.3"
# command to install dependencies

install:
- pip install -e .
- "if [[ $TEST_PEP8 == '1' ]]; then pip install pep8; fi"
- pip install passlib
- pip install coveralls

# command to run tests
script:
- coverage run --source=ldapcherry setup.py test
- "if [[ $TEST_HIREDIS == '1' ]]; then pip install hiredis; fi"
#
#script:
# - coverage run --source=ldapcherry setup.py test
script: "if [[ $TEST_PEP8 == '1' ]]; then pep8 --repeat --show-source --exclude=.venv,.tox,dist,docs,build,*.egg,tests,misc . scripts/ldapcherryd; else coverage run --source=ldapcherry setup.py test; fi"
matrix:
include:
Expand Down
69 changes: 33 additions & 36 deletions ldapcherry/backend/backendAD.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def __init__(self, cafile):
class MissingAttr(Exception):
def __init__(self):
self.log = 'attributes "cn" and "unicodePwd" must be declared ' \
'in attributes.yml for all Active Directory backends.'
'in attributes.yml for all Active Directory backends.'

NO_ATTR = 0
DISPLAYED_ATTRS = 1
Expand All @@ -35,7 +35,7 @@ def __init__(self):

# UserAccountControl Attribute/Flag Values
# For details, look at:
# https://support.microsoft.com/en-us/kb/305144
# https://support.microsoft.com/en-us/kb/305144
SCRIPT = 0x0001
ACCOUNTDISABLE = 0x0002
HOMEDIR_REQUIRED = 0x0008
Expand All @@ -58,7 +58,6 @@ def __init__(self):
PASSWORD_EXPIRED = 0x800000
TRUSTED_TO_AUTH_FOR_DELEGATION = 0x1000000
PARTIAL_SECRETS_ACCOUNT = 0x04000000

# Generated by the followin command:

# samba-tool group list | \
Expand Down Expand Up @@ -143,11 +142,11 @@ def __init__(self, config, logger, name, attrslist, key):
for a in attrslist:
self.attrlist.append(self._str(a))

if 'cn' not in self.attrlist:
raise MissingAttr()
if 'cn' not in self.attrlist:
raise MissingAttr()

if 'unicodePwd' not in self.attrlist:
raise MissingAttr()
if 'unicodePwd' not in self.attrlist:
raise MissingAttr()

def _search_group(self, searchfilter, groupdn):
searchfilter = self._str(searchfilter)
Expand Down Expand Up @@ -176,42 +175,40 @@ def _build_groupdn(self, groups):
return ad_groups

def _set_password(self, cn, password):
unicode_pass = '\"' + password + '\"'
password_value = unicode_pass.encode('utf-16-le')
ldap_client = self._bind()
dn = str('CN=%(cn)s,%(user_dn)s' % {
'cn': cn,
unicode_pass = '\"' + password + '\"'
password_value = unicode_pass.encode('utf-16-le')

ldap_client = self._bind()

dn = str('CN=%(cn)s,%(user_dn)s' % {
'cn': cn,
'user_dn': self.userdn
}
)

attrs = {}

attrs['unicodePwd'] = str(password_value)

#ldif = modlist.modifyModlist({'unicodePwd': 'asad'}, attrs)
ldif = modlist.modifyModlist({'unicodePwd': 'tmp'}, attrs)
ldap_client.modify_s(dn,ldif)

del(attrs['unicodePwd'])
attrs['UserAccountControl'] = str(NORMAL_ACCOUNT)
ldif = modlist.modifyModlist({'UserAccountControl': 'tmp'}, attrs)
ldap_client.modify_s(dn,ldif)
})

attrs = {}

attrs['unicodePwd'] = str(password_value)

ldif = modlist.modifyModlist({'unicodePwd': 'tmp'}, attrs)
ldap_client.modify_s(dn, ldif)

del(attrs['unicodePwd'])
attrs['UserAccountControl'] = str(NORMAL_ACCOUNT)
ldif = modlist.modifyModlist({'UserAccountControl': 'tmp'}, attrs)
ldap_client.modify_s(dn, ldif)

def add_user(self, attrs):
password = attrs['unicodePwd']
del(attrs['unicodePwd'])
super(Backend, self).add_user(attrs)
self._set_password(attrs['cn'], password)
del(attrs['unicodePwd'])
super(Backend, self).add_user(attrs)
self._set_password(attrs['cn'], password)

def set_attrs(self, username, attrs):
if 'unicodePwd' in attrs:
if 'unicodePwd' in attrs:
password = attrs['unicodePwd']
del(attrs['unicodePwd'])
self._set_password(attrs['cn'], password)
super(Backend, self).set_attrs(username, attrs)
del(attrs['unicodePwd'])
self._set_password(attrs['cn'], password)
super(Backend, self).set_attrs(username, attrs)

def add_to_groups(self, username, groups):
ad_groups = self._build_groupdn(groups)
Expand Down
13 changes: 6 additions & 7 deletions ldapcherry/backend/backendLdap.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,6 @@ def _get_user(self, username, attrs=ALL_ATTRS):
else:
dn_entry = r[0]
return dn_entry

# python-ldap talks in bytes,
# as the rest of ldapcherry talks in unicode utf-8:
# * everything passed to python-ldap must be converted to bytes
Expand Down Expand Up @@ -292,7 +291,7 @@ def auth(self, username, password):
return True
else:
return False

def attrs_pretreatment(self, attrs):
attrs_str = {}
for a in attrs:
Expand All @@ -304,14 +303,14 @@ def add_user(self, attrs):
ldap_client = self._bind()
# encoding crap
attrs_str = self.attrs_pretreatment(attrs)

attrs_str['objectClass'] = self.objectclasses
# construct is DN
dn = \
self._str(self.dn_user_attr) +\
'=' +\
self._str(attrs[self.dn_user_attr]) +\
',' +\
self._str(self.dn_user_attr) + \
'=' + \
self._str(attrs[self.dn_user_attr]) + \
',' + \
self._str(self.userdn)
# gen the ldif fir add_s and add the user
ldif = modlist.addModlist(attrs_str)
Expand Down
4 changes: 2 additions & 2 deletions ldapcherry/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def __init__(self, param, section, possible_values):
self.param = param
possible_values_str = string.join(possible_values, ', ')
self.log = \
"wrong value for param '%(param)s' in section '%(section)s'"\
"wrong value for param '%(param)s' in section '%(section)s'" \
", possible values are [%(values)s]" % \
{
'param': param,
Expand Down Expand Up @@ -167,7 +167,7 @@ def __init__(self, key):
self.key = key
self.log = \
"key '" + key + "' type is password," \
" keys '" + key + "1' and '" + key + "2'"\
" keys '" + key + "1' and '" + key + "2'" \
" are reserved and cannot be used"


Expand Down
14 changes: 0 additions & 14 deletions tests/test_env/deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,6 @@ then
DEBIAN_FRONTEND=noninteractive apt-get install kpartx -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -f -q -y
DEBIAN_FRONTEND=noninteractive apt-get install lsb-base libattr1 -t wheezy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -f -q -y
DEBIAN_FRONTEND=noninteractive apt-get install samba python-samba samba-vfs-modules -t wheezy-backports -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -f -q -y
truncate -s 512M file.img
fdisk file.img <<EOF
n
p
1
w
q
EOF
kpartx -a file.img
mkfs.ext4 /dev/mapper/loop0p1
mount /dev/mapper/loop0p1 /var/lib/samba/
else
DEBIAN_FRONTEND=noninteractive apt-get install ldap-utils slapd samba python-samba samba-vfs-modules -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -f -q -y
fi
Expand Down

0 comments on commit ffac999

Please sign in to comment.