changed command for service enable and disable and other bugfix

This commit is contained in:
Tuncay ÇOLAK 2021-10-01 00:57:30 +03:00
parent 10369afda0
commit e7fdfdca74
9 changed files with 146 additions and 42 deletions

View file

@ -95,13 +95,22 @@ class AnonymousMessenger(ClientXMPP):
def recv_direct_message(self, msg): def recv_direct_message(self, msg):
if msg['type'] in ['normal']: if msg['type'] in ['normal']:
self.logger.info('---------->Received message: {0}'.format(str(msg['body'])))
self.logger.info('Reading registration reply') self.logger.info('Reading registration reply')
j = json.loads(str(msg['body'])) j = json.loads(str(msg['body']))
message_type = j['type'] message_type = j['type']
status = str(j['status']).lower() status = str(j['status']).lower()
dn = str(j['agentDn']) dn = str(j['agentDn'])
self.logger.debug('Registration status: ' + str(status)) self.logger.debug('Registration status: ' + str(status))
is_password = False
for key, value in j.items():
if "password" in key.lower():
j[key] = "********"
is_password = True
if is_password:
self.logger.info('---------->Received message: {0}'.format(str(j)))
else:
self.logger.info('---------->Received message: {0}'.format(str(msg['body'])))
if 'not_authorized' == str(status): if 'not_authorized' == str(status):
self.logger.debug('[REGISTRATION IS FAILED]. User not authorized') self.logger.debug('[REGISTRATION IS FAILED]. User not authorized')
@ -154,5 +163,15 @@ class AnonymousMessenger(ClientXMPP):
self.logger.debug('Fired event is: {0}'.format(message_type)) self.logger.debug('Fired event is: {0}'.format(message_type))
def send_direct_message(self, msg): def send_direct_message(self, msg):
self.logger.debug('<<--------Sending message: {0}'.format(msg)) body = json.loads(str(msg))
if body['type'] == "REGISTER" or body['type'] == "UNREGISTER":
is_password = False
for key, value in body.items():
if "password" in key.lower():
body[key] = "********"
is_password = True
if is_password:
self.logger.info('<<--------Sending message: {0}'.format(body))
else:
self.logger.info('<<--------Sending message: {0}'.format(msg))
self.send_message(mto=self.receiver, mbody=msg, mtype='normal') self.send_message(mto=self.receiver, mbody=msg, mtype='normal')

View file

@ -154,7 +154,17 @@ class Messaging(object):
data['timestamp'] = self.db_service.select_one_result('registration', 'timestamp', ' 1=1') data['timestamp'] = self.db_service.select_one_result('registration', 'timestamp', ' 1=1')
json_data = json.dumps(data) json_data = json.dumps(data)
self.logger.debug('Registration message was created') self.logger.debug('Registration message was created')
self.logger.info('Registration message was created. Data content: '+ json_data)
body = json.loads(str(json_data))
is_password = False
for key, value in body.items():
if "password" in key.lower():
body[key] = "********"
is_password = True
if is_password:
self.logger.info('Registration message was created. Data content: {0}'.format(body))
#self.logger.info('Registration message was created. Data content: ' + json_data)
return json_data return json_data
def ldap_registration_msg(self): def ldap_registration_msg(self):

View file

