git: 80e6e5b7eaa8 - main - net/freeipa-client: Respect PREFIX and LOCALBASE

From: Jochen Neumeister <joneum_at_FreeBSD.org>
Date: Mon, 21 Sep 2026 18:43:39 UTC
The branch main has been updated by joneum:

URL: https://cgit.FreeBSD.org/ports/commit/?id=80e6e5b7eaa8d38077610a8b29ed16accfc76238

commit 80e6e5b7eaa8d38077610a8b29ed16accfc76238
Author:     Jochen Neumeister <joneum@FreeBSD.org>
AuthorDate: 2026-09-21 18:42:50 +0000
Commit:     Jochen Neumeister <joneum@FreeBSD.org>
CommitDate: 2026-09-21 18:43:28 +0000

    net/freeipa-client: Respect PREFIX and LOCALBASE
    
    The patches hardcoded /usr/local in 153 places. They now carry
    %%PREFIX%% for the files this port installs itself and %%LOCALBASE%%
    for the ones it only reads, substituted in post-patch.
    
    client/ipa-join.c defined IPA_CONFIG as /etc/ipa/default.conf, so
    ipa-client-install --uninstall could not read the configuration and
    left the host enrolled on the server. Enrolling it again then failed
    with "Host already enrolled", even with --force-join.
    
    PR:             298186
    Approved by:    kiwi (maintainer timeout)
    
    Sponsored by:   Netzkommune GmbH
---
 net/freeipa-client/Makefile                        |  12 +-
 net/freeipa-client/files/patch-client_ipa-join.c   |  17 +-
 .../files/patch-ipaplatform_base_paths.py          |  46 ++--
 .../files/patch-ipaplatform_freebsd_paths.py       | 258 ++++++++++-----------
 .../files/patch-ipaplatform_freebsd_services.py    |   8 +-
 .../files/patch-ipapython_ipautil.py               |   2 +-
 net/freeipa-client/files/patch-util_ipa__ldap.h    |   2 +-
 7 files changed, 182 insertions(+), 163 deletions(-)

diff --git a/net/freeipa-client/Makefile b/net/freeipa-client/Makefile
index 5bc437a60eb3..db9995615f1d 100644
--- a/net/freeipa-client/Makefile
+++ b/net/freeipa-client/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	freeipa-client
 DISTVERSION=	4.13.1
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	net
 MASTER_SITES=	https://releases.pagure.org/freeipa/
 DISTNAME=	freeipa-${DISTVERSION}
@@ -66,6 +66,16 @@ EXTRACT_AFTER_ARGS=	--exclude client/systemd --exclude daemons/dnssec \
 
 PLIST_SUB=	DISTVERSION=${DISTVERSION}
 
+post-patch:
+	@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
+		-e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
+		${WRKSRC}/client/ipa-join.c \
+		${WRKSRC}/ipaplatform/base/paths.py \
+		${WRKSRC}/ipaplatform/freebsd/paths.py \
+		${WRKSRC}/ipaplatform/freebsd/services.py \
+		${WRKSRC}/ipapython/ipautil.py \
+		${WRKSRC}/util/ipa_ldap.h
+
 # Make sample configuration file
 post-install:
 	@${MV} ${STAGEDIR}${PREFIX}/etc/ipa/epn.conf ${STAGEDIR}${PREFIX}/etc/ipa/epn.conf.sample
diff --git a/net/freeipa-client/files/patch-client_ipa-join.c b/net/freeipa-client/files/patch-client_ipa-join.c
index db8322849f28..617d8dae20ae 100644
--- a/net/freeipa-client/files/patch-client_ipa-join.c
+++ b/net/freeipa-client/files/patch-client_ipa-join.c
@@ -1,20 +1,29 @@
 --- client/ipa-join.c.orig	2025-01-15 10:52:51.570724638 +0100
 +++ client/ipa-join.c	2026-08-12 23:05:48.986059000 +0200
+@@ -53,7 +53,7 @@
+
+ #define JOIN_OID "2.16.840.1.113730.3.8.10.3"
+
+-#define IPA_CONFIG "/etc/ipa/default.conf"
++#define IPA_CONFIG "%%LOCALBASE%%/etc/ipa/default.conf"
+
+ char * read_config_file(const char *filename);
+ char * get_config_entry(char * data, const char *section, const char *key);
 @@ -1197,7 +1197,7 @@
- 
+
      if (childpid == 0) {
          char *argv[12];
 -        char *path = "/usr/sbin/ipa-getkeytab";
-+        char *path = "/usr/local/sbin/ipa-getkeytab";
++        char *path = "%%PREFIX%%/sbin/ipa-getkeytab";
          int arg = 0;
          int err;
- 
+
 @@ -1372,7 +1372,7 @@
      }
      krb5_cc_close(krbctx, ccache);
      ccache = NULL;
 -    putenv("KRB5CCNAME=MEMORY:ipa-join");
 +    setenv("KRB5CCNAME", "MEMORY:ipa-join", 1);
- 
+
  #ifdef WITH_IPA_JOIN_XML
      rval = xmlrpc_unenroll_host(ipaserver, hostname, quiet);
diff --git a/net/freeipa-client/files/patch-ipaplatform_base_paths.py b/net/freeipa-client/files/patch-ipaplatform_base_paths.py
index 1159b57f7cb7..3f5bcd41a91a 100644
--- a/net/freeipa-client/files/patch-ipaplatform_base_paths.py
+++ b/net/freeipa-client/files/patch-ipaplatform_base_paths.py
@@ -6,15 +6,15 @@
      NAMED_CUSTOM_OPTIONS_CONF = "/etc/named/ipa-options-ext.conf"
 -    NAMED_CONF_SRC = '/usr/share/ipa/bind.named.conf.template'
 -    NAMED_CUSTOM_CONF_SRC = '/usr/share/ipa/bind.ipa-ext.conf.template'
