openbmctool enable/disable local users
Add options to disable, enable, and query all local users.
New help text:
positional arguments:
{disableall,enableall,queryenabled}
Disable, enable or query local user accounts
Option queryenabled output:
User: root Enabled: 1
Option disableall output:
Disabling root
Option enableall output:
Enabling root
Change-Id: I45364602c00b3aa629a1415e00e682ace2f91a55
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/thalerj/openbmctool.py b/thalerj/openbmctool.py
index 9fac4f0..ab2c7d9 100755
--- a/thalerj/openbmctool.py
+++ b/thalerj/openbmctool.py
@@ -2153,6 +2153,62 @@
return res.text
+def localUsers(host, args, session):
+ """
+ Enables and disables local BMC users.
+
+ @param host: string, the hostname or IP address of the bmc
+ @param args: contains additional arguments used by the logging sub command
+ @param session: the active session to use
+ """
+
+ httpHeader = {'Content-Type':'application/json'}
+ url="https://{hostname}/xyz/openbmc_project/user/enumerate".format(hostname=host)
+ try:
+ res = session.get(url, headers=httpHeader, verify=False, timeout=40)
+ except(requests.exceptions.Timeout):
+ return(connectionErrHandler(args.json, "Timeout", None))
+ usersDict = json.loads(res.text)
+
+ if not usersDict['data']:
+ return "No users found"
+
+ output = ""
+ for user in usersDict['data']:
+ name = user.split('/')[-1]
+ url = "https://{hostname}{user}/attr/UserEnabled".format(hostname=host, user=user)
+
+ if args.local_users == "queryenabled":
+ try:
+ res = session.get(url, headers=httpHeader,verify=False, timeout=30)
+ except(requests.exceptions.Timeout):
+ return(connectionErrHandler(args.json, "Timeout", None))
+
+ result = json.loads(res.text)
+ output += ("User: {name} Enabled: {result}\n").format(name=name, result=result['data'])
+
+ elif args.local_users in ["enableall", "disableall"]:
+ action = ""
+ if args.local_users == "enableall":
+ data = '{"data": true}'
+ action = "Enabling"
+ else:
+ data = '{"data": false}'
+ action = "Disabling"
+
+ output += "{action} {name}\n".format(action=action, name=name)
+
+ try:
+ resp = session.put(url, headers=httpHeader, data=data, verify=False, timeout=30)
+ except(requests.exceptions.Timeout):
+ return connectionErrHandler(args.json, "Timeout", None)
+ except(requests.exceptions.ConnectionError) as err:
+ return connectionErrHandler(args.json, "ConnectionError", err)
+ else:
+ return "Invalid local users argument"
+
+ return output
+
def createCommandParser():
"""
creates the parser for the command line along with help for each command and subcommand
@@ -2345,6 +2401,12 @@
parser_remote_logging_config.add_argument("-p", "--port", required=True, type=int, help="Set Port of rsyslog server")
parser_remote_logging_config.set_defaults(func=remoteLoggingConfig)
+ # local users
+ parser_users = subparsers.add_parser("local_users", help="Work with local users")
+ parser_users.add_argument('local_users', choices=['disableall','enableall', 'queryenabled'], help="Disable, enable or query local user accounts")
+ parser_users.add_argument('-v', '--verbose', action='store_true', help='Verbose output')
+ parser_users.set_defaults(func=localUsers)
+
return parser
def main(argv=None):
@@ -2352,7 +2414,7 @@
main function for running the command line utility as a sub application
"""
global toolVersion
- toolVersion = "1.07"
+ toolVersion = "1.08"
parser = createCommandParser()
args = parser.parse_args(argv)