#!/usr/bin/env python
# ==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
# ------------------------------------------------------------------------------
USAGE = """
This script will look for the specified users in all groups and remove them.
Usage:
removeuserfromgroups.py [instance] USER
removeuserfromgroups.py [instance] FILE
USER can be a single username or, it can be a FILE with a list of users.
instance defaults to 1 if not given.
"""
import os
import re
import sys
import sdputils
if len(sys.argv) > 2: # see params above
SDP_INSTANCE = str(sys.argv[1])
else:
SDP_INSTANCE = '1'
utils = sdputils.SDPUtils(SDP_INSTANCE)
config = utils.config
p4 = utils.p4
utils.login()
def rep(mo): return '_%s' % hex(ord(mo.group(0)))[-2:]
def removeuserfromfile(groupfile, username):
infile = open(groupfile, "r")
outfile = open(groupfile + ".new", "w")
for line in infile.readlines():
if username.lower() != (line.strip()).lower():
outfile.write(line)
infile.close()
outfile.close()
os.remove(groupfile)
newgroupfile = groupfile + ".new"
os.rename(newgroupfile, groupfile)
def removeuser(username):
usersgroups = []
for line in os.popen("%s groups %s" % (p4, username)):
line = line.strip()
print("Removing %s from %s" % (username, line))
groupname = re.sub(r'[\@=`~+<>/:\|\\ ,\(\)\[\]\$%^&?;{}\'\"]', rep, group)
groupfile = "%s.group" % groupname
if not os.path.exists(groupfile):
os.system('%s group -o "%s" > %s' % (p4, line, groupfile))
usersgroups.append(line)
if line not in groups:
groups.append(line.strip())
for group in usersgroups:
groupname = re.sub(r'[\@=`~+<>/:\|\\ ,\(\)\[\]\$%^&?;{}\'\"]', rep, group)
groupfile = "%s.group" % groupname
removeuserfromfile(groupfile, username)
def savegroups():
print("Saving groups on server")
for group in groups:
groupname = re.sub(r'[\@=`~+<>/:\|\\ ,\(\)\[\]\$%^&?;{}\'\"]', rep, group)
groupfile = "%s.group" % groupname
os.system("%s group -i < %s" % (p4, groupfile))
def cleanup():
print("Cleaning temp files")
for group in groups:
try:
groupname = re.sub(r'[\@=`~+<>/:\|\\ ,\(\)\[\]\$%^&?;{}\'\"]', rep, group)
groupfile = "%s.group" % groupname
os.remove(groupfile)
except:
print("Failed to delete %s." % groupfile)
def automain(userlist):
global initialized
initialized = 0
global groups
groups = []
for user in userlist:
removeuser(user)
savegroups()
cleanup()
def main():
if len(sys.argv) < 2:
print(USAGE)
sys.exit(1)
# Handle the optional instance parameter shift
if len(sys.argv) > 2:
userorfile = (sys.argv[2])
else:
userorfile = (sys.argv[1])
global initialized
initialized = 0
global groups
groups = []
try:
userlistfile = open(userorfile, "r")
for line in userlistfile.readlines():
line = line.strip()
if line:
removeuser(line)
userlistfile.close()
except:
print("No file %s available, assuming it is the actual user name." % userorfile)
removeuser(userorfile.strip())
savegroups()
cleanup()
if __name__ == '__main__':
main()
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #11 | 27331 | C. Thomas Tyler |
Released SDP 2020.1.27325 (2021/01/29). Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'. |
||
| #10 | 26161 | C. Thomas Tyler |
Released SDP 2019.3.26159 (2019/11/06). Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'. |
||
| #9 | 22685 | Russell C. Jackson (Rusty) | Update main with current changes from dev. | ||
| #8 | 20997 | C. Thomas Tyler |
Released SDP 2016.2.20995 (2016/11/07). Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'. |
||
| #7 | 20974 | C. Thomas Tyler |
Released SDP 2016.2.20972 (2016/11/01). Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'. |
||
| #6 | 16581 | Robert Cowham |
Standardised processing and formatting. Made python 2/3 compatible. These need automated testing! |
||
| #5 | 15856 | C. Thomas Tyler |
Replaced the big license comment block with a shortened form referencing the LICENSE file included with the SDP package, and also by the URL for the license file in The Workshop. |
||
| #4 | 13908 | C. Thomas Tyler | Pushing SDP 2015.1.13906. | ||
| #3 | 11583 | Russell C. Jackson (Rusty) |
Added -Fs to client delete in case shelves can't be deleted for some reason. Added replacement of / with _ for group file names to avoid errors with groups that have a / in the name. |
||
| #2 | 11524 | Russell C. Jackson (Rusty) | Released updated version of the SDP from Dev. | ||
| #1 | 10148 | C. Thomas Tyler | Promoted the Perforce Server Deployment Package to The Workshop. |