#!/usr/bin/env python2 from __future__ import print_function import grp import re from subprocess import check_output from sys import argv class UpdateGrp: def __init__(self, leftname = "domain users", rightname = "pulse"): """Confronts members of the LHS group with the members of the RHS group. LHS group defaults to "domain users".""" self.leftname = leftname self.rightname = rightname self.leftmembers = grp.getgrnam(self.leftname)[3] self.rightmembers = grp.getgrnam(self.rightname)[3] # Since there is also a local user already created on the machine but # it is not a domain user, we will add it to leftmembers self.leftmembers.append("bglug") self.to_add = list(set(self.leftmembers) - set(self.rightmembers)) self.to_remove = list(set(self.rightmembers) - set(self.leftmembers)) def update_rhs(self): """Updates the RHS group members to be equal to the LHS group members.""" # If RHS is a local group with open('/etc/group', 'r') as group: for grp in group.readlines(): if re.match("%s:" % self.rightname, grp): # If to_add is not empty, add each element to group if len(self.to_add) > 0: for user in self.to_add: print(check_output(["gpasswd", "-a", user, self.rightname]), end='') # If to_remove is not empty, remove each element to group if len(self.to_remove) > 0: for user in self.to_remove: print(check_output(["gpasswd", "-d", user, self.rightname]), end='') def update_lhs(self): """Updates the LHS group members to be equal to the RHS group members.""" # If LHS is a local group with open('/etc/group', 'r') as group: for grp in group.readline(): if re.match("%s:" % self.leftname, grp): # If to_remove is not empty, add each element to group if len(self.to_remove) > 0: for user in self.to_remove: print(check_output(["gpasswd", "-a", user, self.leftname]), end='') # If to_add is not empty, remove each element to group if len(self.to_add) > 0: for user in self.to_add: print(check_output(["gpasswd", "-d", user, self.leftname]), end='') def modprint(self): """Debug function to print only modifications.""" print("To add: ", end='') print(self.to_add) print("To remove: ", end='') print(self.to_remove) # When run interactively if __name__ == '__main__': # If the first argument is '--help' or '-h', or number of arguments less than 1 and more than 2, print help. if len(argv) < 2 or len(argv) > 3 or argv[1] == '--help' or argv[1] == '-h': print("Usage: %s " % argv[0]) print("Aligns RHS group members as LHS.") else: updgrp = UpdateGrp(argv[1], argv[2]) updgrp.update_rhs()