-+    NAMED_CONF_SRC = '/usr/local/share/ipa/bind.named.conf.template'
-+    NAMED_CUSTOM_CONF_SRC = '/usr/local/share/ipa/bind.ipa-ext.conf.template'
++    NAMED_CONF_SRC = '%%LOCALBASE%%/share/ipa/bind.named.conf.template'
++    NAMED_CUSTOM_CONF_SRC = '%%LOCALBASE%%/share/ipa/bind.ipa-ext.conf.template'
      NAMED_CUSTOM_OPTIONS_CONF_SRC = (
 -        '/usr/share/ipa/bind.ipa-options-ext.conf.template'
-+        '/usr/local/share/ipa/bind.ipa-options-ext.conf.template'
++        '%%LOCALBASE%%/share/ipa/bind.ipa-options-ext.conf.template'
      )
      NAMED_LOGGING_OPTIONS_CONF_SRC = (
 -        "/usr/share/ipa/bind.ipa-logging-ext.conf.template"
-+        "/usr/local/share/ipa/bind.ipa-logging-ext.conf.template"
++        "%%LOCALBASE%%/share/ipa/bind.ipa-logging-ext.conf.template"
      )
      NAMED_VAR_DIR = "/var/named"
      NAMED_KEYTAB = "/etc/named.keytab"
@@ -23,7 +23,7 @@
      NAMED_MANAGED_KEYS_DIR = "/var/named/dynamic"
      NAMED_CRYPTO_POLICY_FILE = None
 -    UNBOUND_CONF_SRC = '/usr/share/ipa/client/unbound.conf.template'
-+    UNBOUND_CONF_SRC = '/usr/local/share/ipa/client/unbound.conf.template'
++    UNBOUND_CONF_SRC = '%%PREFIX%%/share/ipa/client/unbound.conf.template'
      UNBOUND_CONFIG_DIR = "/etc/unbound/conf.d/"
      UNBOUND_CONF = "/etc/unbound/conf.d/zzz-ipa.conf"
      NSLCD_CONF = "/etc/nslcd.conf"
@@ -32,12 +32,12 @@
      SSH_CONFIG_DIR = "/etc/ssh"
      SSH_CONFIG = "/etc/ssh/ssh_config"
 -    SSH_IPA_CONFIG_TEMPLATE = "/usr/share/ipa/client/ssh_ipa.conf.template"
-+    SSH_IPA_CONFIG_TEMPLATE = "/usr/local/share/ipa/client/ssh_ipa.conf.template"
++    SSH_IPA_CONFIG_TEMPLATE = "%%PREFIX%%/share/ipa/client/ssh_ipa.conf.template"
      SSH_IPA_CONFIG = "/etc/ssh/ssh_config.d/04-ipa.conf"
      SSHD_CONFIG = "/etc/ssh/sshd_config"
      SSHD_IPA_CONFIG = "/etc/ssh/sshd_config.d/04-ipa.conf"
 -    SSHD_IPA_CONFIG_TEMPLATE = "/usr/share/ipa/client/sshd_ipa.conf.template"
-+    SSHD_IPA_CONFIG_TEMPLATE = "/usr/local/share/ipa/client/sshd_ipa.conf.template"
++    SSHD_IPA_CONFIG_TEMPLATE = "%%PREFIX%%/share/ipa/client/sshd_ipa.conf.template"
      SSSD_CONF = "/etc/sssd/sssd.conf"
      SSSD_CONF_BKP = "/etc/sssd/sssd.conf.bkp"
      SSSD_CONF_DELETED = "/etc/sssd/sssd.conf.deleted"
@@ -47,8 +47,8 @@
      BIN_KVNO = "/usr/bin/kvno"
 -    LDAPMODIFY = "/usr/bin/ldapmodify"
 -    LDAPPASSWD = "/usr/bin/ldappasswd"
-+    LDAPMODIFY = "/usr/local/bin/ldapmodify"
-+    LDAPPASSWD = "/usr/local/bin/ldappasswd"
++    LDAPMODIFY = "%%LOCALBASE%%/bin/ldapmodify"
++    LDAPPASSWD = "%%LOCALBASE%%/bin/ldappasswd"
      MODUTIL = "/usr/bin/modutil"
      NET = "/usr/bin/net"
      BIN_NISDOMAINNAME = "/usr/bin/nisdomainname"
@@ -74,16 +74,16 @@
 -    SUBID_GENERATORS_ULDIF = "/usr/share/ipa/subid-generators.uldif"
 -    IPA_JS_PLUGINS_DIR = "/usr/share/ipa/ui/js/plugins"
 -    UPDATES_DIR = "/usr/share/ipa/updates/"
-+    USR_SHARE_IPA_DIR = "/usr/local/share/ipa/"
-+    USR_SHARE_IPA_CLIENT_DIR = "/usr/local/share/ipa/client"
-+    CA_TOPOLOGY_ULDIF = "/usr/local/share/ipa/ca-topology.uldif"
-+    IPA_HTML_DIR = "/usr/local/share/ipa/html"
-+    CA_CRT = "/usr/local/share/ipa/html/ca.crt"
-+    SCHEMA_COMPAT_ULDIF = "/usr/local/share/ipa/updates/91-schema_compat.update"
-+    SCHEMA_COMPAT_POST_ULDIF = "/usr/local/share/ipa/schema_compat_post.uldif"
-+    SUBID_GENERATORS_ULDIF = "/usr/local/share/ipa/subid-generators.uldif"
-+    IPA_JS_PLUGINS_DIR = "/usr/local/share/ipa/ui/js/plugins"
-+    UPDATES_DIR = "/usr/local/share/ipa/updates/"
++    USR_SHARE_IPA_DIR = "%%LOCALBASE%%/share/ipa/"
++    USR_SHARE_IPA_CLIENT_DIR = "%%LOCALBASE%%/share/ipa/client"
++    CA_TOPOLOGY_ULDIF = "%%LOCALBASE%%/share/ipa/ca-topology.uldif"
++    IPA_HTML_DIR = "%%LOCALBASE%%/share/ipa/html"
++    CA_CRT = "%%LOCALBASE%%/share/ipa/html/ca.crt"
++    SCHEMA_COMPAT_ULDIF = "%%LOCALBASE%%/share/ipa/updates/91-schema_compat.update"
++    SCHEMA_COMPAT_POST_ULDIF = "%%LOCALBASE%%/share/ipa/schema_compat_post.uldif"
++    SUBID_GENERATORS_ULDIF = "%%LOCALBASE%%/share/ipa/subid-generators.uldif"
++    IPA_JS_PLUGINS_DIR = "%%LOCALBASE%%/share/ipa/ui/js/plugins"
++    UPDATES_DIR = "%%LOCALBASE%%/share/ipa/updates/"
      DICT_WORDS = "/usr/share/dict/words"
      VAR_KERBEROS_KRB5KDC_DIR = "/var/kerberos/krb5kdc/"
      VAR_KRB5KDC_K5_REALM = "/var/kerberos/krb5kdc/.k5."
