|
|
|
@ -244,7 +244,10 @@ class prnServ:
|
|
|
|
|
if service in ["ldap", "dns", "dhcp", "ftp"]:
|
|
|
|
|
ret = service.upper()
|
|
|
|
|
else:
|
|
|
|
|
ret = service.capitalize()
|
|
|
|
|
if service=="mail_relay":
|
|
|
|
|
ret = "Mail"
|
|
|
|
|
else:
|
|
|
|
|
ret = service.capitalize()
|
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon, prnServ):
|
|
|
|
@ -252,6 +255,17 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon, prnServ):
|
|
|
|
|
|
|
|
|
|
# DN сервисов относительно базового
|
|
|
|
|
ServicesDN = "ou=Services"
|
|
|
|
|
# Сервисы и демоны
|
|
|
|
|
servicesDaemons = {"ldap":["slapd"],
|
|
|
|
|
"unix":["slapd"],
|
|
|
|
|
"samba":["samba"],
|
|
|
|
|
"mail":["postfix","dovecot"],
|
|
|
|
|
"mail_relay":["postfix"],
|
|
|
|
|
"jabber":["ejabberd"],
|
|
|
|
|
"ftp":["proftpd"],
|
|
|
|
|
"proxy":["squid"],
|
|
|
|
|
"dns":["named"],
|
|
|
|
|
"dhcp":["dhcpd"]}
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
# Переменная объект Vars
|
|
|
|
@ -712,24 +726,15 @@ in a sambaDomainName',
|
|
|
|
|
Входные данные - список названий сервисов
|
|
|
|
|
"""
|
|
|
|
|
flagError = False
|
|
|
|
|
services = {"ldap":["slapd"],
|
|
|
|
|
"unix":["slapd"],
|
|
|
|
|
"samba":["samba"],
|
|
|
|
|
"mail":["postfix","dovecot"],
|
|
|
|
|
"jabber":["ejabberd"],
|
|
|
|
|
"ftp":["proftpd"],
|
|
|
|
|
"proxy":["squid"],
|
|
|
|
|
"dns":["named"],
|
|
|
|
|
"dhcp":["dhcpd"]}
|
|
|
|
|
delDaemons = []
|
|
|
|
|
for service in servInstalled:
|
|
|
|
|
if not service in services.keys():
|
|
|
|
|
if not service in self.servicesDaemons.keys():
|
|
|
|
|
self.printERROR(_("Can not supported service '%s'")%service)
|
|
|
|
|
self.printERROR(\
|
|
|
|
|
_("Can not deleted service from default runlevel"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
for daemon in services[service]:
|
|
|
|
|
for daemon in self.servicesDaemons[service]:
|
|
|
|
|
if not daemon in delDaemons:
|
|
|
|
|
delDaemons.append(daemon)
|
|
|
|
|
if not self.delDaemonAutostart(daemon):
|
|
|
|
@ -769,83 +774,32 @@ in a sambaDomainName',
|
|
|
|
|
Также прописывает в автозагрузку
|
|
|
|
|
Входные даннные - список названий сервисов
|
|
|
|
|
"""
|
|
|
|
|
addDaemons = []
|
|
|
|
|
if 'ldap' in servInstalled or 'unix' in servInstalled:
|
|
|
|
|
if not self.startDaemons('ldap',['slapd'], printSuccess):
|
|
|
|
|
return False
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("slapd"):
|
|
|
|
|
return False
|
|
|
|
|
addDaemons.append("slapd")
|
|
|
|
|
flagError = False
|
|
|
|
|
for service in servInstalled:
|
|
|
|
|
if service == "unix" or service == "ldap":
|
|
|
|
|
continue
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
if not self.startDaemons('mail',['postfix', 'dovecot'],
|
|
|
|
|
printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демонов
|
|
|
|
|
if not (self.setDaemonAutostart("postfix") and\
|
|
|
|
|
self.setDaemonAutostart("dovecot")):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# В случае почтового релея
|
|
|
|
|
elif service == "mail_relay":
|
|
|
|
|
if not self.startDaemons('mail',['postfix'],
|
|
|
|
|
printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демонов
|
|
|
|
|
if not self.setDaemonAutostart("postfix"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "jabber":
|
|
|
|
|
if not self.startDaemons('jabber',['ejabberd'], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("ejabberd"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "ftp":
|
|
|
|
|
if not self.startDaemons('ftp',['proftpd'], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("proftpd"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "proxy":
|
|
|
|
|
if not self.startDaemons('proxy',['squid'], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("squid"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "dns":
|
|
|
|
|
if not self.startDaemons('dns',['named'], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("named"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "dhcp":
|
|
|
|
|
if not self.startDaemons('dhcp',['dhcpd'], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart("dhcpd"):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
if not self.startDaemons(service,[service], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Устанавливаем автозапуск демона
|
|
|
|
|
if not self.setDaemonAutostart(service):
|
|
|
|
|
return False
|
|
|
|
|
if not service in self.servicesDaemons.keys():
|
|
|
|
|
self.printERROR(_("Can not supported service '%s'")%service)
|
|
|
|
|
self.printERROR(_("Can not add service at default runlevel"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
for daemon in self.servicesDaemons[service]:
|
|
|
|
|
if not daemon in addDaemons:
|
|
|
|
|
addDaemons.append(daemon)
|
|
|
|
|
if not self.startDaemons(service, [daemon], printSuccess):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if not self.setDaemonAutostart(daemon):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
@ -856,137 +810,95 @@ in a sambaDomainName',
|
|
|
|
|
|
|
|
|
|
Входные даннные - список названий сервисов
|
|
|
|
|
"""
|
|
|
|
|
addDaemons = []
|
|
|
|
|
if 'ldap' in servInstalled or 'unix' in servInstalled:
|
|
|
|
|
addDaemons.append("slapd")
|
|
|
|
|
flagError = False
|
|
|
|
|
flagLdap = False
|
|
|
|
|
for service in servInstalled:
|
|
|
|
|
if service == "unix" or service == "ldap":
|
|
|
|
|
flagLdap = True
|
|
|
|
|
# В случае почтового релея
|
|
|
|
|
elif service == "mail_relay":
|
|
|
|
|
if self.getRunDaemons(["postfix"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/postfix stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "Postfix" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "mail":
|
|
|
|
|
if self.getRunDaemons(["postfix"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/postfix stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "Postfix" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if self.getRunDaemons(["dovecot"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/dovecot stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR("Dovecot" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "jabber":
|
|
|
|
|
if self.getRunService("jabber"):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/ejabberd stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "Ejabberd" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
strCmd = "ps ax"
|
|
|
|
|
listProcess = self.execProg(strCmd,False,False)
|
|
|
|
|
if listProcess == False:
|
|
|
|
|
self.printERROR(_('Can not execute "%s"')%strCmd)
|
|
|
|
|
return False
|
|
|
|
|
killPid = []
|
|
|
|
|
for process in listProcess:
|
|
|
|
|
if "erlang" in process:
|
|
|
|
|
killPid.append(process.split(" ")[0])
|
|
|
|
|
if killPid and " ".join(killPid).strip():
|
|
|
|
|
textLine = self.execProg("kill %s" %" ".join(killPid))
|
|
|
|
|
if textLine == False:
|
|
|
|
|
self.printERROR(_("Can not 'kill %s'")\
|
|
|
|
|
%" ".join(killPid))
|
|
|
|
|
if not service in self.servicesDaemons.keys():
|
|
|
|
|
self.printERROR(_("Can not supported service '%s'")%service)
|
|
|
|
|
self.printERROR(_("Can not stop service"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
# Название сервиса для вывода на экран
|
|
|
|
|
servicePrn = self.printNameService(service)
|
|
|
|
|
for daemon in self.servicesDaemons[service]:
|
|
|
|
|
if not daemon in addDaemons:
|
|
|
|
|
addDaemons.append(daemon)
|
|
|
|
|
# Если демон запущен и не squid то останавливаем его
|
|
|
|
|
if not daemon in ["squid"] and self.getRunDaemons([daemon]):
|
|
|
|
|
ret = self.execProg("/etc/init.d/%s stop"%daemon)
|
|
|
|
|
if ret == False:
|
|
|
|
|
self.printERROR(servicePrn + " " +\
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "ftp":
|
|
|
|
|
if self.getRunDaemons(["proftpd"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/proftpd stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "Proftpd" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "proxy":
|
|
|
|
|
if self.getRunDaemons(["squid"]):
|
|
|
|
|
errStopProxy = False
|
|
|
|
|
# Создаем 2 процесса
|
|
|
|
|
pid = os.fork()
|
|
|
|
|
tic = 0
|
|
|
|
|
if pid:
|
|
|
|
|
message = _("Waiting for squid to shutdown") + " "
|
|
|
|
|
self.printSUCCESS(message, 0, False)
|
|
|
|
|
perm = [0]
|
|
|
|
|
offset = 0
|
|
|
|
|
while not perm[0]:
|
|
|
|
|
perm = os.waitpid(pid, os.WNOHANG)
|
|
|
|
|
if perm[1]:
|
|
|
|
|
errStopProxy = True
|
|
|
|
|
# Удаляем процессы ejabberd
|
|
|
|
|
if daemon == "ejabberd":
|
|
|
|
|
strCmd = "ps ax"
|
|
|
|
|
listProcess = self.execProg(strCmd,False,False)
|
|
|
|
|
if listProcess == False:
|
|
|
|
|
self.printERROR(_('Can not execute "%s"')%strCmd)
|
|
|
|
|
return False
|
|
|
|
|
killPid = []
|
|
|
|
|
for process in listProcess:
|
|
|
|
|
if "erlang" in process:
|
|
|
|
|
killPid.append(process.split(" ")[0])
|
|
|
|
|
if killPid and " ".join(killPid).strip():
|
|
|
|
|
textLine=self.execProg("kill %s" %" ".join(killPid))
|
|
|
|
|
if textLine == False:
|
|
|
|
|
self.printERROR(_("Can not 'kill %s'")\
|
|
|
|
|
%" ".join(killPid))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
tic += 1
|
|
|
|
|
if tic>=15:
|
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
sys.stdout.write(".")
|
|
|
|
|
offset += 1
|
|
|
|
|
tic = 0
|
|
|
|
|
if errStopProxy:
|
|
|
|
|
self.printOnlyNotOK(" ",self.lenString(message)+\
|
|
|
|
|
elif daemon == "squid" and self.getRunDaemons(["squid"]):
|
|
|
|
|
errStopProxy = False
|
|
|
|
|
# Создаем 2 процесса
|
|
|
|
|
pid = os.fork()
|
|
|
|
|
tic = 0
|
|
|
|
|
if pid:
|
|
|
|
|
message = _("Waiting for squid to shutdown") + " "
|
|
|
|
|
self.printSUCCESS(message, 0, False)
|
|
|
|
|
perm = [0]
|
|
|
|
|
offset = 0
|
|
|
|
|
while not perm[0]:
|
|
|
|
|
perm = os.waitpid(pid, os.WNOHANG)
|
|
|
|
|
if perm[1]:
|
|
|
|
|
errStopProxy = True
|
|
|
|
|
break
|
|
|
|
|
time.sleep(0.1)
|
|
|
|
|
tic += 1
|
|
|
|
|
if tic>=15:
|
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
sys.stdout.write(".")
|
|
|
|
|
offset += 1
|
|
|
|
|
tic = 0
|
|
|
|
|
if errStopProxy:
|
|
|
|
|
self.printOnlyNotOK(" ",\
|
|
|
|
|
self.lenString(message)+\
|
|
|
|
|
offset+3)
|
|
|
|
|
else:
|
|
|
|
|
self.printOnlyOK(" ",self.lenString(message)+\
|
|
|
|
|
offset+3)
|
|
|
|
|
else:
|
|
|
|
|
self.printOnlyOK(" ",self.lenString(message)+\
|
|
|
|
|
offset+3)
|
|
|
|
|
else:
|
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
if os.system("/etc/init.d/squid stop &>/dev/null"):
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
else:
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
# Если ошибка при остановке proxy сервера
|
|
|
|
|
if errStopProxy:
|
|
|
|
|
self.printERROR( "Squid" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "dns":
|
|
|
|
|
if self.getRunDaemons(["named"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/named stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "DNS" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif service == "dhcp":
|
|
|
|
|
if self.getRunDaemons(["dhcpd"]):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/dhcpd stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "DHCP" + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
elif self.getRunService(service):
|
|
|
|
|
stopService = service
|
|
|
|
|
textLines = self.execProg("/etc/init.d/%s stop" %(stopService))
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( str(service) + " " +
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagLdap:
|
|
|
|
|
sys.stdout.flush()
|
|
|
|
|
if os.system("/etc/init.d/squid stop &>/dev/null"):
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
else:
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
# Если ошибка при остановке proxy сервера
|
|
|
|
|
if errStopProxy:
|
|
|
|
|
self.printERROR(servicePrn + " " +\
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
break
|
|
|
|
|
if not flagError and "slapd" in addDaemons:
|
|
|
|
|
if self.getRunService('ldap'):
|
|
|
|
|
textLines = self.execProg("/etc/init.d/slapd stop")
|
|
|
|
|
if textLines == False:
|
|
|
|
|
self.printERROR( "LDAP" + " " +
|
|
|
|
|
self.printERROR("LDAP" + " " +\
|
|
|
|
|
_("service is not stopped"))
|
|
|
|
|
flagError = True
|
|
|
|
|
if flagError:
|
|
|
|
@ -1103,29 +1015,18 @@ in a sambaDomainName',
|
|
|
|
|
def getRunService(self, nameService, printError=False):
|
|
|
|
|
"""Проверка, запущен ли сервис с данным именем"""
|
|
|
|
|
flagError = False
|
|
|
|
|
if nameService == "mail":
|
|
|
|
|
daemons = ['postfix','dovecot']
|
|
|
|
|
if not self.getRunDaemons(daemons,printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
elif nameService == "ldap":
|
|
|
|
|
if not self.getRunDaemons(['slapd'],printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
elif nameService == "jabber":
|
|
|
|
|
if not self.getRunDaemons(['ejabberd'],printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
elif nameService == "ftp":
|
|
|
|
|
if not self.getRunDaemons(['proftpd'],printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
elif nameService == "dhcp":
|
|
|
|
|
if not self.getRunDaemons(['dhcpd'],printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
else:
|
|
|
|
|
if not self.getRunDaemons([nameService],printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
if not nameService in self.servicesDaemons.keys():
|
|
|
|
|
self.printERROR(_("Can not supported service '%s'")%nameService)
|
|
|
|
|
self.printERROR(_("Can not check run service"))
|
|
|
|
|
return False
|
|
|
|
|
# Названия демонов для сервиса
|
|
|
|
|
daemons = self.servicesDaemons[nameService]
|
|
|
|
|
if not self.getRunDaemons(daemons, printError):
|
|
|
|
|
flagError = True
|
|
|
|
|
if flagError:
|
|
|
|
|
if printError:
|
|
|
|
|
self.printERROR( nameService.capitalize + " " +
|
|
|
|
|
_("service is not started"))
|
|
|
|
|
self.printERROR(self.printNameService(nameService) + " " +\
|
|
|
|
|
_("service is not started"))
|
|
|
|
|
return False
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|