Bug 1866294

Summary: dsidm fails to delete an organizationalUnit entry.
Product: Red Hat Enterprise Linux 8 Reporter: Têko Mihinto <tmihinto>
Component: 389-ds-baseAssignee: mreynolds
Status: CLOSED ERRATA QA Contact: RHDS QE <ds-qe-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 8.2CC: bsmejkal, florianwinter, mharmsen, pasik, sgouvern, spichugi, tbordaz, vashirov
Target Milestone: rcFlags: pm-rhel: mirror+
Target Release: 8.0   
Hardware: x86_64   
OS: Linux   
Whiteboard: sync-to-jira
Fixed In Version: 389-ds-devel-1.4-8040020201105165416.866effaa Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-05-18 15:45:26 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Têko Mihinto 2020-08-05 10:35:10 UTC
Description of problem:
Trying to delete an organizationalUnit entry fails with this message:
Error: object of type 'Namespace' has no len()

Version-Release number of selected component (if applicable):
# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)
# rpm -qa | grep 389-ds-base
389-ds-base-1.4.2.12-2.module+el8dsrv+6428+6e54c518.x86_64
389-ds-base-libs-1.4.2.12-2.module+el8dsrv+6428+6e54c518.x86_64
#

How reproducible:
Always.

Steps to Reproduce:
1. Create the entry:
# dsidm -D "cn=Directory Manager" -b dc=example,dc=com ldap://localhost:389 organizationalunit create
Enter password for cn=Directory Manager on ldap://localhost:389:
Enter value for ou : toDelete
Successfully created toDelete
#

2. Get the entry details:
# dsidm -D "cn=Directory Manager" -b dc=example,dc=com ldap://localhost:389 organizationalunit get toDelete
Enter password for cn=Directory Manager on ldap://localhost:389:
dn: ou=toDelete,dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: toDelete

#

3. Try to delete the entry:
# dsidm -D "cn=Directory Manager" -b dc=example,dc=com ldap://localhost:389 organizationalunit delete "ou=toDelete,dc=example,dc=com"
Enter password for cn=Directory Manager on ldap://localhost:389:
Error: object of type 'Namespace' has no len()
#
# dsidm -D "cn=Directory Manager" -b dc=example,dc=com ldap://localhost:389 organizationalunit delete ou=toDelete,dc=example,dc=com
Enter password for cn=Directory Manager on ldap://localhost:389:
Error: object of type 'Namespace' has no len()
#

Actual results:
The command fails.

Expected results:
The command should work.

Additional info:

Comment 1 mreynolds 2020-08-05 13:54:12 UTC
Upstream ticket:
https://pagure.io/389-ds-base/issue/51231

Comment 2 mreynolds 2020-08-31 18:56:00 UTC
I can not reproduce this with the latest version for 1.4.2 and up.  This must have been fixed in a different bug/ticket.  I will try and find out which one, but it would be useful if the customer can add "-v" to the dsidm command so we can see where it's failing in the code.  Then I verify where and when it got fixed.

