aboutsummaryrefslogtreecommitdiff
path: root/kerberos5
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2023-12-06 15:30:05 +0000
committerCy Schubert <cy@FreeBSD.org>2024-01-11 13:26:42 +0000
commitcb350ba7bf7ca7c4cb97ed2c20ab45af60382cfb (patch)
tree6214d52d269daecc743e71fbce54e26dc5d03d03 /kerberos5
parented1a88a3116a59b4fd37912099a575b4c8f559dc (diff)
Diffstat (limited to 'kerberos5')
-rw-r--r--kerberos5/include/crypto-headers.h4
-rw-r--r--kerberos5/include/fbsd_ossl_provider.h4
-rw-r--r--kerberos5/lib/libroken/Makefile11
-rw-r--r--kerberos5/lib/libroken/fbsd_ossl_provider_load.c41
-rw-r--r--kerberos5/libexec/kdc/Makefile2
5 files changed, 58 insertions, 4 deletions
diff --git a/kerberos5/include/crypto-headers.h b/kerberos5/include/crypto-headers.h
index 3ae0d9624ffd..2cc870642964 100644
--- a/kerberos5/include/crypto-headers.h
+++ b/kerberos5/include/crypto-headers.h
@@ -17,5 +17,9 @@
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/ecdh.h>
+#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
+#include <openssl/provider.h>
+#include "fbsd_ossl_provider.h"
+#endif
#endif /* __crypto_headers_h__ */
diff --git a/kerberos5/include/fbsd_ossl_provider.h b/kerberos5/include/fbsd_ossl_provider.h
new file mode 100644
index 000000000000..013983ca9f83
--- /dev/null
+++ b/kerberos5/include/fbsd_ossl_provider.h
@@ -0,0 +1,4 @@
+#ifndef __fbsd_ossl_provider_h
+#define __fbsd_ossl_provider_h
+int fbsd_ossl_provider_load(void);
+#endif
diff --git a/kerberos5/lib/libroken/Makefile b/kerberos5/lib/libroken/Makefile
index 0c46ba6c4cb5..24dc3a5b2c45 100644
--- a/kerberos5/lib/libroken/Makefile
+++ b/kerberos5/lib/libroken/Makefile
@@ -2,7 +2,7 @@
PACKAGE= kerberos-lib
LIB= roken
-LIBADD= crypt
+LIBADD= crypt crypto
VERSION_MAP= ${KRB5DIR}/lib/roken/version-script.map
INCS= roken.h \
roken-common.h \
@@ -74,15 +74,20 @@ SRCS= base64.c \
vis.c \
warnerr.c \
write_pid.c \
- xfree.c
+ xfree.c \
+ fbsd_ossl_provider_load.c
-CFLAGS+=-I${KRB5DIR}/lib/roken -I.
+CFLAGS+=-I${KRB5DIR}/lib/roken \
+ -I${SRCTOP}/kerberos5/include \
+ -I${KRB5DIR}/lib/krb5 \
+ -I${SRCTOP}/crypto/openssl/include -I.
CLEANFILES= roken.h
roken.h:
${MAKE_ROKEN} > ${.TARGET}
+
.include <bsd.lib.mk>
.PATH: ${KRB5DIR}/lib/roken
diff --git a/kerberos5/lib/libroken/fbsd_ossl_provider_load.c b/kerberos5/lib/libroken/fbsd_ossl_provider_load.c
new file mode 100644
index 000000000000..f49c8746c9e4
--- /dev/null
+++ b/kerberos5/lib/libroken/fbsd_ossl_provider_load.c
@@ -0,0 +1,41 @@
+#include <errno.h>
+#include <krb5_locl.h>
+
+static void fbsd_ossl_provider_unload(void);
+
+static OSSL_PROVIDER *legacy;
+static OSSL_PROVIDER *deflt;
+static int providers_loaded = 0;
+
+int
+fbsd_ossl_provider_load(void)
+{
+#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
+ if (providers_loaded == 0) {
+ if ((legacy = OSSL_PROVIDER_load(NULL, "legacy")) == NULL)
+ return (EINVAL);
+ if ((deflt = OSSL_PROVIDER_load(NULL, "default")) == NULL) {
+ OSSL_PROVIDER_unload(legacy);
+ return (EINVAL);
+ }
+ if (atexit(fbsd_ossl_provider_unload)) {
+ fbsd_ossl_provider_unload();
+ return (errno);
+ }
+ providers_loaded = 1;
+ }
+#endif
+ return (0);
+}
+
+static void
+fbsd_ossl_provider_unload(void)
+{
+#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
+ if (providers_loaded == 1) {
+ OSSL_PROVIDER_unload(legacy);
+ OSSL_PROVIDER_unload(deflt);
+ providers_loaded = 0;
+ }
+#endif
+}
diff --git a/kerberos5/libexec/kdc/Makefile b/kerberos5/libexec/kdc/Makefile
index 41fde9115c00..211f4f379054 100644
--- a/kerberos5/libexec/kdc/Makefile
+++ b/kerberos5/libexec/kdc/Makefile
@@ -11,7 +11,7 @@ SRCS= config.c \
CFLAGS+=-I${KRB5DIR}/lib/krb5 -I${KRB5DIR}/lib/asn1 -I${KRB5DIR}/lib/roken \
-I${KRB5DIR}/kdc -I${SRCTOP}/contrib/com_err ${LDAPCFLAGS}
-LIBADD= kdc hdb krb5 roken crypt vers
+LIBADD= kdc hdb krb5 roken crypt vers crypto
LDFLAGS=${LDAPLDFLAGS}
.include <bsd.prog.mk>