diff --git a/calculate/lib/cl_api.py b/calculate/lib/cl_api.py index f395989..e1a2d27 100644 --- a/calculate/lib/cl_api.py +++ b/calculate/lib/cl_api.py @@ -58,7 +58,7 @@ class _services(color_print, libVars): 'serviceAPI') except (ImportError, AttributeError), e: self.printERROR(str(e).strip()) - self.printERROR(_("Can not import module %s")% apiFile) + self.printERROR(_("Failed to import module %s")% apiFile) cl_overriding.exit(1) return className @@ -77,7 +77,7 @@ class _services(color_print, libVars): apiObject = className() except Exception, e: self.printERROR(str(e).strip()) - self.printERROR(_("Can not create API object")) + self.printERROR(_("Failed create an API object")) self.printERROR(_("Module %s")% apiFile) cl_overriding.exit(1) self.apiObjs[pkgName] = apiObject @@ -98,7 +98,7 @@ class _services(color_print, libVars): try: apiObjects.append(className()) except: - self.printERROR(_("Can not create API object")) + self.printERROR(_("Failed create an API object")) self.printERROR(_("Module %s")% apiFile) cl_overriding.exit(1) return apiObjects @@ -110,8 +110,8 @@ class _services(color_print, libVars): return "" if not hasattr(pkgObj, methodName) or\ not callable(getattr(pkgObj, methodName)): - self.printERROR(_("Can not found method %(method)s in \ -API object service %(service)s") %{'method':methodName, + self.printERROR(_("Method %(method)s not found in object API of" + " service %(service)s") %{'method':methodName, 'service':pkgObj.getServiceName()}) cl_overriding.exit(1) if argv: @@ -198,7 +198,7 @@ class _pkgAPI(object): try: value = object.__getattribute__(self, attr)() except: - raise APIError(_("Can not found method %s")%attr) + raise APIError(_("Method %s not found")%attr) return value class _allPkg(object): diff --git a/calculate/lib/cl_opt.py b/calculate/lib/cl_opt.py index 5fbc70d..b816008 100644 --- a/calculate/lib/cl_opt.py +++ b/calculate/lib/cl_opt.py @@ -275,23 +275,23 @@ class opt(optparse.OptionParser): [{'longOption':"set", 'optVal':"VAR=VALUE", 'action':'append', - 'help':_("set value for variable") + 'help':_("set the variable value") }] variable_view = \ [{'shortOption':"v", 'longOption':"show-variables", 'action':'count', - 'help':_("print variables, if the two options is verbose " - "(added print hidden variables)") + 'help':_("print variables, in verbose mode if the two options " + "applied (includes printing hidden variables)") }, {'longOption':"filter", 'optVal':"FILTER", - 'help':_("filtered variables by regular expression, \ -is used in conjunction with the options '-v --show-variables'") + 'help':_("filter variables (as regexp, use *), to be used in" + " conjunction with options '-v --show-variables'") }, {'longOption':"xml", - 'help':_("output variables in the format of XML, \ -is used in conjunction with the option '-v --show-variables'") + 'help':_("output variables in XML format, to be used in" + " conjunction with options '-v --show-variables'") }] variable_control = variable_set + variable_view @@ -370,7 +370,8 @@ is used in conjunction with the option '-v --show-variables'") should either exit or raise an exception. """ self.print_usage(sys.stderr) - self.exit(2, "%s: %s: %s\n%s\n" % (self.get_prog_name(), _("error"), msg, + self.exit(2, "%s: %s: %s\n%s\n" % (self.get_prog_name(), + _("error"), msg, _("Try `%s' for more information")% ("%s --help"%self.get_prog_name()))) diff --git a/calculate/lib/cl_template.py b/calculate/lib/cl_template.py index 6ecbe59..1dd9bab 100644 --- a/calculate/lib/cl_template.py +++ b/calculate/lib/cl_template.py @@ -335,7 +335,7 @@ class _terms(_error, _shareTermsFunction): self.setError("'%s'"%rpl(term)+" "+\ _("incorrect")) self.setError(\ - _("Value function is not version")) + _("Function value is not version")) return False verFile, verVar = self._convertVers(vals[1],valVars) res = dictRuleFunc[sepF](verVar,verFile) @@ -570,7 +570,7 @@ class fileHeader(_terms): foundTerm = True errorMsg = _("Incorrect template") +\ ": "+ templateName +"\n"+\ - _("header template not valid")+\ + _("template header not valid")+\ ": "+ i if function: rezTerm = self._equalTerm(i, @@ -717,7 +717,7 @@ class dirHeader(_terms): foundTerm = True errorMsg = _("Incorrect template") +\ ": "+ templateName +"\n"+\ - _("header template not valid")+ ": "+ i + _("template header not valid")+ ": "+ i if function: rezTerm = self._equalTerm(i, errorMsg, function) @@ -2106,7 +2106,8 @@ class _file(_error): try: self.F_CONF.write(self.textConfig) except: - self.setError(_("not open file:" ) + self.nameFileConfig) + self.setError(_("unable to open the file:") + + self.nameFileConfig) return False self.F_CONF.flush() return True @@ -2117,7 +2118,8 @@ class _file(_error): try: F_TEMPL = open(nameFileTemplate, "r") except: - self.setError(_("not open file:" ) + nameFileTemplate) + self.setError(_("unable to open the file:") + + nameFileConfig) return False return F_TEMPL @@ -2143,7 +2145,8 @@ class _file(_error): try: F_CONF = open(nameFileConfig, "w+") except: - self.setError(_("not open file:" ) + nameFileConfig) + self.setError(_("unable to open the file:") + + nameFileConfig) return False return F_CONF @@ -2401,13 +2404,13 @@ class _shareTemplate: gid = pwdObj.pw_gid homeDir = pwdObj.pw_dir except: - raise TemplatesError(_("Can not found user %s")%str(userName)) + raise TemplatesError(_("User %s not found")%str(userName)) if groupsInfo: import grp try: groupName = grp.getgrgid(gid).gr_name except: - raise TemplatesError(_("Can not found group id %s")%str(gid)) + raise TemplatesError(_("Group id %s not found")%str(gid)) groupsNames = map(lambda x: x.gr_name,\ filter(lambda x: userName in x.gr_mem, grp.getgrall())) groupsNames = [groupName] + groupsNames @@ -2633,7 +2636,7 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): flagNotRootFS = False else: self.raiseErrTemplate( - _("Second argument function is not 'root'")) + _("The second argument function is not 'root'")) if fileName[0] == "~": # Получаем директорию пользователя fileName = os.path.join(self.homeDir, @@ -2672,12 +2675,12 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): flagNotRootFS = False else: self.raiseErrTemplate( - _("Third argument function is not 'root'")) + _("The third argument of the function is not 'root'")) if lenTerms >= 2: if not terms[0] in ["ver","num","char","key","empty"]: self.raiseErrTemplate( - _("first argument function is not 'ver' or 'num' or 'char'" - " or 'empty'")) + _("the first argument of the function is not 'ver'" + " or 'num' or 'char' or 'empty'")) if lenTerms == 1: fileName = terms[0].strip() else: @@ -2806,7 +2809,7 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): lenStr = int(terms[1]) except: self.raiseErrTemplate( - _("two argument function is not number")) + _("the second argument of the function is not a number")) choiceStr = fArgvNames[terms[0]] replace = ''.join([random.choice(choiceStr) for i in xrange(lenStr)]) textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ @@ -2829,8 +2832,9 @@ class templateFunction(_error, _shareTemplate, _shareTermsFunction): self.raiseErrTemplate() fArgvNames = ['upper','lower','capitalize'] if not terms[0] in fArgvNames: - self.raiseErrTemplate(_("first argument function is not 'upper' \ -or 'lower' or 'capitalize'")) + self.raiseErrTemplate(_("the first argument of the function" + " is not 'upper' or 'lower' or" + " 'capitalize'")) try: strValue = str(self.objVar.Get(terms[1])) except: @@ -3009,8 +3013,9 @@ or 'lower' or 'capitalize'")) self.currDictIni[nameLocVar] = valueLocVar elif len(terms) == 3: if not terms[2] in ['url','purl','unicode']: - self.raiseErrTemplate(_("third argument function is not " - "'url' or 'purl' or 'unicode'")) + self.raiseErrTemplate( + _("the third argument of the function is not " + "'url' or 'purl' or 'unicode'")) if terms[1]: self.raiseErrTemplate() if self.timeIni != curTime: @@ -3230,7 +3235,7 @@ or 'lower' or 'capitalize'")) %str(nameLocVar)) if not type(value) in (list,tuple): # Значение переменной не список или кортеж - self.raiseErrTemplate(_("value of %s is not a list or tuple")\ + self.raiseErrTemplate(_("value of %s is not a list or a tuple")\ %str(nameLocVar)) try: if len(value) > intIndex: @@ -3238,7 +3243,7 @@ or 'lower' or 'capitalize'")) else: replace = "" except: - self.raiseErrTemplate(_("%s wrong")%strIndex) + self.raiseErrTemplate(_("wrong %s")%strIndex) textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ textTemplateTmp[resS.end():] return textTemplateTmp @@ -3261,7 +3266,7 @@ or 'lower' or 'capitalize'")) mountPoint = terms[0] lastElementVar = terms[1] if not mountPoint or mountPoint[:1] !="/": - self.raiseErrTemplate(_("%s wrong")%lastElementVar) + self.raiseErrTemplate(_("wrong %s")%lastElementVar) nameVar = "os_install_disk_mount" try: valueVar = self.objVar.Get(nameVar) @@ -3278,16 +3283,16 @@ or 'lower' or 'capitalize'")) try: valueElementVar = self.objVar.Get(nameElementVar) except: - self.raiseErrTemplate(_("%s wrong")%lastElementVar+"\n"+ + self.raiseErrTemplate(_("wrong %s")%lastElementVar+"\n"+ _("error: variable %s is not exists")\ %nameElementVar) if not type(valueVar) in (list,tuple): # Значение переменной не список или кортеж - self.raiseErrTemplate(_("value of %s is not a list or tuple")\ + self.raiseErrTemplate(_("value of %s is not a list or a tuple")\ %nameVar) if not type(valueElementVar) in (list,tuple): # Значение переменной не список или кортеж - self.raiseErrTemplate(_("value of %s is not a list or tuple")\ + self.raiseErrTemplate(_("value of %s is not a list or a tuple")\ %nameElementVar) if len(valueVar) != len(valueElementVar): self.raiseErrTemplate( @@ -3304,8 +3309,9 @@ or 'lower' or 'capitalize'")) index = num break if index is None: - self.raiseErrTemplate(_("in the value of the variable \ -os_disk_install not found mount point '\' and '\%s'")%mountPoint) + self.raiseErrTemplate(_("mount point '/' or '/%s' not found " + " in the value of the variable os_disk_install") + %mountPoint) replace = valueElementVar[index] textTemplateTmp = textTemplateTmp[:resS.start()] + replace +\ textTemplateTmp[resS.end():] @@ -3353,7 +3359,7 @@ os_disk_install not found mount point '\' and '\%s'")%mountPoint) message = "" raise TemplatesError( _("error in template %s")%self.nameTemplate + "\n" + \ - _("error template term '%s'")%str(self.functText) + \ + _("error, template term '%s'")%str(self.functText) + \ message) def applyFuncTemplate(self, textTemplate, nameTemplate): @@ -3383,7 +3389,7 @@ os_disk_install not found mount point '\' and '\%s'")%mountPoint) flagIniFunc = True else: self.raiseErrTemplate( - _("can not found template function '%s'")\ + _("function of templates '%s' not found")\ %str(self.functText)) if flagIniFunc: # Очистка файла в случае его ошибочного чтения @@ -3563,7 +3569,7 @@ re.M|re.S) try: res = string.atoi(strOct, 8) except ValueError: - self.setError(_("Not valid oct value: ") + str(strOct)) + self.setError(_("Invalid oct value: ") + str(strOct)) return False return res else: @@ -3602,7 +3608,7 @@ re.M|re.S) try: dUid,dGid = getModeFile(prevDir,"owner") except OSError: - self.setError(_("Not access dir: " ) + prevDir) + self.setError(_("No access to the directory: ") + prevDir) return False if not mode is False: dMode = mode @@ -3620,7 +3626,8 @@ re.M|re.S) os.mkdir(nameDir) os.chown(nameDir, dUid, dGid) except: - self.setError(_("Can not create dir: " ) + nameDir) + self.setError(_("Failed to create the directory: ") + + nameDir) return False try: if dMode: @@ -3631,7 +3638,8 @@ re.M|re.S) os.chown(dirName, dUid, dGid) createDirs.append(dirName) except: - self.setError(_("Can not create dir: " ) + dirName) + self.setError(_("Failed to create the directory: ") + + dirName) return False return createDirs @@ -3672,7 +3680,7 @@ re.M|re.S) parent = "" term = resS.group("rTerm") + parent +\ resS.group("lTerm") - if self._equalTerm(term, _("content template not valid: ")+\ + if self._equalTerm(term, _("invalid template content: ")+\ nameTemplate, function): textTemplateTmp = textTemplateTmp.replace(mark, body+end) else: @@ -3689,7 +3697,7 @@ re.M|re.S) if len(spFile)>1: flagTrue = False for term in spFile[1:]: - if self._equalTerm(term, _("name template not valid: ")+\ + if self._equalTerm(term, _("invalid template name: ")+\ fileTemplate): flagTrue = True break @@ -3700,7 +3708,7 @@ re.M|re.S) else: return True else: - self.setError(_("name template not valid: ")+ str(fileTemplate)) + self.setError(_("invalid template name: ")+ str(fileTemplate)) return False def getTitle(self, comment, commentList, configPath=""): @@ -3845,24 +3853,25 @@ re.M|re.S) setWARNING = lambda x: self.setWarning(x) and\ self.printWarning and\ printObj.printWARNING(x) - setWARNING(_("No conditions of checking a value of the \ -variable 'cl_name'")) + setWARNING(_("No conditions of checking the value of variable" + " 'cl_name'")) skipDirTemplates = [] for skipDir in skipDirs: skipTempl = os.path.join(skipDir,self.templDirNameFile) if os.path.isfile(skipTempl): skipDirTemplates.append(skipTempl) if skipTemplates or skipDirTemplates: - setWARNING(_("Skip templates:")) + setWARNING(_("Skipped templates:")) for skipTemplate in skipTemplates + skipDirTemplates: setWARNING(" "*6 + skipTemplate) if skipDirs: - setWARNING(_("Skip directories:")) + setWARNING(_("Skipped directories:")) for skipDir in skipDirs: setWARNING(" "*6 + skipDir) setWARNING("") - setWARNING(_("Headers directory and template files first level "\ - "should include of the 'cl_name' variable.")) + setWARNING(_("Headers of directory templates and headers of files" + " on the first level should include 'cl_name'" + " variable.")) setWARNING(_("Example:")) setWARNING("# Calculate cl_name==calculate-install") return skipDirs + skipTemplates @@ -3889,7 +3898,7 @@ variable 'cl_name'")) return dictTemplates if not self.objVar.defined("cl_template_path"): - self.setError(_("not defined Var: ") + "cl_template_path") + self.setError(_("undefined variable: ") + "cl_template_path") return False dirsTemplates = self.objVar.Get("cl_template_path") # Созданные директории @@ -4174,7 +4183,7 @@ variable 'cl_name'")) textTemplate = FD.read() FD.close() except: - self.setError(_("Error open template") + ": " +\ + self.setError(_("Error in opening template") + ": " +\ templateDirFile) return ("", False, []) @@ -4205,7 +4214,7 @@ variable 'cl_name'")) path = os.path.join(self.homeDir, path.partition("/")[2],"")[:-1] elif not path or path and path[0] != "/": - self.setError(_("False value 'path' in template") + ": " +\ + self.setError(_("Wrong value 'path' in the template") + ": " +\ templateDirFile) return ("", False, []) else: @@ -4215,7 +4224,7 @@ variable 'cl_name'")) if "name" in objHead.params: nameDir = objHead.params['name'] if "/" in nameDir or nameDir == ".." or nameDir == ".": - self.setError(_("False value 'name' in template") + ": " +\ + self.setError(_("Wrong value 'name' in the template") + ": " +\ templateDirFile) return ("", False, []) # Новый путь к директории @@ -4234,7 +4243,7 @@ variable 'cl_name'")) try: removeDir(applyDir) except: - self.setError(_("Can not delete dir: " ) +\ + self.setError(_("Failed to delete the directory: ") +\ applyDir) return ("", False, []) @@ -4248,13 +4257,15 @@ variable 'cl_name'")) try: removeDir(removePath) except: - self.setError(_("Can not delete dir: " ) +\ + self.setError( + _("Failed to delete the directory: ") +\ removePath) else: try: os.unlink(removePath) except: - self.setError(_("Can not delete: " ) + removePath) + self.setError( + _("Failed to delete: ") + removePath) return ("", False, []) # Созданные директории @@ -4272,7 +4283,7 @@ variable 'cl_name'")) else: os.chmod(applyDir, mode) else: - self.setError(_("False value 'chmod' in template") + ": " +\ + self.setError(_("Wrong value 'chmod' in the template") + ": " +\ templateDirFile) return ("", False, []) # chown - изменяем владельца и группу @@ -4286,8 +4297,9 @@ variable 'cl_name'")) try: uid = pwd.getpwnam(strUid).pw_uid except: - self.setError(_("Not user in this system: ") + strUid) - self.setError(_("False value 'chown' in template")+\ + self.setError(_("No such user on the system: ") + + strUid) + self.setError(_("Wrong value 'chown' in the template")+\ ": " + templateDirFile) return ("", False, []) gid = self.getGidFromGroup(strGid) @@ -4295,8 +4307,10 @@ variable 'cl_name'")) import grp gid = grp.getgrnam(strGid).gr_gid except: - self.setError(_("Not group in this system: ")+strGid) - self.setError(_("False value 'chown' in template") +\ + self.setError(_("Group not found on the system: ") + +strGid) + self.setError( + _("Wrong value 'chown' in the template") +\ ": "+ templateDirFile) return ("", False, []) @@ -4311,12 +4325,12 @@ variable 'cl_name'")) templateDirFile): return ("", False, []) else: - self.setError(_("False value 'chown' in template") + ": " +\ - templateDirFile) + self.setError(_("Wrong value 'chown' in the template") + + ": " + templateDirFile) return ("", False, []) else: - self.setError(_("False value 'chown' in template") + ": " +\ - templateDirFile) + self.setError(_("Wrong value 'chown' in the template") + + ": " + templateDirFile) return ("", False, []) else: # Устанавливаем владельцем директории, пользователя по умолчанию @@ -4438,7 +4452,7 @@ variable 'cl_name'")) self.nameFileTemplate = os.path.abspath(nameFileTemplate) self.F_TEMPL = self.openTemplFile(self.nameFileTemplate) if not self.F_TEMPL: - self.setError(_("Error open template") + ": " +\ + self.setError(_("Error in opening template") + ": " +\ templateDirFile) return False self.textTemplate = self.F_TEMPL.read() @@ -4458,7 +4472,7 @@ variable 'cl_name'")) mergePkgs = objHeadNew.params['merge'].split(',') reRight = re.compile(r'^(\w+-\w+/)?[\w-]+$') for wrongPkg in (x for x in mergePkgs if not reRight.match(x)): - self.setError(_("Wrong value '%s' for 'merge' in template")% + self.setError(_("Wrong value '%s' for 'merge' in the template")% wrongPkg + ": " + nameFileTemplate) return ([], False) for pkg in mergePkgs: @@ -4475,7 +4489,7 @@ variable 'cl_name'")) # Получаем путь с заменой ~ на директорию пользователя path = os.path.join(self.homeDir,path.partition("/")[2],"")[:-1] elif not path or path and path[0] != "/": - self.setError(_("False value 'path' in template") + ": " +\ + self.setError(_("Wrong value 'path' in the template") + ": " +\ nameFileTemplate) return ([], False) else: @@ -4486,7 +4500,7 @@ variable 'cl_name'")) if objHeadNew.params.has_key("name"): nameFile = objHeadNew.params['name'] if "/" in nameFile or nameFile == ".." or nameFile == ".": - self.setError(_("False value 'name' in template") + ": " +\ + self.setError(_("Wrong value 'name' in the template") + ": " +\ nameFileTemplate) return ([], False) # Новый путь к оригинальному файлу @@ -4504,12 +4518,13 @@ variable 'cl_name'")) if "exec" in objHeadNew.params: execPath = objHeadNew.params['exec'] if not os.access(execPath,os.X_OK): - self.setError(_("False value 'exec' in template") + ": " +\ + self.setError(_("Wrong value 'exec' in the template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute %s") %execPath) + self.setError(_("Failed to execute %s") %execPath) return ([], False) if typeAppendTemplate == "join": - self.setError(_("False value 'append=join' in template") + ": " +\ + self.setError(_("Wrong value 'append=join' in the template") + + ": " +\ nameFileTemplate) return ([], False) @@ -4518,9 +4533,9 @@ variable 'cl_name'")) try: open(pathOldFile, "w").truncate(0) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not clear file") + ": " +\ + self.setError(_("Failed to clear the file") + ": " +\ pathOldFile) return (applyFiles, False) # Удаляем оригинальный файл @@ -4530,9 +4545,9 @@ variable 'cl_name'")) try: os.unlink(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete link") + ": " +\ + self.setError(_("Failed to delete the link") + ": " +\ pathOldFile) return ([], False) if os.path.isfile(pathOldFile): @@ -4540,9 +4555,9 @@ variable 'cl_name'")) try: os.remove(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete file") + ": " +\ + self.setError(_("Failed to delete the file") + ": " +\ pathOldFile) return ([], False) return (applyFiles, False) @@ -4561,9 +4576,9 @@ variable 'cl_name'")) try: os.unlink(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete link") + ": " +\ + self.setError(_("Failed to delete the link") + ": " +\ pathOldFile) return ([], False) if os.path.isfile(pathOldFile): @@ -4571,9 +4586,9 @@ variable 'cl_name'")) try: os.remove(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete file") + ": " +\ + self.setError(_("Failed to delete the file") + ": " +\ pathOldFile) return ([], False) @@ -4589,9 +4604,9 @@ variable 'cl_name'")) try: os.remove(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete file") + ": " +\ + self.setError(_("Failed to delete the file") + ": " +\ pathOldFile) return ([], False) elif not os.path.exists(pathOldFile): @@ -4609,18 +4624,18 @@ variable 'cl_name'")) F_CONF.close() fMode, fUid, fGid = getModeFile(templateFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not open file") + ": " +\ + self.setError(_("Failed to open the file") + ": " +\ templateFile) return ([], False) if os.path.exists(pathOldFile): try: os.remove(pathOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete file") + ": " +\ + self.setError(_("Failed to delete the file") + ": " +\ pathOldFile) return ([], False) if foundTemplateFile: @@ -4629,9 +4644,9 @@ variable 'cl_name'")) FD.write(buff) FD.close() except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not create file") + " '%s'"\ + self.setError(_("Failed to create the file") + " '%s'"\ %pathOldFile) return ([], False) oMode = getModeFile(pathOldFile, mode="mode") @@ -4656,9 +4671,10 @@ variable 'cl_name'")) try: os.chdir(pathLink) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not change the current directory to")+\ + self.setError( + _("Failed to change the current directory to")+\ " " + pathLink) return ([], False) @@ -4670,7 +4686,7 @@ variable 'cl_name'")) preReturn(pathProg) return ([], False) else: - self.setError(_("False value 'chmod' in template") + ": " +\ + self.setError(_("Wrong value 'chmod' in the template") + ": " +\ nameFileTemplate) preReturn(pathProg) return ([], False) @@ -4689,9 +4705,10 @@ variable 'cl_name'")) if uid is None: uid = pwd.getpwnam(strUid).pw_uid except: - self.setError(_("Not user in this system: ") + + self.setError(_("No such user on the system: ") + strUid) - self.setError(_("False value 'chown' in template") + + self.setError( + _("Wrong value 'chown' in the template") + ": "+ nameFileTemplate) preReturn(pathProg) return ([], False) @@ -4704,9 +4721,10 @@ variable 'cl_name'")) import grp gid = grp.getgrnam(strGid).gr_gid except: - self.setError(_("Not group in this system: ") + + self.setError(_("Group not found on the system: ") + strGid) - self.setError(_("False value 'chown' in template") + + self.setError( + _("Wrong value 'chown' in the template") + ": "+ nameFileTemplate) preReturn(pathProg) return ([], False) @@ -4715,13 +4733,13 @@ variable 'cl_name'")) preReturn(pathProg) return ([], False) else: - self.setError(_("False value 'chown' in template") + ": " +\ - nameFileTemplate) + self.setError(_("Wrong value 'chown' in the template") + + ": " + nameFileTemplate) preReturn(pathProg) return ([], False) else: - self.setError(_("False value 'chown' in template") + ": " +\ - nameFileTemplate) + self.setError(_("Wrong value 'chown' in the template") + + ": " + nameFileTemplate) preReturn(pathProg) return ([], False) if not flagSymlink: @@ -4749,9 +4767,9 @@ variable 'cl_name'")) # иначе удаляем файл os.remove(prevOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not delete file") + ": " +\ + self.setError(_("Failed to delete the file") + ": " +\ prevOldFile) preReturn(pathProg) return ([], False) @@ -4762,9 +4780,9 @@ variable 'cl_name'")) try: os.symlink(pathOldFile, prevOldFile) except: - self.setError(_("Error in template") + ": " +\ + self.setError(_("Template error") + ": " +\ nameFileTemplate) - self.setError(_("Can not create symbolic link") + " :" +\ + self.setError(_("Failed to create a symbolic link") + " :" +\ "%s -> %s"%(prevOldFile, pathOldFile)) preReturn(pathProg) return ([], False) @@ -4911,14 +4929,15 @@ variable 'cl_name'")) if formatTemplate == "patch": if typeAppendTemplate != "patch": self.setError(\ - _("False option append=%(type)s in template %(file)s")\ + _("Wrong option append=%(type)s in template %(file)s")\ %{"type":typeAppendTemplate,"file":nameFileTemplate}) return False # создаем объект формата шаблона objTempl = self.getFormatObj(formatTemplate, self.textTemplate) if not objTempl: self.setError(\ - _("Incorrect header parameter format=%s in template")\ + _("Incorrect header parameter format=%s " + "in the template")\ %formatTemplate + " " + nameFileTemplate) return False if objHeadOld and objHeadOld.body: @@ -4926,7 +4945,7 @@ variable 'cl_name'")) # обработка конфигурационного файла self.textTemplate = objTempl.processingFile(self.textConfig) if objTempl.getError(): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) return False if execStr: @@ -4937,9 +4956,9 @@ variable 'cl_name'")) if 'exec' in objHeadNew.params: if not self.executeTemplate(self.nameFileConfig, objHeadNew.params['exec']): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute") + ": " +\ + self.setError(_("Failed to execute") + ": " +\ self.nameFileConfig) return False return False @@ -4959,12 +4978,13 @@ variable 'cl_name'")) self.textTemplate) if not objTemplNew: self.setError(\ - _("Incorrect header parameter format=%s in template")\ + _("Incorrect header parameter format=%s " + "in the template")\ %formatTemplate + " " + nameFileTemplate) return False if "xml_" in formatTemplate: if objTemplNew.getError(): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) return False # Имя файла внутри xml xfce конфигурационных файлов @@ -5009,9 +5029,9 @@ variable 'cl_name'")) if 'exec' in objHeadNew.params: if not self.executeTemplate(self.nameFileConfig, objHeadNew.params['exec']): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute") + ": " +\ + self.setError(_("Failed to execute") + ": " +\ self.nameFileConfig) return False return False @@ -5020,7 +5040,7 @@ variable 'cl_name'")) elif typeAppendTemplate == "before": if "xml_" in formatTemplate: self.setError(\ - _("False option append=before in template %s")\ + _("Wrong option append=before in template %s")\ %nameFileTemplate) return False if objHeadOld and objHeadOld.body: @@ -5038,9 +5058,9 @@ variable 'cl_name'")) if 'exec' in objHeadNew.params: if not self.executeTemplate(self.nameFileConfig, objHeadNew.params['exec']): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute") + ": " +\ + self.setError(_("Failed to execute") + ": " +\ self.nameFileConfig) return False return False @@ -5049,7 +5069,7 @@ variable 'cl_name'")) elif typeAppendTemplate == "after": if "xml_" in formatTemplate: self.setError(\ - _("False option append=after in template %s")\ + _("Wrong option append=after in template %s")\ %nameFileTemplate) return False if objHeadOld and objHeadOld.body: @@ -5066,9 +5086,9 @@ variable 'cl_name'")) if 'exec' in objHeadNew.params: if not self.executeTemplate(self.nameFileConfig, objHeadNew.params['exec']): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute") + ": " +\ + self.setError(_("Failed to execute") + ": " +\ self.nameFileConfig) return False return False @@ -5080,7 +5100,8 @@ variable 'cl_name'")) self.textTemplate = objTxtCoder.encode(self.textTemplate) if formatTemplate =="raw": self.setError(\ - _("Incorrect header parameter append=%s in template")\ + _("Incorrect header parameter append=%s " + "in the template")\ %typeAppendTemplate + " " + nameFileTemplate) return False # создаем объект формата шаблона @@ -5088,12 +5109,13 @@ variable 'cl_name'")) self.textTemplate) if not objTemplNew: self.setError(\ - _("Incorrect header parameter format=%s in template")\ + _("Incorrect header parameter format=%s in " + "the template")\ %formatTemplate + " " + nameFileTemplate) return False if "xml_" in formatTemplate: if objTemplNew.getError(): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) return False nameRootNode=nameFileConfig.rpartition("/")[2].split(".")[0] @@ -5128,7 +5150,7 @@ variable 'cl_name'")) return False if "xml_" in formatTemplate: if objTemplOld.getError(): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileConfig) return False nameRootNode=nameFileConfig.rpartition("/")[2].split(".")[0] @@ -5137,7 +5159,7 @@ variable 'cl_name'")) objTemplOld.join(objTemplNew) if "xml_" in formatTemplate: if objTemplOld.getError(): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) return False data = objTemplOld.getConfig().encode("UTF-8").split("\n") @@ -5158,19 +5180,19 @@ variable 'cl_name'")) if 'exec' in objHeadNew.params: if not self.executeTemplate(self.nameFileConfig, objHeadNew.params['exec']): - self.setError(_("False template") + ": " +\ + self.setError(_("Wrong template") + ": " +\ nameFileTemplate) - self.setError(_("Can not execute") + ": " +\ + self.setError(_("Failed to execute") + ": " +\ self.nameFileConfig) return False return False return filesApply else: - self.setError(_("False (type append) template") + ": " +\ + self.setError(_("Wrong (type append) template") + ": " +\ typeAppendTemplate) return False else: - self.setError(_("Type template not found: ") + nameFileTemplate) + self.setError(_("Template type not found: ") + nameFileTemplate) return False return filesApply @@ -5306,7 +5328,7 @@ class templateClt(scanDirectoryClt, Template): if not self.flagApplyTemplates: return ([],[]) if not self.objVar.defined("cl_template_clt_path"): - self.setError(_("not defined Var: ") + "cl_template_clt_path") + self.setError(_("undefined variable: ") + "cl_template_clt_path") return False dirsTemplates = self.objVar.Get("cl_template_clt_path") dirsTemplates.sort() @@ -5379,7 +5401,7 @@ class iniParser(_error, templateFormat): def writeIniFile(self, txtConfig): if self.readOnly: - self.setError(_("Unable to write into file") + ": " + self.iniFile) + self.setError(_("Failed to write to file") + ": " + self.iniFile) return False if not os.path.exists(self.iniFile): try: @@ -5388,10 +5410,11 @@ class iniParser(_error, templateFormat): fcntl.flock(self.FD.fileno(), fcntl.LOCK_EX) os.chmod(self.iniFile, self.mode) except: - self.setError(_("Failed to create the file") + ": " + self.iniFile) + self.setError(_("Failed to create the file") + + ": " + self.iniFile) return False if not self.FD: - self.setError(_("Unable to write into file") + ": " + self.iniFile) + self.setError(_("Failed to write to file") + ": " + self.iniFile) return False self.FD.truncate(0) self.FD.seek(0) @@ -5416,8 +5439,8 @@ class iniParser(_error, templateFormat): classObj = self.getClassObj("plasma") else: if nameFomat == "plasma": - self.setError(_("In the file %s (format - 'plasma'), "\ - "write the variable in the format 'samba'")\ + self.setError(_("Trying to write a variable of 'samba' " + "format to file %s (format - 'plasma')")\ %self.iniFile) return False # формат samba @@ -5468,7 +5491,7 @@ class iniParser(_error, templateFormat): try: objIni = self.getClassObj("plasma")(textIni) except: - self.setError(_("Incorrect format file") + ": " + \ + self.setError(_("Incorrect file format") + ": " + \ self.iniFile) self.checkIni = False return self.checkIni @@ -5521,8 +5544,8 @@ class iniParser(_error, templateFormat): formatPlasma = True else: if nameFomat == "plasma": - self.setError(_("In the file %s (format - 'plasma'), "\ - "get the variable in the format 'samba'")\ + self.setError(_("Trying to fetch a variable of 'samba' " + "format from file %s (format - 'plasma')")\ %self.iniFile) return False # формат samba @@ -5588,8 +5611,8 @@ class iniParser(_error, templateFormat): formatPlasma = True else: if nameFomat == "plasma": - self.setError(_("In the file %s (format - 'plasma'), "\ - "get all variables in the format 'samba'")\ + self.setError(_("Trying to fetch a variable of 'samba' " + "format from file %s (format - 'plasma')")\ %self.iniFile) return False # формат samba diff --git a/calculate/lib/datavars.py b/calculate/lib/datavars.py index c96e999..550319a 100644 --- a/calculate/lib/datavars.py +++ b/calculate/lib/datavars.py @@ -1061,7 +1061,7 @@ class DataVars: return True else: raise DataVarsError(_("Unable to find alias '%s' of the path" - "for storage of template variables")%location) + " for storage of template variables")%location) return False def Select(self,selField,where="os_disk_dev",eq=None,ne=None, diff --git a/calculate/lib/encrypt.py b/calculate/lib/encrypt.py index 3f2a8cb..b899967 100644 --- a/calculate/lib/encrypt.py +++ b/calculate/lib/encrypt.py @@ -30,7 +30,7 @@ except ImportError: from cl_print import color_print # для создания сертификата import pwd -from server.utils import execProg +#from server.utils import execProg import cl_overriding from utils.common import genpassword from utils.files import removeDir @@ -61,7 +61,7 @@ class encrypt(color_print): """ if not password: self.printERROR(_("ERROR") + " getHashPasswd: " + - _("password empty")) + _("empty password")) return False hashPwd = "" @@ -111,11 +111,11 @@ class encrypt(color_print): else: if SecHashAlg in ("lm","nt"): self.printERROR(_("ERROR") + " getHashPasswd: " + - (_("Can not support '%s' crypto algorithm") + (_("Failed to support '%s' crypto algorithm") %SecHashAlg) + " " + _("without py-smbpasswd")) else: self.printERROR(_("ERROR") + " getHashPasswd: " + - _("Can not support '%s' crypto algorithm") + _("Failed to support '%s' crypto algorithm") %SecHashAlg) return False return hashPwd @@ -255,7 +255,7 @@ nsCertType = %(nsCertType)s def createCnfFile(self, textCnf): '''Generate openssl.cnf file''' if not os.path.exists(self.sslFile): - self.printERROR(_("Can not found %s")%self.sslFile) + self.printERROR(_("%s not found")%self.sslFile) return False strData = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time())) cnfFileName = "%s.%s.cnf" %(strData,genpassword()) @@ -307,7 +307,7 @@ nsCertType = %(nsCertType)s try: pwdObj = pwd.getpwnam(userName) except: - self.printERROR(_("Not found user %s")%userName) + self.printERROR(_("User %s not found")%userName) return False uid = pwdObj.pw_uid gid = pwdObj.pw_gid @@ -353,7 +353,7 @@ nsCertType = %(nsCertType)s 'certKeyFile':CAKeyFile, 'sslBits':sslBits} if execProg(execStr) is False: - self.printERROR(_("Can not execute '%s'")%execStr) + self.printERROR(_("Failed to execute '%s'")%execStr) return False if os.path.exists(CAKeyFile): os.chown(CAKeyFile, uid,gid) @@ -365,7 +365,7 @@ nsCertType = %(nsCertType)s 'certKeyFile':CAKeyFile, 'certFile':CACertFile} if execProg(execStr) is False: - self.printERROR(_("Can not execute '%s'")%execStr) + self.printERROR(_("Failed to execute '%s'")%execStr) return False if os.path.exists(CACertFile): os.chown(CACertFile, uid,gid) @@ -409,7 +409,7 @@ nsCertType = %(nsCertType)s try: pwdObj = pwd.getpwnam(userName) except: - self.printERROR(_("Not found user %s")%userName) + self.printERROR(_("User %s not found")%userName) return False uid = pwdObj.pw_uid gid = pwdObj.pw_gid @@ -448,7 +448,7 @@ nsCertType = %(nsCertType)s 'certKeyFile':keyFile, 'sslBits':sslBits} if execProg(execStr) is False: - self.printERROR(_("Can not execute '%s'")%execStr) + self.printERROR(_("Failed to execute '%s'")%execStr) return False if os.path.exists(keyFile): os.chown(keyFile, uid,gid) @@ -460,7 +460,7 @@ nsCertType = %(nsCertType)s 'certKeyFile':keyFile, 'certCsrFile':csrFile} if execProg(execStr) is False: - self.printERROR(_("Can not execute '%s'")%execStr) + self.printERROR(_("Failed to execute '%s'")%execStr) return False if os.path.exists(csrFile): os.chown(csrFile, uid,gid) @@ -485,73 +485,73 @@ nsCertType = %(nsCertType)s # check certificate return self.checkCertificate(certFile) - def createCertificate(self, - sslCountry=sslCountry, - sslState=sslCountry, - sslLocality=sslLocality, - sslOrganization=sslOrganization, - sslUnit=sslUnit, - sslCommonName=sslCommonName, - sslEmail=sslEmail, - nsCertType=nsCertType, - sslDays=sslDays, - sslBits=sslBits, - userName=userName, - certFile=certFile, - fileMode=fileMode, - keyFile=keyFile): - """Создает сертификат""" - certAndKeyFiles = [certFile, keyFile] - foundCertFiles = filter(lambda x: os.path.exists(x), certAndKeyFiles) - if len(foundCertFiles)==2: - return True - # Удаляем файл сертификата - map(lambda x: os.remove(x), foundCertFiles) - # получаем id и gid пользователя - try: - pwdObj = pwd.getpwnam(userName) - except: - self.printERROR(_("Not found user %s")%userName) - return False - uid = pwdObj.pw_uid - gid = pwdObj.pw_gid - textCnf=self.templCnfData%{'sslBits':sslBits, - 'sslCountry':sslCountry, - 'sslState':sslState, - 'sslLocality':sslLocality, - 'sslOrganization':sslOrganization, - 'sslUnit':sslUnit, - 'sslCommonName':sslCommonName, - 'sslEmail':sslEmail, - 'nsCertType':nsCertType} - cnfFile = self.createCnfFile(textCnf) - if cnfFile is False: - return False - # Cоздание директорий - for fileName in certAndKeyFiles: - dirName = os.path.split(fileName)[0] - if not os.path.exists(dirName): - self._createDir(dirName, uid=uid, gid=gid) - # Создание сертификата - textLine = execProg("%s req -new -x509 -nodes -config '%s'" - "-days %s -out '%s'-keyout '%s'" - %(self.sslFile, cnfFile, sslDays, certFile, - keyFile)) - if textLine is False: - self.printERROR(_("Can not create certificate %s")%certFile) - return False - # Удаление конфигурационного файла - if os.path.exists(cnfFile): - os.remove(cnfFile) - # Меняем права - if os.path.exists(certFile): - os.chown(certFile, uid,gid) - os.chmod(certFile, fileMode) - if os.path.exists(keyFile): - os.chown(keyFile, uid,gid) - os.chmod(keyFile, fileMode) - - return self.checkCertificate(certFile) +# def createCertificate(self, +# sslCountry=sslCountry, +# sslState=sslCountry, +# sslLocality=sslLocality, +# sslOrganization=sslOrganization, +# sslUnit=sslUnit, +# sslCommonName=sslCommonName, +# sslEmail=sslEmail, +# nsCertType=nsCertType, +# sslDays=sslDays, +# sslBits=sslBits, +# userName=userName, +# certFile=certFile, +# fileMode=fileMode, +# keyFile=keyFile): +# """Создает сертификат""" +# certAndKeyFiles = [certFile, keyFile] +# foundCertFiles = filter(lambda x: os.path.exists(x), certAndKeyFiles) +# if len(foundCertFiles)==2: +# return True +# # Удаляем файл сертификата +# map(lambda x: os.remove(x), foundCertFiles) +# # получаем id и gid пользователя +# try: +# pwdObj = pwd.getpwnam(userName) +# except: +# self.printERROR(_("Not found user %s")%userName) +# return False +# uid = pwdObj.pw_uid +# gid = pwdObj.pw_gid +# textCnf=self.templCnfData%{'sslBits':sslBits, +# 'sslCountry':sslCountry, +# 'sslState':sslState, +# 'sslLocality':sslLocality, +# 'sslOrganization':sslOrganization, +# 'sslUnit':sslUnit, +# 'sslCommonName':sslCommonName, +# 'sslEmail':sslEmail, +# 'nsCertType':nsCertType} +# cnfFile = self.createCnfFile(textCnf) +# if cnfFile is False: +# return False +# # Cоздание директорий +# for fileName in certAndKeyFiles: +# dirName = os.path.split(fileName)[0] +# if not os.path.exists(dirName): +# self._createDir(dirName, uid=uid, gid=gid) +# # Создание сертификата +# textLine = execProg("%s req -new -x509 -nodes -config '%s'" +# "-days %s -out '%s'-keyout '%s'" +# %(self.sslFile, cnfFile, sslDays, certFile, +# keyFile)) +# if textLine is False: +# self.printERROR(_("Can not create certificate %s")%certFile) +# return False +# # Удаление конфигурационного файла +# if os.path.exists(cnfFile): +# os.remove(cnfFile) +# # Меняем права +# if os.path.exists(certFile): +# os.chown(certFile, uid,gid) +# os.chmod(certFile, fileMode) +# if os.path.exists(keyFile): +# os.chown(keyFile, uid,gid) +# os.chmod(keyFile, fileMode) +# +# return self.checkCertificate(certFile) def _createDir(self, dirName, uid=0, gid=0, mode=0700): """Создание пользовательской директории""" @@ -572,7 +572,7 @@ nsCertType = %(nsCertType)s """ dirName = os.path.split(fileName)[0] if not os.path.exists(dirName): - self.printERROR(_("Path %s not exists") %dirName) + self.printERROR(_("Path %s does not exist") %dirName) return False fd = os.open(fileName, os.O_CREAT) os.close(fd) diff --git a/calculate/lib/format/patch.py b/calculate/lib/format/patch.py index d1a86c6..3d63b1e 100644 --- a/calculate/lib/format/patch.py +++ b/calculate/lib/format/patch.py @@ -54,7 +54,7 @@ class patch(_error): def processingFile(self, textConfigFile): """Обработка конфигурационного файла""" if not self.doc: - self.setError(_("Can not convert text template in XML")) + self.setError(_("Cannot convert the text template in XML")) return False retTextConfigFile = textConfigFile tags = ["reg", "text"] @@ -63,7 +63,7 @@ class patch(_error): for node in self.rootNode.childNodes: if node.nodeType==node.ELEMENT_NODE: if not node.tagName == tags[tagsIndex]: - self.setError(_("Incorrect text template")) + self.setError(_("Incorrect template text")) return False if tagsIndex == 1: tagsIndex = 0 @@ -76,23 +76,23 @@ class patch(_error): if reText is None: textNode = node.toxml().encode("UTF8") self.setError(\ - _("Incorrect text template")+ ": \n" +\ + _("Incorrect template text")+ ": \n" +\ "%s" %textNode) return False else: self.setError(\ - _("Incorrect text template ''")) + _("Incorrect text of template ''")) return False if not reText.strip(): self.setError(\ - _("Incorrect text template '%s'")\ + _("Incorrect text of template '%s'")\ %reText) return False try: regex = re.compile(reText) except: self.setError(\ - _("Incorrect text template '%s'")\ + _("Incorrect text of template '%s'")\ %reText) return False elif node.tagName == "text" and regex: @@ -101,7 +101,7 @@ class patch(_error): if text is None: textNode = node.toxml().encode("UTF8") self.setError(\ - _("Incorrect text template")+ ": \n" +\ + _("Incorrect template text")+ ": \n" +\ "%s" %textNode) return False else: diff --git a/calculate/lib/format/xml_gconf.py b/calculate/lib/format/xml_gconf.py index 42a3234..e42d891 100644 --- a/calculate/lib/format/xml_gconf.py +++ b/calculate/lib/format/xml_gconf.py @@ -119,7 +119,8 @@ class xml_gconf(xml_xfce): (found '<%(tag)s>..'")%{'tag':tagName}) return False if not n.hasAttribute("name"): - self.setError(_('Not found attribute "name" in tag entry')) + self.setError( + _("Arrtibute \"name\" not found in the tag entry")) return False flagType = n.hasAttribute("type") flagValue = False @@ -127,7 +128,8 @@ class xml_gconf(xml_xfce): if flagSchema: nSchema = n.getAttribute("schema") if not flagType and not flagSchema: - self.setError(_('Not found attribute "type" in tag entry')) + self.setError( + _("Arrtibute \"type\" not found in the tag entry")) return False nName = n.getAttribute("name") attrName = u"attribute::name='%s'"%nName @@ -179,8 +181,7 @@ Valid values attribute 'action': \ flagJoin = False flagDrop = True if flagRootNode: - textError = \ - _('Incorrect action="drop" in the root node') + textError = _('Incorrect action="drop" in root node') self.setError(textError) return False if oldNodes: diff --git a/calculate/lib/format/xml_gconf_tree.py b/calculate/lib/format/xml_gconf_tree.py index 5b35e31..64892ca 100644 --- a/calculate/lib/format/xml_gconf_tree.py +++ b/calculate/lib/format/xml_gconf_tree.py @@ -91,8 +91,7 @@ Valid values attribute 'action': \ flagDrop = True flagJoin = False if flagRootNode: - textError = \ - _('Incorrect action="drop" in the root node') + textError = _('Incorrect action="drop" in root node') self.setError(textError) return False if oldNodes: diff --git a/calculate/lib/format/xml_xfce.py b/calculate/lib/format/xml_xfce.py index 8347136..5361892 100644 --- a/calculate/lib/format/xml_xfce.py +++ b/calculate/lib/format/xml_xfce.py @@ -182,8 +182,7 @@ Valid values attribute 'action': \ flagJoin = False flagDrop = True if flagRootNode: - textError = \ - _('Incorrect action="drop" in the root node') + textError = _('Incorrect action="drop" in root node') self.setError(textError) return False if oldNodes: diff --git a/calculate/lib/format/xml_xfcepanel.py b/calculate/lib/format/xml_xfcepanel.py index 37532cb..4bd1322 100644 --- a/calculate/lib/format/xml_xfcepanel.py +++ b/calculate/lib/format/xml_xfcepanel.py @@ -105,8 +105,7 @@ Valid values attribute 'action': \ flagJoin = False flagDrop = True if flagRootNode: - textError = \ - _('Incorrect action="drop" in the root node') + textError = _('Incorrect action="drop" in root node') self.setError(textError) return False if path == "panel": diff --git a/calculate/lib/server/__init__.py b/calculate/lib/server/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/calculate/lib/server/ldap.py b/calculate/lib/server/ldap.py deleted file mode 100644 index 34e1201..0000000 --- a/calculate/lib/server/ldap.py +++ /dev/null @@ -1,435 +0,0 @@ -#-*- coding: utf-8 -*- - -# Copyright 2008-2012 Calculate Ltd. http://www.calculate-linux.org -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -from mod import mod_ldap -import sys -sys.modules['mod_ldap'] = mod_ldap - -from mod_ldap import LDAPError, MOD_REPLACE, MOD_ADD, SCOPE_SUBTREE,\ - SCOPE_ONELEVEL -from ldif import LDIFParser, LDIFWriter -import cStringIO, StringIO -from calculate.lib.cl_utils import _error -from calculate.lib.cl_print import color_print -from calculate.lib.cl_template import template, iniParser -from calculate.lib.cl_ldap import ldapFun -from share import shareVars -from utils import genSleep, stringIsJpeg -# Перевод модуля -from calculate.lib.cl_lang import setLocalTranslate -setLocalTranslate("cl_lib3",sys.modules[__name__]) - -def adminConnectLdap(fun): - """Cоединение с LDAP администратором сервиса (декоратор) - - соединение с LDAP и проверка установки необходимых переменных - """ - def ret (self, *arg, **argv): - flagError = False - if not self.clVars: - self.createClVars() - if not self.ldapObj: - if not self.getLdapObjInFile(): - flagError = True - if not self.baseDN: - if self.clVars.defined("ld_base_dn"): - self.baseDN = self.clVars.Get("ld_base_dn") - if not self.baseDN: - self.printERROR (_('Not found LDAP base DN')) - if flagError: - return False - else: - return fun(self, *arg , **argv) - return ret - - -class addLdif(LDIFParser): - """Класс необходимый для добавления записей в LDAP""" - def __init__(self, strInput,ldapCon): - FD = cStringIO.StringIO(strInput) - LDIFParser.__init__(self, FD) - self.ldapCon = ldapCon - - def handle(self, dn, entry): - self.ldapCon.add_s(dn, entry.items()) - - -class ldapFunction(ldapFun): - '''Объект для работы с LDAP сервером''' - def __init__(self, dnUser, password): - ldapFun.__init__(self, dnUser, password) - - def ldapAdd(self, strLdif): - """Добавляем строку содержащую ldif в LDAP - - Если данные существуют - ошибка - """ - if self.conLdap: - try: - # Записываем параметры из ldif файла в LDAP сервер - parser = addLdif(strLdif,self.conLdap) - parser.parse() - except LDAPError, e: - self.setError(e[0]['desc']) - return False - except: - self.setError("Error in ldif file") - return False - return True - else: - self.setError(_("No connect to LDAP server")) - return False - - -class iniLdapParser(iniParser): - """Класс для работы c ini-файлом ldap""" - def __init__(self): - # название ini файла - self.nameIniFile = "/etc/calculate/calculate.ldap" - iniParser.__init__(self, self.nameIniFile) - # права создаваемого ini-файла - self.setMode(0600) - pathIniFile = os.path.split(self.nameIniFile)[0] - if not os.path.exists(pathIniFile): - os.makedirs(pathIniFile) - -class shareldap(_error, color_print, shareVars): - """Общие методы для работы с LDAP для серверных программ""" - - # DN сервисов относительно базового - ServicesDN = "ou=Services" - # Переменная объект Vars - clVars = False - # Переменная объект ldapFunction - ldapObj = False - # Переменная соединение с LDAP сервером - conLdap = False - # Базовый DN LDAP сервера - baseDN = False - - def addDN(self, *arg): - """Складывает текстовые элементы DN""" - DNs = [] - for dn in arg: - if dn: - DNs.append(dn) - return ','.join(DNs) - - @adminConnectLdap - def searchLdapDN(self, name, relDN, attr, retAttr=None): - """Находит DN в LDAP""" - DN = self.addDN(relDN,self.baseDN) - #searchScope = SCOPE_SUBTREE - searchScope = SCOPE_ONELEVEL - searchFilter = "%s=%s" %(attr,name) - retrieveAttributes = retAttr - resSearch = self.ldapObj.ldapSearch(DN, searchScope, - searchFilter, retrieveAttributes) - return resSearch - - @adminConnectLdap - def addEntry(self, DN, entry, errorMessage): - """Добавление узла в LDAP""" - try: - self.conLdap.add_s(DN, entry) - except LDAPError, e: - self.printERROR(_("LDAP Error") + ": " + e[0]['desc'].strip()) - self.printERROR(errorMessage) - return False - return True - - def getLdapObjInFile(self, part="admin"): - """Получаем объект ldapFunction из ini файла - - В выходном объекте есть соединение с LDAP сервером: self.conLdap - """ - # Если раннее была ошибка то выходим - if self.getError(): - self.printERROR (_("ERROR") + ": " +\ - self.getError().strip()) - return False - ldapParser = iniLdapParser() - adminDn = ldapParser.getVar(part,"DN") - adminPw = ldapParser.getVar(part,"PASS") - if not (adminDn or adminPw): - if part == "admin": - service = "LDAP" - else: - service = part - self.printERROR(\ - _("Admin password for the service %s could not be found")%service) - return False - ldapObj = ldapFunction(adminDn, adminPw) - # Генератор задержек - wait = genSleep() - while ldapObj.getError(): - try: - # Задержка - wait.next() - except StopIteration: - break - # Очистка ошибки - _error.error = [] - ldapObj = ldapFunction(adminDn, adminPw) - if ldapObj.getError(): - # Удаляем одинаковые ошибки - listError = [] - for e in ldapObj.error: - if not e in listError: - listError.append(e) - _error.error = listError - self.printERROR (_("LDAP connect error") + ": " +\ - ldapObj.getError().strip()) - return False - # Устанавливаем у объекта соединение и объект LDAP функций - self.ldapObj = ldapObj - self.conLdap = ldapObj.conLdap - return True - - def connectToLDAP(self, adminDn, adminPw): - """Подключаемся к LDAP - для внешних программ запускающихся не от root - """ - ldapObj = ldapFunction(adminDn, adminPw) - # Генератор задержек - wait = genSleep() - while ldapObj.getError(): - try: - # Задержка - wait.next() - except StopIteration: - break - # Очистка ошибки - _error.error = [] - ldapObj = ldapFunction(adminDn, adminPw) - if ldapObj.getError(): - # Удаляем одинаковые ошибки - listError = [] - for e in ldapObj.error: - if not e in listError: - listError.append(e) - _error.error = listError - self.printERROR (_("LDAP connect error") + ": " +\ - ldapObj.getError().strip()) - return False - # Устанавливаем у объекта соединение и объект LDAP функций - self.ldapObj = ldapObj - self.conLdap = ldapObj.conLdap - return True - - @adminConnectLdap - def modAttrsDN(self, relDN, modAttrs): - """Модифицирует аттрибуты DN""" - DN = self.addDN(relDN,self.baseDN) - if modAttrs: - try: - self.conLdap.modify_s(DN, modAttrs) - except LDAPError, e: - self.printERROR(e[0]['desc']) - return False - return True - - @adminConnectLdap - def modifyElemDN(self, relDN, newFirstDn): - """Изменяет основной элемент DN (uid, cn и др.)""" - DN = self.addDN(relDN,self.baseDN) - try: - self.conLdap.modrdn_s(DN, newFirstDn) - except LDAPError, e: - self.printERROR(e[0]['desc']) - return False - return True - - def getMaxAttrDN(self, relDN, name, attr, numMin, numMax, attrSearch): - """Находит максимальный добавленный аттрибут в LDAP DN""" - resSearch = self.searchLdapDN(name, relDN, attr, [attrSearch]) - lst = [] - lst.append(0) - if resSearch: - for scope in resSearch: - if scope[0][1].has_key(attrSearch): - uid = int(scope[0][1][attrSearch][0]) - if uid<=numMax and uid>=numMin: - lst.append(uid) - return max(lst) - return False - - def createLdif(self, ldifFile): - """Cоздает ldif из ldif - шаблона""" - if not os.access(ldifFile, os.F_OK): - self.setError(_("File not found") + ":\n " + ldifFile) - return False - FD = open (ldifFile) - ldifTemplate = FD.read() - FD.close() - clTempl = template(self.clVars) - # Применяем условия к шаблону - ldifTemplate = clTempl.applyTermsTemplate(ldifTemplate, ldifFile) - # Заменяем переменные в шаблоне - ldifTemplate = clTempl.applyVarsTemplate(ldifTemplate, ldifFile) - return ldifTemplate - - @adminConnectLdap - def delDN(self, relDN): - """Удаляет одиночный DN""" - DN = self.addDN(relDN,self.baseDN) - try: - self.conLdap.delete_s(DN) - except LDAPError, e: - self.printERROR(e[0]['desc']) - return False - return True - - @adminConnectLdap - def deleteDN(self, relDelDN): - """Удаляет DN и все внутренние элементы""" - delDN = self.addDN(relDelDN, self.baseDN) - delListDN=[] - try: - dnList = self.conLdap.search_s(delDN, - SCOPE_SUBTREE, - '(objectclass=*)', - ['']) - except LDAPError, e: - self.printERROR("deleteDN: "+e[0]['desc']) - return False - for dn, f in dnList: - delListDN.append(dn) - delListDN.sort(lambda x, y: cmp(len(y), len(x))) - for dn in delListDN: - try: - self.conLdap.delete_s(dn) - except LDAPError, e: - self.printERROR("deleteDN: "+e[0]['desc']) - return False - return True - - @adminConnectLdap - def fullElementDNtoText(self, relDN="", ldapFilter='(objectclass=*)'): - """Выводит все внутренние элементы DN виде текста""" - DN = self.addDN(relDN, self.baseDN) - listDN=[] - try: - dnList = self.conLdap.search_s(DN, - SCOPE_SUBTREE, - ldapFilter,None) - except LDAPError, e: - self.printERROR("fullElementDN: "+e[0]['desc']) - return False - FDOUT = StringIO.StringIO("") - writer = LDIFWriter(FDOUT) - for dn, f in dnList: - writer.unparse(dn, f) - FDOUT.seek(0) - return FDOUT.read() - - @adminConnectLdap - def fullElementSambaDNtoText(self, relDN=""): - """Выводит все внутренние элементы ветки Samba в виде текста""" - return self.fullElementDNtoText(relDN,'(|(|(|(|(ou:dn:=Samba)\ -(ou:dn:=Unix))(ou:dn:=LDAP))(!(ou:dn:=Services)))(ou=Services))') - - @adminConnectLdap - def fullElementUnixDNtoText(self, relDN=""): - """Выводит все внутренние элементы ветки Unix в виде текста""" - return self.fullElementDNtoText(relDN,'(|(|(|(ou:dn:=Unix)\ -(ou:dn:=LDAP))(!(ou:dn:=Services)))(ou=Services))') - - @adminConnectLdap - def fullElementMailDNtoText(self, relDN=""): - """Выводит все внутренние элементы ветки Mail в виде текста""" - baseDN = self.clVars.Get("ld_base_dn") - baseDNName, baseLogin = baseDN.split(",")[0].split("=") - proxyDN = self.clVars.Get("ld_bind_dn") - proxyDNName, proxyLogin = proxyDN.split(",")[0].split("=") - #return self.fullElementDNtoText(relDN,'(&(|(|(&(ou:dn:=Replication)\ -#(ou:dn:=Mail))(!(ou:dn:=Services)))(ou=Services))(!(&(%s:dn:=%s)\ -#(%s:dn:=%s))))'%(proxyDNName, proxyLogin, baseDNName, baseLogin)) - return self.fullElementDNtoText(relDN,'(&(&(|(|(|(ou:dn:=LDAP)\ -(ou=Mail))(!(ou:dn:=Services)))(ou=Services))(!(&(%s:dn:=%s)(%s:dn:=%s))))\ -(!(ou:dn:=Worked)))'%(proxyDNName, proxyLogin, baseDNName, baseLogin)) - - @adminConnectLdap - def fullElementMailSambaDNtoText(self, relDN=""): - """Выводит все внутренние элементы ветки Samba и Mail в виде текста""" - return self.fullElementDNtoText(relDN,'(&(|(|(|(|(|(ou:dn:=Samba)\ -(ou:dn:=Unix))(ou:dn:=LDAP))(ou:dn:=Mail))(!(ou:dn:=Services)))(ou=Services))\ -(!(|(&(&(ou:dn:=Users)(ou:dn:=Mail))(uid=*))(&(&(ou:dn:=Groups)(ou:dn:=Mail))\ -(cn=*)))))') - - @adminConnectLdap - def fullElementMailUnixDNtoText(self, relDN=""): - """Выводит все внутренние элементы ветки Unix и Mail в виде текста""" - return self.fullElementDNtoText(relDN,'(&(|(|(|(|(ou:dn:=Unix)\ -(ou:dn:=LDAP))(ou:dn:=Mail))(!(ou:dn:=Services)))(ou=Services))\ -(!(|(&(&(ou:dn:=Users)(ou:dn:=Mail))(uid=*))(&(&(ou:dn:=Groups)(ou:dn:=Mail))\ -(cn=*)))))') - - def setJpegPhotoUser(self, userName, photoPath, attr="uid"): - """Добавляем jpeg фотографию пользователя в LDAP""" - import subprocess - try: - FD = open(photoPath) - photoData = FD.read() - FD.close() - except: - self.printERROR(_("Not open file") + ": " + str(photoPath)) - return False - searchUser = self.searchLdapDN(userName, self.relUsersDN, attr) - if not searchUser: - self.printERROR(_("User") + " " + str(userName) + " "+\ - _("not found")) - return False - modAttrs = [] - if not stringIsJpeg(photoData): - flagError = False - pipe = subprocess.Popen("convert '%s' jpg:-" %photoPath, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, close_fds=True, - shell=True) - fOut, fIn, fErr = (pipe.stdout, pipe.stdin, pipe.stderr) - fIn.close() - # Код возврата - retcode = pipe.wait() - if retcode != 0: - self.printERROR(_("Can not convert file '%s' in jpeg format")\ - %photoPath) - flagError = True - fErr.close() - if not flagError: - photoData = fOut.read() - if not stringIsJpeg(photoData): - self.printERROR(\ - _("Can not convert file '%s' in jpeg format") %photoPath) - flagError = True - fOut.close() - if flagError: - return False - if searchUser[0][0][1].has_key('jpegPhoto'): - modAttrs.append((MOD_REPLACE, 'jpegPhoto', photoData)) - else: - modAttrs.append((MOD_ADD, 'jpegPhoto', photoData)) - userDN = self.addDN("%s=%s"%(attr,userName),self.relUsersDN) - if not self.modAttrsDN(userDN, modAttrs): - return False - return True - - def searchService(self): - """Поиск DN сервиса""" - name, value = self.relServDN.split('=') - resSearch = self.searchLdapDN(value, self.ServicesDN, name) - return resSearch diff --git a/calculate/lib/server/share.py b/calculate/lib/server/share.py deleted file mode 100644 index 4ea9616..0000000 --- a/calculate/lib/server/share.py +++ /dev/null @@ -1,137 +0,0 @@ -#-*- coding: utf-8 -*- - -# Copyright 2008-2012 Calculate Ltd. http://www.calculate-linux.org -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import sys - -from calculate.lib.cl_datavars import DataVars -from calculate.lib.cl_print import color_print -from calculate.lib.cl_lang import setLocalTranslate -setLocalTranslate('cl_lib3',sys.modules[__name__]) - -class shareVars: - """Общие методы для классов модулей серверных программ""" - # Переменная объект Vars - clVars = False - - def createClVars(self, clVars=False, returnImportVar=False): - """Создает объект Vars""" - # Словарь импортируемых переменных из ini Файлов - dictImportVars = {} - if not clVars: - clVars = DataVars() - clVars.flServer() - dictImportVars = clVars.flIniFile() - # Устанавливаем у объекта объект Vars - self.clVars = clVars - if returnImportVar: - return dictImportVars - return True - - def deleteServiceVarsInFile(self, service): - """Удаляет переменные сервиса из ini файлов - - После запуска этого метода объект self.clVars должен быть пересоздан - """ - importVarsDict = self.createClVars(False,True) - serviceNameVars = "_%s_" %service - for location in importVarsDict.keys(): - for nameVar in importVarsDict[location]: - # Если имя сервиса присутствует в переменной - - # Удаляем переменную - if serviceNameVars in nameVar: - if not self.clVars.Delete(nameVar, location, "server"): - return False - self.clVars = False - return True - - def saveVarsClient(self, listVarName): - """Записывает переменные для клиента calcualte-client""" - #считаем переменные для клиента - dictVar = {} - flagError = False - for varName in listVarName: - value = self.clVars.Get(varName) - if not value and value != "": - self.printERROR(_("Variables %s is empty")%varName) - flagError = True - break - dictVar[varName] = value - if flagError: - return False - #Запишем переменные в клиентскую секцию - for name,value in dictVar.items(): - value = str(value) - if not value.strip(): - self.clVars.Delete(name) - if not self.clVars.Write(name,value,True,"remote","client"): - self.printERROR(_("Error writing variable %s")%name) - flagError = True - break - if flagError: - return False - return True - - def reloadDefaultVar(self, nameVar): - """При получениии значения переменной снова - - вызывается метод заполнения переменной""" - self.clVars.Set(nameVar,"",True) - self.clVars.__getattribute__(nameVar).countFill = 0 - self.clVars.__getattribute__(nameVar).fillStart = True - return True - -class servicesAPI(color_print): - """Методы сервисов используемые другими сервисами""" - # Путь к модулю сервера - __pathServer__ = "/usr/lib/calculate/calculate-server/pym" - # Названия импортированных классов - __imports_names__ = [] - # Импортированные классы - __imports_classes__ = {} - - def __getServiceObj__(self, serviceName): - """Получаем объект сервиса""" - if not serviceName in __imports_names__: - try: - classImport = getattr(__import__("cl_ldap", globals(),\ - locals(),[]), serviceName) - except (ImportError, AttributeError): - self.printERROR(_("Can not found service class '%s'")\ - %serviceName) - return False - __imports_classes__[serviceName] = classImport - __imports_names__.append(serviceName) - retObj = classImport() - else: - retObj = __imports_classes__[serviceName]() - return retObj - - def searchUnixUser(self, userName, servUnixObj=None): - """Поиск пользователя в LDAP ветке Unix сервиса""" - if not servUnixObj: - servUnixObj = self.__getServiceObj__("unix") - if not servUnixObj: - exit(1) - return servUnixObj.searchUnixUser(userName) - - def searchPasswdUser(self, userName, servUnixObj=None): - """Поиск пользователя в /etc/passwd""" - if not servUnixObj: - servUnixObj = self.__getServiceObj__("unix") - if not servUnixObj: - exit(1) - return servUnixObj.searchPasswdUser(userName) - diff --git a/calculate/lib/server/users.py b/calculate/lib/server/users.py deleted file mode 100644 index b51b743..0000000 --- a/calculate/lib/server/users.py +++ /dev/null @@ -1,326 +0,0 @@ -#-*- coding: utf-8 -*- - -# Copyright 2008-2012 Calculate Ltd. http://www.calculate-linux.org -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys -# Ввод pwd -import getpass -import types -from calculate.lib.utils.files import removeDir -from calculate.lib.cl_print import color_print -from share import servicesAPI -from utils import rawInput, isCorrectStringNet, addInfoUser, addInfoGroup, dialogYesNo -from calculate.lib.cl_lang import setLocalTranslate -setLocalTranslate('cl_lib3',sys.modules[__name__]) - -class users(color_print): - """Общие методы для серверных программ, - - (работа с пользователями и группами)""" - - # Объект с методами доступа к другим сервисам - servicesAPIObj = servicesAPI() - - # Статические группы - staticGroups = {\ - 'client':addInfoGroup('client', - '900', - 'Client group', - '2801', - '2'), - 'Domain Admins':addInfoGroup('Domain Admins', - '512', - 'Domain Administrators', - '512', - '2'), - 'Domain Users':addInfoGroup('Domain Users', - '513', - 'Domain Users', - '513', - '2'), - 'Domain Guests':addInfoGroup('Domain Guests', - '514', - 'Domain Guests Users', - '514', - '2'), - 'Domain Computers':addInfoGroup('Domain Computers', - '515', - 'Domain Computers accounts', - '515', - '2'), - 'Administrators':addInfoGroup('Administrators', - '544', - 'Domain Members can fully \ -administer the computer/sambaDomainName', - '544', - '5', - "S-1-5-32-544"), - 'Account Operators':addInfoGroup('Account Operators', - '548', - 'Domain Users to manipulate \ -users accounts', - '548', - '5', - "S-1-5-32-548"), - 'System Operators':addInfoGroup('System Operators', - '549', - 'Domain System Operators', - '549', - '5', - "S-1-5-32-549"), - 'Print Operators':addInfoGroup('Print Operators', - '550', - 'Domain Print Operators', - '550', - '5', - "S-1-5-32-550"), - 'Backup Operators':addInfoGroup('Backup Operators', - '551', - 'Domain Members can bypass \ -file security to back up files', - '551', - '5', - "S-1-5-32-551"), - 'Replicators':addInfoGroup('Replicators', - '552', - 'Domain Supports file replication \ -in a sambaDomainName', - '552', - '5', - "S-1-5-32-552"), - } - # Статические пользователи - staticUsers = {\ - 'client':addInfoUser('client', - '900', - '900', - 'Client samba user'), - 'admin':addInfoUser('admin', - '901', - '544', - 'Admin samba user')} - - def getUserUidAndGid(self, userName, groupName=""): - """Находит в системе uid и gid пользователя - - userName - имя пользователя и имя группы пользователя - """ - if not groupName: - groupName = userName - import pwd - try: - uid = pwd.getpwnam(userName)[2] - except: - self.printERROR(_("Can not found user %s in this system")%userName) - return () - try: - import grp - gid = grp.getgrnam(groupName)[2] - except: - self.printERROR(_("Can not found group %s in this system")\ - %groupName) - return () - return (uid, gid) - - - def __restoreDelUser(self,userName,service,srcDir,message,unixObj=False): - """Возвращаем данные удаленного пользователя""" - # Ищем Unix пользователя - searchUnixUser = self.servicesAPIObj.searchUnixUser(userName, unixObj) - # id пользователя - strUid = "" - if searchUnixUser: - strUid = searchUnixUser[0][0][1]['uidNumber'][0] - else: - resPasswd = self.servicesAPIObj.searchPasswdUser(userName, unixObj) - if resPasswd: - strUid = resPasswd.split(":")[2] - if strUid: - delBackDir =\ - os.path.join(self.clVars.Get("sr_deleted_path"), - "%s-%s"%(userName,strUid), - service) - if strUid and os.path.exists(delBackDir) and os.listdir(delBackDir): - if message == None or type(message) == types.BooleanType: - dialogRes = message - else: - dialogRes = dialogYesNo(message) - if dialogRes and dialogRes == True: - try: - copyDir(srcDir, delBackDir) - except: - self.printERROR(_("Not restore user data in dir %s")\ - %srcDir) - return False - self.printSUCCESS(_("Restore user data in dir %s")\ - %srcDir) - return "Yes", delBackDir - elif dialogRes == False: - return "No", delBackDir - elif dialogRes == None: - return "Cancel", delBackDir - return True - - def restorePathDelUser(self,userName,destDir,relDir,message,unixObj=False): - """Восстанавливает директорию удаленного пользователя""" - removedDir = False - flagError = False - resRestore = self.__restoreDelUser(userName, relDir, - destDir, message, unixObj) - # Если ошибка то выходим - if not resRestore: - flagError = True - # Флаг создания директории профиля пользователя - createDir = destDir - term = "" - if resRestore == True: - term = message - if not flagError and type(resRestore) == types.TupleType: - # Если cansel - if resRestore[0] == "Cancel": - # Удаляем пользователя - flagError = True - term = None - # Если No - elif resRestore[0] == "No": - try: - removeDir(resRestore[1]) - except: - flagError = True - if not flagError: - removedDir = resRestore[1] - term = False - elif resRestore[0] == "Yes": - createDir = False - removedDir = resRestore[1] - term = True - if flagError or term == "": - return False - else: - return (term, createDir, removedDir) - - - def backupDelUser(self, userName, service, srcDir, unixObj=False): - """Сохраняем данные удаляемого пользователя""" - # Ищем Unix пользователя - searchUnixUser = self.servicesAPIObj.searchUnixUser(userName, unixObj) - # id пользователя - strUid = "" - if searchUnixUser: - strUid = searchUnixUser[0][0][1]['uidNumber'][0] - if strUid: - delBackDir =\ - os.path.join(self.clVars.Get("sr_deleted_path"), - "%s-%s"%(userName,strUid), - service) - if os.path.exists(delBackDir) and os.listdir(delBackDir): - self.printERROR(_("Found deleted user’s data in directory %s")\ - %delBackDir) - self.printERROR(_("Not created deleted user data dir %s")\ - %delBackDir) - return False - else: - delBackDir =\ - os.path.join(self.clVars.Get("sr_deleted_path"), - "%s"%(userName), - service) - i = 0 - while os.path.exists(delBackDir): - i += 1 - delBackDir =\ - os.path.join(self.clVars.Get("sr_deleted_path"), - "%s_%s"%(userName,i), - service) - # Cоздаем директорию хранения удаленных пользователей - if not os.path.exists(self.clVars.Get("sr_deleted_path")): - os.makedirs(self.clVars.Get("sr_deleted_path")) - #Делаем сохранение директории - try: - copyDir(delBackDir,srcDir) - except: - self.printERROR(_("Can not copy deleted user data in dir %s")\ - %delBackDir) - return False - self.printSUCCESS(_("Created deleted user data dir %s")\ - %delBackDir) - return True - - def removeEmptyDir(self, rmDir): - """Удаление пустых директорий""" - if not os.path.exists(rmDir): - self.printERROR(_("Not found remove dir %s") %rmDir) - return False - rDir = rmDir - while os.listdir(rDir) == []: - os.rmdir(rDir) - rDir = os.path.split(rDir)[0] - if rDir == "/": - break - return True - - def createUserDir(self, uid, gid, userDir, mode=0700): - """Создание пользовательской директории""" - if not os.path.exists(userDir): - os.makedirs(userDir) - if mode: - os.chmod(userDir,mode) - os.chown(userDir,uid,gid) - return True - else: - self.printERROR(_("Path %s exists") %userDir) - return False - - def createUserFile(self, fileName, fileTxt, uid, gid, mode=0644): - """Создает пользовательский файл с содержимым - - Если директория файла не существует то ошибка - """ - userDir = os.path.split(fileName)[0] - if not os.path.exists(userDir): - self.printERROR(_("Path %s not exists") %userDir) - return False - fd = os.open(fileName, os.O_CREAT) - os.close(fd) - os.chmod(fileName, mode) - os.chown(fileName,uid,gid) - if fileTxt: - FD = open(fileName, "r+") - FD.write(fileTxt) - FD.close() - return True - - def getUserAllowNetwork(self, strPrompt, strNetAllow): - """Получаем от пользователя доверительные сети - - вывод - список доверительных сетей - """ - def printW(): - cl_overriding.printSUCCESS(_("Incorrect string allow networks")) - cl_overriding.printSUCCESS(\ - _("Example: available networks: 10.0.0.0/24 10.0.10.0/24")) - cl_overriding.printSUCCESS(_("Try again\n")) - strNet = rawInput(strPrompt, strNetAllow) - i = 0 - while i<3 and not isCorrectStringNet(strNet): - printW() - strNet = rawInput(strPrompt, strNet) - i +=1 - if i == 3 and not isCorrectStringNet(strNet): - printW() - self.printERROR(_("You used four attempts, \ -if you want to continue to run the program again")) - return False - return isCorrectStringNet(strNet) diff --git a/calculate/lib/server/utils.py b/calculate/lib/server/utils.py deleted file mode 100644 index 229bee5..0000000 --- a/calculate/lib/server/utils.py +++ /dev/null @@ -1,288 +0,0 @@ -#-*- coding: utf-8 -*- - -# Copyright 2008-2012 Calculate Ltd. http://www.calculate-linux.org -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys -import re - -import cStringIO -import termios -# for symbol input -import tty -import time - -from calculate.lib.utils.common import getpathenv -from calculate.lib.utils.files import runOsCommand - -"""общие функции серверных программ""" - -def unicList(listEl): - """Уникальный список с сохранением порядка""" - retList = [] - [not x in retList and retList.append(x) for x in listEl] - return retList - - -def dialogYn(message): - """Вывод сообщения, ожидание нажатия Y или n - - если Y - True если n - False""" - - def getChar(): - fd = sys.stdin.fileno() - oldSet = termios.tcgetattr(fd) - tty.setraw(fd) - char = sys.stdin.read(1) - termios.tcsetattr(fd, termios.TCSADRAIN, oldSet) - return char - - def term(char): - if ord(char) == 3: - return None - if char == "Y": - return True - elif char == "n": - return False - else: - char = getChar() - return term(char) - - sys.stdout.write(message + ":") - char = getChar() - res = term(char) - sys.stdout.write("\n") - return res - - -def dialogYesNo(message, reYes=re.compile("^ye?s?$",re.I), - reNo=re.compile("^no?$",re.I)): - """Вывод сообщения, ожидание набора Yes или No (в любом регистре) - - если Yes - True, если No - False""" - sys.stdout.write(message + ": ") - sys.stdout.flush() - #strIn=sys.stdin.readline().lower().strip() - strIn = raw_input("") - sys.stdout.write("\n") - if reYes.match(strIn): - return True - elif reNo.match(strIn): - return False - else: - return dialogYesNo(message, reYes, reNo) - -def rawInput(promptText="", inputText=""): - """Создает поле ввода - - promptText - текст перед полем ввода - inputText - текст в поле ввода - """ - # Вывод в строку ввода - import readline - if inputText: - # Записываем текст для последующего вывода в строке ввода - readline.set_pre_input_hook(lambda:\ - readline.insert_text(inputText) or\ - readline.redisplay()) - strInput = "" - if promptText: - # Получаем текст введенный пользователем - strInput = raw_input(promptText) - else: - strInput = raw_input() - if inputText: - # Сбрасываем строку ввода - readline.set_pre_input_hook(None) - return strInput - -def execProg(cmdStrProg, inStr=False, envProg={}): - """Выполняет внешнюю программу - - Параметры: - cmdStrProg внешняя программа - inStr данные передаваемые программе на страндартный вход. - Возвращаемые параметры: - строки которые выведет внешняя программа или False в случае ошибки - """ - env_path = {"PATH":getpathenv()} - env = {} - env.update(os.environ.items() + env_path.items() + envProg.items()) - retCode,programOut = runOsCommand(cmdStrProg,in_str=inStr,env_dict=env) - if not retCode: - return programOut - return False - -def genSleep(timeSleep=(0.2, 0.4, 0.8)): - """Генератор задержек""" - for t in timeSleep: - time.sleep(t) - yield(t) - -def stringIsJpeg(string): - """Определяет является ли строка - jpeg изображением""" - if len(string)<8: - return False - FD = cStringIO.StringIO(string) - isJpeg = False - FD.seek(0, 0) - (firstByte, secondByte) = FD.read(2) - if (ord(firstByte) == 0xff and ord(secondByte) == 0xd8): - (firstByte, secondByte) = FD.read(2) - if (ord(firstByte) == 0xff and ord(secondByte) == 0xe0): - isJpeg = True - return isJpeg - -def isCorrectStringNet(strNetworks, checkNet=True): - """Проверяет на корректность строку доверительных сетей - - Выводит cписок сетей - """ - splNet = strNetworks.replace(","," ").split(" ") - if checkNet: - checkIP = False - res=re.compile("^\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?\/\d\d?$") - else: - checkIP = True - res=re.compile("^\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?$") - flagError = False - networks = [] - for i in splNet: - r = i.strip() - if not r: - continue - find =res.search(r) - if not find: - flagError = True - break - else: - splIP = map(lambda x: 255>=int(x.split("/")[0]) and\ - x.split("/")[0], find.group().split(".")) - if not splIP[0] or splIP[0] and int(splIP[0]) == 0: - flagError = True - break - if not splIP[3] or splIP[3] and int(splIP[3]) == 255: - flagError = True - break - if checkNet: - netList = r.split("/") - if len(netList)==2: - try: - netMaskInt = int(netList[1]) - except: - flagError = True - break - if netMaskInt>31 or netMaskInt<4: - flagError = True - break - else: - flagError = True - break - if checkIP and splIP[3] and int(splIP[3]) == 0: - flagError = True - break - for t in splIP: - if t == False: - flagError = True - break - if flagError: - break - networks.append(r) - if flagError: - return False - else: - return list(set(networks)) - -def searchLineInFile(name, fileName, numEl=0): - """Ищет строку в которой есть название разделенное ':' - - в файле похожем на /etc/passwd""" - if os.path.exists(fileName): - FD = open(fileName) - lines = FD.readlines() - FD.close() - lineFound = "" - for line in lines: - if name == line.split(":")[numEl]: - lineFound = line - break - if lineFound: - return lineFound - else: - return False - -def getMaxInFile(fileName, numMin, numMax, numEl=2): - """Получаем максимальный номер из файла похожего на /etc/group""" - lst = [] - lst.append(0) - if os.path.exists(fileName): - FD = open(fileName) - lines = FD.readlines() - FD.close() - for line in lines: - if not ':' in line: - continue - num = int(line.split(":")[numEl]) - if num<=numMax and num>=numMin: - lst.append(num) - return max(lst) - return False - -def chortToFullName(listNames, domain): - """Из списка коротких имен получаем cписок полных имен - - К коротким именам добавляем домен, длинные выдаем как есть - """ - listFillNames = [] - for name in listNames: - if "." in name: - listFillNames.append(name) - else: - listFillNames.append("%s.%s" %(name,domain)) - return listFillNames - -def addInfoUser(name, uid, gid, comment): - """Добавляем информацию о пользователе""" - class user(): - """Информация о пользователе""" - name = "" - uid = "" - gid = "" - comment = "" - us = user() - us.name = name - us.uid = uid - us.gid = gid - us.comment = comment - return us - -def addInfoGroup(name, gid, comment, rid="", type="", sid=""): - """Добавляем информацию о группе""" - class group(): - """Информация о группе""" - name = "" - gid = "" - comment = "" - rid = "" - type = "" - sid = "" - gr = group() - gr.name = name - gr.gid = gid - gr.comment = comment - gr.rid = rid - gr.type = type - gr.sid = sid - return gr diff --git a/calculate/lib/update_config/cl_update_config.py b/calculate/lib/update_config/cl_update_config.py index 60e23c6..d079ba9 100644 --- a/calculate/lib/update_config/cl_update_config.py +++ b/calculate/lib/update_config/cl_update_config.py @@ -216,7 +216,7 @@ class updateUserConfigs(shareUpdateConfigs): filter(lambda y: y, x.split(" "))), resWho)))))) else: - self.printERROR(_("Can not execute 'who'")) + self.printERROR(_("Failed to execute 'who'")) return False return xUsers @@ -244,7 +244,7 @@ class updateUserConfigs(shareUpdateConfigs): set(self.getConfiguredPasswdUsers())))) if not xUsers: self.logger.info(_("Package %s") %nameProgram) - self.logger.warn(_("X session users not found")) + self.logger.warn(_("X sessions users not found")) return True self.logger.info(_("Package %s") %nameProgram) self.logger.info(_("Update desktop configuration files")) @@ -272,7 +272,7 @@ class updateUserConfigs(shareUpdateConfigs): dirsFiles = clTempl.applyTemplates() if dirsFiles is False: self.printERROR(\ - _("Error using templates for the user %s")\ + _("Error in using templates for the user %s")\ %userName) for errMess in clTempl.getError().splitlines(): self.printERROR(errMess) @@ -288,14 +288,14 @@ class updateUserConfigs(shareUpdateConfigs): if dictPakkages: for calcPkg in listIndex: self.printWARNING( - _("Package %s has modified the following files")\ + _("Package %s has changed the following files")\ %calcPkg+":") for userName, configFiles in dictPakkages[calcPkg]: self.printWARNING(" "*2 + _("User %s")%userName + ":") for nameConfigFile in configFiles: self.printWARNING(" "*5 + nameConfigFile) if not dictPakkages: - self.logger.warn(_("Not found templates")) + self.logger.warn(_("Templates not found")) return True class updateSystemConfigs(shareUpdateConfigs): @@ -367,7 +367,7 @@ class updateSystemConfigs(shareUpdateConfigs): """Копирование конфигурационных файлов""" configDstFiles = self.scanProtectDirs(configPath) if configDstFiles: - self.logger.warn(_("Replace files:")) + self.logger.warn(_("Replaced files:")) for dst in configDstFiles: src = pathJoin(configPath, dst) if src != dst: @@ -435,7 +435,7 @@ class updateSystemConfigs(shareUpdateConfigs): dirsFiles = clTempl.applyTemplates() nameAndVerPkg = nameProg + "-"+clVars.Get("cl_ver") if dirsFiles is False: - self.printERROR(_("Error template in a package %s")\ + self.printERROR(_("Template error in package %s")\ %nameAndVerPkg) for errMess in clTempl.getError().splitlines(): self.printERROR(errMess) @@ -454,8 +454,7 @@ class updateSystemConfigs(shareUpdateConfigs): if dictPakkages: for calcPkg in listIndex: self.printWARNING( - _("Package %s has modified the following files")% - calcPkg+":") + _("Package %s has changed the following files")%calcPkg+":") for nameF in dictPakkages[calcPkg]: nameFile = nameF.partition(configPath)[2] if nameFile: @@ -465,7 +464,7 @@ class updateSystemConfigs(shareUpdateConfigs): nameFile = nameF self.printWARNING(" "*5 + nameFile) else: - self.logger.warn(_("Not found templates")) + self.logger.warn(_("Templates not found")) if flagUpdate: self.copyConfigFiles(configPath) if clTempl and clTempl.getWarning(): diff --git a/setup.py b/setup.py index ae7169b..e2efae7 100755 --- a/setup.py +++ b/setup.py @@ -42,7 +42,6 @@ setup( module_name + '.format', module_name + '.variables', module_name + '.mod', - module_name + '.server', module_name + '.update_config', module_name + '.utils'], data_files = [("/etc/calculate", []),