@@ -84,7 +84,10 @@ def __new__(cls, *args, **kwargs):
84
84
provider_cls = cls
85
85
86
86
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
+ )
88
91
89
92
try :
90
93
krb5_version = subprocess .check_output (
@@ -152,7 +155,23 @@ def __init__(
152
155
153
156
self ._daemons = []
154
157
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 )
156
175
157
176
if existing is None :
158
177
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):
246
265
def start_kadmind (self , env = None ):
247
266
pass
248
267
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
-
254
268
def _create_conf (self , profile , filename ):
255
269
with open (filename , "w" ) as conf_file :
256
270
for section , contents in profile .items ():
@@ -456,14 +470,14 @@ def provider(self):
456
470
@property
457
471
def _default_paths (self ):
458
472
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" ),
467
481
]
468
482
469
483
@property
@@ -619,18 +633,19 @@ def provider(self):
619
633
620
634
@property
621
635
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"
625
640
626
641
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" ),
634
649
]
635
650
636
651
@property
0 commit comments