@@ -101,7 +101,7 @@
      IPA_GETKEYTAB = '/usr/sbin/ipa-getkeytab'
      IPA_MIGRATE_LOG = '/var/log/ipa-migrate.log'
 -    EXTERNAL_SCHEMA_DIR = '/usr/share/ipa/schema.d'
-+    EXTERNAL_SCHEMA_DIR = '/usr/local/share/ipa/schema.d'
++    EXTERNAL_SCHEMA_DIR = '%%LOCALBASE%%/share/ipa/schema.d'
      GSSPROXY_CONF = '/etc/gssproxy/10-ipa.conf'
      KRB5CC_HTTPD = '/tmp/krb5cc-httpd'
      IF_INET6 = '/proc/net/if_inet6'
@@ -112,9 +112,9 @@
 -    ETC_DIRSRV = "/etc/dirsrv"
 -    DS_KEYTAB = "/etc/dirsrv/ds.keytab"
 -    ETC_DIRSRV_SLAPD_INSTANCE_TEMPLATE = "/etc/dirsrv/slapd-%s"
-+    ETC_DIRSRV = "/usr/local/etc/dirsrv"
-+    DS_KEYTAB = "/usr/local/etc/dirsrv/ds.keytab"
-+    ETC_DIRSRV_SLAPD_INSTANCE_TEMPLATE = "/usr/local/etc/dirsrv/slapd-%s"
++    ETC_DIRSRV = "%%LOCALBASE%%/etc/dirsrv"
++    DS_KEYTAB = "%%LOCALBASE%%/etc/dirsrv/ds.keytab"
++    ETC_DIRSRV_SLAPD_INSTANCE_TEMPLATE = "%%LOCALBASE%%/etc/dirsrv/slapd-%s"
      USR_LIB_DIRSRV = "/usr/lib/dirsrv"
      USR_LIB_DIRSRV_64 = "/usr/lib64/dirsrv"
      VAR_LIB_DIRSRV_INSTANCE_SCRIPTS_TEMPLATE = "/var/lib/dirsrv/scripts-%s"
diff --git a/net/freeipa-client/files/patch-ipaplatform_freebsd_paths.py b/net/freeipa-client/files/patch-ipaplatform_freebsd_paths.py
index 6724f0e7fecf..b725887d3d1e 100644
--- a/net/freeipa-client/files/patch-ipaplatform_freebsd_paths.py
+++ b/net/freeipa-client/files/patch-ipaplatform_freebsd_paths.py
@@ -9,19 +9,19 @@
 +
 +
 +class FreeBSDPathNamespace(BasePathNamespace):
-+    USR_SHARE_IPA_DIR = "/usr/local/share/ipa/"
-+    USR_SHARE_IPA_CLIENT_DIR = "/usr/local/share/ipa/client"
-+    SSH_IPA_CONFIG_TEMPLATE = "/usr/local/share/ipa/client/ssh_ipa.conf.template"
-+    SSHD_IPA_CONFIG_TEMPLATE = "/usr/local/share/ipa/client/sshd_ipa.conf.template"
-+    UNBOUND_CONF_SRC = "/usr/local/share/ipa/client/unbound.conf.template"
-+    PKIDESTROY = "/usr/local/sbin/pkidestroy"
-+    PKISPAWN = "/usr/local/sbin/pkispawn"
-+    PKI = "/usr/local/bin/pki"
-+    PKI_SERVER = "/usr/local/sbin/pki-server"
-+    BIN_TOMCAT = "/usr/local/apache-tomcat-9.0/bin/catalina.sh"
++    USR_SHARE_IPA_DIR = "%%LOCALBASE%%/share/ipa/"
++    USR_SHARE_IPA_CLIENT_DIR = "%%LOCALBASE%%/share/ipa/client"
++    SSH_IPA_CONFIG_TEMPLATE = "%%PREFIX%%/share/ipa/client/ssh_ipa.conf.template"
++    SSHD_IPA_CONFIG_TEMPLATE = "%%PREFIX%%/share/ipa/client/sshd_ipa.conf.template"
++    UNBOUND_CONF_SRC = "%%PREFIX%%/share/ipa/client/unbound.conf.template"
++    PKIDESTROY = "%%LOCALBASE%%/sbin/pkidestroy"
++    PKISPAWN = "%%LOCALBASE%%/sbin/pkispawn"
++    PKI = "%%LOCALBASE%%/bin/pki"
++    PKI_SERVER = "%%LOCALBASE%%/sbin/pki-server"
++    BIN_TOMCAT = "%%LOCALBASE%%/apache-tomcat-9.0/bin/catalina.sh"
 +    BIN_PS = "/bin/ps"
 +
-+    PKI_CONFIGURATION = "/usr/local/etc/pki"
++    PKI_CONFIGURATION = "%%LOCALBASE%%/etc/pki"
 +    PKI_TOMCAT = "/var/db/pki/pki-tomcat/conf"
 +    PKI_TOMCAT_ALIAS_DIR = "/var/db/pki/pki-tomcat/alias"
 +    PKI_TOMCAT_ALIAS_PWDFILE_TXT = "/var/db/pki/pki-tomcat/alias/pwdfile.txt"
@@ -48,19 +48,19 @@
 +    IPA_OTPD_SOCKET = "/var/run/krb5kdc/DEFAULT.socket"
 +    IPA_CCACHES = "/var/run/ipa/ccaches"
 +    IPA_RENEWAL_LOCK = "/var/run/ipa/renewal.lock"