@ -92,7 +92,17 @@ class Messenger(ClientXMPP):
def send_direct_message(self, msg): def send_direct_message(self, msg):
try: try:
self.logger.info('<<--------Sending message: {0}'.format(msg)) body = json.loads(str(msg))
if body['type'] == "REGISTER" or body['type'] == "UNREGISTER":
is_password = False
for key, value in body.items():
if "password" in key.lower():
body[key] = "********"
is_password = True
if is_password:
self.logger.info('<<--------Sending message: {0}'.format(body))
else:
self.logger.info('<<--------Sending message: {0}'.format(msg))
self.send_message(mto=self.receiver, mbody=msg, mtype='normal') self.send_message(mto=self.receiver, mbody=msg, mtype='normal')
except Exception as e: except Exception as e:
self.logger.error( self.logger.error(
@ -109,12 +119,31 @@ class Messenger(ClientXMPP):
self.logger.info('---------->Received message: {0}'.format(str(msg['body']))) self.logger.info('---------->Received message: {0}'.format(str(msg['body'])))
if j['type'] == "EXECUTE_TASK": if j['type'] == "EXECUTE_TASK":
i = json.loads(str(j['task'])) message = json.loads(str(msg['body']))
plugin_name = i['plugin']['name'] task = json.loads(str(message['task']))
if plugin_name == "manage-root": #plugin_name = task['plugin']['name']
parameter_map = i['parameterMap'] parameter_map = task['parameterMap']
parameter_map.pop("RootPassword") use_file_transfer = message['fileServerConf']
self.logger.info("---------->Received message: {}".format(str(parameter_map))) is_password = False
for key, value in parameter_map.items():
if "password" in key.lower():
parameter_map[key] = "********"
task['parameterMap'] = parameter_map
message['task'] = task
is_password = True
if use_file_transfer != None:
#message['fileServerConf'] = "*******"
file_server_conf = message['fileServerConf']
file_server_param = file_server_conf['parameterMap']
for key, value in file_server_param.items():
if "password" in key.lower():
file_server_param[key] = "********"
file_server_conf['parameterMap'] = file_server_param
#message['fileServerConf']['parameterMap'] = file_server_param
message['fileServerConf'] = file_server_conf
is_password = True
if is_password:
self.logger.info('---------->Received message: {0}'.format(str(message)))
else: else:
self.logger.info('---------->Received message: {0}'.format(str(msg['body']))) self.logger.info('---------->Received message: {0}'.format(str(msg['body'])))
self.event_manger.fireEvent(message_type, str(msg['body'])) self.event_manger.fireEvent(message_type, str(msg['body']))

View file

@ -1,6 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Author: Agah Hulusi ÖZ <enghulusi@gmail.com> # Author: Agah Hulusi ÖZ <enghulusi@gmail.com>
import subprocess
from base.scope import Scope from base.scope import Scope
from base.util.util import Util from base.util.util import Util
@ -183,7 +184,7 @@ class ExecuteSSSDAdAuthentication:
if (self.join_try_counter == 5): if (self.join_try_counter == 5):
break break
else: else:
(result_code, p_out, p_err) = self.util.execute( (result_code, p_out, p_err) = self.execute_command(
"echo \"{0}\" | realm join --user={1} {2}".format(password, ad_username, "echo \"{0}\" | realm join --user={1} {2}".format(password, ad_username,
domain_name.upper())) domain_name.upper()))
if (result_code == 0): if (result_code == 0):
@ -356,3 +357,18 @@ class ExecuteSSSDAdAuthentication:
self.logger.info("AD Login işlemi esnasında hata oluştu.") self.logger.info("AD Login işlemi esnasında hata oluştu.")
return False return False
def execute_command(self, command, stdin=None, env=None, cwd=None, shell=True, result=True):
try:
process = subprocess.Popen(command, stdin=stdin, env=env, cwd=cwd, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=shell)
if result is True:
result_code = process.wait()
p_out = process.stdout.read().decode("unicode_escape")
p_err = process.stderr.read().decode("unicode_escape")
return result_code, p_out, p_err
else:
return None, None, None
except Exception as e:
return 1, 'Could not execute command'

View file

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Author:Mine DOGAN <mine.dogan@agem.com.tr> # Author:Mine DOGAN <mine.dogan@agem.com.tr>
# Author:Tuncay ÇOLAK <tuncay.colak@tubitak.gov.tr> # Author:Tuncay ÇOLAK <tuncay.colak@tubitak.gov.tr>
import subprocess
from base.plugin.abstract_plugin import AbstractPlugin from base.plugin.abstract_plugin import AbstractPlugin
from pathlib import Path from pathlib import Path
@ -60,10 +61,10 @@ class AddUser(AbstractPlugin):
self.logger.debug('Added user to these groups: {}'.format(self.groups)) self.logger.debug('Added user to these groups: {}'.format(self.groups))
if str(self.password).strip() != "": if str(self.password).strip() != "":
result_code, p_out, p_err = self.execute(self.create_shadow_password.format(self.password)) result_code, p_out, p_err = self.execute_command(self.create_shadow_password.format(self.password))
shadow_password = p_out.strip() shadow_password = p_out.strip()
# shadow_password = crypt.crypt(self.password) # shadow_password = crypt.crypt(self.password)
self.execute(self.change_password.format('\'{}\''.format(shadow_password), self.username)) self.execute_command(self.change_password.format('\'{}\''.format(shadow_password), self.username))
self.logger.debug('Changed password.') self.logger.debug('Changed password.')
self.execute(self.change_shell.format(self.username)) self.execute(self.change_shell.format(self.username))
@ -143,6 +144,21 @@ class AddUser(AbstractPlugin):
self.context.create_response(code=self.message_code.TASK_ERROR.value, self.context.create_response(code=self.message_code.TASK_ERROR.value,
message='Local-User görevi çalıştırılırken bir hata oluştu.') message='Local-User görevi çalıştırılırken bir hata oluştu.')
## this methode is only for local-user password plugin
def execute_command(self, command, stdin=None, env=None, cwd=None, shell=True, result=True):
try:
process = subprocess.Popen(command, stdin=stdin, env=env, cwd=cwd, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=shell)
if result is True:
result_code = process.wait()
p_out = process.stdout.read().decode("unicode_escape")
p_err = process.stderr.read().decode("unicode_escape")
return result_code, p_out, p_err
else:
return None, None, None
except Exception as e:
return 1, 'Could not execute command: {0}. Error Message: {1}'.format(command, str(e)), ''
def handle_task(task, context): def handle_task(task, context):
add_user = AddUser(task, context) add_user = AddUser(task, context)

View file

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Author:Mine DOGAN <mine.dogan@agem.com.tr> # Author:Mine DOGAN <mine.dogan@agem.com.tr>
# Author:Tuncay ÇOLAK <tuncay.colak@tubitak.gov.tr> # Author:Tuncay ÇOLAK <tuncay.colak@tubitak.gov.tr>
import subprocess
from base.plugin.abstract_plugin import AbstractPlugin from base.plugin.abstract_plugin import AbstractPlugin
from pathlib import Path from pathlib import Path
@ -64,9 +65,9 @@ class EditUser(AbstractPlugin):
self.username = self.new_username self.username = self.new_username
if str(self.password).strip() != "": if str(self.password).strip() != "":
result_code, p_out, p_err = self.execute(self.create_shadow_password.format(self.password)) result_code, p_out, p_err = self.execute_command(self.create_shadow_password.format(self.password))
shadow_password = p_out.strip() shadow_password = p_out.strip()
self.execute(self.change_password.format('\'{}\''.format(shadow_password), self.username)) self.execute_command(self.change_password.format('\'{}\''.format(shadow_password), self.username))
self.logger.debug('Changed password.') self.logger.debug('Changed password.')
if self.current_home != self.home: if self.current_home != self.home:
@ -155,6 +156,21 @@ class EditUser(AbstractPlugin):
self.context.create_response(code=self.message_code.TASK_ERROR.value, self.context.create_response(code=self.message_code.TASK_ERROR.value,
message='Local-User görevi çalıştırılırken bir hata oluştu.') message='Local-User görevi çalıştırılırken bir hata oluştu.')
## this methode is only for local-user password plugin
def execute_command(self, command, stdin=None, env=None, cwd=None, shell=True, result=True):
try:
process = subprocess.Popen(command, stdin=stdin, env=env, cwd=cwd, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=shell)
if result is True:
result_code = process.wait()
p_out = process.stdout.read().decode("unicode_escape")
p_err = process.stderr.read().decode("unicode_escape")
return result_code, p_out, p_err
else:
return None, None, None
except Exception as e:
return 1, 'Could not execute command: {0}. Error Message: {1}'.format(command, str(e)), ''
def handle_task(task, context): def handle_task(task, context):
edit_user = EditUser(task, context) edit_user = EditUser(task, context)
edit_user.handle_task() edit_user.handle_task()

View file

@ -98,21 +98,16 @@ class RootPassword(AbstractPlugin):
try: try:
process = subprocess.Popen(command, stdin=stdin, env=env, cwd=cwd, stderr=subprocess.PIPE, process = subprocess.Popen(command, stdin=stdin, env=env, cwd=cwd, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=shell) stdout=subprocess.PIPE, shell=shell)
self.logger.debug('Executing command for manage-root') self.logger.debug('Executing command for manage-root')
if result is True: if result is True:
result_code = process.wait() result_code = process.wait()
p_out = process.stdout.read().decode("unicode_escape") p_out = process.stdout.read().decode("unicode_escape")
p_err = process.stderr.read().decode("unicode_escape") p_err = process.stderr.read().decode("unicode_escape")
return result_code, p_out, p_err return result_code, p_out, p_err
else: else:
return None, None, None return None, None, None
except Exception as e: except Exception as e:
return 1, 'Could not execute command: {0}. Error Message: {1}'.format(command, str(e)), '' return 1, 'Could not execute command'
def handle_task(task, context): def handle_task(task, context):

View file

@ -97,17 +97,16 @@ class GetServices(AbstractPlugin):
del service[0] del service[0]
if len(service)>0 and '.service' in service[0]: # service[0] = service name, service[1] is loaded, service[2] active or not, if len(service)>0 and '.service' in service[0]: # service[0] = service name, service[1] is loaded, service[2] active or not,
result, out, err = self.execute(self.service_status.format(service[0])) # check service is enable or not on auto start # result, out, err = self.execute(self.service_status.format(service[0])) # check service is enable or not on auto start
auto='INACTIVE' result, out, err = self.execute("systemctl is-enabled {0}".format(service[0]))
if 'disabled' in out: auto = 'disabled'
auto='INACTIVE' if 'enabled' in out:
elif 'enabled' in out: auto = 'enabled'
auto='ACTIVE'
if service[2] == 'active': if service[2] == 'active':
self.add_file(service[0], "ACTIVE", auto) self.add_file(service[0], "active", auto)
else: else:
self.add_file(service[0], 'INACTIVE',auto) self.add_file(service[0], 'inactive', auto)
print(service) print(service)

View file

@ -28,7 +28,7 @@ class ServiceList(AbstractPlugin):
return result_code, message, item return result_code, message, item
def set_startup_service(self, service_name, action): def set_startup_service(self, service_name, action):
(result_code, p_out, p_err) = self.execute('update-rc.d {0} {1}'.format(service_name, action)) (result_code, p_out, p_err) = self.execute('systemctl {0} {1}'.format(action, service_name))
if result_code == 0: if result_code == 0:
message = 'Service startup action was successful: {}'.format(service_name) message = 'Service startup action was successful: {}'.format(service_name)
else: else:
@ -39,17 +39,22 @@ class ServiceList(AbstractPlugin):
def get_service_status(self, service_item): def get_service_status(self, service_item):
service_name=str(service_item['serviceName']) service_name = str(service_item['serviceName'])
result, p_out, err = self.execute('systemctl status {0}'.format(service_name)) result, p_out, err = self.execute('systemctl status {0}'.format(service_name))
if 'not-found' in p_out: if 'not-found' in p_out:
service_item["serviceStatus"] = 'Service Not Found' service_item["serviceStatus"] = 'Service Not Found'
elif 'running' in p_out: elif 'running' in p_out:
service_item["serviceStatus"] = 'Running' service_item["serviceStatus"] = 'active'
elif ('inactive' in p_out) or ('failed' in p_out): elif ('inactive' in p_out) or ('failed' in p_out):
service_item["serviceStatus"] = 'Stopped' service_item["serviceStatus"] = 'inactive'
result, out, err = self.execute("systemctl is-enabled {0}".format(service_name))
auto = 'disabled'
if 'enabled' in out:
auto = 'enabled'
service_item["startAuto"] = auto
return service_item return service_item
@ -61,30 +66,29 @@ class ServiceList(AbstractPlugin):
for item in items: for item in items:
try: try:
if item['serviceStatus'] is not None and ( if item['serviceStatus'] is not None and (
str(item['serviceStatus']) == 'Başlat' or str(item['serviceStatus']) == 'Start' or str(item['serviceStatus']) == 'START' ): str(item['serviceStatus']) == 'start' or str(item['serviceStatus']) == 'active' or str(item['serviceStatus']) == 'START'):
resultcode, message, item = self.start_stop_service(item, "start") resultcode, message, item = self.start_stop_service(item, "start")
resultMessage += message resultMessage += message
if item['serviceStatus'] is not None and ( if item['serviceStatus'] is not None and (
str(item['serviceStatus']) == 'Durdur' or str(item['serviceStatus']) == 'Stop' or str(item['serviceStatus']) == 'STOP' ): str(item['serviceStatus']) == 'stop' or str(item['serviceStatus']) == 'inactive' or str(item['serviceStatus']) == 'STOP'):
resultcode, message, item= self.start_stop_service(item, "stop") resultcode, message, item= self.start_stop_service(item, "stop")
resultMessage += message resultMessage += message
if item['startAuto'] is not None and ( if item['startAuto'] is not None and (
str(item['startAuto']) == 'Başlat' or str(item['startAuto']) == 'Start' or str(item['startAuto']) == 'START'): str(item['startAuto']) == 'enabled' or str(item['startAuto']) == 'Start' or str(item['startAuto']) == 'START'):
resultcode, message = self.set_startup_service(item, "defaults") resultcode, message = self.set_startup_service(item['serviceName'], "enable")
resultMessage += message resultMessage += message
if item['startAuto'] is not None and ( if item['startAuto'] is not None and (
str(item['startAuto']) == 'Durdur' or str(item['startAuto']) == 'Stop' or str(item['startAuto']) == 'STOP' ): str(item['startAuto']) == 'disabled' or str(item['startAuto']) == 'Stop' or str(item['startAuto']) == 'STOP'):
resultcode, message = self.set_startup_service(item, "remove") resultcode, message = self.set_startup_service(item['serviceName'], "disable")
resultMessage += message resultMessage += message
item = self.get_service_status(item)
item=self.get_service_status(item)
except Exception as e: except Exception as e:
resultMessage += '{0} servisinin isteklerini gerçekleştirirken hata ile karşılaşıldı. Hdata : {1}\r\n'.format( resultMessage += '{0} servisinin isteklerini gerçekleştirirken hata ile karşılaşıldı. Hdata : {1}\r\n'.format(
str(item['serviceName']), str(e)) str(item['serviceName']), str(e))
self.logger.debug(resultMessage) self.logger.debug(resultMessage)
data = {'ResultMessage': resultMessage, 'service_list': items } data = {'ResultMessage': resultMessage, 'service_list': items}
self.context.create_response(code=self.message_code.TASK_PROCESSED.value, self.context.create_response(code=self.message_code.TASK_PROCESSED.value,
message='Servis istekleri gerçekleştirildi', message='Servis istekleri gerçekleştirildi',