コード例 #1
0
ファイル: web-addressbook.py プロジェクト: pgalonza/Notes
def get_information(origin):
    conn = lm_auth.active_derectory_connector()
    logging.debug(f'{conn}')
    conn.search(origin,
                '(&(objectCategory=person)(displayName=*)(givenName=*)(sn=*)(|(ipPhone= *)(mobile=*)(mail=*)('
                'title=*)(department=*)(physicalDeliveryOfficeName=*)(company=*))(!('
                'userAccountControl:1.2.840.113556.1.4.803:=2)))',
                SUBTREE,
                attributes=['company', 'department', 'ipPhone', 'telephoneNumber', 'mobile', 'mail', 'title',
                        'physicalDeliveryOfficeName',
                        'displayName'])

    user_list = {}

    for entry in conn.entries:
        logging.debug(f'dictionary:\n{entry.company}\n{entry.department}\n{entry.ipPhone}\n{entry.telephoneNumber}\n'
                      f'{entry.mobile}\n{entry.mail}\n{entry.title}\n{entry.physicalDeliveryOfficeName}'
                      f'\n{entry.displayName}')
        user_list[str(entry.displayName)] = [str(entry.ipPhone).replace('-', ''), entry.mobile, entry.telephoneNumber, entry.mail, entry.title, entry.department,
                                             entry.physicalDeliveryOfficeName, entry.company]

    logging.debug('Active Directory close connection')
    conn.unbind()

    return user_list
コード例 #2
0
ファイル: change-number.py プロジェクト: pgalonza/Notes
def replace_number_ad(origin):
    logging.debug(f'OU {origin}')
    logging.debug('Active directory connection')
    conn = lm_auth.active_derectory_connector()
    logging.debug(f'{conn}')
    logging.debug('Search user in active directory by IP-phone number')
    for name_object, user_object in _user_objects.items():
        conn.search(
            origin,
            f'(&(objectCategory=person)(displayName={user_object.name})(!('
            f'userAccountControl:1.2.840.113556.1.4.803:=2)))',
            SUBTREE,
            attributes=['ipPhone', 'displayName', 'telephoneNumber'])
        if not conn.entries:
            continue
        logging.debug(f'Search result ipPhone: {conn.entries[0].displayName}')
        dn = (json.loads(conn.entries[0].entry_to_json())['dn'])
        logging.debug(
            f'Change number {user_object.old_number} to {user_object.new_number} for {user_object.name}'
        )
        print(
            conn.modify(
                dn, {'ipPhone': [(MODIFY_REPLACE, [user_object.new_number])]}))
        print(
            conn.modify(dn, {
                'telephoneNumber': [(MODIFY_REPLACE, [user_object.new_number])]
            }))
    conn.unbind()
コード例 #3
0
def get_information(origin, group_name):
    connection = lm_auth.active_derectory_connector()
    logging.debug(f'{connection}')
    connection.search(
        origin,
        '(&(objectCategory=person)(displayName=*)(givenName=*)(ipPhone=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
        SUBTREE,
        attributes=['ipPhone', 'displayName'])

    user_list = {}

    for entry in connection.entries:
        user_list[str(entry.displayName)] = [
            str(entry.ipPhone).replace('-', ''), group_name
        ]

    if not group_name == 'Все' and not group_name == 'ЦУ':
        connection.search(
            'ou=co,dc=corp,dc=zhky,dc=ru',
            '(&(objectCategory=person)(displayName=*)(givenName=*)(ipPhone=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
            SUBTREE,
            attributes=['ipPhone', 'displayName'])

        for entry in connection.entries:
            logging.debug(
                f'dictionary:\n{entry.ipPhone}\n{entry.displayName}\n')
            user_list[str(entry.displayName)] = [
                str(entry.ipPhone).replace('-', ''), 'ЦУ'
            ]

    logging.debug('Active Directory close connection')
    connection.unbind()

    return user_list
