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
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()
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
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
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
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()
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
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()