Skip to content

Commit 03d96c5

Browse files
committed
use krb5-config to get the kerberos installation PREFIX
1 parent 17512bd commit 03d96c5

File tree

2 files changed

+41
-26
lines changed

2 files changed

+41
-26
lines changed

k5test/_utils.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def _decide_plugin_dir(dirs):
9696
def _find_plugin_dirs_installed(search_path):
9797
try:
9898
options_raw = get_output(
99-
"find %s/ -type d \( ! -executable -o ! -readable \) "
99+
"find %s/ -type d \\( ! -executable -o ! -readable \\) "
100100
"-prune -o "
101101
'-type d -path "*/krb5/plugins" -print' % search_path,
102102
stderr=subprocess.STDOUT,

k5test/realm.py

+40-25
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,10 @@ def __new__(cls, *args, **kwargs):
8484
provider_cls = cls
8585

8686
if provider_cls == K5Realm:
87-
krb5_config = _discover_path("krb5-config", "/usr/bin/krb5-config", kwargs)
87+
krb5_config = os.environ.get(
88+
"KRB5CONFIG",
89+
_discover_path("krb5-config", "/usr/bin/krb5-config", kwargs),
90+
)
8891

8992
try:
9093
krb5_version = subprocess.check_output(
@@ -152,7 +155,23 @@ def __init__(
152155

153156
self._daemons = []
154157

155-
self._init_paths(**paths)
158+
krb5_config = os.environ.get(
159+
"KRB5CONFIG", _discover_path("krb5-config", "/usr/bin/krb5-config", paths)
160+
)
161+
try:
162+
self._krb5_prefix = (
163+
subprocess.check_output([krb5_config, "--prefix"])
164+
.decode(sys.getfilesystemencoding() or sys.getdefaultencoding())
165+
.trim()
166+
)
167+
except Exception as e:
168+
self._krb5_prefix = "/usr"
169+
_LOG.warning(
170+
f"Failed to determine krb5 installation PREFIX, defaulting to '{self._krb5_prefix}'."
171+
)
172+
173+
for attr, value in self._default_paths:
174+
setattr(self, attr, value)
156175

157176
if existing is None:
158177
self._create_conf(_cfg_merge(self._krb5_conf, krb5_conf), krb5_conf_path)
@@ -246,11 +265,6 @@ def start_kdc(self, args=None, env=None):
246265
def start_kadmind(self, env=None):
247266
pass
248267

249-
def _init_paths(self, **paths):
250-
for attr, name, default in self._default_paths:
251-
value = _discover_path(name, default, paths)
252-
setattr(self, attr, value)
253-
254268
def _create_conf(self, profile, filename):
255269
with open(filename, "w") as conf_file:
256270
for section, contents in profile.items():
@@ -456,14 +470,14 @@ def provider(self):
456470
@property
457471
def _default_paths(self):
458472
return [
459-
("kdb5_util", "kdb5_util", "/usr/sbin/kdb5_util"),
460-
("krb5kdc", "krb5kdc", "/usr/sbin/krb5kdc"),
461-
("kadmin", "kadmin", "/usr/bin/kadmin"),
462-
("kadmin_local", "kadmin.local", "/usr/sbin/kadmin.local"),
463-
("kadmind", "kadmind", "/usr/sbin/kadmind"),
464-
("kprop", "kprop", "/usr/sbin/kprop"),
465-
("_kinit", "kinit", "/usr/bin/kinit"),
466-
("_klist", "klist", "/usr/bin/klist"),
473+
("kdb5_util", self._krb5_prefix + "/sbin/kdb5_util"),
474+
("krb5kdc", self._krb5_prefix + "/sbin/krb5kdc"),
475+
("kadmin", self._krb5_prefix + "/bin/kadmin"),
476+
("kadmin_local", self._krb5_prefix + "/sbin/kadmin.local"),
477+
("kadmind", self._krb5_prefix + "/sbin/kadmind"),
478+
("kprop", self._krb5_prefix + "/sbin/kprop"),
479+
("_kinit", self._krb5_prefix + "/bin/kinit"),
480+
("_klist", self._krb5_prefix + "/bin/klist"),
467481
]
468482

469483
@property
@@ -619,18 +633,19 @@ def provider(self):
619633

620634
@property
621635
def _default_paths(self):
622-
base = "/System/Library/PrivateFrameworks/Heimdal.framework/Helpers"
623-
if sys.platform != "darwin":
624-
base = "/usr/libexec"
636+
if sys.platform == "darwin":
637+
libexec = "/System/Library/PrivateFrameworks/Heimdal.framework/Helpers"
638+
else:
639+
libexec = self._krb5_prefix + "/libexec"
625640

626641
return [
627-
("krb5kdc", "kdc", os.path.join(base, "kdc")),
628-
("kadmin", "kadmin", "/usr/bin/kadmin"),
629-
("kadmin_local", "kadmin", "/usr/bin/kadmin"),
630-
("kadmind", "kadmind", os.path.join(base, "kadmind")),
631-
("_kinit", "kinit", "/usr/bin/kinit"),
632-
("_klist", "klist", "/usr/bin/klist"),
633-
("_ktutil", "ktutil", "/usr/bin/ktutil"),
642+
("krb5kdc", libexec + "/kdc"),
643+
("kadmind", libexec + "/kadmind"),
644+
("kadmin", self._krb5_prefix + "/bin/kadmin"),
645+
("kadmin_local", self._krb5_prefix + "/bin/kadmin"),
646+
("_kinit", self._krb5_prefix + "/bin/kinit"),
647+
("_klist", self._krb5_prefix + "/bin/klist"),
648+
("_ktutil", self._krb5_prefix + "/bin/ktutil"),
634649
]
635650

636651
@property

0 commit comments

Comments
 (0)