示例#1
0
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
示例#2
0
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)
        ]
示例#3
0
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
示例#4
0
 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")
示例#5
0
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
示例#6
0
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
示例#7
0
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')
示例#8
0
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
示例#9
0
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
示例#10
0
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
示例#11
0
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
示例#12
0
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)]
示例#13
0
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))
示例#14
0
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 })
示例#15
0
#-------------------------------------------------------------------------------
# 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 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")
示例#17
0
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)
示例#19
0
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
示例#20
0
#-------------------------------------------------------------------------------
# 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)

示例#21
0
def get_users():
    return [str(user.cn) for user in active_directory.search ("objectCategory='Person'", "objectClass='User'")]
示例#22
0
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):
示例#23
0
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: ")
示例#25
0
'''

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)