Scripts Python pour Samba Active Directory

Documentation officielle de l’api : https://www.samba.org/~jelmer/samba4/pydoctor/samba.samdb.SamDB.html

#!/usr/bin/python
# -*- coding: utf-8 -*-
import getpass
import ldb
from samba.auth import system_session
from samba.credentials import Credentials
from samba.dcerpc import security
from samba.dcerpc.security import dom_sid
from samba.ndr import ndr_pack, ndr_unpack
from samba.param import LoadParm
from samba.samdb import SamDB

######################################################################

###############           Cheatsheet Samba            ################

######################################################################

def delete_ou(samdb, dn):
       """Deletes a user
        :param username: Name of the target user
       """
       samdb.transaction_start()
       try:
           samdb.delete(dn)
       except:
           samdb.transaction_cancel()
           raise
       else:
           samdb.transaction_commit()



def main():
    lp = LoadParm()
    creds = Credentials()
    creds.guess(lp)
    creds.set_username(raw_input("Username :"))
    creds.set_password(getpass.getpass("Password :"  , stream=False))
    pathsamdb = '/var/lib/samba/private/sam.ldb'
    samdb = SamDB(url='ldap://127.0.0.1:389', session_info=system_session(),credentials=creds, lp=lp)




    ####################################
    ##### Unité organisationnelle ######
    ####################################

    #Suppression OU : cette partie n'est pas directement implementee, il faut d'abord creer un def delete_ou comme ci-dessus
    delete_ou(samdb,'OU=toto,DC=AD,DC=ALEJEUNE,DC=FR')
    delete_ou(samdb,'OU=tata,OU=tranquilit,DC=AD,DC=ALEJEUNE,DC=FR')
    delete_ou(samdb,'OU=tranquilit,DC=AD,DC=ALEJEUNE,DC=FR')


    #Creation OU
    samdb.create_ou('OU=toto,DC=AD,DC=ALEJEUNE,DC=FR')
    samdb.create_ou('OU=tranquilit,DC=AD,DC=ALEJEUNE,DC=FR')
    samdb.create_ou('OU=tata,OU=tranquilit,DC=AD,DC=ALEJEUNE,DC=FR')



    ###################################
    ########### Utilisateurs ##########
    ###################################

    #https://www.samba.org/~jelmer/s4-python-api/apidocs/samba.samdb.SamDB.html#newuser
    #Creation utilisateur
    samdb.newuser(username="test-toto",password='password')
    samdb.newuser(username="dcardon",password='password')
    samdb.newuser(username="vcardon",password='password')
    samdb.newuser(username="jpdrole",password='password')

    #https://www.samba.org/~jelmer/s4-python-api/apidocs/samba.samdb.SamDB.html#deleteuser
    #Supression utilisateur
    samdb.deleteuser(username="jpdrole")


    #https://www.samba.org/~jelmer/s4-python-api/apidocs/samba.samdb.SamDB.html#setpassword
    #Definir un mot de passe
    samdb.setpassword("(sAMAccountName=test-toto)", "123456", force_change_at_next_login=False, username=None)


    #Deplacement utilisateur
    samdb.rename('CN=test-toto,CN=Users,DC=ad,DC=alejeune,DC=fr','CN=test-toto,OU=tata,OU=tranquilit,DC=ad,DC=alejeune,DC=fr')


    ###################################
    ############# Groupes #############
    ###################################


    #https://www.samba.org/~jelmer/s4-python-api/apidocs/samba.samdb.SamDB.html#newgroup
    #Creation d'un groupe
    samdb.newgroup(groupname='waptselfservice')

    #https://www.samba.org/~jelmer/s4-python-api/apidocs/samba.samdb.SamDB.html#add_remove_group_members

    #ajout d'un utilisateur a un groupe
    samdb.add_remove_group_members(groupname='waptselfservice', members='test-toto,dcardon,vcardon', add_members_operation=True)

    #Supression
    samdb.add_remove_group_members(groupname='waptselfservice', members='test-toto,dcardon,vcardon', add_members_operation=False)



    ###################################
    ############ Recherches ###########
    ###################################


    #Afficher tous les objets user, group, computer
    query = "(|(objectclass=user)(objectclass=computer)(objectclass=group))"
    result = samdb.search('DC=AD,DC=ALEJEUNE,DC=FR', expression=query, scope=ldb.SCOPE_SUBTREE)
    for item in result:
        if 'sAMAccountName' in item:
            print(item['distinguishedName'])
            print(item['sAMAccountName'])


    #Recherche d'objet avec samaccountname
    query = ("(sAMAccountName=test-toto)")
    result = samdb.search('DC=AD,DC=ALEJEUNE,DC=FR', expression=query, scope=ldb.SCOPE_SUBTREE)
    dn = str(result[0]['distinguishedName'])
    print(dn)




    ###################################
    ############ Attributs ############
    ###################################

    #Modifier un attribut :
    # Ne pas modifier l'indentation
    #ldif_data = """dn: CN=test-toto,OU=tata,OU=tranquilit,DC=ad,DC=tranquil,DC=it
    ldif_data = """dn: %s
changetype: modify
replace: mail
mail: test-toto@tranquil.it
""" % dn
    samdb.modify_ldif(ldif_data)

    #Ajouter un attribut :
    # Ne pas modifier l'indentation
    ldif_data = """dn: CN=test-toto,OU=tata,OU=tranquilit,DC=ad,DC=alejeune,DC=fr
changetype: modify
add: telephoneNumber
telephoneNumber: 0102030405
"""
    samdb.modify_ldif(ldif_data)



if __name__ == '__main__':
    main()