|
|
|
@ -36,9 +36,10 @@ class _shareData(object):
|
|
|
|
|
def getDataInFile(self, fileName='', lenData=7):
|
|
|
|
|
"""Get data list from file"""
|
|
|
|
|
with open(fileName) as f:
|
|
|
|
|
return map(lambda x: x[:lenData],
|
|
|
|
|
filter(lambda x: len(x) >= lenData,
|
|
|
|
|
map(lambda x: x.rstrip().split(":"), f)))
|
|
|
|
|
return [x[:lenData] for x
|
|
|
|
|
in (y.rstrip().split(":") for y
|
|
|
|
|
in f)
|
|
|
|
|
if len(x) >= lenData]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class migrateGroups(_shareData):
|
|
|
|
@ -58,46 +59,39 @@ class migrateGroups(_shareData):
|
|
|
|
|
|
|
|
|
|
def getThisData(self):
|
|
|
|
|
"""Get data migrate groups in this system"""
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and self.minGid <= int(
|
|
|
|
|
x[2]) <= self.maxGid,
|
|
|
|
|
self.getData())
|
|
|
|
|
return [x for x in self.getData()
|
|
|
|
|
if self._reNumb.match(x[2]) and self.minGid <= int(x[2]) <= self.maxGid]
|
|
|
|
|
|
|
|
|
|
def getNewData(self):
|
|
|
|
|
"""Get data migrate groups in new system"""
|
|
|
|
|
fileName = pathJoin(self.prefixNewSystem, self.fileGroups)
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and self.minGid <= int(
|
|
|
|
|
x[2]) <= self.maxGid,
|
|
|
|
|
self.getData(fileName=fileName))
|
|
|
|
|
return [x for x in self.getData(fileName=fileName)
|
|
|
|
|
if self._reNumb.match(x[2]) and self.minGid <= int(x[2]) <= self.maxGid]
|
|
|
|
|
|
|
|
|
|
def getNewDataSystemGroups(self):
|
|
|
|
|
"""Get data system groups in new system"""
|
|
|
|
|
fileName = pathJoin(self.prefixNewSystem, self.fileGroups)
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and \
|
|
|
|
|
(int(x[2]) > self.maxGid or int(x[2]) < self.minGid),
|
|
|
|
|
self.getData(fileName=fileName))
|
|
|
|
|
return [x for x in self.getData(fileName=fileName)
|
|
|
|
|
if self._reNumb.match(x[2]) and (int(x[2]) > self.maxGid or int(x[2]) < self.minGid)]
|
|
|
|
|
|
|
|
|
|
def getNewProcessedData(self):
|
|
|
|
|
"""Get processed data migrate groups in new system"""
|
|
|
|
|
# data this Group no users
|
|
|
|
|
dataThisGroupsNoUsers = map(lambda x: x[:3] + [""], self.getThisData())
|
|
|
|
|
dataThisGroupsNoUsers = [x[:3] + [""] for x in self.getThisData()]
|
|
|
|
|
dataNewGroups = self.getNewData()
|
|
|
|
|
namesNewGroups = map(lambda x: x[0], dataNewGroups)
|
|
|
|
|
gidsNewGroups = map(lambda x: x[2], dataNewGroups)
|
|
|
|
|
namesNewGroups = [x[0] for x in dataNewGroups]
|
|
|
|
|
gidsNewGroups = [x[2] for x in dataNewGroups]
|
|
|
|
|
for data in dataThisGroupsNoUsers:
|
|
|
|
|
nameGroup = data[0]
|
|
|
|
|
gid = data[2]
|
|
|
|
|
if nameGroup in namesNewGroups:
|
|
|
|
|
dataNewGroups = filter(lambda x: x[0] != nameGroup,
|
|
|
|
|
dataNewGroups)
|
|
|
|
|
namesNewGroups = map(lambda x: x[0], dataNewGroups)
|
|
|
|
|
gidsNewGroups = map(lambda x: x[2], dataNewGroups)
|
|
|
|
|
dataNewGroups = [x for x in dataNewGroups if x[0] != nameGroup]
|
|
|
|
|
namesNewGroups = [x[0] for x in dataNewGroups]
|
|
|
|
|
gidsNewGroups = [x[2] for x in dataNewGroups]
|
|
|
|
|
if gid in gidsNewGroups:
|
|
|
|
|
dataNewGroups = filter(lambda x: x[2] != gid, dataNewGroups)
|
|
|
|
|
namesNewGroups = map(lambda x: x[0], dataNewGroups)
|
|
|
|
|
gidsNewGroups = map(lambda x: x[2], dataNewGroups)
|
|
|
|
|
dataNewGroups = [x for x in dataNewGroups if x[2] != gid]
|
|
|
|
|
namesNewGroups = [x[0] for x in dataNewGroups]
|
|
|
|
|
gidsNewGroups = [x[2] for x in dataNewGroups]
|
|
|
|
|
systemGroupsNewData = self.getNewDataSystemGroups()
|
|
|
|
|
return systemGroupsNewData, dataNewGroups, dataThisGroupsNoUsers
|
|
|
|
|
|
|
|
|
@ -119,81 +113,67 @@ class migrateUsers(_shareData):
|
|
|
|
|
|
|
|
|
|
def getThisData(self):
|
|
|
|
|
"""Get data migrate users in this system"""
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and self.minId <= int(
|
|
|
|
|
x[2]) <= self.maxId,
|
|
|
|
|
self.getData())
|
|
|
|
|
return [x for x in self.getData()
|
|
|
|
|
if self._reNumb.match(x[2]) and self.minId <= int(x[2]) <= self.maxId]
|
|
|
|
|
|
|
|
|
|
def getNewData(self):
|
|
|
|
|
"""Get data migrate users in new system"""
|
|
|
|
|
fileName = pathJoin(self.prefixNewSystem, self.filePasswd)
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and self.minId <= int(
|
|
|
|
|
x[2]) <= self.maxId,
|
|
|
|
|
self.getData(fileName=fileName))
|
|
|
|
|
return [x for x in self.getData(fileName=fileName)
|
|
|
|
|
if self._reNumb.match(x[2]) and self.minId <= int(x[2]) <= self.maxId]
|
|
|
|
|
|
|
|
|
|
def getNewDataSystemUsers(self):
|
|
|
|
|
"""Get data system users in new system"""
|
|
|
|
|
fileName = pathJoin(self.prefixNewSystem, self.filePasswd)
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and \
|
|
|
|
|
(int(x[2] > self.maxId) or int(x[2]) < self.minId),
|
|
|
|
|
self.getData(fileName=fileName))
|
|
|
|
|
return [x for x in self.getData(fileName=fileName)
|
|
|
|
|
if self._reNumb.match(x[2]) and (int(x[2] > self.maxId) or int(x[2]) < self.minId)]
|
|
|
|
|
|
|
|
|
|
def getThisDataSystemUsers(self):
|
|
|
|
|
"""Get data system users in this system"""
|
|
|
|
|
fileName = self.filePasswd
|
|
|
|
|
return filter(lambda x: \
|
|
|
|
|
self._reNumb.match(x[2]) and \
|
|
|
|
|
(int(x[2] > self.maxId) or int(x[2]) < self.minId),
|
|
|
|
|
self.getData(fileName=fileName))
|
|
|
|
|
return [x for x in self.getData(fileName=fileName)
|
|
|
|
|
if self._reNumb.match(x[2]) and (int(x[2] > self.maxId) or int(x[2]) < self.minId)]
|
|
|
|
|
|
|
|
|
|
def getNewProcessedData(self, migrateUsers=()):
|
|
|
|
|
"""Get processed data migrate users in new system"""
|
|
|
|
|
dataThisUsers = self.getThisData()
|
|
|
|
|
if migrateUsers:
|
|
|
|
|
dataThisUsers = filter(lambda x: x[0] in migrateUsers,
|
|
|
|
|
dataThisUsers)
|
|
|
|
|
dataThisUsers = [x for x in dataThisUsers if x[0] in migrateUsers]
|
|
|
|
|
dataNewUsers = self.getNewData()
|
|
|
|
|
namesNewUsers = map(lambda x: x[0], dataNewUsers)
|
|
|
|
|
uidsNewUsers = map(lambda x: x[2], dataNewUsers)
|
|
|
|
|
namesNewUsers = [x[0] for x in dataNewUsers]
|
|
|
|
|
uidsNewUsers = [x[2] for x in dataNewUsers]
|
|
|
|
|
for data in dataThisUsers:
|
|
|
|
|
nameUser = data[0]
|
|
|
|
|
uid = data[2]
|
|
|
|
|
if nameUser in namesNewUsers:
|
|
|
|
|
dataNewUsers = filter(lambda x: x[0] != nameUser, dataNewUsers)
|
|
|
|
|
namesNewUsers = map(lambda x: x[0], dataNewUsers)
|
|
|
|
|
uidsNewUsers = map(lambda x: x[2], dataNewUsers)
|
|
|
|
|
dataNewUsers = [x for x in dataNewUsers if x[0] != nameUser]
|
|
|
|
|
namesNewUsers = [x[0] for x in dataNewUsers]
|
|
|
|
|
uidsNewUsers = [x[2] for x in dataNewUsers]
|
|
|
|
|
if uid in uidsNewUsers:
|
|
|
|
|
dataNewUsers = filter(lambda x: x[2] != uid, dataNewUsers)
|
|
|
|
|
namesNewUsers = map(lambda x: x[0], dataNewUsers)
|
|
|
|
|
uidsNewUsers = map(lambda x: x[2], dataNewUsers)
|
|
|
|
|
dataNewUsers = [x for x in dataNewUsers if x[2] != uid]
|
|
|
|
|
namesNewUsers = [x[0] for x in dataNewUsers]
|
|
|
|
|
uidsNewUsers = [x[2] for x in dataNewUsers]
|
|
|
|
|
systemUsersNewData = self.getNewDataSystemUsers()
|
|
|
|
|
systemUsersNewNames = map(lambda x: x[0], systemUsersNewData)
|
|
|
|
|
systemUsersNewUids = map(lambda x: x[2], systemUsersNewData)
|
|
|
|
|
systemUsersNewNames = [x[0] for x in systemUsersNewData]
|
|
|
|
|
systemUsersNewUids = [x[2] for x in systemUsersNewData]
|
|
|
|
|
systemUsersThisData = []
|
|
|
|
|
if migrateUsers:
|
|
|
|
|
# this users < minId
|
|
|
|
|
systemUsersThisData = filter(lambda x: int(x[2]) < self.minId and \
|
|
|
|
|
x[0] in migrateUsers,
|
|
|
|
|
self.getThisDataSystemUsers())
|
|
|
|
|
systemUsersThisData = [x for x in self.getThisDataSystemUsers()
|
|
|
|
|
if int(x[2]) < self.minId and x[0] in migrateUsers]
|
|
|
|
|
for data in systemUsersThisData:
|
|
|
|
|
nameUser = data[0]
|
|
|
|
|
uid = data[2]
|
|
|
|
|
if nameUser in systemUsersNewNames:
|
|
|
|
|
systemUsersNewData = filter(lambda x: x[0] != nameUser,
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewNames = map(lambda x: x[0],
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewUids = map(lambda x: x[2],
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewData = [x for x in systemUsersNewData
|
|
|
|
|
if x[0] != nameUser]
|
|
|
|
|
systemUsersNewNames = [x[0] for x in systemUsersNewData]
|
|
|
|
|
systemUsersNewUids = [x[2] for x in systemUsersNewData]
|
|
|
|
|
if uid in systemUsersNewUids:
|
|
|
|
|
systemUsersNewData = filter(lambda x: x[2] != uid,
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewNames = map(lambda x: x[0],
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewUids = map(lambda x: x[2],
|
|
|
|
|
systemUsersNewData)
|
|
|
|
|
systemUsersNewData = [x for x in systemUsersNewData
|
|
|
|
|
if x[2] != uid]
|
|
|
|
|
systemUsersNewNames = [x[0] for x in systemUsersNewData]
|
|
|
|
|
systemUsersNewUids = [x[2] for x in systemUsersNewData]
|
|
|
|
|
return (systemUsersThisData, systemUsersNewData,
|
|
|
|
|
dataNewUsers, dataThisUsers)
|
|
|
|
|
|
|
|
|
@ -219,43 +199,43 @@ class migrateShadow(_shareData):
|
|
|
|
|
|
|
|
|
|
def getThisData(self):
|
|
|
|
|
"""Get data migrate users in this system"""
|
|
|
|
|
return filter(lambda x: x[0] in self.thisMigrateUsers, self.getData())
|
|
|
|
|
return [x for x in self.getData()
|
|
|
|
|
if x[0] in self.thisMigrateUsers]
|
|
|
|
|
|
|
|
|
|
def getNewData(self):
|
|
|
|
|
"""Get data migrate users in new system"""
|
|
|
|
|
return filter(lambda x: x[0] in self.newMigrateUsers,
|
|
|
|
|
self.getData(fileName=self.newFileName))
|
|
|
|
|
return [x for x in self.getData(fileName=self.newFileName)
|
|
|
|
|
if x[0] in self.newMigrateUsers]
|
|
|
|
|
|
|
|
|
|
def getNewDataSystemShadow(self):
|
|
|
|
|
"""Get data system users in new system"""
|
|
|
|
|
return filter(lambda x: x[0] in self.sysNewMigrateUsers,
|
|
|
|
|
self.getData(fileName=self.newFileName))
|
|
|
|
|
return [x for x in self.getData(fileName=self.newFileName)
|
|
|
|
|
if x[0] in self.sysNewMigrateUsers]
|
|
|
|
|
|
|
|
|
|
def getThisDataSystemShadow(self):
|
|
|
|
|
"""Get data system users in this system"""
|
|
|
|
|
return filter(lambda x: x[0] in self.sysThisMigrateUsers,
|
|
|
|
|
self.getData())
|
|
|
|
|
return [x for x in self.getData() if x[0] in self.sysThisMigrateUsers]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getNewProcessedData(self):
|
|
|
|
|
"""Get processed data migrate shadow in new system"""
|
|
|
|
|
dataThisShadow = self.getThisData()
|
|
|
|
|
dataNewShadow = self.getNewData()
|
|
|
|
|
namesNewShadow = map(lambda x: x[0], dataNewShadow)
|
|
|
|
|
namesNewShadow = [x[0] for x in dataNewShadow]
|
|
|
|
|
for data in dataThisShadow:
|
|
|
|
|
nameUser = data[0]
|
|
|
|
|
if nameUser in namesNewShadow:
|
|
|
|
|
dataNewShadow = filter(lambda x: x[0] != nameUser,
|
|
|
|
|
dataNewShadow)
|
|
|
|
|
namesNewShadow = map(lambda x: x[0], dataNewShadow)
|
|
|
|
|
dataNewShadow = [x for x in dataNewShadow if x[0] != nameUser]
|
|
|
|
|
namesNewShadow = [x[0] for x in dataNewShadow]
|
|
|
|
|
systemShadowNewData = self.getNewDataSystemShadow()
|
|
|
|
|
systemShadowThisData = self.getThisDataSystemShadow()
|
|
|
|
|
systemShadowNewNames = map(lambda x: x[0], systemShadowNewData)
|
|
|
|
|
systemShadowNewNames = [x[0] for x in systemShadowNewData]
|
|
|
|
|
for data in systemShadowThisData:
|
|
|
|
|
nameUser = data[0]
|
|
|
|
|
if nameUser in systemShadowNewNames:
|
|
|
|
|
systemShadowNewData = filter(lambda x: x[0] != nameUser,
|
|
|
|
|
systemShadowNewData)
|
|
|
|
|
systemShadowNewNames = map(lambda x: x[0], systemShadowNewData)
|
|
|
|
|
systemShadowNewData = [x for x
|
|
|
|
|
in systemShadowNewData if x[0] != nameUser]
|
|
|
|
|
systemShadowNewNames = [x[0] for x in systemShadowNewData]
|
|
|
|
|
return (systemShadowThisData, systemShadowNewData, dataNewShadow,
|
|
|
|
|
dataThisShadow)
|
|
|
|
|
|
|
|
|
@ -285,14 +265,12 @@ class migrate(object):
|
|
|
|
|
def addThisUsersToGroups(self, users):
|
|
|
|
|
"""Add users to groups"""
|
|
|
|
|
thisGroupsData = self.objGroups.getData()
|
|
|
|
|
thisGroupsData = map(lambda x: (x[0], x[3].split(',')),
|
|
|
|
|
thisGroupsData)
|
|
|
|
|
thisGroupsData = [(x[0], x[3].split(',')) for x in thisGroupsData]
|
|
|
|
|
dataGroups = []
|
|
|
|
|
for data in self.dataGroups:
|
|
|
|
|
groupName = data[0]
|
|
|
|
|
thisUsersInGroup = map(lambda x: x[1],
|
|
|
|
|
filter(lambda x: x[0] == groupName,
|
|
|
|
|
thisGroupsData))
|
|
|
|
|
thisUsersInGroup = [x[1] for x in thisGroupsData if x[0] == groupName]
|
|
|
|
|
#??? whats the point of this?
|
|
|
|
|
thisUsersInGroup = reduce(lambda x, y: x + y, thisUsersInGroup, [])
|
|
|
|
|
addUsers = list(set(thisUsersInGroup) & set(users))
|
|
|
|
|
if addUsers:
|
|
|
|
@ -300,36 +278,30 @@ class migrate(object):
|
|
|
|
|
for user in addUsers:
|
|
|
|
|
if not user in newUsersInGroup:
|
|
|
|
|
newUsersInGroup.append(user)
|
|
|
|
|
data[3] = ','.join(filter(lambda x: x, newUsersInGroup))
|
|
|
|
|
data[3] = ','.join((x for x in newUsersInGroup if x))
|
|
|
|
|
dataGroups.append(data)
|
|
|
|
|
self.dataGroups = dataGroups
|
|
|
|
|
return self.dataGroups
|
|
|
|
|
|
|
|
|
|
def getNextUid(self):
|
|
|
|
|
"""get next uid"""
|
|
|
|
|
listUid = map(lambda x: int(x[2]),
|
|
|
|
|
filter(lambda x: \
|
|
|
|
|
self.objUsers._reNumb.match(x[2]) and \
|
|
|
|
|
self.minId <= int(x[2]) <= self.maxId,
|
|
|
|
|
self.dataUsers))
|
|
|
|
|
listUid = [int(x[2]) for x in self.dataUsers
|
|
|
|
|
if self.objUsers._reNumb.match(x[2]) and self.minId <= int(x[2]) <= self.maxId]
|
|
|
|
|
if listUid:
|
|
|
|
|
return max(listUid) + 1
|
|
|
|
|
return self.minId
|
|
|
|
|
|
|
|
|
|
def getNextGid(self):
|
|
|
|
|
"""get next gid"""
|
|
|
|
|
listGid = map(lambda x: int(x[2]),
|
|
|
|
|
filter(lambda x: \
|
|
|
|
|
self.objGroups._reNumb.match(x[2]) and \
|
|
|
|
|
self.minGid <= int(x[2]) <= self.maxGid,
|
|
|
|
|
self.dataGroups))
|
|
|
|
|
listGid = [int(x[2]) for x in self.dataGroups
|
|
|
|
|
if self.objUsers._reNumb.match(x[2]) and self.minGid <= int(x[2]) <= self.maxGid]
|
|
|
|
|
if listGid:
|
|
|
|
|
return max(listGid) + 1
|
|
|
|
|
return self.minGid
|
|
|
|
|
|
|
|
|
|
def isSystemUser(self, userName):
|
|
|
|
|
if filter(lambda x: x[0] == userName and int(x[2]) <= self.minSysId,
|
|
|
|
|
self.dataUsers):
|
|
|
|
|
if [x for x in self.dataUsers
|
|
|
|
|
if (x[0] == userName and int(x[2]) <= self.minSysId)]:
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
@ -343,7 +315,7 @@ class migrate(object):
|
|
|
|
|
usersInGroup = data[3].split(',')
|
|
|
|
|
if not userName in usersInGroup:
|
|
|
|
|
usersInGroup.append(userName)
|
|
|
|
|
data[3] = ','.join(filter(lambda x: x, usersInGroup))
|
|
|
|
|
data[3] = ','.join((x for x in usersInGroup if x))
|
|
|
|
|
dataGroups.append(data)
|
|
|
|
|
self.dataGroups = dataGroups
|
|
|
|
|
return self.dataGroups
|
|
|
|
@ -353,7 +325,7 @@ class migrate(object):
|
|
|
|
|
return self.addUserToGroups(userName, self.newUserGroups)
|
|
|
|
|
|
|
|
|
|
def changePassword(self, userName, pwdHash, maxDays="99999", warnDays="7"):
|
|
|
|
|
if not filter(lambda x: x[0] == userName, self.dataUsers):
|
|
|
|
|
if not [x for x in self.dataUsers if x[0] == userName]:
|
|
|
|
|
raise MigrationError(_("User %s not found") % userName)
|
|
|
|
|
indexFoundUser = False
|
|
|
|
|
for i, data in enumerate(self.dataShadow):
|
|
|
|
@ -380,14 +352,14 @@ class migrate(object):
|
|
|
|
|
def addUser(self, userName, userGroups, pwdHash):
|
|
|
|
|
"""Add user"""
|
|
|
|
|
# find user
|
|
|
|
|
if filter(lambda x: x[0] == userName, self.dataUsers):
|
|
|
|
|
if [x for x in self.dataUsers if x[0] == userName]:
|
|
|
|
|
return "EXISTS"
|
|
|
|
|
else:
|
|
|
|
|
strUid = str(self.getNextUid())
|
|
|
|
|
strGid = str(self.getNextGid())
|
|
|
|
|
groupName = userName
|
|
|
|
|
dataExistGroup = filter(lambda x: x[0] == groupName,
|
|
|
|
|
self.dataGroups)
|
|
|
|
|
dataExistGroup = [x for x in self.dataGroups
|
|
|
|
|
if x[0] == groupName]
|
|
|
|
|
if dataExistGroup:
|
|
|
|
|
strGid = dataExistGroup[0][2]
|
|
|
|
|
else:
|
|
|
|
@ -412,27 +384,25 @@ class migrate(object):
|
|
|
|
|
"""Check permission files"""
|
|
|
|
|
checkThisFiles = [migrateGroups.fileGroups, migrateUsers.filePasswd,
|
|
|
|
|
migrateShadow.fileShadow]
|
|
|
|
|
checkNewFiles = map(lambda x: pathJoin(self.prefixNewSystem, x),
|
|
|
|
|
checkThisFiles)
|
|
|
|
|
checkNewFiles = [pathJoin(self.prefixNewSystem, x) for x in checkThisFiles]
|
|
|
|
|
parentDir = lambda x: "".join(os.path.split(x)[:-1])
|
|
|
|
|
notRead = lambda x: not os.access(x, os.R_OK)
|
|
|
|
|
notWrite = lambda x: not os.access(x, os.W_OK)
|
|
|
|
|
filesNotRead = filter(notRead, checkThisFiles)
|
|
|
|
|
filesNotRead = [x for x in checkThisFiles if notRead(x)]
|
|
|
|
|
if filesNotRead:
|
|
|
|
|
raise MigrationError(_("Failed to read files") + _(": ") +
|
|
|
|
|
", ".join(filesNotRead))
|
|
|
|
|
filesNotWrite = filter(notWrite, checkNewFiles)
|
|
|
|
|
filesNotWrite = [x for x in checkNewFiles if notWrite(x)]
|
|
|
|
|
if filesNotWrite:
|
|
|
|
|
raise MigrationError(_("Failed to write to files") + _(": ") +
|
|
|
|
|
", ".join(filesNotWrite))
|
|
|
|
|
# Check permissions backup files
|
|
|
|
|
checkNewBackupFiles = map(
|
|
|
|
|
lambda x: pathJoin(self.prefixNewSystem, x + "-"),
|
|
|
|
|
checkThisFiles)
|
|
|
|
|
checkNewBackupFiles = (pathJoin(self.prefixNewSystem, x + "-") for x
|
|
|
|
|
in checkThisFiles)
|
|
|
|
|
notWriteBackup = lambda x: not os.access(x, os.W_OK) and \
|
|
|
|
|
(os.path.exists(x) or
|
|
|
|
|
not os.access(os.path.dirname(x), os.W_OK))
|
|
|
|
|
filesNotWrite = filter(notWriteBackup, checkNewBackupFiles)
|
|
|
|
|
filesNotWrite = [x for x in checkNewBackupFiles if notWriteBackup(x)]
|
|
|
|
|
if filesNotWrite:
|
|
|
|
|
raise MigrationError(_("Failed to write to files") + _(": ") +
|
|
|
|
|
", ".join(filesNotWrite))
|
|
|
|
@ -443,20 +413,20 @@ class migrate(object):
|
|
|
|
|
listFilesThisSystem = [migrateGroups.fileGroups,
|
|
|
|
|
migrateUsers.filePasswd,
|
|
|
|
|
migrateShadow.fileShadow]
|
|
|
|
|
listFiles = map(lambda x: (pathJoin(self.prefixNewSystem, x),
|
|
|
|
|
pathJoin(self.prefixNewSystem, x + "-")),
|
|
|
|
|
listFilesThisSystem)
|
|
|
|
|
listFiles = [(pathJoin(self.prefixNewSystem, x),
|
|
|
|
|
pathJoin(self.prefixNewSystem, x + "-")) for x
|
|
|
|
|
in listFilesThisSystem]
|
|
|
|
|
listData = [self.dataGroups, self.dataUsers, self.dataShadow]
|
|
|
|
|
allData = zip(listFiles, listData)
|
|
|
|
|
for fileNames, data in allData:
|
|
|
|
|
buff = "\n".join(map(lambda x: ":".join(x), data)) + "\n"
|
|
|
|
|
buff = "\n".join((":".join(x) for x in data)) + "\n"
|
|
|
|
|
for fileName in fileNames:
|
|
|
|
|
FD = open(fileName, "w+")
|
|
|
|
|
FD.write(buff)
|
|
|
|
|
FD.close()
|
|
|
|
|
|
|
|
|
|
def createUserGuest(self):
|
|
|
|
|
if filter(lambda x: int(x[2]) >= self.minSysId, self.dataUsers):
|
|
|
|
|
if [x for x in self.dataUsers if int(x[2]) >= self.minSysId]:
|
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
# add user guest
|
|
|
|
@ -482,7 +452,7 @@ class migrate(object):
|
|
|
|
|
os.chmod(homedir, perms)
|
|
|
|
|
users = list(set([x[0] for x in addUsersList] + existsMigrateUsers) - {"root"})
|
|
|
|
|
try:
|
|
|
|
|
map(createHome, filter(lambda x: x[0] in users, self.dataUsers))
|
|
|
|
|
map(createHome, (x for x in self.dataUsers if x[0] in users))
|
|
|
|
|
except Exception as e:
|
|
|
|
|
raise MigrationError(
|
|
|
|
|
_("Failed to create the user's home directory"))
|
|
|
|
@ -500,8 +470,9 @@ class migrate(object):
|
|
|
|
|
existsMigrateUsers = []
|
|
|
|
|
if not self.checkPermFiles():
|
|
|
|
|
return False
|
|
|
|
|
migrateUsers = (["root"] +
|
|
|
|
|
map(lambda x: x[0], addUsersList + pwdUsersList))
|
|
|
|
|
migrateUsers = (["root"] + [x[0] for x in addUsersList + pwdUsersList])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for existMigrUser in existsMigrateUsers:
|
|
|
|
|
if existMigrUser not in migrateUsers:
|
|
|
|
|
migrateUsers.append(existMigrUser)
|
|
|
|
@ -509,7 +480,7 @@ class migrate(object):
|
|
|
|
|
dataUsers = self.objUsers.getNewProcessedData(migrateUsers)
|
|
|
|
|
dataGroups = self.objGroups.getNewProcessedData()
|
|
|
|
|
thisSystemUsers, newSystemUsers, newUsers, thisUsers = \
|
|
|
|
|
map(lambda x: map(lambda y: y[0], x), dataUsers)
|
|
|
|
|
[[y[0] for y in x] for x in dataUsers]
|
|
|
|
|
objShadow = migrateShadow(thisSystemUsers, newSystemUsers, newUsers,
|
|
|
|
|
thisUsers, self.prefixNewSystem)
|
|
|
|
|
dataShadow = objShadow.getNewProcessedData()
|
|
|
|
@ -572,7 +543,5 @@ class currentUsers(migrate):
|
|
|
|
|
if not self.checkPermFiles():
|
|
|
|
|
return False
|
|
|
|
|
getDataInFile = _shareData().getDataInFile
|
|
|
|
|
self.dataUsers = map(lambda x: x[0],
|
|
|
|
|
getDataInFile(fileName=migrateUsers.filePasswd,
|
|
|
|
|
lenData=7))
|
|
|
|
|
self.dataUsers = [x[0] for x in getDataInFile(fileName=migrateUsers.filePasswd,lenData=7)]
|
|
|
|
|
return set(self.dataUsers) >= set(users)
|
|
|
|
|