-+    KLIST = "/usr/local/bin/klist"
-+    KADMIN_LOCAL = "/usr/local/sbin/kadmin.local"
-+    KDB5_UTIL = "/usr/local/sbin/kdb5_util"
++    KLIST = "%%LOCALBASE%%/bin/klist"
++    KADMIN_LOCAL = "%%LOCALBASE%%/sbin/kadmin.local"
++    KDB5_UTIL = "%%LOCALBASE%%/sbin/kdb5_util"
 +
-+    ETC_IPA = "/usr/local/etc/ipa"
-+    IPA_DEFAULT_CONF = "/usr/local/etc/ipa/default.conf"
++    ETC_IPA = "%%LOCALBASE%%/etc/ipa"
++    IPA_DEFAULT_CONF = "%%LOCALBASE%%/etc/ipa/default.conf"
 +
-+    IPA_CUSTODIA_CONF_DIR = "/usr/local/etc/ipa/custodia"
-+    IPA_CUSTODIA_CONF = "/usr/local/etc/ipa/custodia/custodia.conf"
-+    IPA_CUSTODIA_KEYS = "/usr/local/etc/ipa/custodia/server.keys"
++    IPA_CUSTODIA_CONF_DIR = "%%LOCALBASE%%/etc/ipa/custodia"
++    IPA_CUSTODIA_CONF = "%%LOCALBASE%%/etc/ipa/custodia/custodia.conf"
++    IPA_CUSTODIA_KEYS = "%%LOCALBASE%%/etc/ipa/custodia/server.keys"
 +    IPA_CUSTODIA_SOCKET = "/var/run/httpd/ipa-custodia.sock"
 +
-+    KDCPROXY_CONFIG = "/usr/local/etc/ipa/kdcproxy/kdcproxy.conf"
++    KDCPROXY_CONFIG = "%%LOCALBASE%%/etc/ipa/kdcproxy/kdcproxy.conf"
 +
 +    VAR_LIB_IPA = "/var/db/ipa"
 +    CA_BUNDLE_PEM = "/var/db/ipa-client/pki/ca-bundle.pem"
@@ -69,7 +69,7 @@
 +    HTTPD_KEY_FILE = "/var/db/ipa/private/httpd.key"
 +    HTTPD_PASSWD_FILE_FMT = "/var/db/ipa/passwds/{host}-443-RSA"
 +    HTTP_KEYTAB = "/var/db/ipa/gssproxy/http.keytab"
-+    GSSPROXY_CONF = "/usr/local/etc/gssproxy/10-ipa.conf"
++    GSSPROXY_CONF = "%%LOCALBASE%%/etc/gssproxy/10-ipa.conf"
 +    IPA_CCACHE_SWEEPER_GSSPROXY_SOCK = (
 +        "/var/db/gssproxy/ipa_ccache_sweeper.sock"
 +    )
@@ -84,72 +84,72 @@
 +    REPLICA_INFO_TEMPLATE = "/var/db/ipa/replica-info-%s"
 +    REPLICA_INFO_GPG_TEMPLATE = "/var/db/ipa/replica-info-%s.gpg"
 +    PKI_CA_PUBLISH_DIR = "/var/db/ipa/pki-ca/publish"
-+    CERTUTIL = "/usr/local/bin/certutil"
-+    PK12UTIL = "/usr/local/bin/pk12util"
-+    MODUTIL = "/usr/local/bin/modutil"
++    CERTUTIL = "%%LOCALBASE%%/bin/certutil"
++    PK12UTIL = "%%LOCALBASE%%/bin/pk12util"
++    MODUTIL = "%%LOCALBASE%%/bin/modutil"
 +    SYSCONFIG_PKI_TOMCAT = "/var/db/pki/pki-tomcat/conf/tomcat.conf"
-+    SYSCONFIG_PKI_TOMCAT_PKI_TOMCAT_DIR = "/usr/local/etc/pki/tomcat/pki-tomcat"
++    SYSCONFIG_PKI_TOMCAT_PKI_TOMCAT_DIR = "%%LOCALBASE%%/etc/pki/tomcat/pki-tomcat"
 +    IPA_CLIENT_SYSRESTORE = "/var/db/ipa-client/sysrestore"
 +    SYSRESTORE_INDEX = "/var/db/ipa-client/sysrestore/sysrestore.index"
 +    SYSRESTORE = "/var/db/ipa/sysrestore"
 +    STATEFILE_DIR = "/var/db/ipa/sysupgrade"
 +
