def Set()

in Providers/Scripts/3.x/Scripts/nxGroup.py [0:0]


def Set(GroupName, Ensure, Members, MembersToInclude, MembersToExclude, PreferredGroupID):
    ShowMof('SET', GroupName, Ensure, Members, MembersToInclude,
            MembersToExclude, PreferredGroupID)
    if not Ensure:
        Ensure = "present"
    group_entries = None
    group_entries = ReadPasswd("/etc/group")
    if group_entries is None:
        return [-1]
    gid_option = ""
    if len(PreferredGroupID):
        addme = True
        for k,v in group_entries.items():
            if PreferredGroupID == v[1] and not GroupName == k:
                Print("ERROR: PreferredGroupID <" + PreferredGroupID + "> in use by another group, PreferredGroupID will not be used.", file=sys.stderr)
                LG().Log('ERROR', "PreferredGroupID <" + PreferredGroupID + "> in use by another group, PreferredGroupID will not be used.")
                addme = False
                break
        if addme:
            gid_option = "-g " + PreferredGroupID + " "
        
    if Ensure == "absent":
        if GroupName in group_entries:
            # Delete group
            Print("Deleting group", file=sys.stderr)
            LG().Log('INFO', "Deleting group")
            retval = os.system(groupdel_path + " " + GroupName)
            if retval != 0:
                Print(
                    groupdel_path + " " + GroupName + " failed.", file=sys.stderr)
                LG().Log('ERROR', groupdel_path + " " + GroupName + " failed.")
                return [-1]
    else:
        if GroupName not in group_entries:
            Print("Group does not exist. Creating it.", file=sys.stderr)
            LG().Log('INFO', "Group does not exist. Creating it.")
            retval = os.system(groupadd_path + " " + gid_option + GroupName)
            if retval != 0:
                Print(
                    groupadd_path + " " + gid_option + GroupName + " failed.", file=sys.stderr)
                LG().Log('ERROR', groupadd_path + " " + gid_option + GroupName + " failed.")
                return [-1]

            # Reread /etc/group
            group_entries = ReadPasswd("/etc/group")
        else:
            # update the GID if needed.
            if len(gid_option) and str(grp.getgrnam(GroupName)[2]) != PreferredGroupID:
                Print("Group exists. Updating to PreferredGroupID <" + PreferredGroupID + ">.", file=sys.stderr)
                LG().Log('INFO', "Group exists. Updating to PreferredGroupID <" + PreferredGroupID + ">.")
                retval = os.system(groupmod_path + " " + gid_option + GroupName)
                if retval != 0:
                    Print(
                        groupmod_path + " " + gid_option + GroupName + " failed.", file=sys.stderr)
                    LG().Log('ERROR', groupmod_path + " " + gid_option + GroupName + " failed.")
                    # Continue processing.

            # Reread /etc/group
            group_entries = ReadPasswd("/etc/group")
            
        if len(Members[0]):
            if len(MembersToInclude[0]) or len(MembersToExclude[0]):
                Print(
                    "If Members is provided, Include and Exclude are not allowed.", file=sys.stderr)
                LG().Log(
                    'ERROR', "If Members is provided, Include and Exclude are not allowed.")
                return [-1]

            group_members = GetGroupMembers(GroupName, group_entries)
            for member in Members:
                if member not in group_members:
                    Print("Member: " + member + " not in member list for group: " +
                          GroupName + ".  Adding.", file=sys.stderr)
                    LG().Log('INFO', "Member: " + member +
                             " not in member list for group: " + GroupName + ".  Adding.")
                    if AddUserToGroup(member, GroupName) is False:
                        return [-1]
            for member in group_members:
                if member not in Members:
                    Print("Member: " + member + " is in the member list for group: " +
                          GroupName + " but not speficied in Members.  Removing.", file=sys.stderr)
                    LG().Log('INFO', "Member: " + member + " is in the member list for group: " +
                             GroupName + " but not speficied in Members.  Removing.")
                    if DeleteUserFromGroup(member, GroupName) is False:
                        return [-1]

        else:
            group_members = GetGroupMembers(GroupName, group_entries)
            if len(MembersToInclude[0]):
                for member in MembersToInclude:
                    if member not in group_members:
                        Print("Member: " + member + " not in member list for group: " +
                              GroupName + ".  Adding.", file=sys.stderr)
                        LG().Log('INFO', "Member: " + member +
                                 " not in member list for group: " + GroupName + ".  Adding.")
                        if AddUserToGroup(member, GroupName) is False:
                            return [-1]
            if len(MembersToExclude[0]):
                for member in MembersToExclude:
                    if member in group_members:
                        Print("Member: " + member + " is in member list for group: " +
                              GroupName + ".  Removing.", file=sys.stderr)
                        LG().Log('INFO', "Member: " + member +
                                 " is in member list for group: " + GroupName + ".  Removing.")
                        if DeleteUserFromGroup(member, GroupName) is False:
                            return [-1]

    return [0]