|
|
- #!/usr/bin/python2
- # coding=utf-8
-
-
- import ldb
- from samba.samdb import SamDB
- from samba.auth import system_session
- # from samba.ndr import ndr_pack, ndr_unpack
- # from samba.dcerpc import security
- import samba.param
- # import base64
- # import binascii
- from UserAd_class import UserAd
- import zayavka_reader as z_reader
-
- base = "CN=Users,DC=techgrow,DC=local" # можно не заморачиваться с ОУ и тогда base = "CN=Users,DC=myDom,DC=lan"
- domainName = 'techgrow.local'
-
- dbconn = {'host': '10.3.11.177',
- 'user': 'readonlyuser',
- 'pass': 'Readonly@2006',
- 'base': 'techgrow'}
-
- sql = 'select * from LDAP'
- sql_update_changes = "update LDAP set Changes = 'N' where ID = '%s'"
- sql_delete = "delete from LDAP where Delete = 'Y' and ID = '%s'"
-
- ad_groups = ['vpn-users', 'gogs']
- ad_groups_users = ['vpn-users', 'gogs']
- ad_groups_bitrix = ['vpn-web-vpn', 'gogs']
- ad_groups_1c = ['vpn-1c-vpn', 'Domain Users']
- ad_group_xserv = 'ics'
- ad_group_rdp = 'Пользователи удаленного рабочего стола'
-
-
- def users_make_ad(sam, base):
- expression = "(&(objectCategory=person)(objectClass=user))"
- users = {}
- res = sam.search(base=base, expression=expression, attrs=['*', 'userAccountControl'])
- for i in res:
- enabled = 0
- if int(str(i['userAccountControl'])) & 2 == 0:
- enabled = 1
- memberOf = []
- for k in i['memberOf']:
- memberOf.append(str(k).split(',')[0].split('=')[1])
- users[str(i['samAccountName'])] = {'samAccountName': str(i['samAccountName']),
- 'memberOf': memberOf,
- 'userAccountControl': int(str(i['userAccountControl'])),
- 'enabled': enabled}
- return users
-
-
- def main():
- lp = samba.param.LoadParm()
- lp.load(samba.param.default_path()) # или lp.load("/etc/samba/smb.conf")
- sam = SamDB(lp=lp, session_info=system_session())
- expression = "(&(objectCategory=person)(objectClass=user))"
-
- res = sam.search(base=base, expression=expression, attrs=['*', 'userAccountControl'])
- for i in res:
- print(str(i['samAccountName']))
- res, err = z_reader.mysql_reader(dbconn, sql)
- if err:
- print(err)
- exit(0)
- z_users = z_reader.users_make_zayavka(res)
- i = 0
- for z_user in z_users:
- print(z_user, z_users[z_user])
- ad_user = UserAd(sam, base, domainName, z_users[z_user]['samAccountName'], z_users[z_user]['usrPass'])
- if z_users[z_user]['toRemove']: # удаляем, если такой есть
- print("removing user")
- if ad_user.exists:
- ad_user.remove()
- dat, err = z_reader.mysql_reader(dbconn, sql_delete % z_users[z_user]['id'])
- if err:
- print(err)
- continue
- if not ad_user.exists:
- print("make new user")
- ad_res = ad_user.add()
- if ad_res:
- print(ad_res)
- if z_users[z_user]['pwChange']: # обновляем пароль
- ad_res = ad_user.set_passwd()
- if ad_res:
- print(ad_res)
- dat, err = z_reader.mysql_reader(dbconn, sql_update_changes % z_users[z_user]['id'])
- if err:
- print(err)
- if z_users[z_user]['enabled']: # инаблим или дисаблим
- ad_user.enable()
- else:
- ad_user.disable()
- for group in z_users[z_user]['memberOf']:
- ad_user.add_in_group(group)
-
-
- if __name__ == '__main__':
- main()
-
|