コード例 #4
0
def get_information(origin):
    conn = lm_auth.active_derectory_connector()
    conn.search(origin,
                '(&(objectCategory=person)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
                SUBTREE,
                attributes=['mail', 'displayName'])
    conn_entries = conn.entries
    conn.unbind()

    return conn_entries
コード例 #5
0
ファイル: change-number.py プロジェクト: pgalonza/Notes
def get_information_ad(origin):
    logging.debug('active directory connection')
    conn = lm_auth.active_derectory_connector()
    logging.debug(f'{conn}')
    conn.search(
        origin,
        '(&(objectCategory=person)(ipPhone=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
        SUBTREE,
        attributes=['ipPhone', 'displayName'])
    logging.debug('active directory search')
    conn_entries = conn.entries
    logging.debug(f'{conn_entries}')
    logging.debug('active directory close connection')
    conn.unbind()

    users = {}
    for entry in conn_entries:
        logging.debug(f'dictionary {entry.displayName} {entry.ipPhone}')
        users[entry.displayName] = Extension(entry.displayName, entry.ipPhone)
    return users
コード例 #6
0
ファイル: quota-ldap.py プロジェクト: pgalonza/Notes
def get_information(origin, group_name):
    connection = lm_auth.active_derectory_connector()

    connection.search(
        origin,
        '(&(mail=*)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
        SUBTREE,
        attributes=['sAMAccountName', 'division', 'mail'])

    print('')
    print(group_name)
    print('++++++++++++++++')
    for entry in connection.entries:
        # print(entry)
        #dn = (json.loads(entry.entry_to_json())['dn'])
        login = entry.sAMAccountName
        division = entry.division
        mail = entry.mail
        if division != "2G" and division != "2g":
            print(login, mail, division)
    connection.unbind()
コード例 #7
0
def get_information(file_name, mac):
    service_number = {'77911': 'Техподдержка', '77900': 'Охрана'}

    connection = lm_auth.active_derectory_connector()
    logging.debug(f'{connection}')

    logging.info(f'Read the config file {file_name}')
    config = configparser.ConfigParser()
    config.read(file_name)

    line = '#!version:1.0.0.1\n'

    for i in range(0, 30):
        number = config.get(mac, f'linekey.{i + 1}.value', fallback=False)

        logging.debug(f'Get the number from config {number}')

        if not number:
            continue

        connection.search(
            lm_auth.ad_ou_tree.get('all')[0],
            f'(&(objectCategory=person)(ipPhone={number})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
            SUBTREE,
            attributes=['displayName'])
        if not connection.entries:
            line += f'linekey.{i + 1}.label = {"вакант"}\n'

        elif service_number.get(number, False):
            line += f'linekey.{i + 1}.label = {service_number.get(number)}\n'
        else:
            name = str(connection.entries[0].displayName).split()
            logging.debug(f'Get the name from number {name}')
            name = f'{name[0]} {name[1][0]}.{name[2][0]}.'
            line += f'linekey.{i + 1}.label = {name}\n'

        line += f'linekey.{i + 1}.type = 16\n'
        line += f'linekey.{i + 1}.line = 1\n'
        line += f'linekey.{i + 1}.value = {number}\n'

    for i in range(0, 40):
        number = config.get(mac,
                            f"expansion_module.{i + 1}.value",
                            fallback=False)

        logging.debug(f'Get the number from config {number}')

        if not number:
            continue

        connection.search(
            lm_auth.ad_ou_tree.get('all')[0],
            f'(&(objectCategory=person)(ipPhone={number})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
            SUBTREE,
            attributes=['displayName'])

        if not connection.entries:
            line += f'expansion_module.1.key.{i + 1}.label = {"вакант"}\n'
        elif service_number.get(number, False):
            line += f'expansion_module.1.key.{i + 1}.label = {service_number.get(number)}\n'
        else:
            name = str(connection.entries[0].displayName).split()
            logging.debug(f'Get the name from number {name}')
            name = f'{name[0]} {name[1][0]}.{name[2][0]}.'
            line += 'expansion_module.1.key.{}.label = {}\n'.format(
                i + 1, name)

        line += f'expansion_module.1.key.{i + 1}.type = 16\n'
        line += f'expansion_module.1.key.{i + 1}.line = 1\n'
        line += f'expansion_module.1.key.{i + 1}.value = {number}\n'

    return line
