Beispiel #1
0
    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}
Beispiel #2
0
    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}
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
    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)