mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-23 22:50:09 +03:00
Feature #1742: Add secondary groups to fsck
This commit is contained in:
parent
d5cc5ea07a
commit
70d7b833f5
@ -177,9 +177,10 @@ module OneDBFsck
|
||||
|
||||
gid = doc.root.get_text('GID').to_s.to_i
|
||||
user_gid = gid
|
||||
user_gids = Set.new
|
||||
|
||||
if group[gid].nil?
|
||||
log_error("User #{row[:oid]} is in group #{gid}, but it does not exist")
|
||||
log_error("User #{row[:oid]} has primary group #{gid}, but it does not exist")
|
||||
|
||||
user_gid = 1
|
||||
|
||||
@ -191,9 +192,44 @@ module OneDBFsck
|
||||
e.text = "users"
|
||||
end
|
||||
|
||||
doc.root.each_element("GROUPS") { |e|
|
||||
e.elements.delete("ID[.=#{gid}]")
|
||||
e.add_element("ID").text = user_gid.to_s
|
||||
}
|
||||
|
||||
users_fix[row[:oid]] = {:body => doc.to_s, :gid => user_gid}
|
||||
end
|
||||
|
||||
doc.root.each_element("GROUPS/ID") { |e|
|
||||
user_gids.add e.text.to_i
|
||||
}
|
||||
|
||||
if !user_gids.include?(user_gid)
|
||||
log_error("User #{row[:oid]} does not have his primary group #{user_gid} in the list of secondary groups")
|
||||
|
||||
doc.root.each_element("GROUPS") { |e|
|
||||
e.add_element("ID").text = user_gid.to_s
|
||||
}
|
||||
|
||||
user_gids.add user_gid.to_i
|
||||
|
||||
users_fix[row[:oid]] = {:body => doc.to_s, :gid => user_gid}
|
||||
end
|
||||
|
||||
user_gids.each do |secondary_gid|
|
||||
if group[secondary_gid].nil?
|
||||
log_error("User #{row[:oid]} has secondary group #{secondary_gid}, but it does not exist")
|
||||
|
||||
doc.root.each_element("GROUPS") { |e|
|
||||
e.elements.delete("ID[.=#{secondary_gid}]")
|
||||
}
|
||||
|
||||
users_fix[row[:oid]] = {:body => doc.to_s, :gid => user_gid}
|
||||
else
|
||||
group[secondary_gid] << row[:oid]
|
||||
end
|
||||
end
|
||||
|
||||
if gid != row[:gid]
|
||||
log_error(
|
||||
"User #{row[:oid]} is in group #{gid}, but the DB "<<
|
||||
@ -201,8 +237,6 @@ module OneDBFsck
|
||||
|
||||
users_fix[row[:oid]] = {:body => doc.to_s, :gid => user_gid}
|
||||
end
|
||||
|
||||
group[user_gid] << row[:oid]
|
||||
end
|
||||
|
||||
users_fix.each do |id, user|
|
||||
|
Loading…
x
Reference in New Issue
Block a user