-+    VAR_KERBEROS_KRB5KDC_DIR = "/usr/local/var/krb5kdc/"
-+    KRB5_CONF = "/usr/local/etc/krb5.conf"
-+    COMMON_KRB5_CONF_DIR = "/usr/local/etc/krb5.conf.d/"
-+    KRB5_FREEIPA_DEFAULTS = "/usr/local/etc/krb5.conf.d/freeipa"
-+    KRB5_FREEIPA = "/usr/local/etc/krb5.conf.d/freeipa-realm"
-+    KRB5_FREEIPA_SERVER = "/usr/local/etc/krb5.conf.d/freeipa-server"
-+    VAR_KRB5KDC_K5_REALM = "/usr/local/var/krb5kdc/.k5."
-+    CACERT_PEM = "/usr/local/var/krb5kdc/cacert.pem"
-+    KRB5KDC_KADM5_ACL = "/usr/local/var/krb5kdc/kadm5.acl"
-+    KRB5KDC_KADM5_KEYTAB = "/usr/local/var/krb5kdc/kadm5.keytab"
-+    KRB5KDC_KDC_CONF = "/usr/local/var/krb5kdc/kdc.conf"
-+    KDC_CERT = "/usr/local/var/krb5kdc/kdc.crt"
-+    KDC_KEY = "/usr/local/var/krb5kdc/kdc.key"
-+
-+    IPACTL = "/usr/local/sbin/ipactl"
-+    IPA_CLIENT_AUTOMOUNT = "/usr/local/sbin/ipa-client-automount"
-+    IPA_CLIENT_INSTALL = "/usr/local/sbin/ipa-client-install"
-+    IPA_GETKEYTAB = "/usr/local/sbin/ipa-getkeytab"
-+    IPA_RMKEYTAB = "/usr/local/sbin/ipa-rmkeytab"
-+    SBIN_IPA_JOIN = "/usr/local/sbin/ipa-join"
-+    CONNCHECK_CCACHE = "/usr/local/etc/ipa/.conncheck_ccache"
-+    IPA_DNS_CCACHE = "/usr/local/etc/ipa/.dns_ccache"
-+    OPENLDAP_LDAP_CONF = "/usr/local/etc/openldap/ldap.conf"
-+    IPA_DNS_UPDATE_TXT = "/usr/local/etc/ipa/.dns_update.txt"
-+    IPA_CA_CRT = "/usr/local/etc/ipa/ca.crt"
-+    IPA_DNSKEYSYNCD_KEYTAB = "/usr/local/etc/ipa/dnssec/ipa-dnskeysyncd.keytab"
-+    IPA_ODS_EXPORTER_KEYTAB = "/usr/local/etc/ipa/dnssec/ipa-ods-exporter.keytab"
-+    IPA_SERVER_CONF = "/usr/local/etc/ipa/server.conf"
-+    DNSSEC_OPENSSL_CONF = "/usr/local/etc/ipa/dnssec/openssl.cnf"
-+    DNSSEC_SOFTHSM2_CONF = "/usr/local/etc/ipa/dnssec/softhsm2.conf"
-+    DNSSEC_SOFTHSM_PIN_SO = "/usr/local/etc/ipa/dnssec/softhsm_pin_so"
-+    IPA_NSSDB_DIR = "/usr/local/etc/ipa/nssdb"
-+    IPA_NSSDB_PWDFILE_TXT = "/usr/local/etc/ipa/nssdb/pwdfile.txt"
-+    NSS_DB_DIR = "/usr/local/etc/pki/nssdb"
-+
-+    LIBEXEC_IPA_DIR = "/usr/local/libexec/ipa"
-+    IPA_OTPD = "/usr/local/libexec/ipa/ipa-otpd"
-+    IPA_OTPD_WRAPPER = "/usr/local/libexec/ipa/ipa-otpd-wrapper"
++    VAR_KERBEROS_KRB5KDC_DIR = "%%LOCALBASE%%/var/krb5kdc/"
++    KRB5_CONF = "%%LOCALBASE%%/etc/krb5.conf"
++    COMMON_KRB5_CONF_DIR = "%%LOCALBASE%%/etc/krb5.conf.d/"
++    KRB5_FREEIPA_DEFAULTS = "%%LOCALBASE%%/etc/krb5.conf.d/freeipa"
++    KRB5_FREEIPA = "%%LOCALBASE%%/etc/krb5.conf.d/freeipa-realm"
++    KRB5_FREEIPA_SERVER = "%%LOCALBASE%%/etc/krb5.conf.d/freeipa-server"
++    VAR_KRB5KDC_K5_REALM = "%%LOCALBASE%%/var/krb5kdc/.k5."
++    CACERT_PEM = "%%LOCALBASE%%/var/krb5kdc/cacert.pem"
++    KRB5KDC_KADM5_ACL = "%%LOCALBASE%%/var/krb5kdc/kadm5.acl"
++    KRB5KDC_KADM5_KEYTAB = "%%LOCALBASE%%/var/krb5kdc/kadm5.keytab"
++    KRB5KDC_KDC_CONF = "%%LOCALBASE%%/var/krb5kdc/kdc.conf"
++    KDC_CERT = "%%LOCALBASE%%/var/krb5kdc/kdc.crt"
++    KDC_KEY = "%%LOCALBASE%%/var/krb5kdc/kdc.key"
++
++    IPACTL = "%%LOCALBASE%%/sbin/ipactl"
++    IPA_CLIENT_AUTOMOUNT = "%%PREFIX%%/sbin/ipa-client-automount"
++    IPA_CLIENT_INSTALL = "%%PREFIX%%/sbin/ipa-client-install"
++    IPA_GETKEYTAB = "%%PREFIX%%/sbin/ipa-getkeytab"
++    IPA_RMKEYTAB = "%%PREFIX%%/sbin/ipa-rmkeytab"
++    SBIN_IPA_JOIN = "%%PREFIX%%/sbin/ipa-join"
++    CONNCHECK_CCACHE = "%%LOCALBASE%%/etc/ipa/.conncheck_ccache"
++    IPA_DNS_CCACHE = "%%LOCALBASE%%/etc/ipa/.dns_ccache"
++    OPENLDAP_LDAP_CONF = "%%LOCALBASE%%/etc/openldap/ldap.conf"
++    IPA_DNS_UPDATE_TXT = "%%LOCALBASE%%/etc/ipa/.dns_update.txt"
++    IPA_CA_CRT = "%%LOCALBASE%%/etc/ipa/ca.crt"
++    IPA_DNSKEYSYNCD_KEYTAB = "%%LOCALBASE%%/etc/ipa/dnssec/ipa-dnskeysyncd.keytab"
++    IPA_ODS_EXPORTER_KEYTAB = "%%LOCALBASE%%/etc/ipa/dnssec/ipa-ods-exporter.keytab"
++    IPA_SERVER_CONF = "%%LOCALBASE%%/etc/ipa/server.conf"
++    DNSSEC_OPENSSL_CONF = "%%LOCALBASE%%/etc/ipa/dnssec/openssl.cnf"
++    DNSSEC_SOFTHSM2_CONF = "%%LOCALBASE%%/etc/ipa/dnssec/softhsm2.conf"
++    DNSSEC_SOFTHSM_PIN_SO = "%%LOCALBASE%%/etc/ipa/dnssec/softhsm_pin_so"
++    IPA_NSSDB_DIR = "%%LOCALBASE%%/etc/ipa/nssdb"
++    IPA_NSSDB_PWDFILE_TXT = "%%LOCALBASE%%/etc/ipa/nssdb/pwdfile.txt"
++    NSS_DB_DIR = "%%LOCALBASE%%/etc/pki/nssdb"
++
++    LIBEXEC_IPA_DIR = "%%LOCALBASE%%/libexec/ipa"
++    IPA_OTPD = "%%LOCALBASE%%/libexec/ipa/ipa-otpd"
++    IPA_OTPD_WRAPPER = "%%LOCALBASE%%/libexec/ipa/ipa-otpd-wrapper"
 +    IPA_OTPD_LOG = "/var/log/ipa-otpd.log"
