git: 1876de606eb8 - main - krb5: Expose missing symbols

From: Cy Schubert <cy_at_FreeBSD.org>
Date: Tue, 20 Jan 2026 13:41:47 UTC
The branch main has been updated by cy:

URL: https://cgit.FreeBSD.org/src/commit/?id=1876de606eb876b7a97beccfe6fcc89e60a72a25

commit 1876de606eb876b7a97beccfe6fcc89e60a72a25
Author:     Cy Schubert <cy@FreeBSD.org>
AuthorDate: 2025-12-18 00:50:44 +0000
Commit:     Cy Schubert <cy@FreeBSD.org>
CommitDate: 2026-01-20 13:41:02 +0000

    krb5: Expose missing symbols
    
    Add symbols found in the port but not in base. This requires replacing
    a shared libkrb5profile.so with libkrb5profile.a (with -fPIC so it can
    be used by shared libraries). We do this by making libkrb5profile
    INTERNALLIB.
    
    Base currently has libkrb5profile in a shared library. The patch moves
    those functions to the various "consumer" libraries as the port does.
    
    Symbols that should be in the other libraries are in libkrb5profile.so.
    This is causing some ports issues.
    
    PR:             291695
    Reported by:    michaelo, markj,  Chris Inacio <inacio@andrew.cmu.edu>
    Tested by:      michaelo
    Fixes:          ae07a5805b19
    Reviewed by:    michaelo (previous version)
    MFC after:      2 weeks
    Differential revision:  https://reviews.freebsd.org/D54323
---
 ObsoleteFiles.inc                        |    4 +
 krb5/lib/apputils/Makefile               |    1 +
 krb5/lib/crypto/Makefile                 |    3 +-
 krb5/lib/crypto/version.map              |   59 ++
 krb5/lib/gssapi/Makefile                 |    3 +-
 krb5/lib/gssapi/version.map              |  308 ++++++++
 krb5/lib/kadm5clnt/Makefile              |    3 +-
 krb5/lib/kadm5clnt/version.map           |   36 +
 krb5/lib/kadm5srv/Makefile               |    3 +-
 krb5/lib/kadm5srv/version.map            |   29 +
 krb5/lib/kadmin_common/Makefile          |    1 +
 krb5/lib/kdb/Makefile                    |    3 +-
 krb5/lib/kdb/version.map                 |   27 +
 krb5/lib/kprop_util/Makefile             |    1 +
 krb5/lib/krad/Makefile                   |    1 +
 krb5/lib/krad/version.map                |   11 +
 krb5/lib/krb5/Makefile                   |    5 +-
 krb5/lib/krb5/version.map                | 1196 ++++++++++++++++++++++++++++++
 krb5/lib/rpc/Makefile                    |    1 +
 krb5/lib/rpc/version.map                 |   28 +
 krb5/libexec/kadmind/Makefile            |    3 +-
 krb5/libexec/kdc/Makefile                |    1 +
 krb5/libexec/kprop/Makefile              |    3 +-
 krb5/libexec/kpropd/Makefile             |    3 +-
 krb5/libexec/kproplog/Makefile           |    3 +-
 krb5/plugins/audit/Makefile              |    1 +
 krb5/plugins/k5tls/Makefile              |    3 +-
 krb5/plugins/kdb/db2/Makefile            |    3 +-
 krb5/plugins/kdb/db2/version.map         |  148 ++++
 krb5/plugins/preauth/otp/Makefile        |    3 +-
 krb5/plugins/preauth/otp/version.map     |    3 +
 krb5/plugins/preauth/pkinit/Makefile     |    3 +-
 krb5/plugins/preauth/pkinit/version.map  |  128 ++++
 krb5/plugins/preauth/spake/Makefile      |    3 +-
 krb5/plugins/preauth/spake/version.map   |   22 +
 krb5/plugins/preauth/test/Makefile       |    3 +-
 krb5/plugins/preauth/test/version.map    |    2 +
 krb5/usr.bin/gss-client/Makefile         |    3 +-
 krb5/usr.bin/kadmin/Makefile             |    3 +-
 krb5/usr.bin/kdestroy/Makefile           |    3 +-
 krb5/usr.bin/kinit/Makefile              |    3 +-
 krb5/usr.bin/klist/Makefile              |    3 +-
 krb5/usr.bin/kpasswd/Makefile            |    3 +-
 krb5/usr.bin/ksu/Makefile                |    1 +
 krb5/usr.bin/kswitch/Makefile            |    3 +-
 krb5/usr.bin/ktutil/Makefile             |    3 +-
 krb5/usr.bin/kvno/Makefile               |    3 +-
 krb5/usr.bin/sclient/Makefile            |    3 +-
 krb5/usr.bin/sim_client/Makefile         |    3 +-
 krb5/usr.sbin/gss-server/Makefile        |    3 +-
 krb5/usr.sbin/kadmin.local/Makefile      |    3 +-
 krb5/usr.sbin/kdb5_util/Makefile         |    3 +-
 krb5/usr.sbin/sim_server/Makefile        |    3 +-
 krb5/usr.sbin/sserver/Makefile           |    3 +-
 krb5/util/et/version.map                 |    2 +
 krb5/util/profile/Makefile               |    4 +-
 krb5/util/profile/version.map            |   74 --
 krb5/util/support/version.map            |    5 +
 krb5/util/verto/version.map              |    7 +
 lib/libpam/modules/pam_krb5/Makefile     |    1 +
 lib/libpam/modules/pam_ksu/Makefile      |    1 +
 share/mk/src.libnames.mk                 |    2 +-
 tools/build/depend-cleanup.sh            |    9 +
 tools/build/mk/OptionalObsoleteFiles.inc |    2 -
 64 files changed, 2103 insertions(+), 111 deletions(-)

diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 8f44feb757e5..5231cbb3fe13 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,10 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20260120: Made libkrb5profile INTERNALLIB
+OLD_LIBS+=usr/lib/libkrb5profile.so.122
+OLD_FILES+=usr/lib/libkrb5profile.so
+
 # 20260114: remove ncurses html documentation
 OLD_FILES+=usr/share/doc/ncurses/hackguide.html
 OLD_FILES+=usr/share/doc/ncurses/ncurses-intro.html
diff --git a/krb5/lib/apputils/Makefile b/krb5/lib/apputils/Makefile
index 1a79b3800863..38491579a619 100644
--- a/krb5/lib/apputils/Makefile
+++ b/krb5/lib/apputils/Makefile
@@ -22,6 +22,7 @@ SRCS=	net-server.c \
 CFLAGS+=-I${KRB5_DIR}/lib/apputils \
 	-I${KRB5_DIR}/include \
 	-I${KRB5_SRCTOP}/include \
+	-I${KRB5_OBJTOP}/util/profile \
 	-I${.OBJDIR}
 
 .include <bsd.lib.mk>
diff --git a/krb5/lib/crypto/Makefile b/krb5/lib/crypto/Makefile
index 9521b48f020c..a130a858cfa4 100644
--- a/krb5/lib/crypto/Makefile
+++ b/krb5/lib/crypto/Makefile
@@ -41,6 +41,7 @@ CFLAGS+=-I${.CURDIR:H:H}/include \
 	-I${KRB5_DIR}/lib/crypto/builtin/md5 \
 	-I${KRB5_DIR}/lib/crypto/builtin/sha1 \
 	-I${KRB5_DIR}/lib/crypto/builtin/sha2 \
-	-I${SRCTOP}/crypto/openssl/include
+	-I${SRCTOP}/crypto/openssl/include \
+	-I${KRB5_OBJTOP}/util/profile
 
 .include <bsd.lib.mk>
