Skip to content

Commit

Permalink
Issue 5373 - dsidm user get_dn fails with search_ext() argument 1 mus…
Browse files Browse the repository at this point in the history
…t be str, not function

Description:  The _get_arg() function was not being properly called when
a DN is not provided.  Also improved the overall error handling when
things go wrong.

relates: #5373

Reviewed by: firstyear & spichugi (Thanks!)
  • Loading branch information
mreynolds389 committed Jul 21, 2022
1 parent 1a2bcef commit 01a3d56
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
5 changes: 4 additions & 1 deletion src/lib389/cli/dsidm
Expand Up @@ -147,7 +147,10 @@ if __name__ == '__main__':
if args.json:
sys.stderr.write(f"{json.dumps(msg, indent=4)}\n")
else:
log.error("Error: %s" % " - ".join(str(val) for val in msg.values()))
if 'desc' in msg:
log.error(f"Error: {msg['desc']}")
else:
log.error("Error: %s" % " - ".join(str(val) for val in msg.values()))
result = False

disconnect_instance(inst)
Expand Down
12 changes: 8 additions & 4 deletions src/lib389/lib389/_mapped_object.py
Expand Up @@ -76,8 +76,8 @@ def _ldap_op_s(inst, f, fname, *args, **kwargs):
new_desc = f"{fname}({args},{kwargs}) on instance {inst.serverid}";
if len(e.args) >= 1:
e.args[0]['ldap_request'] = new_desc
logging.getLogger().error(f"args={e.args}")
raise
logging.getLogger().debug(f"args={e.args}")
raise e

def _add_ext_s(inst, *args, **kwargs):
return _ldap_op_s(inst, inst.add_ext_s, 'add_ext_s', *args, **kwargs)
Expand Down Expand Up @@ -1182,14 +1182,18 @@ def get(self, selector=[], dn=None, json=False):

results = []
if dn is not None:
criteria = dn
search_filter = self._get_objectclass_filter()
results = self._get_dn(dn)
else:
criteria = selector
search_filter = self._get_selector_filter(selector)
results = self._get_selector(selector)

if len(results) == 0:
raise ldap.NO_SUCH_OBJECT("No object exists given the filter criteria %s" % selector)
raise ldap.NO_SUCH_OBJECT(f"No object exists given the filter criteria: {criteria} {search_filter}")
if len(results) > 1:
raise ldap.UNWILLING_TO_PERFORM("Too many objects matched selection criteria %s" % selector)
raise ldap.UNWILLING_TO_PERFORM(f"Too many objects matched selection criteria: {criteria} {search_filter}")
if json:
return self._entry_to_instance(results[0].dn, results[0]).get_all_attrs_json()
else:
Expand Down
2 changes: 1 addition & 1 deletion src/lib389/lib389/cli_idm/user.py
Expand Up @@ -34,7 +34,7 @@ def get(inst, basedn, log, args):
_generic_get(inst, basedn, log.getChild('_generic_get'), MANY, rdn, args)

def get_dn(inst, basedn, log, args):
dn = lambda args: _get_arg( args.dn, msg="Enter dn to retrieve")
dn = _get_arg( args.dn, msg="Enter dn to retrieve")
_generic_get_dn(inst, basedn, log.getChild('_generic_get_dn'), MANY, dn, args)

def create(inst, basedn, log, args):
Expand Down

0 comments on commit 01a3d56

Please sign in to comment.