-+    LIBEXEC_CERTMONGER_DIR = "/usr/local/libexec/certmonger"
-+    CERTMONGER_COMMAND_TEMPLATE = "/usr/local/libexec/ipa/certmonger/%s"
-+    CERTMONGER_DOGTAG_SUBMIT = "/usr/local/libexec/certmonger/dogtag-submit"
-+    DOGTAG_IPA_CA_RENEW_AGENT_SUBMIT = "/usr/local/libexec/certmonger/dogtag-ipa-ca-renew-agent-submit"
-+    DOGTAG_IPA_RENEW_AGENT_SUBMIT = "/usr/local/libexec/certmonger/dogtag-ipa-renew-agent-submit"
-+    IPA_SERVER_GUARD = "/usr/local/libexec/certmonger/ipa-server-guard"
-+    IPA_DNSKEYSYNCD_REPLICA = "/usr/local/libexec/ipa/ipa-dnskeysync-replica"
-+    IPA_DNSKEYSYNCD = "/usr/local/libexec/ipa/ipa-dnskeysyncd"
-+    IPA_ODS_EXPORTER = "/usr/local/libexec/ipa/ipa-ods-exporter"
-+    IPA_PKI_RETRIEVE_KEY = "/usr/local/libexec/ipa/ipa-pki-retrieve-key"
-+    IPA_PKI_WAIT_RUNNING = "/usr/local/libexec/ipa/ipa-pki-wait-running"
-+    IPA_CUSTODIA_HANDLER = "/usr/local/libexec/ipa/custodia"
-+    IPA_CUSTODIA_CHECK = "/usr/local/libexec/ipa/ipa-custodia-check"
-+
-+    SSSD_CONF = "/usr/local/etc/sssd/sssd.conf"
-+    SSSD_CONF_BKP = "/usr/local/etc/sssd/sssd.conf.bkp"
-+    SSSD_CONF_DELETED = "/usr/local/etc/sssd/sssd.conf.deleted"
++    LIBEXEC_CERTMONGER_DIR = "%%LOCALBASE%%/libexec/certmonger"
++    CERTMONGER_COMMAND_TEMPLATE = "%%LOCALBASE%%/libexec/ipa/certmonger/%s"
++    CERTMONGER_DOGTAG_SUBMIT = "%%LOCALBASE%%/libexec/certmonger/dogtag-submit"
++    DOGTAG_IPA_CA_RENEW_AGENT_SUBMIT = "%%LOCALBASE%%/libexec/certmonger/dogtag-ipa-ca-renew-agent-submit"
++    DOGTAG_IPA_RENEW_AGENT_SUBMIT = "%%LOCALBASE%%/libexec/certmonger/dogtag-ipa-renew-agent-submit"
++    IPA_SERVER_GUARD = "%%LOCALBASE%%/libexec/certmonger/ipa-server-guard"
++    IPA_DNSKEYSYNCD_REPLICA = "%%LOCALBASE%%/libexec/ipa/ipa-dnskeysync-replica"
++    IPA_DNSKEYSYNCD = "%%LOCALBASE%%/libexec/ipa/ipa-dnskeysyncd"
++    IPA_ODS_EXPORTER = "%%LOCALBASE%%/libexec/ipa/ipa-ods-exporter"
++    IPA_PKI_RETRIEVE_KEY = "%%LOCALBASE%%/libexec/ipa/ipa-pki-retrieve-key"
++    IPA_PKI_WAIT_RUNNING = "%%LOCALBASE%%/libexec/ipa/ipa-pki-wait-running"
++    IPA_CUSTODIA_HANDLER = "%%LOCALBASE%%/libexec/ipa/custodia"
++    IPA_CUSTODIA_CHECK = "%%LOCALBASE%%/libexec/ipa/ipa-custodia-check"
++
++    SSSD_CONF = "%%LOCALBASE%%/etc/sssd/sssd.conf"
++    SSSD_CONF_BKP = "%%LOCALBASE%%/etc/sssd/sssd.conf.bkp"
++    SSSD_CONF_DELETED = "%%LOCALBASE%%/etc/sssd/sssd.conf.deleted"
 +    SSSD_DB = "/var/db/sss/db"
 +    SSSD_LDB = "/var/db/sss/db/sssd.ldb"
 +    SSSD_CONFIG_LDB = "/var/db/sss/db/config.ldb"
@@ -164,7 +164,7 @@
 +    SSSD_KEYTABS_DIR = "/var/db/sss/keytabs"
 +    SSSD_SECRETS = "/var/db/sss/secrets/secrets.ldb"
 +
-+    DSCTL = "/usr/local/bin/dsctl"
++    DSCTL = "%%LOCALBASE%%/bin/dsctl"
 +
 +    VAR_LIB_DIRSRV = "/var/db/dirsrv"
 +    VAR_LIB_DIRSRV_INSTANCE_SCRIPTS_TEMPLATE = "/var/db/dirsrv/scripts-%s"
@@ -175,55 +175,55 @@
 +    VAR_RUN_DIRSRV_DIR = "/var/run/dirsrv"
 +    DIRSRV_LOCK_DIR = "/var/run/dirsrv"
 +
