|
|
|
@ -185,31 +185,41 @@ class calcHeader(_terms):
|
|
|
|
|
"""Обработка заголовков профилей и конфигурационных файлов
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
# Допустимые параметры заголовка
|
|
|
|
|
allowParam = ["format", "format_conf", "comment", "append", "force",
|
|
|
|
|
"link", "mirror", "symbolic", "chmod","chown"]
|
|
|
|
|
# Корректность заголовка
|
|
|
|
|
headerCorrect = True
|
|
|
|
|
|
|
|
|
|
# Тип профиля
|
|
|
|
|
fileType = ""
|
|
|
|
|
# Тип вставки профиля
|
|
|
|
|
typeAppend = ""
|
|
|
|
|
# Возможные типы вставки профилей
|
|
|
|
|
_fileAppend = "join", "before", "after", "replace"
|
|
|
|
|
# Интерпретатор (#!/bin/bash) (#!/usr/bin/python)
|
|
|
|
|
execStr = ""
|
|
|
|
|
# Символ комментария
|
|
|
|
|
comment = False
|
|
|
|
|
# Выражение для поиска строки интерпретатора
|
|
|
|
|
reExecStr = re.compile("^#!.+\s*",re.I)
|
|
|
|
|
# условные операторы
|
|
|
|
|
terms = ('>', '<', '==', '!=', '>=', '<=')
|
|
|
|
|
# параметры без значения
|
|
|
|
|
listParNotVal = ("symbolic", "force","mirror")
|
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
|
headerTerm = True
|
|
|
|
|
# Сообщение о ошибке
|
|
|
|
|
errorMessage = ""
|
|
|
|
|
|
|
|
|
|
def __init__(self, text, comment=False, fileType=False, objVar=False):
|
|
|
|
|
# Тип профиля
|
|
|
|
|
self.fileType = ""
|
|
|
|
|
# Тип вставки профиля
|
|
|
|
|
self.typeAppend = ""
|
|
|
|
|
# Возможные типы вставки профилей
|
|
|
|
|
self._fileAppend = "join", "before", "after", "replace"
|
|
|
|
|
self.body = text
|
|
|
|
|
# Интерпретатор (#!/bin/bash) (#!/usr/bin/python)
|
|
|
|
|
self.execStr = ""
|
|
|
|
|
# Символ комментария
|
|
|
|
|
self.comment = False
|
|
|
|
|
# Выражение для поиска строки интерпретатора
|
|
|
|
|
self.reExecStr = re.compile("^#!.+\s*",re.I)
|
|
|
|
|
# условные операторы
|
|
|
|
|
self.terms = ('>', '<', '==', '!=', '>=', '<=')
|
|
|
|
|
# параметры без значения
|
|
|
|
|
self.listParNotVal = ("symbolic", "force","mirror")
|
|
|
|
|
# Объект с переменными
|
|
|
|
|
self.objVar=objVar
|
|
|
|
|
# Результат вычисления условия в заголовке
|
|
|
|
|
self.headerTerm = True
|
|
|
|
|
# Параметры описанные в заголовке файла профиля
|
|
|
|
|
self.params = {}
|
|
|
|
|
|
|
|
|
|
# некорректные параметры
|
|
|
|
|
incorrectParams = set([])
|
|
|
|
|
# Удаление Заголовка Calculate
|
|
|
|
|
if comment:
|
|
|
|
|
reCalcHeader =\
|
|
|
|
@ -258,18 +268,17 @@ class calcHeader(_terms):
|
|
|
|
|
for term in self.terms:
|
|
|
|
|
if term in i:
|
|
|
|
|
if not self._equalTerm(i,\
|
|
|
|
|
_("content profile not valid: ") + \
|
|
|
|
|
_("header profile not valid: ") + \
|
|
|
|
|
i):
|
|
|
|
|
self.headerTerm = False
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
par = i.split("=")
|
|
|
|
|
if len(par) == 1:
|
|
|
|
|
for parNotVal in \
|
|
|
|
|
self.listParNotVal:
|
|
|
|
|
if i == parNotVal:
|
|
|
|
|
self.params[parNotVal] =\
|
|
|
|
|
"True"
|
|
|
|
|
if i in self.listParNotVal:
|
|
|
|
|
self.params[i] = "True"
|
|
|
|
|
else:
|
|
|
|
|
incorrectParams = set([i])
|
|
|
|
|
elif len(par) == 2:
|
|
|
|
|
self.params[par[0]] = par[1]
|
|
|
|
|
|
|
|
|
@ -280,6 +289,13 @@ class calcHeader(_terms):
|
|
|
|
|
if reExecRes:
|
|
|
|
|
self.execStr = self.body[reExecRes.start():reExecRes.end()]
|
|
|
|
|
self.body = self.body[reExecRes.end():]
|
|
|
|
|
if not incorrectParams:
|
|
|
|
|
incorrectParams = set(self.params.keys()) - set(self.allowParam)
|
|
|
|
|
if incorrectParams:
|
|
|
|
|
self.headerTerm = False
|
|
|
|
|
self.headerCorrect = False
|
|
|
|
|
self.errorMessage = _("incorrect header parameters - %s")\
|
|
|
|
|
% " ".join(list(incorrectParams))
|
|
|
|
|
|
|
|
|
|
def _getType(self):
|
|
|
|
|
"""Выдать тип файла"""
|
|
|
|
@ -2161,7 +2177,15 @@ class profile(_file, _terms):
|
|
|
|
|
self.closeNewFile()
|
|
|
|
|
objHeadNew = calcHeader(self.newProfile, False,
|
|
|
|
|
self.getFileType(),objVar=self.objVar)
|
|
|
|
|
if not objHeadNew.headerCorrect:
|
|
|
|
|
self.setError(_("Incorrect profile: " ) +\
|
|
|
|
|
newFile)
|
|
|
|
|
self.setError(objHeadNew.errorMessage)
|
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
if not objHeadNew.headerTerm:
|
|
|
|
|
if objHeadNew.getError():
|
|
|
|
|
self.setError(_("Incorrect profile: " ) +\
|
|
|
|
|
newFile)
|
|
|
|
|
return (applyFiles, False)
|
|
|
|
|
flagSymlink = False
|
|
|
|
|
flagForce = False
|
|
|
|
|