@@ -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+ .strip ()
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