Comment 4 Têko Mihinto 2020-09-07 07:29:11 UTC
# dsidm -v -D "cn=Directory Manager" -b dc=example,dc=com ldap://localhost:1389 organizationalunit delete ou=toDelete,dc=example,dc=com
DEBUG: The 389 Directory Server Identity Manager
DEBUG: Inspired by works of: ITS, The University of Adelaide
DEBUG: dsrc path: /root/.dsrc
DEBUG: dsrc container path: /data/config/container.inf
DEBUG: dsrc instances: []
DEBUG: dsrc no such section: slapd-ldap://localhost:1389
DEBUG: Called with: Namespace(basedn='dc=example,dc=com', binddn='cn=Directory Manager', bindpw=None, dn='ou=toDelete,dc=example,dc=com', func=<function delete at 0x7f52003876a8>, instance='ldap://localhost:1389', json=False, prompt=False, pwdfile=None, starttls=False, verbose=True)
DEBUG: Instance details: {'uri': 'ldap://localhost:1389', 'basedn': 'dc=example,dc=com', 'binddn': 'cn=Directory Manager', 'bindpw': None, 'saslmech': None, 'tls_cacertdir': None, 'tls_cert': None, 'tls_key': None, 'tls_reqcert': 1, 'starttls': False, 'prompt': False, 'pwdfile': None, 'args': {'ldapurl': 'ldap://localhost:1389', 'root-dn': 'cn=Directory Manager'}}
DEBUG: SER_SERVERID_PROP not provided, assuming non-local instance
DEBUG: Allocate <class 'lib389.DirSrv'> with ldap://localhost:1389
DEBUG: Allocate <class 'lib389.DirSrv'> with <HOSTNAME>.localdomain:389
DEBUG: Allocate <class 'lib389.DirSrv'> with <HOSTNAME>.localdomain:389
Enter password for cn=Directory Manager on ldap://localhost:1389:
DEBUG: SER_SERVERID_PROP not provided, assuming non-local instance
DEBUG: Allocate <class 'lib389.DirSrv'> with ldap://localhost:1389
DEBUG: Allocate <class 'lib389.DirSrv'> with <HOSTNAME>.localdomain:389
DEBUG: Allocate <class 'lib389.DirSrv'> with <HOSTNAME>.localdomain:389
DEBUG: open(): Connecting to uri ldap://localhost:1389
DEBUG: open(): bound as cn=Directory Manager
DEBUG: object of type 'Namespace' has no len()
Traceback (most recent call last):
  File "/usr/sbin/dsidm", line 130, in <module>
    result = args.func(inst, dsrc_inst['basedn'], log, args)
  File "/usr/lib/python3.6/site-packages/lib389/cli_idm/organizationalunit.py", line 46, in delete
    dn = _get_arg( args, msg="Enter dn to delete")
  File "/usr/lib/python3.6/site-packages/lib389/cli_idm/__init__.py", line 14, in _get_arg
    if args is not None and len(args) > 0:
TypeError: object of type 'Namespace' has no len()
ERROR: Error: object of type 'Namespace' has no len()

Comment 6 mreynolds 2020-11-01 16:05:23 UTC
Was fixed in https://github.com/389ds/389-ds-base/issues/4212

Comment 10 bsmejkal 2020-11-25 18:43:36 UTC
==================================================================================== test session starts =====================================================================================
platform linux -- Python 3.6.8, pytest-6.1.2, py-1.9.0, pluggy-0.13.1 -- /usr/bin/python3.6
cachedir: .pytest_cache
metadata: {'Python': '3.6.8', 'Platform': 'Linux-4.18.0-252.el8.x86_64-x86_64-with-redhat-8.4-Ootpa', 'Packages': {'pytest': '6.1.2', 'py': '1.9.0', 'pluggy': '0.13.1'}, 'Plugins': {'metadata': '1.10.0', 'html': '3.0.0', 'libfaketime': '0.1.2'}}
389-ds-base: 1.4.3.16-2.module+el8.4.0+8803+fd0f8fe3
nss: 3.53.1-11.el8_2
nspr: 4.25.0-2.el8_2
openldap: 2.4.46-16.el8
cyrus-sasl: 2.1.27-5.el8
FIPS: disabled
rootdir: /mnt/tests/rhds/tests/upstream/ds/dirsrvtests, configfile: pytest.ini
plugins: metadata-1.10.0, html-3.0.0, libfaketime-0.1.2
collected 1 item                                                                                                                                                                             

dirsrvtests/tests/suites/clu/dsidm_organizational_unit_test.py::test_dsidm_organizational_unit_delete PASSED                                                                           [100%]

===================================================================================== 1 passed in 8.46s =====================================================================================

Marking as Verified:Tested.

Comment 13 sgouvern 2020-11-30 19:37:54 UTC
Verified:tested in 389-ds-base: 1.4.3.16-2.module+el8.4.0+8803+fd0f8fe3 (see comment 10)
-> marking as VERIFIED

Comment 15 errata-xmlrpc 2021-05-18 15:45:26 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (389-ds:1.4 bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2021:1835