mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2026-10-12 16:32:01 -05:00
Use internal implementation of internal Kerberos functions
Don't use KRB5_PRIVATE. The patch implements and uses the following krb5 functions that are otherwise private in recent MIT Kerberos releases: * krb5_principal2salt_norealm * krb5_free_ktypes Signed-off-by: Simo Sorce <ssorce@redhat.com>
This commit is contained in:
1 parent
ce75d1c6d6
commit
3b7a86024b
7 files changed
+73
-6
No files matched your search
@@ -1,11 +1,14 @@
|
|||||||
NULL =
|
NULL =
|
||||||
|
|
||||||
PLUGIN_COMMON_DIR=../common
|
PLUGIN_COMMON_DIR=../common
|
||||||
|
KRB5_UTIL_DIR= ../../../util
|
||||||
|
KRB5_UTIL_SRCS=$(KRB5_UTIL_DIR)/ipa_krb5.c
|
||||||
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I. \
|
-I. \
|
||||||
-I$(srcdir) \
|
-I$(srcdir) \
|
||||||
-I$(PLUGIN_COMMON_DIR) \
|
-I$(PLUGIN_COMMON_DIR) \
|
||||||
|
-I$(KRB5_UTIL_DIR) \
|
||||||
-DPREFIX=\""$(prefix)"\" \
|
-DPREFIX=\""$(prefix)"\" \
|
||||||
-DBINDIR=\""$(bindir)"\" \
|
-DBINDIR=\""$(bindir)"\" \
|
||||||
-DLIBDIR=\""$(libdir)"\" \
|
-DLIBDIR=\""$(libdir)"\" \
|
||||||
@@ -28,6 +31,7 @@ libipa_pwd_extop_la_SOURCES = \
|
|||||||
ipapwd_encoding.c \
|
ipapwd_encoding.c \
|
||||||
ipapwd_prepost.c \
|
ipapwd_prepost.c \
|
||||||
ipa_pwd_extop.c \
|
ipa_pwd_extop.c \
|
||||||
|
$(KRB5_UTIL_SRCS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
libipa_pwd_extop_la_LDFLAGS = -avoid-version
|
libipa_pwd_extop_la_LDFLAGS = -avoid-version
|
||||||
|
|||||||
@@ -52,7 +52,6 @@
|
|||||||
#include <prio.h>
|
#include <prio.h>
|
||||||
#include <ssl.h>
|
#include <ssl.h>
|
||||||
#include <dirsrv/slapi-plugin.h>
|
#include <dirsrv/slapi-plugin.h>
|
||||||
#define KRB5_PRIVATE 1
|
|
||||||
#include <krb5.h>
|
#include <krb5.h>
|
||||||
#include <lber.h>
|
#include <lber.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
|
|
||||||
#include "ipapwd.h"
|
#include "ipapwd.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include "ipa_krb5.h"
|
||||||
|
|
||||||
/* krbTicketFlags */
|
/* krbTicketFlags */
|
||||||
#define KTF_DISALLOW_POSTDATED 0x00000001
|
#define KTF_DISALLOW_POSTDATED 0x00000001
|
||||||
@@ -341,7 +342,7 @@ static Slapi_Value **encrypt_encode_key(struct ipapwd_krbcfg *krbcfg,
|
|||||||
|
|
||||||
case KRB5_KDB_SALTTYPE_NOREALM:
|
case KRB5_KDB_SALTTYPE_NOREALM:
|
||||||
|
|
||||||
krberr = krb5_principal2salt_norealm(krbctx, princ, &salt);
|
krberr = ipa_krb5_principal2salt_norealm(krbctx, princ, &salt);
|
||||||
if (krberr) {
|
if (krberr) {
|
||||||
LOG_FATAL("krb5_principal2salt failed [%s]\n",
|
LOG_FATAL("krb5_principal2salt failed [%s]\n",
|
||||||
krb5_get_error_message(krbctx, krberr));
|
krb5_get_error_message(krbctx, krberr));
|
||||||
|
|||||||
@@ -12,9 +12,13 @@ if HAVE_GCC
|
|||||||
endif
|
endif
|
||||||
export AM_CFLAGS
|
export AM_CFLAGS
|
||||||
|
|
||||||
|
KRB5_UTIL_DIR=../util
|
||||||
|
KRB5_UTIL_SRCS=$(KRB5_UTIL_DIR)/ipa_krb5.c
|
||||||
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I. \
|
-I. \
|
||||||
-I$(srcdir) \
|
-I$(srcdir) \
|
||||||
|
-I$(KRB5_UTIL_DIR) \
|
||||||
-DPREFIX=\""$(prefix)"\" \
|
-DPREFIX=\""$(prefix)"\" \
|
||||||
-DBINDIR=\""$(bindir)"\" \
|
-DBINDIR=\""$(bindir)"\" \
|
||||||
-DLIBDIR=\""$(libdir)"\" \
|
-DLIBDIR=\""$(libdir)"\" \
|
||||||
@@ -38,6 +42,7 @@ sbin_PROGRAMS = \
|
|||||||
|
|
||||||
ipa_getkeytab_SOURCES = \
|
ipa_getkeytab_SOURCES = \
|
||||||
ipa-getkeytab.c \
|
ipa-getkeytab.c \
|
||||||
|
$(KRB5_UTIL_SRCS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
ipa_getkeytab_LDADD = \
|
ipa_getkeytab_LDADD = \
|
||||||
|
|||||||
@@ -27,10 +27,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#define KRB5_PRIVATE 1
|
|
||||||
#include <krb5.h>
|
#include <krb5.h>
|
||||||
#ifdef WITH_MOZLDAP
|
#ifdef WITH_MOZLDAP
|
||||||
#include <mozldap/ldap.h>
|
#include <mozldap/ldap.h>
|
||||||
@@ -44,6 +44,8 @@
|
|||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
#define _(STRING) gettext(STRING)
|
#define _(STRING) gettext(STRING)
|
||||||
|
|
||||||
|
#include "ipa_krb5.h"
|
||||||
|
|
||||||
/* Salt types */
|
/* Salt types */
|
||||||
#define NO_SALT -1
|
#define NO_SALT -1
|
||||||
#define KRB5_KDB_SALTTYPE_NORMAL 0
|
#define KRB5_KDB_SALTTYPE_NORMAL 0
|
||||||
@@ -152,7 +154,7 @@ static int prep_ksdata(krb5_context krbctx, const char *str,
|
|||||||
ksdata[i].salttype = KRB5_KDB_SALTTYPE_NORMAL;
|
ksdata[i].salttype = KRB5_KDB_SALTTYPE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_free_ktypes(krbctx, ktypes);
|
ipa_krb5_free_ktypes(krbctx, ktypes);
|
||||||
|
|
||||||
nkeys = i;
|
nkeys = i;
|
||||||
|
|
||||||
@@ -322,7 +324,7 @@ static int create_keys(krb5_context krbctx,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KRB5_KDB_SALTTYPE_NOREALM:
|
case KRB5_KDB_SALTTYPE_NOREALM:
|
||||||
krberr = krb5_principal2salt_norealm(krbctx, princ, &ksdata[i].salt);
|
krberr = ipa_krb5_principal2salt_norealm(krbctx, princ, &ksdata[i].salt);
|
||||||
if (krberr) {
|
if (krberr) {
|
||||||
fprintf(stderr, _("Failed to create key!\n"));
|
fprintf(stderr, _("Failed to create key!\n"));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -848,7 +850,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
fprintf(stdout, "%s\n", enc);
|
fprintf(stdout, "%s\n", enc);
|
||||||
}
|
}
|
||||||
krb5_free_ktypes(krbctx, ktypes);
|
ipa_krb5_free_ktypes(krbctx, ktypes);
|
||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include "ipa_krb5.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
ipa_krb5_free_ktypes(krb5_context context, krb5_enctype *val)
|
||||||
|
{
|
||||||
|
free(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a krb5_principal into the default salt for that principal.
|
||||||
|
*/
|
||||||
|
krb5_error_code
|
||||||
|
ipa_krb5_principal2salt_norealm(krb5_context context, krb5_const_principal pr, krb5_data *ret)
|
||||||
|
{
|
||||||
|
unsigned int size = 0, offset=0;
|
||||||
|
krb5_int32 nelem;
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
if (pr == NULL) {
|
||||||
|
ret->length = 0;
|
||||||
|
ret->data = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
nelem = krb5_princ_size(context, pr);
|
||||||
|
|
||||||
|
for (i = 0; i < (int) nelem; i++)
|
||||||
|
size += krb5_princ_component(context, pr, i)->length;
|
||||||
|
|
||||||
|
ret->length = size;
|
||||||
|
if (!(ret->data = malloc (size)))
|
||||||
|
return ENOMEM;
|
||||||
|
|
||||||
|
for (i = 0; i < (int) nelem; i++) {
|
||||||
|
memcpy(&ret->data[offset], krb5_princ_component(context, pr, i)->data,
|
||||||
|
krb5_princ_component(context, pr, i)->length);
|
||||||
|
offset += krb5_princ_component(context, pr, i)->length;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
#ifndef __IPA_KRB5_H_
|
||||||
|
#define __IPA_KRB5_H_
|
||||||
|
|
||||||
|
#include <krb5.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
ipa_krb5_free_ktypes(krb5_context context, krb5_enctype *val);
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
ipa_krb5_principal2salt_norealm(krb5_context context, krb5_const_principal pr, krb5_data *ret);
|
||||||
|
|
||||||
|
#endif /* __IPA_KRB5_H_ */
|
||||||
Reference in new issue
Block a user