|
Packit Service |
863627 |
#!/usr/bin/python3
|
|
Packit Service |
863627 |
"""
|
|
Packit Service |
863627 |
Create group accounts
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
Create group accounts, optionally assigning them static GIDs.
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
Runs `groupadd` from the buildhost to create the groups listed in `groups`.
|
|
Packit Service |
863627 |
If no `gid` is given, `groupadd` will choose one.
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
If the specified group name or GID is already in use, this stage will fail.
|
|
Packit Service |
863627 |
"""
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
import json
|
|
Packit Service |
863627 |
import subprocess
|
|
Packit Service |
863627 |
import sys
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
SCHEMA = """
|
|
Packit Service |
863627 |
"additionalProperties": false,
|
|
Packit Service |
863627 |
"properties": {
|
|
Packit Service |
863627 |
"groups": {
|
|
Packit Service |
863627 |
"type": "object",
|
|
Packit Service |
863627 |
"description": "Keys are group names, values are objects with group info",
|
|
Packit Service |
863627 |
"propertyNames": {
|
|
Packit Service |
863627 |
"pattern": "^[A-Za-z0-9_][A-Za-z0-9_-]{0,31}$"
|
|
Packit Service |
863627 |
},
|
|
Packit Service |
863627 |
"additionalProperties": {
|
|
Packit Service |
863627 |
"type": "object",
|
|
Packit Service |
863627 |
"properties": {
|
|
Packit Service |
863627 |
"gid": {
|
|
Packit Service |
863627 |
"type": "number",
|
|
Packit Service |
863627 |
"description": "GID for this group"
|
|
Packit Service |
863627 |
}
|
|
Packit Service |
863627 |
}
|
|
Packit Service |
863627 |
}
|
|
Packit Service |
863627 |
}
|
|
Packit Service |
863627 |
}
|
|
Packit Service |
863627 |
"""
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
def groupadd(root, name, gid=None):
|
|
Packit Service |
863627 |
arguments = []
|
|
Packit Service |
863627 |
if gid:
|
|
Packit Service |
863627 |
arguments += ["--gid", str(gid)]
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
subprocess.run(["groupadd", "--root", root, *arguments, name], check=True)
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
def main(tree, options):
|
|
Packit Service |
863627 |
groups = options["groups"]
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
for name, group_options in groups.items():
|
|
Packit Service |
863627 |
gid = group_options.get("gid")
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
groupadd(tree, name, gid)
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
return 0
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
|
|
Packit Service |
863627 |
if __name__ == '__main__':
|
|
Packit Service |
863627 |
args = json.load(sys.stdin)
|
|
Packit Service |
863627 |
r = main(args["tree"], args["options"])
|
|
Packit Service |
863627 |
sys.exit(r)
|