-+    HTTPD = "/usr/local/sbin/httpd"
-+    ETC_HTTPD_DIR = "/usr/local/etc/apache24"
-+    HTTPD_ALIAS_DIR = "/usr/local/etc/apache24/alias"
-+    GSSAPI_SESSION_KEY = "/usr/local/etc/apache24/alias/ipasession.key"
-+    HTTPD_CONF_D_DIR = "/usr/local/etc/apache24/Includes/"
-+    HTTPD_IPA_WSGI_MODULES_CONF = "/usr/local/etc/apache24/modules.d/290_freeipa.conf"
-+    HTTPD_IPA_ENVVARS_CONF = "/usr/local/etc/apache24/envvars.d/ipa.env"
-+    HTTPD_IPA_RC_CONF = "/usr/local/etc/rc.conf.d/apache24/ipa"
-+    HTTPD_IPA_CONF = "/usr/local/etc/apache24/Includes/ipa.conf"
-+    HTTPD_IPA_KDCPROXY_CONF = "/usr/local/etc/ipa/kdcproxy/ipa-kdc-proxy.conf"
-+    HTTPD_IPA_KDCPROXY_CONF_SYMLINK = "/usr/local/etc/apache24/Includes/ipa-kdc-proxy.conf"
-+    HTTPD_IPA_PKI_PROXY_CONF = "/usr/local/etc/apache24/Includes/ipa-pki-proxy.conf"
-+    HTTPD_IPA_REWRITE_CONF = "/usr/local/etc/apache24/Includes/ipa-rewrite.conf"
-+    HTTPD_NSS_CONF = "/usr/local/etc/apache24/Includes/nss.conf"
-+    HTTPD_PASSWORD_CONF = "/usr/local/etc/apache24/password.conf"
-+    HTTPD_SSL_CONF = "/usr/local/etc/apache24/extra/httpd-ssl.conf"
-+    HTTPD_SSL_SITE_CONF = "/usr/local/etc/apache24/extra/httpd-ssl.conf"
-+    HTTPD_IPA_SSL_CONF_SYMLINK = "/usr/local/etc/apache24/Includes/ipa-ssl.conf"
-+    OLD_IPA_KEYTAB = "/usr/local/etc/apache24/ipa.keytab"
-+    OLD_KRA_AGENT_PEM = "/usr/local/etc/apache24/alias/kra-agent.pem"
++    HTTPD = "%%LOCALBASE%%/sbin/httpd"
++    ETC_HTTPD_DIR = "%%LOCALBASE%%/etc/apache24"
++    HTTPD_ALIAS_DIR = "%%LOCALBASE%%/etc/apache24/alias"
++    GSSAPI_SESSION_KEY = "%%LOCALBASE%%/etc/apache24/alias/ipasession.key"
++    HTTPD_CONF_D_DIR = "%%LOCALBASE%%/etc/apache24/Includes/"
++    HTTPD_IPA_WSGI_MODULES_CONF = "%%LOCALBASE%%/etc/apache24/modules.d/290_freeipa.conf"
++    HTTPD_IPA_ENVVARS_CONF = "%%LOCALBASE%%/etc/apache24/envvars.d/ipa.env"
++    HTTPD_IPA_RC_CONF = "%%LOCALBASE%%/etc/rc.conf.d/apache24/ipa"
++    HTTPD_IPA_CONF = "%%LOCALBASE%%/etc/apache24/Includes/ipa.conf"
++    HTTPD_IPA_KDCPROXY_CONF = "%%LOCALBASE%%/etc/ipa/kdcproxy/ipa-kdc-proxy.conf"
++    HTTPD_IPA_KDCPROXY_CONF_SYMLINK = "%%LOCALBASE%%/etc/apache24/Includes/ipa-kdc-proxy.conf"
++    HTTPD_IPA_PKI_PROXY_CONF = "%%LOCALBASE%%/etc/apache24/Includes/ipa-pki-proxy.conf"
++    HTTPD_IPA_REWRITE_CONF = "%%LOCALBASE%%/etc/apache24/Includes/ipa-rewrite.conf"
++    HTTPD_NSS_CONF = "%%LOCALBASE%%/etc/apache24/Includes/nss.conf"
++    HTTPD_PASSWORD_CONF = "%%LOCALBASE%%/etc/apache24/password.conf"
++    HTTPD_SSL_CONF = "%%LOCALBASE%%/etc/apache24/extra/httpd-ssl.conf"
++    HTTPD_SSL_SITE_CONF = "%%LOCALBASE%%/etc/apache24/extra/httpd-ssl.conf"
++    HTTPD_IPA_SSL_CONF_SYMLINK = "%%LOCALBASE%%/etc/apache24/Includes/ipa-ssl.conf"
++    OLD_IPA_KEYTAB = "%%LOCALBASE%%/etc/apache24/ipa.keytab"
++    OLD_KRA_AGENT_PEM = "%%LOCALBASE%%/etc/apache24/alias/kra-agent.pem"
 +    WSGI_PREFIX_DIR = "/var/run/httpd/wsgi"