diff --git a/krb5/lib/crypto/version.map b/krb5/lib/crypto/version.map
index 702abf195db0..4cb528537201 100644
--- a/krb5/lib/crypto/version.map
+++ b/krb5/lib/crypto/version.map
@@ -106,5 +106,64 @@ k5crypto_3_MIT {
 		k5_enctype_to_ssf;
 		krb5int_c_deprecated_enctype;
 		krb5_c_checksum_length;
+		k5_derive_random_rfc3961;
+		k5_des_fixup_key_parity;
+		k5_iov_cursor_get;
+		k5_iov_cursor_init;
+		k5_iov_cursor_put;
+		k5_rand2key_des3;
+		k5_rand2key_direct;
+		k5_sp800_108_counter_hmac;
+		k5_sp800_108_feedback_cmac;
+		krb5_decrypt_data;
+		krb5_random_confounder;
+		krb5int_MD4Final;
+		krb5int_MD4Init;
+		krb5int_MD4Update;
+		krb5int_aes2_crypto_length;
+		krb5int_aes2_prf;
+		krb5int_aes2_string_to_key;
+		krb5int_aes_crypto_length;
+		krb5int_aes_string_to_key;
+		krb5int_arcfour_crypto_length;
+		krb5int_arcfour_decrypt;
+		krb5int_arcfour_encrypt;
+		krb5int_arcfour_prf;
+		krb5int_arcfour_string_to_key;
+		krb5int_arcfour_translate_usage;
+		krb5int_c_iov_decrypt_stream;
+		krb5int_c_locate_iov;
+		krb5int_c_padding_length;
+		krb5int_camellia_crypto_length;
+		krb5int_camellia_string_to_key;
+		krb5int_cksumtypes_list;
+		krb5int_default_free_state;
+		krb5int_derive_keyblock;
+		krb5int_des_init_state;
+		krb5int_des_prf;
+		krb5int_dk_checksum;
+		krb5int_dk_cmac_checksum;
+		krb5int_dk_cmac_decrypt;
+		krb5int_dk_cmac_encrypt;
+		krb5int_dk_cmac_prf;
+		krb5int_dk_crypto_length;
+		krb5int_dk_decrypt;
+		krb5int_dk_encrypt;
+		krb5int_dk_prf;
+		krb5int_dk_string_to_key;
+		krb5int_enctypes_list;
+		krb5int_etm_checksum;
+		krb5int_etm_decrypt;
+		krb5int_etm_encrypt;
+		krb5int_hash_sha1;
+		krb5int_hmac_keyblock;
+		krb5int_hmacmd5_checksum;
+		krb5int_pbkdf2_hmac;
+		krb5int_raw_crypto_length;
+		krb5int_raw_decrypt;
+		krb5int_raw_encrypt;
+		krb5int_unkeyed_checksum;
+		mit_des_fixup_key_parity;
+		unsupported_etypes;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/gssapi/Makefile b/krb5/lib/gssapi/Makefile
index a434b29a2dfb..eca8dd6ffde9 100644
--- a/krb5/lib/gssapi/Makefile
+++ b/krb5/lib/gssapi/Makefile
@@ -43,7 +43,8 @@ CFLAGS+=${DEFINES} \
 	-I${KRB5_OBJTOP}/lib/gssapi \
 	-I${KRB5_OBJTOP}/lib \
 	-I${KRB5_DIR}/include \
-	-I${KRB5_SRCTOP}/include
+	-I${KRB5_SRCTOP}/include \
+	-I${KRB5_OBJTOP}/util/profile
 
 .include <bsd.lib.mk>
 
diff --git a/krb5/lib/gssapi/version.map b/krb5/lib/gssapi/version.map
index 42f32cc55edf..e6358e8226fe 100644
--- a/krb5/lib/gssapi/version.map
+++ b/krb5/lib/gssapi/version.map
@@ -172,5 +172,313 @@ gssapi_krb5_2_MIT {
 		gss_add_cred_from;
 		gss_store_cred_into;
 		gssint_g_seqstate_init;
+		GSS_C_INQ_ODBC_SESSION_KEY;
+		et_ggss_error_table;
+		et_k5g_error_table;
+		generic_gss_add_buffer_set_member;
+		generic_gss_add_oid_set_member;
+		generic_gss_copy_oid;
+		generic_gss_copy_oid_set;
+		generic_gss_create_empty_buffer_set;
+		generic_gss_create_empty_oid_set;
+		generic_gss_display_mech_attr;
+		generic_gss_oid_compose;
+		generic_gss_oid_decompose;
+		generic_gss_oid_to_str;
+		generic_gss_release_buffer;
+		generic_gss_release_buffer_set;
+		generic_gss_release_oid;
+		generic_gss_release_oid_set;
+		generic_gss_str_to_oid;
+		generic_gss_test_oid_set_member;
+		gss_krb5int_ccache_name;
+		gss_krb5int_copy_ccache;
+		gss_krb5int_export_lucid_sec_context;
+		gss_krb5int_extract_authtime_from_sec_context;
+		gss_krb5int_extract_authz_data_from_sec_context;
+		gss_krb5int_free_lucid_sec_context;
+		gss_krb5int_get_cred_impersonator;
+		gss_krb5int_get_tkt_flags;
+		gss_krb5int_import_cred;
+		gss_krb5int_initialize_library;
+		gss_krb5int_inq_odbc_session_key;
+		gss_krb5int_inq_sspi_session_key;
+		gss_krb5int_lib_fini;
+		gss_krb5int_lib_init;
+		gss_krb5int_make_seal_token_v3_iov;
+		gss_krb5int_register_acceptor_identity;
+		gss_krb5int_rotate_left;
+		gss_krb5int_sec_context_sasl_ssf;
+		gss_krb5int_set_allowable_enctypes;
+		gss_krb5int_set_cred_rcache;
+		gss_krb5int_unseal_v3_iov;
+		gss_ma_known_attrs;
+		gss_mech_set_spnego;
+		gss_mech_spnego;
+		gss_spnegoint_lib_fini;
+		gss_spnegoint_lib_init;
+		gssint_convert_name_to_union_name;
+		gssint_create_copy_buffer;
+		gssint_create_union_context;
+		gssint_delete_internal_sec_context;
+		gssint_display_internal_name;
+		gssint_export_internal_name;
+		gssint_g_display_com_err_status;
+		gssint_g_display_major_status;
+		gssint_g_get_token_header;
+		gssint_g_make_string_buffer;
+		gssint_g_make_token_header;
+		gssint_g_seqstate_check;
+		gssint_g_seqstate_externalize;
+		gssint_g_seqstate_free;
+		gssint_g_seqstate_internalize;
+		gssint_g_seqstate_size;
+		gssint_g_token_size;
+		gssint_g_verify_token_header;
+		gssint_get_mech_type;
+		gssint_get_mechanism;
+		gssint_get_mechanism_cred;
+		gssint_get_modOptions;
+		gssint_get_public_oid;
+		gssint_import_internal_name;
+		gssint_krb5_keytab_lock;
+		gssint_make_public_oid_set;
+		gssint_mecherrmap_destroy;
+		gssint_mecherrmap_get;
+		gssint_mecherrmap_init;
+		gssint_mecherrmap_map;
+		gssint_mecherrmap_map_errcode;
+		gssint_mechglue_initialize_library;
+		gssint_register_mechinfo;
+		gssint_release_internal_name;
+		gssint_select_mech_type;
+		gssint_unwrap_aead;
+		gssint_wrap_aead;
+		gssspi_exchange_meta_data;
+		gssspi_query_mechanism_info;
+		gssspi_query_meta_data;
+		iakerb_gss_accept_sec_context;
+		iakerb_gss_acquire_cred;
+		iakerb_gss_acquire_cred_from;
+		iakerb_gss_acquire_cred_with_password;
+		iakerb_gss_context_time;
+		iakerb_gss_delete_sec_context;
+		iakerb_gss_export_sec_context;
+		iakerb_gss_get_mic;
+		iakerb_gss_get_mic_iov;
+		iakerb_gss_get_mic_iov_length;
+		iakerb_gss_import_name;
+		iakerb_gss_import_sec_context;
+		iakerb_gss_init_sec_context;
+		iakerb_gss_inquire_context;
+		iakerb_gss_inquire_sec_context_by_oid;
+		iakerb_gss_process_context_token;
+		iakerb_gss_pseudo_random;
+		iakerb_gss_set_sec_context_option;
+		iakerb_gss_unwrap;
+		iakerb_gss_unwrap_iov;
+		iakerb_gss_verify_mic;
+		iakerb_gss_verify_mic_iov;
+		iakerb_gss_wrap;
+		iakerb_gss_wrap_iov;
+		iakerb_gss_wrap_iov_length;
+		iakerb_gss_wrap_size_limit;
+		iakerb_make_finished;
+		iakerb_verify_finished;
+		initialize_ggss_error_table;
+		initialize_k5g_error_table;
+		kg_acceptor_princ;
+		kg_all_mechs;
+		kg_allocate_iov;
+		kg_arcfour_docrypt;
+		kg_arcfour_docrypt_iov;
+		kg_caller_provided_ccache_name;
+		kg_checksum_channel_bindings;
+		kg_compare_name;
+		kg_compose_deleg_cred;
+		kg_confounder_size;
+		kg_cred_resolve;
+		kg_cred_set_initial_refresh;
+		kg_cred_time_to_refresh;
+		kg_ctx_externalize;
+		kg_ctx_internalize;
+		kg_ctx_size;
+		kg_decrypt;
+		kg_decrypt_iov;
+		kg_duplicate_name;
+		kg_encrypt;
+		kg_encrypt_inplace;
+		kg_encrypt_iov;
+		kg_fixup_padding_iov;
+		kg_get_ccache_name;
+		kg_get_defcred;
+		kg_get_seq_num;
+		kg_init_name;
+		kg_integ_only_iov;
+		kg_iov_msglen;
+		kg_kdc_flag_mutex;
+		kg_locate_header_iov;
+		kg_locate_iov;
+		kg_make_checksum_iov_v1;
+		kg_make_checksum_iov_v3;
+		kg_make_confounder;
+		kg_make_seed;
+		kg_make_seq_num;
+		kg_release_iov;
+		kg_release_name;
+		kg_seal;
+		kg_seal_iov;
+		kg_seal_iov_length;
+		kg_set_ccache_name;
+		kg_setup_keys;
+		kg_sync_ccache_name;
+		kg_translate_flag_iov;
+		kg_unseal_iov;
+		kg_value_from_cred_store;
+		kg_verify_checksum_iov_v3;
+		kg_verify_checksum_v1;
+		kg_verify_checksum_v3;
+		kg_verify_mic_v1;
+		krb5_gss_accept_sec_context;
+		krb5_gss_accept_sec_context_ext;
+		krb5_gss_acquire_cred;
+		krb5_gss_acquire_cred_from;
+		krb5_gss_acquire_cred_impersonate_name;
+		krb5_gss_acquire_cred_with_password;
+		krb5_gss_canonicalize_name;
+		krb5_gss_compare_name;
+		krb5_gss_context_time;
+		krb5_gss_convert_static_mech_oid;
+		krb5_gss_delete_error_info;
+		krb5_gss_delete_name_attribute;
+		krb5_gss_delete_sec_context;
+		krb5_gss_display_name;
+		krb5_gss_display_status;
+		krb5_gss_duplicate_name;
+		krb5_gss_export_cred;
+		krb5_gss_export_name;
+		krb5_gss_export_name_composite;
+		krb5_gss_export_sec_context;
+		krb5_gss_get_error_message;
+		krb5_gss_get_mic;
+		krb5_gss_get_mic_iov;
+		krb5_gss_get_mic_iov_length;
+		krb5_gss_get_name_attribute;
+		krb5_gss_import_cred;
+		krb5_gss_import_name;
+		krb5_gss_import_sec_context;
+		krb5_gss_indicate_mechs;
+		krb5_gss_init_context;
+		krb5_gss_init_sec_context;
+		krb5_gss_init_sec_context_ext;
+		krb5_gss_inquire_context;
+		krb5_gss_inquire_cred;
+		krb5_gss_inquire_cred_by_mech;
+		krb5_gss_inquire_name;
+		krb5_gss_inquire_names_for_mech;
+		krb5_gss_inquire_sec_context_by_oid;
+		krb5_gss_internal_release_oid;
+		krb5_gss_map_name_to_any;
+		krb5_gss_oid_array;
+		krb5_gss_process_context_token;
+		krb5_gss_pseudo_random;
+		krb5_gss_release_any_name_mapping;
+		krb5_gss_release_cred;
+		krb5_gss_release_name;
+		krb5_gss_release_oid;
+		krb5_gss_save_error_info;
+		krb5_gss_save_error_message;
+		krb5_gss_save_error_string;
+		krb5_gss_set_name_attribute;
+		krb5_gss_set_sec_context_option;
+		krb5_gss_store_cred;
+		krb5_gss_store_cred_into;
+		krb5_gss_unwrap;
+		krb5_gss_unwrap_iov;
+		krb5_gss_validate_cred;
+		krb5_gss_validate_cred_1;
+		krb5_gss_verify_mic;
+		krb5_gss_verify_mic_iov;
+		krb5_gss_wrap;
+		krb5_gss_wrap_iov;
+		krb5_gss_wrap_iov_length;
+		krb5_gss_wrap_size_limit;
+		krb5int_gss_use_kdc_context;
+		negoex_accept;
+		negoex_add_auth_mech;
+		negoex_add_exchange_message;
+		negoex_add_nego_message;
+		negoex_add_verify_message;
+		negoex_add_verify_no_key_alert;
+		negoex_common_auth_schemes;
+		negoex_delete_auth_mech;
+		negoex_init;
+		negoex_locate_alert_message;
+		negoex_locate_auth_scheme;
+		negoex_locate_exchange_message;
+		negoex_locate_nego_message;
+		negoex_locate_verify_message;
+		negoex_parse_token;
+		negoex_prep_context_for_negoex;
+		negoex_prep_context_for_spnego;
+		negoex_random;
+		negoex_release_context;
+		negoex_restrict_auth_schemes;
+		negoex_select_auth_mech;
+		spnego_gss_accept_sec_context;
+		spnego_gss_acquire_cred;
+		spnego_gss_acquire_cred_from;
+		spnego_gss_acquire_cred_impersonate_name;
+		spnego_gss_acquire_cred_with_password;
+		spnego_gss_compare_name;
+		spnego_gss_complete_auth_token;
+		spnego_gss_context_time;
+		spnego_gss_delete_name_attribute;
+		spnego_gss_delete_sec_context;
+		spnego_gss_display_name;
+		spnego_gss_display_name_ext;
+		spnego_gss_display_status;
+		spnego_gss_duplicate_name;
+		spnego_gss_export_cred;
+		spnego_gss_export_name_composite;
+		spnego_gss_export_sec_context;
+		spnego_gss_get_mic;
+		spnego_gss_get_mic_iov;
+		spnego_gss_get_mic_iov_length;
+		spnego_gss_get_name_attribute;
+		spnego_gss_import_cred;
+		spnego_gss_import_name;
+		spnego_gss_import_sec_context;
+		spnego_gss_init_sec_context;
+		spnego_gss_inquire_attrs_for_mech;
+		spnego_gss_inquire_context;
+		spnego_gss_inquire_cred;
+		spnego_gss_inquire_cred_by_oid;
+		spnego_gss_inquire_mech_for_saslname;
+		spnego_gss_inquire_name;
+		spnego_gss_inquire_names_for_mech;
+		spnego_gss_inquire_saslname_for_mech;
+		spnego_gss_inquire_sec_context_by_oid;
+		spnego_gss_localname;
+		spnego_gss_map_name_to_any;
+		spnego_gss_process_context_token;
+		spnego_gss_pseudo_random;
+		spnego_gss_release_any_name_mapping;
+		spnego_gss_release_cred;
+		spnego_gss_release_name;
+		spnego_gss_set_cred_option;
+		spnego_gss_set_name_attribute;
+		spnego_gss_set_neg_mechs;
+		spnego_gss_set_sec_context_option;
+		spnego_gss_unwrap;
+		spnego_gss_unwrap_aead;
+		spnego_gss_unwrap_iov;
+		spnego_gss_verify_mic;
+		spnego_gss_verify_mic_iov;
+		spnego_gss_wrap;
+		spnego_gss_wrap_aead;
+		spnego_gss_wrap_iov;
+		spnego_gss_wrap_iov_length;
+		spnego_gss_wrap_size_limit;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/kadm5clnt/Makefile b/krb5/lib/kadm5clnt/Makefile
index ef01a5f779e3..27546a87949e 100644
--- a/krb5/lib/kadm5clnt/Makefile
+++ b/krb5/lib/kadm5clnt/Makefile
@@ -35,7 +35,8 @@ CFLAGS+=-I${KRB5_DIR}/lib \
 	-I${KRB5_DIR}/include \
 	-I${KRB5_OBJTOP}/include/krb5_private \
 	-I${KRB5_SRCTOP}/include \
-	-I${KRB5_OBJTOP}/lib
+	-I${KRB5_OBJTOP}/lib \
+	-I${KRB5_OBJTOP}/util/profile
 
 INCSDIR=${INCLUDEDIR}/kadm5
 INCS=	admin.h \
diff --git a/krb5/lib/kadm5clnt/version.map b/krb5/lib/kadm5clnt/version.map
index bb3feb11cff1..4343dbd9f04e 100644
--- a/krb5/lib/kadm5clnt/version.map
+++ b/krb5/lib/kadm5clnt/version.map
@@ -117,5 +117,41 @@ kadm5clnt_mit_12_MIT {
 		kadm5_init_iprop;
 		xdr_calias_arg;
 		kadm5_create_alias;
+		chpass_principal3_2;
+		chpass_principal_2;
+		chrand_principal3_2;
+		chrand_principal_2;
+		create_alias_2;
+		create_policy_2;
+		create_principal3_2;
+		create_principal_2;
+		delete_policy_2;
+		delete_principal_2;
+		et_ovk_error_table;
+		et_ovku_error_table;
+		get_policy_2;
+		get_pols_2;
+		get_principal_2;
+		get_principal_keys_2;
+		get_princs_2;
+		get_privs_2;
+		get_strings_2;
+		init_2;
+		initialize_ovk_error_table;
+		initialize_ovku_error_table;
+		krb5_aprof_get_string_all;
+		modify_policy_2;
+		modify_principal_2;
+		purgekeys_2;
+		rename_principal_2;
+		set_string_2;
+		setkey_principal3_2;
+		setkey_principal4_2;
+		setkey_principal_2;
+		xdr_gstrings_arg;
+		xdr_gstrings_ret;
+		xdr_krb5_string_attr;
+		xdr_purgekeys_arg;
+		xdr_sstring_arg;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/kadm5srv/Makefile b/krb5/lib/kadm5srv/Makefile
index 9eecd20ca822..826a9edad25a 100644
--- a/krb5/lib/kadm5srv/Makefile
+++ b/krb5/lib/kadm5srv/Makefile
@@ -41,7 +41,8 @@ CFLAGS+=-I${KRB5_DIR}/lib \
 	-I${KRB5_OBJTOP}/lib \
 	-I${KRB5_OBJTOP}/lib/gssapi \
 	-I${KRB5_DIR}/lib/gssapi/krb5 \
-	-I${KRB5_DIR}/lib/gssapi/generic
+	-I${KRB5_DIR}/lib/gssapi/generic \
+	-I${KRB5_OBJTOP}/util/profile
 CWARNFLAGS.gcc+=-Wno-alloc-size-larger-than
 
 GEN_KADM_ERR=	kadm_err.et
diff --git a/krb5/lib/kadm5srv/version.map b/krb5/lib/kadm5srv/version.map
index 4eb5ba7c3ead..d8dc8cfe0b0d 100644
--- a/krb5/lib/kadm5srv/version.map
+++ b/krb5/lib/kadm5srv/version.map
@@ -136,5 +136,34 @@ kadm5srv_mit_12_MIT {
 		kadm5_init_iprop;
 		xdr_calias_arg;
 		kadm5_create_alias;
+		destroy_pwqual;
+		et_ovk_error_table;
+		et_ovku_error_table;
+		init_pwqual;
+		initialize_ovk_error_table;
+		initialize_ovku_error_table;
+		k5_kadm5_hook_alias;
+		k5_kadm5_hook_chpass;
+		k5_kadm5_hook_create;
+		k5_kadm5_hook_free_handles;
+		k5_kadm5_hook_load;
+		k5_kadm5_hook_modify;
+		k5_kadm5_hook_remove;
+		k5_kadm5_hook_rename;
+		k5_pwqual_check;
+		k5_pwqual_free_handles;
+		k5_pwqual_load;
+		k5_pwqual_name;
+		kadm5_get_admin_service_name;
+		kdb_free_keyblocks;
+		kdb_get_active_mkey;
+		kdb_get_entry;
+		kdb_get_hist_key;
+		master_keyblock;
+		pwqual_dict_initvt;
+		pwqual_empty_initvt;
+		pwqual_hesiod_initvt;
+		pwqual_princ_initvt;
+		xdr_kadm5_key_data;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/kadmin_common/Makefile b/krb5/lib/kadmin_common/Makefile
index 9eed31bc94f3..926a7b266c05 100644
--- a/krb5/lib/kadmin_common/Makefile
+++ b/krb5/lib/kadmin_common/Makefile
@@ -27,6 +27,7 @@ CFLAGS+=-I${KRB5_DIR}/lib/krad \
 	-I${KRB5_SRCTOP}/include \
 	-I${KRB5_DIR}/util \
 	-I${KRB5_OBJTOP}/util \
+	-I${KRB5_OBJTOP}/util/profile \
 	-I${.OBJDIR}
 
 CLEANFILES=	kadmin_ct.c ktutil_ct.c
diff --git a/krb5/lib/kdb/Makefile b/krb5/lib/kdb/Makefile
index 80039ad83502..52087f9cd389 100644
--- a/krb5/lib/kdb/Makefile
+++ b/krb5/lib/kdb/Makefile
@@ -37,7 +37,8 @@ CFLAGS+=${DEFINES} \
 	-I${KRB5_DIR}/lib/kdb \
 	-I${KRB5_OBJTOP}/lib/kdb \
 	-I${KRB5_DIR}/include \
-	-I${KRB5_SRCTOP}/include
+	-I${KRB5_SRCTOP}/include \
+	-I${KRB5_OBJTOP}/util/profile
 
 ADB_ERR=	adb_err.et
 ADB_ERR_C=	${ADB_ERR:S/.et$/.c/}
diff --git a/krb5/lib/kdb/version.map b/krb5/lib/kdb/version.map
index 54a093ff72bc..4a0b0d3df1b7 100644
--- a/krb5/lib/kdb/version.map
+++ b/krb5/lib/kdb/version.map
@@ -110,5 +110,32 @@ kdb5_10_MIT {
 		krb5_dbe_sort_key_data;
 		krb5_dbe_make_alias_entry;
 		krb5_dbe_read_alias;
+		et_adb_error_table;
+		initialize_adb_error_table;
+		krb5_db_def_fetch_mkey;
+		krb5_db_def_rename_principal;
+		krb5_db_load_module;
+		krb5_dbe_def_cpw;
+		krb5_dbe_def_search_enctype;
+		krb5_dbe_delete_tl_data;
+		krb5_dbe_free_tl_data;
+		krb5_def_fetch_mkey_list;
+		krb5int_delete_principal_no_log;
+		krb5int_put_principal_no_log;
+		ulog_conv_2dbentry;
+		ulog_conv_2logentry;
+		xdr_kdb_sno_t;
+		xdr_kdb_ulog_t;
+		xdr_kdbe_attr_type_t;
+		xdr_kdbe_data_t;
+		xdr_kdbe_key_t;
+		xdr_kdbe_princ_t;
+		xdr_kdbe_pw_hist_t;
+		xdr_kdbe_t;
+		xdr_kdbe_time_t;
+		xdr_kdbe_tl_t;
+		xdr_kdbe_val_t;
+		xdr_update_status_t;
+		xdr_utf8str_t;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/kprop_util/Makefile b/krb5/lib/kprop_util/Makefile
index aaaeb969058d..d29f17e20b65 100644
--- a/krb5/lib/kprop_util/Makefile
+++ b/krb5/lib/kprop_util/Makefile
@@ -21,6 +21,7 @@ SRCS=	kprop_util.c
 CFLAGS+=-I${KRB5_DIR}/lib/krad \
 	-I${KRB5_DIR}/include \
 	-I${KRB5_SRCTOP}/include \
+	-I${KRB5_OBJTOP}/util/profile \
 	-I${.OBJDIR}
 
 .include <bsd.lib.mk>
diff --git a/krb5/lib/krad/Makefile b/krb5/lib/krad/Makefile
index 36074dff1296..17cd4f8142b5 100644
--- a/krb5/lib/krad/Makefile
+++ b/krb5/lib/krad/Makefile
@@ -27,6 +27,7 @@ SRCS=	attr.c \
 CFLAGS+=-I${KRB5_DIR}/lib/krad \
 	-I${KRB5_DIR}/include \
 	-I${KRB5_SRCTOP}/include \
+	-I${KRB5_OBJTOP}/util/profile \
 	-I${.OBJDIR}
 
 .include <bsd.lib.mk>
diff --git a/krb5/lib/krad/version.map b/krb5/lib/krad/version.map
index a18fa4665e50..6ffe589a4226 100644
--- a/krb5/lib/krad/version.map
+++ b/krb5/lib/krad/version.map
@@ -23,5 +23,16 @@ krad_0_MIT {
 		krad_client_new;
 		krad_client_free;
 		krad_client_send;
+		kr_attr_decode;
+		kr_attr_encode;
+		kr_attr_valid;
+		kr_attrset_decode;
+		kr_attrset_encode;
+		kr_remote_cancel;
+		kr_remote_cancel_all;
+		kr_remote_equals;
+		kr_remote_free;
+		kr_remote_new;
+		kr_remote_send;
 };
 HIDDEN { local: __*; _rest*; _save*; *; };
diff --git a/krb5/lib/krb5/Makefile b/krb5/lib/krb5/Makefile
index b3587cf58c2b..b232a8a3e6ee 100644
--- a/krb5/lib/krb5/Makefile
+++ b/krb5/lib/krb5/Makefile
@@ -51,7 +51,10 @@ CFLAGS+=${DEFINES} \
 	-I${KRB5_DIR}/util/profile \
 	-I${KRB5_DIR}/include \
 	-I${KRB5_SRCTOP}/include \
-	-I${KRB5_DIR}
+	-I${KRB5_DIR} \
+	-I${KRB5_OBJTOP}/util/profile
+
+LDFLAGS+=-Wl,--error-limit=0
 
 MANGROUPS=	KRB5
 KRB5=		k5identity.5 \
diff --git a/krb5/lib/krb5/version.map b/krb5/lib/krb5/version.map
index 3de2fdd879d0..924737afcedc 100644
--- a/krb5/lib/krb5/version.map
+++ b/krb5/lib/krb5/version.map
@@ -634,5 +634,1201 @@ krb5_3_MIT {
 		k5_addr_directional_init;
 		k5_print_addr;
 		k5_print_addr_port;
+		_krb5_use_dns_kdc;
+		_krb5_use_dns_realm;
+		anon_princ;
+		aux_info_address_1_untagged;
+		aux_info_authdata_1_untagged;
+		aux_info_authdata_types;
+		aux_info_bitstring_data;
+		aux_info_checksum_1_untagged;
+		aux_info_der_data;
+		aux_info_etype_info2_1_def_untagged;
+		aux_info_etype_info_1_def_untagged;
+		aux_info_etype_list;
+		aux_info_gstring_data;
+		aux_info_keyblock_1_untagged;
+		aux_info_oid_data;
+		aux_info_ostring_data;
+		aux_info_pa_data_2_untagged;
+		aux_info_pa_pk_as_rep;
+		aux_info_pa_spake;
+		aux_info_princname_1_untagged;
+		aux_info_req_body_8_untagged;
+		aux_info_spake_support_0_untagged;
+		aux_info_typed_data_1_untagged;
+		aux_info_utf8_data;
+		ccselect_hostname_initvt;
+		ccselect_k5identity_initvt;
+		ccselect_realm_initvt;
+		clpreauth_encrypted_challenge_initvt;
+		clpreauth_encrypted_timestamp_initvt;
+		clpreauth_otp_initvt;
+		clpreauth_sam2_initvt;
+		decode_krb5_auth_pack;
+		decode_krb5_checksum;
+		decode_krb5_etype_list;
+		decode_krb5_kdc_dh_key_info;
+		decode_krb5_pa_pk_as_rep;
+		decode_krb5_pa_pk_as_req;
+		decode_krb5_principal_name;
+		decode_krb5_reply_key_pack;
+		decode_krb5_safe_with_body;
+		decode_krb5_td_dh_parameters;
+		decode_krb5_td_trusted_certifiers;
+		encode_krb5_auth_pack;
+		encode_krb5_etype_list;
+		encode_krb5_fast_req;
+		encode_krb5_kdc_dh_key_info;
+		encode_krb5_pa_fx_fast_request;
+		encode_krb5_pa_pac_req;
+		encode_krb5_pa_pk_as_rep;
+		encode_krb5_pa_pk_as_req;
+		encode_krb5_reply_key_pack;
+		encode_krb5_safe_with_body;
+		encode_krb5_setpw_req;
+		encode_krb5_td_dh_parameters;
+		encode_krb5_td_trusted_certifiers;
+		et_k5e1_error_table;
+		et_prof_error_table;
+		hostrealm_dns_initvt;
+		hostrealm_domain_initvt;
+		hostrealm_profile_initvt;
+		hostrealm_registry_initvt;
+		initialize_prof_error_table;
+		interface_names;
+		k5_asn1_decode_atype;
+		k5_asn1_decode_bitstring;
+		k5_asn1_decode_bool;
+		k5_asn1_decode_bytestring;
+		k5_asn1_decode_generaltime;
+		k5_asn1_decode_int;
+		k5_asn1_decode_uint;
+		k5_asn1_encode_atype;
+		k5_asn1_encode_bitstring;
+		k5_asn1_encode_bool;
+		k5_asn1_encode_bytestring;
+		k5_asn1_encode_generaltime;
+		k5_asn1_encode_int;
+		k5_asn1_encode_uint;
+		k5_asn1_full_decode;
+		k5_asn1_full_encode;
+		k5_atype_ad_kdc_issued;
+		k5_atype_ad_kdcissued_0;
+		k5_atype_ad_kdcissued_0_untagged;
+		k5_atype_ad_kdcissued_1;
+		k5_atype_ad_kdcissued_1_untagged;
+		k5_atype_ad_kdcissued_2;
+		k5_atype_ad_kdcissued_2_untagged;
+		k5_atype_ad_kdcissued_3;
+		k5_atype_ad_kdcissued_3_untagged;
+		k5_atype_address;
+		k5_atype_address_0;
+		k5_atype_address_0_untagged;
+		k5_atype_address_1;
+		k5_atype_address_1_untagged;
+		k5_atype_address_ptr;
+		k5_atype_algid_0;
+		k5_atype_algid_1;
+		k5_atype_algorithm_identifier;
+		k5_atype_ap_rep;
+		k5_atype_ap_rep_0;
+		k5_atype_ap_rep_1;
+		k5_atype_ap_rep_2;
+		k5_atype_ap_rep_2_untagged;
+		k5_atype_ap_rep_enc_part;
+		k5_atype_ap_rep_enc_part_0;
+		k5_atype_ap_rep_enc_part_0_untagged;
+		k5_atype_ap_rep_enc_part_1;
+		k5_atype_ap_rep_enc_part_1_untagged;
+		k5_atype_ap_rep_enc_part_2;
+		k5_atype_ap_rep_enc_part_2_untagged;
+		k5_atype_ap_rep_enc_part_3;
+		k5_atype_ap_rep_enc_part_3_untagged;
+		k5_atype_ap_rep_msg_type;
+		k5_atype_ap_req;
+		k5_atype_ap_req_0;
+		k5_atype_ap_req_1;
+		k5_atype_ap_req_2;
+		k5_atype_ap_req_2_untagged;
+		k5_atype_ap_req_3;
+		k5_atype_ap_req_3_untagged;
+		k5_atype_ap_req_4;
+		k5_atype_ap_req_4_untagged;
+		k5_atype_ap_req_msg_type;
+		k5_atype_as_rep;
+		k5_atype_as_req;
+		k5_atype_as_req_2;
+		k5_atype_as_req_encode;
+		k5_atype_as_req_msg_type;
+		k5_atype_auth_data;
+		k5_atype_auth_data_ptr;
+		k5_atype_auth_pack;
+		k5_atype_auth_pack_0;
+		k5_atype_auth_pack_0_untagged;
+		k5_atype_auth_pack_1;
+		k5_atype_auth_pack_1_untagged;
+		k5_atype_auth_pack_2;
+		k5_atype_auth_pack_2_untagged;
+		k5_atype_auth_pack_3;
+		k5_atype_auth_pack_3_untagged;
+		k5_atype_auth_pack_4;
+		k5_atype_auth_pack_4_untagged;
+		k5_atype_authdata_0;
+		k5_atype_authdata_0_untagged;
+		k5_atype_authdata_1;
+		k5_atype_authdata_1_untagged;
+		k5_atype_authdata_elt;
+		k5_atype_authdata_elt_ptr;
+		k5_atype_authdata_elt_type;
+		k5_atype_authdata_elt_type_0;
+		k5_atype_authdata_types;
+		k5_atype_authenticator;
+		k5_atype_authenticator_0;
+		k5_atype_authenticator_1;
+		k5_atype_authenticator_1_untagged;
+		k5_atype_authenticator_2;
+		k5_atype_authenticator_2_untagged;
+		k5_atype_authenticator_3;
+		k5_atype_authenticator_3_untagged;
+		k5_atype_authenticator_4;
+		k5_atype_authenticator_4_untagged;
+		k5_atype_authenticator_5;
+		k5_atype_authenticator_5_untagged;
+		k5_atype_authenticator_6;
+		k5_atype_authenticator_6_untagged;
+		k5_atype_authenticator_7;
+		k5_atype_authenticator_7_untagged;
+		k5_atype_authenticator_8;
+		k5_atype_authenticator_8_untagged;
+		k5_atype_bitstring_data;
+		k5_atype_cammac;
+		k5_atype_cammac_0;
+		k5_atype_cammac_0_untagged;
+		k5_atype_cammac_1;
+		k5_atype_cammac_1_untagged;
+		k5_atype_cammac_2;
+		k5_atype_cammac_2_untagged;
+		k5_atype_cammac_3;
+		k5_atype_cammac_3_untagged;
+		k5_atype_checksum;
+		k5_atype_checksum_0;
+		k5_atype_checksum_0_untagged;
+		k5_atype_checksum_1;
+		k5_atype_checksum_1_untagged;
+		k5_atype_checksum_ptr;
+		k5_atype_cred_0;
+		k5_atype_cred_1;
+		k5_atype_cred_2;
+		k5_atype_cred_2_untagged;
+		k5_atype_cred_3;
+		k5_atype_cred_3_untagged;
+		k5_atype_cred_info;
+		k5_atype_cred_info_0;
+		k5_atype_cred_info_0_untagged;
+		k5_atype_cred_info_1;
+		k5_atype_cred_info_10;
+		k5_atype_cred_info_10_untagged;
+		k5_atype_cred_info_1_untagged;
+		k5_atype_cred_info_2;
+		k5_atype_cred_info_2_untagged;
+		k5_atype_cred_info_3;
+		k5_atype_cred_info_3_untagged;
+		k5_atype_cred_info_4;
+		k5_atype_cred_info_4_untagged;
+		k5_atype_cred_info_5;
+		k5_atype_cred_info_5_untagged;
*** 2018 LINES SKIPPED ***