register unregister changes to remote installation and ad home directory changes

This commit is contained in:
Edip Yıldız 2020-06-24 12:23:34 +03:00
parent 2875258147
commit 5186c4f936
8 changed files with 92 additions and 54 deletions

View file

@ -147,7 +147,7 @@ class AhenkDaemon(BaseDaemon):
def check_registration(self): def check_registration(self):
""" docstring""" """ docstring"""
# max_attempt_number = int(System.Hardware.Network.interface_size()) * 3 # max_attempt_number = int(System.Hardware.Network.interface_size()) * 3
max_attempt_number = 1 max_attempt_number = 4
# self.logger.debug() # self.logger.debug()
# logger = Scope.getInstance().getLogger() # logger = Scope.getInstance().getLogger()
registration = Scope.get_instance().get_registration() registration = Scope.get_instance().get_registration()
@ -158,12 +158,15 @@ class AhenkDaemon(BaseDaemon):
# if registration.registration_request() == False: # if registration.registration_request() == False:
# self.registration_failed() # self.registration_failed()
if registration.is_registered() is False: while registration.is_registered() is False:
print("Registration attemp") print("Registration attemp")
max_attempt_number -= 1 max_attempt_number -= 1
self.logger.debug('Ahenk is not registered. Attempting for registration') self.logger.debug('Ahenk is not registered. Attempting for registration')
registration.registration_request(self.register_hostname,self.register_user_name,self.register_user_password) registration.registration_request(self.register_hostname,self.register_user_name,self.register_user_password,self.register_directory_server)
if max_attempt_number < 0:
self.logger.warning('Number of Attempting for registration is over')
Util.execute("/etc/init.d/ahenk stop")
break
#if max_attempt_number < 0: #if max_attempt_number < 0:
# self.logger.warning('Number of Attempting for registration is over') # self.logger.warning('Number of Attempting for registration is over')
# self.registration_failed() # self.registration_failed()
@ -240,10 +243,11 @@ class AhenkDaemon(BaseDaemon):
Util.create_file(System.Ahenk.fifo_file()) Util.create_file(System.Ahenk.fifo_file())
Util.set_permission(System.Ahenk.fifo_file(), '600') Util.set_permission(System.Ahenk.fifo_file(), '600')
def set_register_user(self, hostName, username, password): def set_register_user(self, hostName, username, password,directoryServer):
self.register_hostname=hostName self.register_hostname=hostName
self.register_user_name=username self.register_user_name=username
self.register_user_password=password self.register_user_password=password
self.register_directory_server = directoryServer
# if user_disabled is when ahenk service restarted TRUE disabled local users # if user_disabled is when ahenk service restarted TRUE disabled local users
def disable_local_users(self): def disable_local_users(self):
@ -349,7 +353,7 @@ if __name__ == '__main__':
ahenk_daemon = AhenkDaemon(System.Ahenk.pid_path()) ahenk_daemon = AhenkDaemon(System.Ahenk.pid_path())
try: try:
if len(sys.argv) == 2 and (sys.argv[1] in ('start', 'stop', 'restart', 'status')): if len(sys.argv) == 2 and (sys.argv[1] in ('start', 'stop', 'restart', 'status')):
ahenk_daemon.set_register_user(None, None, None) ahenk_daemon.set_register_user(None, None, None, None)
if sys.argv[1] == 'start': if sys.argv[1] == 'start':
if System.Ahenk.is_running() is True: if System.Ahenk.is_running() is True:
print('There is already running Ahenk service. It will be killed.[{0}]'.format( print('There is already running Ahenk service. It will be killed.[{0}]'.format(
@ -375,12 +379,13 @@ if __name__ == '__main__':
else: else:
print('Unknown command. Usage : %s start|stop|restart|status|clean' % sys.argv[0]) print('Unknown command. Usage : %s start|stop|restart|status|clean' % sys.argv[0])
sys.exit(2) sys.exit(2)
elif len(sys.argv) > 2 and (sys.argv[1] in ('register')): elif len(sys.argv) > 2 and (sys.argv[1] in ('start')):
params = sys.argv[1] params = sys.argv[1]
hostName = sys.argv[2] hostName = sys.argv[2]
userName = sys.argv[3] userName = sys.argv[3]
password = sys.argv[4] password = sys.argv[4]
ahenk_daemon.set_register_user(hostName,userName,password) directoryServer = sys.argv[5]
ahenk_daemon.set_register_user(hostName,userName,password,directoryServer)
ahenk_daemon.run() ahenk_daemon.run()
else: else:

View file

@ -73,9 +73,13 @@ class Commander(object):
data['event'] = 'remove' data['event'] = 'remove'
data['plugins'] = params[3] data['plugins'] = params[3]
elif len(params) > 1 and params[1] == 'unregister': elif len(params) == 2 and params[1] == 'unregister':
data['event'] = params[1] data['event'] = params[1]
elif len(params) == 4 and params[1] == 'unregister':
data['event'] = params[1]
data['userName'] = params[2]
data['password'] = params[3]
elif len(params) > 5 and params[1] == 'send': elif len(params) > 5 and params[1] == 'send':
data['event'] = params[1] data['event'] = params[1]

View file

@ -181,12 +181,24 @@ class CommandRunner(object):
message = json.dumps(json_data['message']) message = json.dumps(json_data['message'])
self.messenger.send_direct_message(message) self.messenger.send_direct_message(message)
elif str(json_data['event']) == 'unregister': elif str(json_data['event']) == 'unregister' and len(json_data)==1:
self.logger.info('Unregistering..') self.logger.info('Unregistering..')
self.execute_manager.set_unregister_credential_params(None, None)
unregister_message = self.message_manager.unregister_msg() unregister_message = self.message_manager.unregister_msg()
if unregister_message is not None: if unregister_message is not None:
self.messenger.send_direct_message(unregister_message) self.messenger.send_direct_message(unregister_message)
elif str(json_data['event']) == 'unregister' and len(json_data)==3:
self.logger.info('Unregistering..')
usernameForCheck = json_data['userName']
passwordForCheck = json_data['password']
## send user credential info to execution manager for hide user notify when remote unregister
self.execute_manager.set_unregister_credential_params(usernameForCheck,usernameForCheck)
self.logger.info('Unregistering by username+'+str(usernameForCheck))
unregister_message = self.message_manager.unregister_msg(usernameForCheck,passwordForCheck)
if unregister_message is not None:
self.messenger.send_direct_message(unregister_message)
elif str(json_data['event']) == 'load': elif str(json_data['event']) == 'load':
plugin_name = str(json_data['plugins']) plugin_name = str(json_data['plugins'])

View file

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com> # Author: Volkan Şahin <volkansah.in> <bm.volkansahin@gmail.com>
import os
import json import json
import time import time
import datetime import datetime
@ -18,6 +18,7 @@ from base.scheduler.custom.schedule_job import ScheduleTaskJob
from base.scope import Scope from base.scope import Scope
from base.system.system import System from base.system.system import System
from base.util.util import Util from base.util.util import Util
from easygui import * from easygui import *
@ -404,17 +405,27 @@ class ExecutionManager(object):
def unregister(self, msg): def unregister(self, msg):
j = json.loads(msg) j = json.loads(msg)
status = str(j['status']).lower() status = str(j['status']).lower()
# user_name = self.db_service.select_one_result('session', 'username', " 1=1 order by id desc ")
user_name = self.db_service.select_one_result('session', 'username', " 1=1 order by id desc ") # display = self.db_service.select_one_result('session', 'display', " 1=1 order by id desc ")
display = self.db_service.select_one_result('session', 'display', " 1=1 order by id desc ")
if 'not_authorized' == str(status): if 'not_authorized' == str(status):
self.logger.info('Registration is failed. User not authorized') self.logger.info('UnRegistration is failed. User not authorized')
Util.show_message(user_name,display,'Ahenk Lider MYS sisteminden çıkarmak için yetkili kullanıcı haklarına sahip olmanız gerekmektedir.', if self.unregister_user_name is None:
'Kullanıcı Yetkilendirme Hatası') user_name = os.getlogin()
display = Util.get_username_display()
Util.show_message(user_name, display,
'Ahenk Lider MYS sisteminden çıkarmak için yetkili kullanıcı haklarına sahip olmanız gerekmektedir.',
'Kullanıcı Yetkilendirme Hatası')
else: else:
Util.show_message(user_name, display, "Ahenk Lider MYS sisteminden çıkarılmıştır.", "") if self.unregister_user_name is None:
if Util.show_message(user_name, display, "Değişikliklerin etkili olması için sistem yeniden başlatılacaktır. Lütfen bekleyiniz...", "") : user_name = os.getlogin()
display = Util.get_username_display()
Util.show_message(user_name, display, "Ahenk Lider MYS sisteminden çıkarılmıştır.", "")
if Util.show_message(user_name, display,
"Değişikliklerin etkili olması için sistem yeniden başlatılacaktır. Lütfen bekleyiniz...",
""):
registration = Scope.get_instance().get_registration()
registration.purge_and_unregister()
else:
registration = Scope.get_instance().get_registration() registration = Scope.get_instance().get_registration()
registration.purge_and_unregister() registration.purge_and_unregister()
@ -557,3 +568,7 @@ class ExecutionManager(object):
Util.delete_file(ahenk_policy_file) Util.delete_file(ahenk_policy_file)
Util.create_file(ahenk_policy_file) Util.create_file(ahenk_policy_file)
Util.write_file(ahenk_policy_file, content) Util.write_file(ahenk_policy_file, content)
def set_unregister_credential_params(self, user_name=None, passwd=None):
self.unregister_user_name=user_name
self.unregister_passwd=passwd

View file

@ -105,18 +105,19 @@ class AnonymousMessenger(ClientXMPP):
if 'not_authorized' == str(status): if 'not_authorized' == str(status):
self.logger.info('Registration is failed. User not authorized') self.logger.info('Registration is failed. User not authorized')
Util.show_message(os.getlogin(), ':0','Ahenk Lider MYS sistemine alınamadı !! Sadece yetkili kullanıcılar kayıt yapabilir.', 'Kullanıcı Yetkilendirme Hatası') if self.registration.showUserNotify == True:
Util.show_message(os.getlogin(), ':0','Ahenk Lider MYS sistemine alınamadı !! Sadece yetkili kullanıcılar kayıt yapabilir.', 'Kullanıcı Yetkilendirme Hatası')
self.logger.debug('Disconnecting...') self.logger.debug('Disconnecting...')
self.disconnect() self.disconnect()
elif 'already_exists' == str(status) or 'registered' == str(status) or 'registered_without_ldap' == str(status): elif 'already_exists' == str(status) or 'registered' == str(status) or 'registered_without_ldap' == str(status):
try: try:
self.logger.info('Registred from server. Registration process starting.') self.logger.info('Registred from server. Registration process starting.')
self.event_manager.fireEvent('REGISTRATION_SUCCESS', j) self.event_manager.fireEvent('REGISTRATION_SUCCESS', j)
msg = str(self.host) + " Etki Alanına hoş geldiniz." if self.registration.showUserNotify == True:
Util.show_message(os.getlogin(), ':0' ,msg, "UYARI") msg = str(self.host) + " Etki Alanına hoş geldiniz."
msg = "Değişikliklerin etkili olması için sistem yeniden başlayacaktır. Sistem yeniden başlatılıyor...." Util.show_message(os.getlogin(), ':0' ,msg, "UYARI")
Util.show_message(os.getlogin(), ':0',msg, "UYARI") msg = "Değişikliklerin etkili olması için sistem yeniden başlayacaktır. Sistem yeniden başlatılıyor...."
Util.show_message(os.getlogin(), ':0',msg, "UYARI")
time.sleep(3) time.sleep(3)
self.logger.info('Disconnecting...') self.logger.info('Disconnecting...')
self.disconnect() self.disconnect()
@ -124,18 +125,17 @@ class AnonymousMessenger(ClientXMPP):
#System.Process.kill_by_pid(int(System.Ahenk.get_pid_number())) #System.Process.kill_by_pid(int(System.Ahenk.get_pid_number()))
#sys.exit(2) #sys.exit(2)
Util.shutdown(); Util.shutdown();
except Exception as e: except Exception as e:
self.logger.error('Error Message: {0}.'.format(str(e))) self.logger.error('Error Message: {0}.'.format(str(e)))
Util.show_message(os.getlogin(), ':0',str(e)) if self.registration.showUserNotify == True:
Util.show_message(os.getlogin(), ':0',str(e))
self.logger.debug('Disconnecting...') self.logger.debug('Disconnecting...')
self.disconnect() self.disconnect()
elif 'registration_error' == str(status): elif 'registration_error' == str(status):
self.logger.info('Registration is failed. New registration request will send') self.logger.info('Registration is failed. New registration request will send')
#self.event_manager.fireEvent('REGISTRATION_ERROR', str(j)) #self.event_manager.fireEvent('REGISTRATION_ERROR', str(j))
Util.show_message(os.getlogin(), ':0','Ahenk Lider MYS sistemine alınamadı !! Kayıt esnasında hata oluştu. Lütfen sistem yöneticinize başvurunuz.', if self.registration.showUserNotify == True:
Util.show_message(os.getlogin(), ':0','Ahenk Lider MYS sistemine alınamadı !! Kayıt esnasında hata oluştu. Lütfen sistem yöneticinize başvurunuz.',
'Sistem Hatası') 'Sistem Hatası')
self.logger.debug('Disconnecting...') self.logger.debug('Disconnecting...')
self.disconnect() self.disconnect()

View file

@ -164,30 +164,29 @@ class Messaging(object):
self.logger.debug('LDAP Registration message was created') self.logger.debug('LDAP Registration message was created')
return json_data return json_data
def unregister_msg(self): def unregister_msg(self,usernameForCheck,passwordForCheck):
user_name = self.db_service.select_one_result('session', 'username')
display = self.db_service.select_one_result('session', 'display')
self.logger.debug('User : ' + str(user_name))
pout = Util.show_unregistration_message(user_name,display,
'Makineyi etki alanından çıkarmak için zorunlu alanları giriniz. Lütfen DEVAM EDEN İŞLEMLERİNİZİ sonlandırdığınıza emin olunuz !',
'ETKI ALANINDAN ÇIKARMA')
self.logger.debug('pout : ' + str(pout))
field_values = pout.split(' ')
user_registration_info = list(field_values)
data = dict() data = dict()
data['type'] = 'UNREGISTER' data['type'] = 'UNREGISTER'
data['from'] = str(self.conf_manager.get('CONNECTION', 'uid')) data['from'] = str(self.conf_manager.get('CONNECTION', 'uid'))
data['password'] = str(self.conf_manager.get('CONNECTION', 'password')) data['password'] = str(self.conf_manager.get('CONNECTION', 'password'))
# unregistration from commandline..
data['userName'] = user_registration_info[0]; if(usernameForCheck==None and passwordForCheck==None):
data['userPassword'] = user_registration_info[1]; #user_name = self.db_service.select_one_result('session', 'username')
#display = self.db_service.select_one_result('session', 'display')
user_name = os.getlogin()
display = Util.get_username_display()
self.logger.debug('User : ' + str(user_name))
pout = Util.show_unregistration_message(user_name,display,
'Makineyi etki alanından çıkarmak için zorunlu alanları giriniz. Lütfen DEVAM EDEN İŞLEMLERİNİZİ sonlandırdığınıza emin olunuz !',
'ETKI ALANINDAN ÇIKARMA')
self.logger.debug('pout : ' + str(pout))
field_values = pout.split(' ')
user_registration_info = list(field_values)
data['userName'] = user_registration_info[0];
data['userPassword'] = user_registration_info[1];
else:
data['userName'] = usernameForCheck;
data['userPassword'] = passwordForCheck;
#data['macAddresses'] = str(self.conf_manager.get('REGISTRATION', 'macAddresses')) #data['macAddresses'] = str(self.conf_manager.get('REGISTRATION', 'macAddresses'))
#data['ipAddresses'] = str(self.conf_manager.get('REGISTRATION', 'ipAddresses')) #data['ipAddresses'] = str(self.conf_manager.get('REGISTRATION', 'ipAddresses'))

View file

@ -21,5 +21,5 @@ krb5_store_password_if_offline = True
default_shell = /bin/bash default_shell = /bin/bash
ldap_id_mapping = True ldap_id_mapping = True
use_fully_qualified_names = False use_fully_qualified_names = False
fallback_homedir = /home/%u@%d fallback_homedir = /home/%u
access_provider = ad access_provider = ad

View file

@ -50,7 +50,7 @@ class Registration:
else: else:
self.register(True) self.register(True)
def registration_request(self, hostname,username,password): def registration_request(self, hostname,username,password,directoryserver):
self.logger.debug('Requesting registration') self.logger.debug('Requesting registration')
# SetupTimer.start(Timer(System.Ahenk.registration_timeout(), timeout_function=self.registration_timeout,checker_func=self.is_registered, kwargs=None)) # SetupTimer.start(Timer(System.Ahenk.registration_timeout(), timeout_function=self.registration_timeout,checker_func=self.is_registered, kwargs=None))
@ -60,9 +60,11 @@ class Registration:
self.host = hostname self.host = hostname
self.user_name = username self.user_name = username
self.user_password= password self.user_password= password
self.directory_server = directoryserver
self.showUserNotify = False;
if(username is None and password is None and self.host is None ): if(username is None and password is None and self.host is None ):
self.showUserNotify = True;
self.host = self.conf_manager.get("CONNECTION", "host") self.host = self.conf_manager.get("CONNECTION", "host")
user_name= os.getlogin() user_name= os.getlogin()
@ -490,6 +492,7 @@ class Registration:
config.set('CONNECTION', 'uid', '') config.set('CONNECTION', 'uid', '')
config.set('CONNECTION', 'password', '') config.set('CONNECTION', 'password', '')
config.set('CONNECTION', 'host', '')
config.set('MACHINE', 'user_disabled', 'false') config.set('MACHINE', 'user_disabled', 'false')
with open(System.Ahenk.config_path(), 'w') as file: with open(System.Ahenk.config_path(), 'w') as file: