|
|
|
@ -225,6 +225,17 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# список разделов, которые на наличие в ней информации
|
|
|
|
|
# используется для автоматического отображения/скрытия
|
|
|
|
|
# опций help-имя
|
|
|
|
|
# Пример: self.relOption =
|
|
|
|
|
# { "help-all":[_("Common options"], _("Service Unix options"),
|
|
|
|
|
# _("Service Samba options"), _("Service LDAP options")}]
|
|
|
|
|
# self.relChapterPass = (_("Common options"),)
|
|
|
|
|
# это означается что опция будет активна, если только в разделах
|
|
|
|
|
# кроме Common options есть хоть одна доступная опция.
|
|
|
|
|
self.relChapterPass = (_("Common options"),)
|
|
|
|
|
|
|
|
|
|
self.data = [\
|
|
|
|
|
# Options
|
|
|
|
|
{'shortOption':"h",
|
|
|
|
@ -713,6 +724,38 @@ class cl_ldap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
self.allServ = []
|
|
|
|
|
self.__setAllServ()
|
|
|
|
|
|
|
|
|
|
def handleCheckAccess(self,dataHash):
|
|
|
|
|
"""Дополнительная проверка опций-справок - опция доступна только если
|
|
|
|
|
в разделах этой справки есть хотябы одна опция
|
|
|
|
|
|
|
|
|
|
Входные параметры:
|
|
|
|
|
dataHash словарь из списка self.data
|
|
|
|
|
"""
|
|
|
|
|
# если эта опция для реализации справки
|
|
|
|
|
if 'longOption' in dataHash \
|
|
|
|
|
and dataHash['longOption'] in self.relOptions:
|
|
|
|
|
# составляем список разделов которые должны быть не пустые
|
|
|
|
|
# разделы из relOptions относящиеся к этой опции за исключением
|
|
|
|
|
# разделов которые надо пропустить (relChapterPass)
|
|
|
|
|
trueChapters = \
|
|
|
|
|
set(self.relOptions[dataHash['longOption']]).difference( \
|
|
|
|
|
self.relChapterPass)
|
|
|
|
|
# перебираем все опции
|
|
|
|
|
for unit in self.data:
|
|
|
|
|
# если опция не отностится к выполняемой программе, то
|
|
|
|
|
# ее пропустить
|
|
|
|
|
if 'progAccess' in unit and \
|
|
|
|
|
not self.progName[self.cmdName] in unit['progAccess']:
|
|
|
|
|
continue
|
|
|
|
|
# если опция отностится к необходмой справки
|
|
|
|
|
if unit['helpChapter'] in trueChapters:
|
|
|
|
|
# опция справки - доступна
|
|
|
|
|
return True
|
|
|
|
|
# если не оказалось не одной опция для разделов этой справки
|
|
|
|
|
return False
|
|
|
|
|
# опция доступна, так как не справочная
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def __setAllServ(self):
|
|
|
|
|
"""Записывает в аттрибут self.allServ названия всех сервисов"""
|
|
|
|
|
sServ = re.compile("\s*([^\s]+)\s*")
|
|
|
|
@ -2623,56 +2666,62 @@ Samba in backup directory")
|
|
|
|
|
self.printERROR(_("Not add user ..."))
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
class tsOpt:
|
|
|
|
|
"""Класс для обработки параметров и вывода help"""
|
|
|
|
|
def __init__(self, obj, parBeforeService):
|
|
|
|
|
|
|
|
|
|
class tsOpt(cl_base.opt):
|
|
|
|
|
"""Класс для обработки параметров и вывода help
|
|
|
|
|
|
|
|
|
|
Параметры:
|
|
|
|
|
helpObj объект-справка содержащий необходимые опции
|
|
|
|
|
parBeforeService дополнительные необходимые параметры перед указанным
|
|
|
|
|
сервисом. (например "group" или "user")
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self, helpObj, parBeforeService):
|
|
|
|
|
# последний параметр является сервисом
|
|
|
|
|
service = sys.argv[-1:][0].rstrip()
|
|
|
|
|
shortOpt = obj.getAllOpt('short', obj.relOptions['h'])
|
|
|
|
|
longOpt = obj.getAllOpt('long', obj.relOptions['h'])
|
|
|
|
|
if service in obj.allServ:
|
|
|
|
|
obj.clearAllOpt()
|
|
|
|
|
shortOpt = obj.getAllOpt('short',obj.relServices[service])
|
|
|
|
|
longOpt = obj.getAllOpt('long', obj.relServices[service])
|
|
|
|
|
optObj = cl_base.opt(shortOpt, longOpt)
|
|
|
|
|
optObj.sysArgv = sys.argv[1:]
|
|
|
|
|
optObj.obj = obj
|
|
|
|
|
optObj.__iter = 0
|
|
|
|
|
optObj.opt = {}
|
|
|
|
|
optObj.params = {}
|
|
|
|
|
optObj.handlerOpt = tsOpt.handlerOpt.__get__(optObj)
|
|
|
|
|
optObj.handlerErrOpt = tsOpt.handlerErrOpt.__get__(optObj)
|
|
|
|
|
optObj.handlerParam = tsOpt.handlerParam.__get__(optObj)
|
|
|
|
|
# названия параметров из хвоста командной строки
|
|
|
|
|
optObj.nameParams = parBeforeService + ['service']
|
|
|
|
|
optObj.getopt()
|
|
|
|
|
# параметры из хвоста командной строки
|
|
|
|
|
self.params = optObj.params
|
|
|
|
|
self.opt = optObj.opt
|
|
|
|
|
# от cl_help получаем короткие и длинные опции
|
|
|
|
|
if service in helpObj.allServ:
|
|
|
|
|
shortOpt, longOpt = helpObj.getAllOpt('all', helpObj.relServices[service])
|
|
|
|
|
else:
|
|
|
|
|
shortOpt,longOpt = helpObj.getAllOpt('all', helpObj.relOptions['h'])
|
|
|
|
|
# вызвать конструктор объекта, распознающего опции
|
|
|
|
|
cl_base.opt.__init__(self,shortOpt,longOpt)
|
|
|
|
|
|
|
|
|
|
self.nameParams = parBeforeService + ['service']
|
|
|
|
|
self.sysArgv = sys.argv[1:]
|
|
|
|
|
self.helpObj = helpObj
|
|
|
|
|
self.__iter = 0
|
|
|
|
|
self.opt = {}
|
|
|
|
|
self.params = {}
|
|
|
|
|
self.getopt()
|
|
|
|
|
# Обработка help
|
|
|
|
|
self.flagHelp = False
|
|
|
|
|
for relOpt in obj.relOptions.keys():
|
|
|
|
|
if relOpt in optObj.opt:
|
|
|
|
|
print obj.getHelp(obj.relOptions[relOpt])
|
|
|
|
|
self.flagHelp = True
|
|
|
|
|
break
|
|
|
|
|
if not self.flagHelp:
|
|
|
|
|
if optObj.params.has_key('service'):
|
|
|
|
|
if not (optObj.params['service'] in obj.allServ) or\
|
|
|
|
|
len(optObj.nameParams) != optObj.__iter:
|
|
|
|
|
optObj.handlerErrOpt()
|
|
|
|
|
# определяем есть ли среди опций опции, которые влияют на показ
|
|
|
|
|
# опциональных разделов (метод пересечения множеств)
|
|
|
|
|
helpopt = \
|
|
|
|
|
tuple(set(self.opt.keys()).intersection(helpObj.relOptions.keys()))
|
|
|
|
|
if len(helpopt) > 0:
|
|
|
|
|
print helpObj.getHelp(helpObj.relOptions[helpopt[0]])
|
|
|
|
|
self.flagHelp = True
|
|
|
|
|
elif not self.params:
|
|
|
|
|
print helpObj.getHelp(helpObj.relOptions['h'])
|
|
|
|
|
self.flagHelp = True
|
|
|
|
|
else:
|
|
|
|
|
if self.params.has_key('service'):
|
|
|
|
|
if not (self.params['service'] in helpObj.allServ) or\
|
|
|
|
|
len(self.nameParams) != self.__iter:
|
|
|
|
|
self.handlerErrOpt()
|
|
|
|
|
else:
|
|
|
|
|
optObj.handlerErrOpt()
|
|
|
|
|
self.handlerErrOpt()
|
|
|
|
|
|
|
|
|
|
def handlerOpt(self,option,value):
|
|
|
|
|
# Обработчик (опция значение)
|
|
|
|
|
#print option, value
|
|
|
|
|
shortOpt = self.obj.getShortOpt(option)
|
|
|
|
|
shortOpt = self.helpObj.getShortOpt(option)
|
|
|
|
|
if not shortOpt:
|
|
|
|
|
shortOpt = option
|
|
|
|
|
if not self.opt.has_key(shortOpt):
|
|
|
|
|
if not shortOpt in self.opt:
|
|
|
|
|
self.opt[shortOpt] = value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def handlerErrOpt(self):
|
|
|
|
|
# Обработчик ошибок
|
|
|
|
|
argv = " ".join(sys.argv[1:])
|
|
|
|
|