コード例 #8
0
def main():
    logging.debug('active directory connection')
    socket = lm_auth.active_derectory_connector()
    logging.debug(f'{socket}')
    ou = lm_auth.ad_ou_tree.get('all')[0]
    logging.debug(f'ou {ou}')
    users = {}

    try:
        logging.debug(f'Open file: {args.csv1}')
        with open(args.csv1, 'r') as csv_file:
            logging.debug(f'Read file: {args.csv1}')
            user_reader = csv.DictReader(csv_file)
            i = 0
            for row in user_reader:
                name = name_normalization(row['name'])
                if name is None:
                    logging.info(f'Bad line {row["name"]}')
                    continue
                else:
                    name = name.group(0).rstrip()
                    logging.debug(f'Group and Rstrip {name}')

                logging.info(f"Search {name}")
                result = get_information_ad(socket, ou, name)
                if not args.dismissed:
                    if len(result) > 1:
                        i = i + 1
                        logging.info(f'Multiple entries: {len(result)}')
                        print("Search returned multiple entries:", i, name)
                    elif not result:
                        i = i + 1
                        logging.info('No entries')
                        print("Search returned no entries:", i, name)
                else:
                    if result:
                        i = i + 1
                        logging.debug(
                            f'Search {name} in dictionary {name not in users}')
                        if name not in users:
                            logging.debug(f'{name} not in the list')
                            branch = re.search(
                                r'domain\.domain\.local\/(\w{2,4})\b',
                                str(result[0].canonicalName))
                            users[name] = [
                                branch.group(1), result[0].lastLogon,
                                result[0].lastLogonTimestamp
                            ]
                        else:
                            logging.debug(f'{name} is in the list')
                            continue
                        # print("Search returned entries:", i, name)
                        logging.info('Have entries')
    except FileNotFoundError:
        logging.error('File not found')
        sys.exit(0)

    try:
        with open(args.csv2, 'r') as csv_file:
            logging.debug(f'Read file: {args.csv2}')
            user_reader = csv.DictReader(csv_file)
            for row in user_reader:
                name = name_normalization(row['name'])
                if name is None:
                    logging.info(f'Bad line {row["name"]}')
                    continue
                else:
                    name = name.group(0).rstrip()
                    logging.debug(f'Group and Rstrip {name}')
                logging.debug(
                    f'Search {name} in dictionary {name not in users.keys()}')

                if name in users.keys():
                    logging.info(f'{name} user is working')
                    logging.debug(f'Delete {name}')
                    users.pop(name)
    except FileNotFoundError:
        logging.error('File not found')
        sys.exit(0)

    if users:
        try:
            with open('disabled-users.csv', 'w', newline='') as csvfile:
                fieldnames = [
                    'name', 'branch', 'lastLogon', 'lastLogonTimestamp'
                ]
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
                writer.writeheader()
                i = 0
                for user, data in users.items():
                    i = i + 1
                    writer.writerow({
                        'name': user,
                        'branch': data[0],
                        'lastLogon': data[1],
                        'lastLogonTimestamp': data[2]
                    })
                    print('Dismissed user', i, user, data[0])
        except FileNotFoundError:
            logging.error('No such file')
            sys.exit(0)

        print("Block this users?")
    logging.info('Whait the choice')
    choice = input('Are you sure? (y/n): ').lower().strip()[:1]
    logging.debug(f'The choice is {choice}')
    if choice == "n":
        logging.info('Exit')
        sys.exit(1)
    elif choice == 'y':
        for user in users.keys():
            result = user_disabling(socket, ou, user)
            logging.info(f'Block user user {user} {result}')
        print('Successfully!')

    socket.unbind()