def diff_computer_ad_wapt(wapt, wapt_server_user='******', wapt_server_passwd=None): """Return the list of computers in the Active Directory but not registred in Wapt database >>> wapt = common.Wapt(config_filename=r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini") >>> diff_computer_ad_wapt(wapt) ??? """ if os.name != "nt": return computer_ad = set([ c['dnshostname'].lower() for c in active_directory.search("objectClass='computer'") if c['dnshostname'] and c.operatingSystem and c.operatingSystem.startswith('Windows') ]) computer_wapt = set([ c['host_info']['computer_fqdn'].lower() for c in wapt.waptserver.get('api/v1/hosts?columns=host.computer_fqdn', auth=(wapt_server_user, wapt_server_passwd))['result'] ]) diff = list(computer_ad - computer_wapt) return diff
def enumerateOUs(): try: ouList = [] domainName = getDomainName() if domainName: domainSplit = domainName.split(".") domain = "" for d in domainSplit: if domain: domain += "," domain += "DC=" + d ouList.append( "LDAP://CN=Computers," + domain ) #because people like not having organizational units and wonder why the "Computers" CN isn't listed even though it is not an organization unit but the lack thereof for OU in active_directory.search(objectCategory='organizationalUnit'): ouList.append(str(OU)) return ouList except Exception as ex: return [ "Error getting OU list. Are you sure this is a domain controller?", str(ex) ]
def diff_computer_wapt_ad(wapt, wapt_server_user='******', wapt_server_passwd=None): """Return the list of computers registered in Wapt database but not in the Active Directory >>> wapt = common.Wapt(config_filename=r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini") >>> diff_computer_wapt_ad(wapt) ??? """ if os.name != "nt": return computer_ad = set([ c['dnshostname'].lower() for c in active_directory.search("objectClass='computer'") if c['dnshostname'] ]) computer_wapt = set([ c['computer_fqdn'].lower() for c in wapt.waptserver.get('api/v1/hosts?columns=computer_fqdn', auth=(wapt_server_user, wapt_server_passwd))['result'] ]) result = list(computer_wapt - computer_ad) return result
def test_search(self): for computer in active_directory.search("cn='%s'" % self.computer_id, objectClass="Computer"): self.assertADEqual(computer, self.computer) break else: raise RuntimeError("Computer not found")
def update_control(control): # try to update package description to match computer description in active directory try: import active_directory for pc in active_directory.search(objectCategory='Computer', objectClass='Computer',dNShostname=control.package): if pc.description: control.description = pc.description except: pass
def do_signup(db): params = request.forms uid = params.get('user').lower() pwd = params.get('pwd') # Check if there's already another iCARDEA user registered with the # same user name c = db.execute ('SELECT * FROM users WHERE uid=?', (uid,)).fetchone() if c: flash('errors', 'Please choose another username') redirect('signup') pythoncom.CoInitializeEx(0) if 'hospital_user' not in params: if not STANDALONE: # Check if there's already a Hospital user with the same name # Hospital users will reuse their user name so we d better # check!! for p in ad.search(objectCategory='Person', objectClass='user', sAMAccountName=uid): flash('errors', 'Please choose another username') redirect('signup') if pwd != params.get('pwd2'): flash('errors', 'Not correct password') redirect('signup') prof = {'nickname': uid, 'givenName': params.get('given'), 'fullName': "%s %s" % (params.get('given'), params.get('surname')) } db.execute('INSERT INTO users(uid, prof) values(?,?)', (uid,json.dumps(prof))) db.execute('INSERT INTO auth(uid, pwd) values(?,?)', (uid, sha256(pwd).hexdigest())) db.commit() else: if check_win_user(uid, pwd): # Get the profile from the Windows Domain Controller prof = {'nickname': uid} for p in ad.search(objectCategory='Person', objectClass='user', sAMAccountName=uid): prof['fullName'] = p.displayName prof['givenName'] = p.givenName prof['groups'] = [g.cn for g in p.memberOf] break db.execute('INSERT INTO users(uid,prof) values(?,?)', (uid,json.dumps(prof))) db.commit() else: flash('errors', 'Wrong username and/or password for a hospital user!') redirect('signup') flash('success', 'Sign up was successful. Please log in!') redirect('login')
def diff_computer_ad_wapt(wapt): """Return the computer in the Active Directory but not in Wapt Serveur >>> wapt = common.Wapt(config_filename=r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini") >>> diff_computer_ad_wapt(wapt) ??? """ computer_ad = set([ c['dnshostname'].lower() for c in active_directory.search("objectClass='computer'") if c['dnshostname']]) computer_wapt = set( [ c['host']['computer_fqdn'].lower() for c in json.loads(requests.request('GET','%s/json/host_list'%wapt.wapt_server).text)]) diff = list(set(computer_ad)-set(computer_wapt)) return diff
def diff_computer_ad_wapt(wapt,wapt_server_user='******',wapt_server_passwd=None): """Return the list of computers in the Active Directory but not registred in Wapt database >>> wapt = common.Wapt(config_filename=r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini") >>> diff_computer_ad_wapt(wapt) ??? """ computer_ad = set([ c['dnshostname'].lower() for c in active_directory.search("objectClass='computer'") if c['dnshostname'] and c.operatingSystem and c.operatingSystem.startswith('Windows')]) computer_wapt = set( [ c['host']['computer_fqdn'].lower() for c in wapt.waptserver.get('api/v1/hosts?columns=host.computer_fqdn',auth=(wapt_server_user,wapt_server_passwd))['result']]) diff = list(computer_ad-computer_wapt) return diff
def diff_computer_wapt_ad(wapt,wapt_server_user='******',wapt_server_passwd=None): """Return the list of computers registered in Wapt database but not in the Active Directory >>> wapt = common.Wapt(config_filename=r"c:\users\htouvet\AppData\Local\waptconsole\waptconsole.ini") >>> diff_computer_wapt_ad(wapt) ??? """ computer_ad = set([ c['dnshostname'].lower() for c in active_directory.search("objectClass='computer'") if c['dnshostname']]) computer_wapt = set( [ c['computer_fqdn'].lower() for c in wapt.waptserver.get('api/v1/hosts?columns=computer_fqdn',auth=(wapt_server_user,wapt_server_passwd))['result']]) result = list(computer_wapt - computer_ad) return result
def get_all_servers(pattern, nb_days_ago_when_changed_max = NB_DAYS): import datetime now = datetime.datetime.now() sorted_computer_list = [] for computer in active_directory.search (pattern): when_changed = datetime.datetime(computer.whenChanged.year, computer.whenChanged.month, computer.whenChanged.day, computer.whenChanged.hour, computer.whenChanged.minute) if now - when_changed < datetime.timedelta(nb_days_ago_when_changed_max): sorted_computer_list.append(computer) sorted_computer_list.sort(computer_sort) return sorted_computer_list
def enumerateOUs(): try: ouList = [] domainName = getDomainName() if domainName: domainSplit = domainName.split(".") domain = "" for d in domainSplit: if domain: domain += "," domain += "DC="+d ouList.append("LDAP://CN=Computers,"+domain) #because people like not having organizational units and wonder why the "Computers" CN isn't listed even though it is not an organization unit but the lack thereof for OU in active_directory.search(objectCategory='organizationalUnit'): ouList.append(str(OU)) return ouList except Exception as ex: return ["Error getting OU list. Are you sure this is a domain controller?",str(ex)]
def generate_all_users(target): sorted_user_list = [] for user in active_directory.search ("objectCategory='Person'", "objectClass='User'"): sorted_user_list.append(user) sorted_user_list.sort(user_sort) display_list = [] for user in sorted_user_list: display_list.append("%s (%s / %s)" % (user.sAMAccountName, user.cn, user.mail)) output_list = [] pretty_print(display_list, output_list) if target != "STDOUT": f = file(target, "w") f.write('\n'.join(output_list).encode('utf-8')) f.close() else: myprint('\n'.join(output_list))
def generate_all_groups(target): sorted_group_list=[] for group in active_directory.search (objectClass='group'): sorted_group_list.append(group) sorted_group_list.sort(group_cmp) display_list = [] for group in sorted_group_list: group_content = [] try: sorted_group_content = [] for member in group.member: sorted_group_content.append(member) sorted_group_content.sort(user_sort) for member in sorted_group_content: group_content.append("%s (%s / %s)" % (member.sAMAccountName, member.cn, member.mail)) except Exception, e: pass display_list.append({ group.cn : group_content })
#------------------------------------------------------------------------------- # Name: module1 # Purpose: # # Author: htouvet # # Created: 18/06/2015 # Copyright: (c) htouvet 2015 # Licence: <your licence> #------------------------------------------------------------------------------- from setuphelpers import * import active_directory ad_admin = r'domaine\administrateur' ad_passwd = 'xxxx' for pc in active_directory.search(objectCategory='Computer', objectClass='Computer'): host = pc.dNShostname description = pc.description if host and description: print "Change %s description to %s" % (host, description) try: print( 'echo "" | wmic /USER:%s /PASSWORD:%s /NODE:"%s" os set description="%s"' % (ad_admin, ad_passwd, host, description)) except Exception as e: print('Unable to change description for %s' % host)
import active_directory import socket import sys try: domain = sys.argv[1] except: print "Usage: populateAdHosts.py domainName" sys.exit() def generateSql(host, ip): print "REPLACE INTO host_netbios VALUES ('%s', '%s', '%s');" % (ip, host, domain) def resolv(host): try: addr = socket.gethostbyname(host) except socket.gaierror: return host return addr for c in active_directory.search(objectCategory='Computer'): if c.displayName != None: host = c.displayName.replace("$", "") ip = resolv(host) generateSql(host, ip)
def list_all_groups(): for group in active_directory.search(objectClass='group'): print(group.cn)
def getUserInfo(username): userEmail = "" userCountry = "" userDept = "" userFullName = "" userJobTitle = "" userManager = "" userMobNo = "" userTelNo= "" userDept = "" userTZ = "" userLocation = "" user_details = {} try: for user in active_directory.search ("objectCategory='Person'","sAMAccountName='"+username+"'"): userFullName = user.displayName userEmail = user.mail try: userManager = user.manager if "CN=" in userManager: userManager = userManager.split(",OU=",1)[0][3:].replace('\\','') #userManager = re.search('(CN=\S+\\\,\s+\S+)',userManager).group(0) except ValueError: break try: userJobTitle = user.title except ValueError: break try: userDept = user.department except ValueError: break try: userTelNo = user.telephoneNumber except ValueError: break try: userMobNo = user.mobile except ValueError: break try: userCountry = user.co if (userCountry=="None"): userCountry = user.c except ValueError: break try: userLocation = user.physicalDeliveryOfficeName except ValueError: break finally: o = [] o.append(120*'-') o.append("User Details:") o.append(14*'=') o.append("User:%s\\%s" % (envDomain,username)) o.append("Name: %s\t\tReports to: %s" % (userFullName,userManager)) o.append("Job Title: %s\tDept: %s" % (userJobTitle,userDept)) o.append("Phone(s): %s / %s\tEmail: %s" % (userTelNo,userMobNo, userEmail)) o.append("Location: %s\tCountry: %s" % (userLocation,userCountry)) o.append("Time Zone: %s" % userTZ) user_details['userinfo'] = o logger.debug("< finished collecting user information>") return user_details
#------------------------------------------------------------------------------- # Name: module1 # Purpose: # # Author: htouvet # # Created: 18/06/2015 # Copyright: (c) htouvet 2015 # Licence: <your licence> #------------------------------------------------------------------------------- from setuphelpers import * import active_directory ad_admin = r'domaine\administrateur' ad_passwd = 'xxxx' for pc in active_directory.search (objectCategory='Computer', objectClass='Computer'): host = pc.dNShostname description = pc.description if host and description: print "Change %s description to %s" % (host,description) try: print('echo "" | wmic /USER:%s /PASSWORD:%s /NODE:"%s" os set description="%s"' % (ad_admin,ad_passwd,host,description)) except Exception as e: print('Unable to change description for %s'%host)
def get_users(): return [str(user.cn) for user in active_directory.search ("objectCategory='Person'", "objectClass='User'")]
import active_directory import pyodbc import re updateStrings = [] con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server}',server = '', database = '') #con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server}',server = '', database = '') cur = con.cursor() queryString = "select * from azteca.employee where (LOGINNAME = '' or EMAIL = '') and ISACTIVE = 'Y'" # and LASTNAME not like '%''%'" for row in cur.execute(queryString): print "---------------------------------------------------------------" print(row.FIRSTNAME, row.LASTNAME, row.LOGINNAME, row.EMAIL, row.EMPLOYEESID) numPeople = active_directory.search("displayName='"+row.LASTNAME.replace("'", "''")+", "+row.FIRSTNAME+"'") peopleCount = len(list(numPeople)) print "People With this name:", peopleCount for person in active_directory.search("displayName='"+row.LASTNAME.replace("'", "''")+", "+row.FIRSTNAME+"'"): print "AD Information:" print "--Name:", person.displayName print "--Email:", person.mail print "--Login", person.sAMAccountname #print "ldap info:", person print peopleCount if (peopleCount > 0): updateQueryString = "update azteca.employee set" if (person.mail != None): updateQueryString += " EMAIL = '"+person.mail+"'" if (person.mail != None and person.sAMAccountname != None): updateQueryString += "," if (person.sAMAccountname != None):
def get_users(): return [ str(user.cn) for user in active_directory.search( "objectCategory='Person'", "objectClass='User'") ]
def add_new_user(): for group in active_directory.search(objectClass='group'): user_add = input("What username do you want to add to the AD: ")
''' import active_directory import socket import sys try: domain = sys.argv[1] except: print "Usage: populateAdHosts.py domainName" sys.exit() def generateSql(host, ip): print "REPLACE INTO host_netbios VALUES ('%s', '%s', '%s');" % (ip, host, domain) def resolv(host): try: addr = socket.gethostbyname(host) except socket.gaierror: return host return addr for c in active_directory.search (objectCategory='Computer'): if c.displayName != None: host= c.displayName.replace("$", "") ip = resolv(host) generateSql(host,ip)
def list_all_users(): for user in active_directory.search("objectCategory='Person'", "objectClass='User'"): print(user)