Alexander Bokovoy wrote:
On to, 25 loka 2018, Callum Smith wrote:
Dear Alexander,
The issue is not with the library (it does no validation of syntax) the error I have provided is verbose directly from the FreeIPA API response.
It seems the library puts some defaults that aren't accepted by the FreeIPA API, unlike a client code we provide. Or may be that's your use of it. More below.
How would you suggest I re-factor this code so that the error is acceptable?
Looking at the definition of 'uidnumber' parameter to user object, we can see it has minimal value of '1' and it is optional (? at the end of the name):
Int('uidnumber?', cli_name='uid', label=_('UID'), doc=_('User ID Number (system will assign one if not provided)'), minvalue=1, ),
This means that if you wouldn't provide it in your request, it will be automatically generated.
Right, I suggested -1 to see if it would help (it didn't and IPA rejected it in input validation).
So a simple approach would be replace explicit addition of named arguments by a dict and then adding that dict:
opts = {} if options.uid: opts['uidnumber'] = options.uid opts['gidnumber'] = options.primary_gid opts['mail'] = options.mail opts['home_directory'] = options.home_directory opts['user_password'] = options.password ...
client.user_add(...., **opts)
(client is initialised and logged in - tested and working with other calls such as user_show etc)
client.user_add( options.username, options.first_name, options.last_name, options.name, mail=options.mail, home_directory=options.home_directory, uidnumber=options.uid if options.uid else -1, gidnumber=options.primary_gid, user_password=options.password, ) Sorry, this is not an API provided by the FreeIPA project. Please contact authors of python-freeipa (I think it was created by OpenNode people) and report them bugs you see there.
https://pypi.org/project/python-freeipa/
-- / Alexander Bokovoy Sr. Principal Software Engineer Security / Identity Management Engineering Red Hat Limited, Finland