The change to fix superset problem also reversed logic
to prefer the 'old' entries to the 'new' entries. For now,
restore the logic of merge entries superseding existing entries.
What is really warranted is a facility to intelligently sync the account
databases. Specifically, read in /etc/login.defs, look at UID_MIN and
GID_MIN for the platform. For UID/GID lower than that, rpms may manage
and such care needs to be given to not change UID/GID, but still need to
update things like shadow and group *membership*, but presrve uid/gid.
Above UID_MIN/GID_MIN, they are user groups and the uid/gid portion is
important in shared filesystem context, so it is imperative that they
work.
* Fixes in xdcpmerge.sh
Two fixes:
1. The grep pattern when finding duplicate usernames is missing ":" at the end. So, for example user "test" would also match "test2, etc.". Adding the ":" delimiter fixes the issue.
2. Another issue happens when the file to be merged is a superset of the files on the nodes. For example, if a new user is added and entire passwd file (that is otherwise identical) is sent to be merged. In this case, the $filebackup.nodups file, i.e. the original file with duplicates removed, becomes empty and the condition "if [ -s "$filebackup.nodups" ]" does not execute. Then the merged file ends up being original file with the merge file fully appended, clearly not what was intended.
This is solved by changing the condition to check for file existence "-a" rather then for size. Additionally, I also turn the logic around so that the duplicates are removed from the merge file and then added to the original file. I think this makes logic a bit cleaner and also ensures that existing entries are not reordered or changed in any way.
* Streamlining previous commit
Adjustment to previous commit, streamlining and simplifying logic. Once $mergefile.nodups is created, just concatenate it the original file.
* Update to xdcpmerge
No need to copy $filebackup to $curfile, they are the same.
* Fixes in xdcpmerge.sh
Two fixes:
1. The grep pattern when finding duplicate usernames is missing ":" at the end. So, for example user "test" would also match "test2, etc.". Adding the ":" delimiter fixes the issue.
2. Another issue happens when the file to be merged is a superset of the files on the nodes. For example, if a new user is added and entire passwd file (that is otherwise identical) is sent to be merged. In this case, the $filebackup.nodups file, i.e. the original file with duplicates removed, becomes empty and the condition "if [ -s "$filebackup.nodups" ]" does not execute. Then the merged file ends up being original file with the merge file fully appended, clearly not what was intended.
This is solved by changing the condition to check for file existence "-a" rather then for size. Additionally, I also turn the logic around so that the duplicates are removed from the merge file and then added to the original file. I think this makes logic a bit cleaner and also ensures that existing entries are not reordered or changed in any way.
* Streamlining previous commit
Adjustment to previous commit, streamlining and simplifying logic. Once $mergefile.nodups is created, just concatenate it the original file.
* Update to xdcpmerge
No need to copy $filebackup to $curfile, they are the same.