kadmin 0.7.1

Rust bindings for the Kerberos administration interface (kadm5)
Documentation
import os
from copy import deepcopy
from k5test import realm
from unittest import TestCase
from random import SystemRandom
import string


def random_string(length: int) -> str:
    rand = SystemRandom()
    return "".join(
        rand.choice(string.ascii_lowercase + string.digits) for _ in range(length)
    )


class KerberosTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        cls.realm = realm.K5Realm(start_kadmind=True)

        cls.realm.http_princ = f"HTTP/testserver@{cls.realm.realm}"
        cls.realm.http_keytab = os.path.join(cls.realm.tmpdir, "http_keytab")
        cls.realm.addprinc(cls.realm.http_princ)
        cls.realm.extract_keytab(cls.realm.http_princ, cls.realm.http_keytab)

        cls._saved_env = deepcopy(os.environ)
        for k, v in cls.realm.env.items():
            os.environ[k] = v

    @classmethod
    def tearDownClass(cls):
        cls.realm.stop()
        del cls.realm

        for k in deepcopy(os.environ):
            if k in cls._saved_env:
                os.environ[k] = cls._saved_env[k]
            else:
                del os.environ[k]
        cls._saved_env = None