Exemple #1
0
def save_person(changes: Changeset, database: Database, format_fields: Optional[Set[str]] = None) -> Changeset:
    settings = database.settings

    d = dict()

    if 'password' in changes:
        password = changes.get_value_as_single('password')
        d["userPassword"] = ldap_passwd.encode_password(password)

    if 'groups' in changes:
        groups = changes.get_value_as_list('groups')
        if len(groups) > 0:
            raise RuntimeError("Cannot register changes in groups on people.")

    if 'primary_group' in changes:
        group = changes.get_value_as_single('primary_group')
        assert group.get_as_single('gidNumber') is not None
        d['gidNumber'] = group.get_as_single('gidNumber')

    if format_fields is None:
        format_fields = {'cn'}

    if any(name in changes for name in format_fields):
        values = {
            name: changes.get_value_as_single(name)
            for name in format_fields
        }

        spec = settings.get('DISPLAY_NAME_FORMAT', "{cn}")
        d['displayName'] = spec.format(**values)

    return changes.merge(d)
Exemple #2
0
    def _configure(self) -> List[str]:
        """
        Appends slapd.conf configuration lines to cfg.
        Also re-initializes any backing storage.
        Feel free to subclass and override this method.
        """
        ldif_dir = os.path.join(self._tmpdir, "ldif-data")

        cfg = []

        # Global
        schema_list = os.listdir(self.PATH_SCHEMA_DIR)
        schema_list.sort()
        for schema in schema_list:
            cfg.append("include " + quote(self.PATH_SCHEMA_DIR + schema))

        cfg.append("allow bind_v2")

        # Database
        cfg.append("moduleload back_mdb")
        cfg.append("moduleload ppolicy")
        cfg.append('')

        cfg.append("database mdb")
        cfg.append("directory " + quote(ldif_dir))

        cfg.append("suffix " + quote(self.get_dn_suffix()))
        cfg.append("overlay ppolicy")
        cfg.append(f'ppolicy_default {quote("cn=default,"+self.get_dn_suffix())}')
        cfg.append("# rootdn " + quote(self.get_root_dn()))
        cfg.append("# rootpw " + quote(
            lp.encode_password(self.get_root_password())))
        cfg.append('')

        cfg.append(f'access to dn.sub={quote(self.get_dn_suffix())} attrs=userPassword')
        cfg.append(f'   by anonymous auth')
        cfg.append('')

        cfg.append(f'access to dn.sub={quote(self.get_dn_suffix())}')
        cfg.append(f'   by dn.exact={quote(self.get_root_dn())} write')
        cfg.append('')

        return cfg
 def test_password_encode(self):
     encrypted = lp.encode_password("test")
     self.assertTrue(encrypted.startswith("{CRYPT}$6$"))
     self.assertTrue(lp.check_password("test", encrypted))
     self.assertFalse(lp.check_password("teddst", encrypted))
 def test_password_ssha(self):
     encrypted = lp.encode_password("test")
     self.assertTrue(encrypted.startswith("{SSHA}"))
     self.assertTrue(lp.check_password("test", encrypted))
     self.assertFalse(lp.check_password("teddst", encrypted))
 def change_password(cls, self, password):
     self.userPassword = ldap_passwd.encode_password(password)
 def test_password_ssha(self):
     encrypted = lp.encode_password("test")
     self.assertTrue(encrypted.startswith("{SSHA}"))
     self.assertTrue(lp.check_password("test", encrypted))
     self.assertFalse(lp.check_password("teddst", encrypted))