def execute(self, **options): """ Retrieve the DN we are authenticated as to LDAP and find bindable IPA object that handles the container where this DN belongs to. Then report details about this object. """ exceptions = { 'idoverrideuser': (DN("cn={0}".format(DEFAULT_TRUST_VIEW_NAME)), DEFAULT_TRUST_VIEW_NAME, 'ipaOriginalUid'), } ldap = api.Backend.ldap2 # whoami_s() call returns a string 'dn: <actual DN value>' # We also reject ldapi-as-root connections as DM is a virtual object dn = DN(ldap.conn.whoami_s()[4:]) if dn == DN('cn=Directory Manager'): raise errors.NotFound( reason=_('Cannot query Directory Manager with API')) entry = ldap.get_entry(dn) o_name = None o_func = None o_args = [] for o in api.Object(): if not getattr(o, 'bindable', None): continue container = getattr(o, 'container_dn', None) if container is None: continue # Adjust container for exception two-level objects if o.name in exceptions: container = exceptions[o.name][0] + container if dn.find(container + api.env.basedn) == 1: # We found exact container this DN belongs to o_name = unicode(o.name) o_args = [unicode(entry.single_value.get(o.primary_key.name))] o_func = unicode(o.methods.show.full_name) if o.name in exceptions: o_args = [ unicode(exceptions[o.name][1]), unicode(entry.single_value.get(exceptions[o.name][2])) ] break return {'object': o_name, 'command': o_func, 'arguments': o_args}
def execute(self, **options): """ Retrieve the DN we are authenticated as to LDAP and find bindable IPA object that handles the container where this DN belongs to. Then report details about this object. """ exceptions = { 'idoverrideuser': (DN("cn={0}".format(DEFAULT_TRUST_VIEW_NAME)), DEFAULT_TRUST_VIEW_NAME, 'ipaOriginalUid'), } ldap = api.Backend.ldap2 # whoami_s() call returns a string 'dn: <actual DN value>' # We also reject ldapi-as-root connections as DM is a virtual object dn = DN(ldap.conn.whoami_s()[4:]) if dn == DN('cn=Directory Manager'): raise errors.NotFound( reason=_('Cannot query Directory Manager with API')) entry = ldap.get_entry(dn) o_name = None o_func = None o_args = [] for o in api.Object(): if not getattr(o, 'bindable', None): continue container = getattr(o, 'container_dn', None) if container is None: continue # Adjust container for exception two-level objects if o.name in exceptions: container = exceptions[o.name][0] + container if dn.find(container + api.env.basedn) == 1: # We found exact container this DN belongs to o_name = unicode(o.name) o_args = [unicode(entry.single_value.get(o.primary_key.name))] o_func = unicode(o.methods.show.full_name) if o.name in exceptions: o_args = [unicode(exceptions[o.name][1]), unicode(entry.single_value.get( exceptions[o.name][2]))] break return {'object': o_name, 'command': o_func, 'arguments': o_args}
def test_find(self): # -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 dn = DN('t=0,t=1,cn=bob,t=3,t=4,t=5,cn=bob,t=7,t=8,t=9') pat = DN('cn=bob') # forward assert dn.find(pat) == 2 assert dn.find(pat, 1) == 2 assert dn.find(pat, 1, 3) == 2 assert dn.find(pat, 2, 3) == 2 assert dn.find(pat, 6) == 6 assert dn.find(pat, 7) == -1 assert dn.find(pat, 1, 2) == -1 with pytest.raises(ValueError): assert dn.index(pat, 7) == -1 with pytest.raises(ValueError): assert dn.index(pat, 1, 2) == -1 # reverse assert dn.rfind(pat) == 6 assert dn.rfind(pat, -4) == 6 assert dn.rfind(pat, 6) == 6 assert dn.rfind(pat, 6, 8) == 6 assert dn.rfind(pat, 6, 8) == 6 assert dn.rfind(pat, -8) == 6 assert dn.rfind(pat, -8, -4) == 6 assert dn.rfind(pat, -8, -5) == 2 assert dn.rfind(pat, 7) == -1 assert dn.rfind(pat, -3) == -1 with pytest.raises(ValueError): assert dn.rindex(pat, 7) == -1 with pytest.raises(ValueError): assert dn.rindex(pat, -3) == -1
def test_find(self): # -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 dn = DN('t=0,t=1,cn=bob,t=3,t=4,t=5,cn=bob,t=7,t=8,t=9') pat = DN('cn=bob') # forward self.assertEqual(dn.find(pat), 2) self.assertEqual(dn.find(pat, 1), 2) self.assertEqual(dn.find(pat, 1, 3), 2) self.assertEqual(dn.find(pat, 2, 3), 2) self.assertEqual(dn.find(pat, 6), 6) self.assertEqual(dn.find(pat, 7), -1) self.assertEqual(dn.find(pat, 1, 2), -1) with self.assertRaises(ValueError): self.assertEqual(dn.index(pat, 7), -1) with self.assertRaises(ValueError): self.assertEqual(dn.index(pat, 1, 2), -1) # reverse self.assertEqual(dn.rfind(pat), 6) self.assertEqual(dn.rfind(pat, -4), 6) self.assertEqual(dn.rfind(pat, 6), 6) self.assertEqual(dn.rfind(pat, 6, 8), 6) self.assertEqual(dn.rfind(pat, 6, 8), 6) self.assertEqual(dn.rfind(pat, -8), 6) self.assertEqual(dn.rfind(pat, -8, -4), 6) self.assertEqual(dn.rfind(pat, -8, -5), 2) self.assertEqual(dn.rfind(pat, 7), -1) self.assertEqual(dn.rfind(pat, -3), -1) with self.assertRaises(ValueError): self.assertEqual(dn.rindex(pat, 7), -1) with self.assertRaises(ValueError): self.assertEqual(dn.rindex(pat, -3), -1)