-+    IPA_HTTPD_KDCPROXY = "/usr/local/libexec/ipa/ipa-httpd-kdcproxy"
-+    IPA_HTTPD_PASSWD_READER = "/usr/local/libexec/ipa/ipa-httpd-pwdreader"
-+
-+    BIN_CURL = "/usr/local/bin/curl"
-+    CERTMONGER = "/usr/local/sbin/certmonger"
-+    GPG2 = "/usr/local/bin/gpg"
-+    GPG_AGENT = "/usr/local/bin/gpg-agent"
-+    IPA_DNS_INSTALL = "/usr/local/sbin/ipa-dns-install"
-+    IPA_REPLICA_CONNCHECK = "/usr/local/sbin/ipa-replica-conncheck"
-+    IPA_SERVER_UPGRADE = "/usr/local/sbin/ipa-server-upgrade"
-+    KDESTROY = "/usr/local/bin/kdestroy"
-+    KINIT = "/usr/local/bin/kinit"
-+    KTUTIL = "/usr/local/bin/ktutil"
-+    NET = "/usr/local/bin/net"
-+    NSUPDATE = "/usr/local/bin/nsupdate"
-+    SMBD = "/usr/local/sbin/smbd"
-+    SSSCTL = "/usr/local/sbin/sssctl"
-+    SSS_SSH_AUTHORIZEDKEYS = "/usr/local/bin/sss_ssh_authorizedkeys"
-+    SSS_SSH_KNOWNHOSTS = "/usr/local/bin/sss_ssh_knownhosts"
-+    SSS_SSH_KNOWNHOSTSPROXY = "/usr/local/bin/sss_ssh_knownhostsproxy"
-+    TDBTOOL = "/usr/local/bin/tdbtool"
-+
-+    IPA_CACERT_MANAGE = "/usr/local/sbin/ipa-cacert-manage"
-+    IPA_GETCERT = "/usr/local/bin/ipa-getcert"
-+
-+    CHRONYC = "/usr/local/bin/chronyc"
-+    CHRONYD = "/usr/local/sbin/chronyd"
-+    CHRONY_CONF = "/usr/local/etc/chrony.conf"
++    IPA_HTTPD_KDCPROXY = "%%LOCALBASE%%/libexec/ipa/ipa-httpd-kdcproxy"
++    IPA_HTTPD_PASSWD_READER = "%%LOCALBASE%%/libexec/ipa/ipa-httpd-pwdreader"
++
++    BIN_CURL = "%%LOCALBASE%%/bin/curl"
++    CERTMONGER = "%%LOCALBASE%%/sbin/certmonger"
++    GPG2 = "%%LOCALBASE%%/bin/gpg"
++    GPG_AGENT = "%%LOCALBASE%%/bin/gpg-agent"
++    IPA_DNS_INSTALL = "%%LOCALBASE%%/sbin/ipa-dns-install"
++    IPA_REPLICA_CONNCHECK = "%%LOCALBASE%%/sbin/ipa-replica-conncheck"
++    IPA_SERVER_UPGRADE = "%%LOCALBASE%%/sbin/ipa-server-upgrade"
++    KDESTROY = "%%LOCALBASE%%/bin/kdestroy"
++    KINIT = "%%LOCALBASE%%/bin/kinit"
++    KTUTIL = "%%LOCALBASE%%/bin/ktutil"
++    NET = "%%LOCALBASE%%/bin/net"
++    NSUPDATE = "%%LOCALBASE%%/bin/nsupdate"
++    SMBD = "%%LOCALBASE%%/sbin/smbd"
++    SSSCTL = "%%LOCALBASE%%/sbin/sssctl"
++    SSS_SSH_AUTHORIZEDKEYS = "%%LOCALBASE%%/bin/sss_ssh_authorizedkeys"
++    SSS_SSH_KNOWNHOSTS = "%%LOCALBASE%%/bin/sss_ssh_knownhosts"
++    SSS_SSH_KNOWNHOSTSPROXY = "%%LOCALBASE%%/bin/sss_ssh_knownhostsproxy"
++    TDBTOOL = "%%LOCALBASE%%/bin/tdbtool"
++
++    IPA_CACERT_MANAGE = "%%LOCALBASE%%/sbin/ipa-cacert-manage"
++    IPA_GETCERT = "%%LOCALBASE%%/bin/ipa-getcert"
++
++    CHRONYC = "%%LOCALBASE%%/bin/chronyc"
++    CHRONYD = "%%LOCALBASE%%/sbin/chronyd"
++    CHRONY_CONF = "%%LOCALBASE%%/etc/chrony.conf"
 +
 +    SYSTEMCTL = None
 +    SYSTEMD_TMPFILES = None
diff --git a/net/freeipa-client/files/patch-ipaplatform_freebsd_services.py b/net/freeipa-client/files/patch-ipaplatform_freebsd_services.py
index a0ee42fb72bf..3d24cf9ac2eb 100644
--- a/net/freeipa-client/files/patch-ipaplatform_freebsd_services.py
+++ b/net/freeipa-client/files/patch-ipaplatform_freebsd_services.py
@@ -36,13 +36,13 @@
 +
 +freebsd_kerberos_rcvars = {
 +    "kdc": {
-+        "kdc_program": "/usr/local/sbin/krb5kdc",
++        "kdc_program": "%%LOCALBASE%%/sbin/krb5kdc",
 +        "kdc_enable": "YES",
 +    },
 +    "kadmind": {
-+        "kdc_program": "/usr/local/sbin/krb5kdc",
++        "kdc_program": "%%LOCALBASE%%/sbin/krb5kdc",
 +        "kdc_enable": "YES",
-+        "kadmind_program": "/usr/local/sbin/kadmind",
++        "kadmind_program": "%%LOCALBASE%%/sbin/kadmind",
 +        "kadmind_enable": "YES",
 +    },
 +}
@@ -128,7 +128,7 @@
 +    def is_installed(self):
 +        return (
 +            os.path.exists("/etc/rc.d/%s" % self.rc_name) or
-+            os.path.exists("/usr/local/etc/rc.d/%s" % self.rc_name)
++            os.path.exists("%%LOCALBASE%%/etc/rc.d/%s" % self.rc_name)
 +        )
 +
 +    def enable(self, instance_name=""):
diff --git a/net/freeipa-client/files/patch-ipapython_ipautil.py b/net/freeipa-client/files/patch-ipapython_ipautil.py
index 8ec75d1c3dbe..a27fb234ced9 100644
--- a/net/freeipa-client/files/patch-ipapython_ipautil.py
+++ b/net/freeipa-client/files/patch-ipapython_ipautil.py
@@ -5,7 +5,7 @@
          # copy default env
          env = copy.deepcopy(os.environ)
 -        env["PATH"] = "/bin:/sbin:/usr/kerberos/bin:/usr/kerberos/sbin:/usr/bin:/usr/sbin"
-+        env["PATH"] = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
++        env["PATH"] = "/sbin:/bin:/usr/sbin:/usr/bin:%%LOCALBASE%%/sbin:%%LOCALBASE%%/bin"
      if stdin:
          p_in = subprocess.PIPE
      if skip_output:
diff --git a/net/freeipa-client/files/patch-util_ipa__ldap.h b/net/freeipa-client/files/patch-util_ipa__ldap.h
index 1733e8b37389..0423751cd465 100644
--- a/net/freeipa-client/files/patch-util_ipa__ldap.h
+++ b/net/freeipa-client/files/patch-util_ipa__ldap.h
@@ -5,7 +5,7 @@
  #include <ldap.h>
  
 -#define DEFAULT_CA_CERT_FILE "/etc/ipa/ca.crt"
-+#define DEFAULT_CA_CERT_FILE "/usr/local/etc/ipa/ca.crt"
++#define DEFAULT_CA_CERT_FILE "%%LOCALBASE%%/etc/ipa/ca.crt"
  
  #define LDAP_SASL_EXTERNAL "EXTERNAL"
  #define LDAP_SASL_GSSAPI "GSSAPI"