summaryrefslogtreecommitdiffstats
path: root/util/ipa_krb5.c
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2010-11-04 19:29:01 +0100
committerSimo Sorce <ssorce@redhat.com>2010-11-22 16:01:35 -0500
commit3b7a86024b53fd0ac1a98e92bd93a170a1979aec (patch)
treec3fb64a3896c46f6822ac63d786320c0f7ec2e9b /util/ipa_krb5.c
parentce75d1c6d6595bcb26dbacf7393098a8f9accb3f (diff)
downloadfreeipa-3b7a86024b53fd0ac1a98e92bd93a170a1979aec.tar.gz
freeipa-3b7a86024b53fd0ac1a98e92bd93a170a1979aec.tar.xz
freeipa-3b7a86024b53fd0ac1a98e92bd93a170a1979aec.zip
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>
Diffstat (limited to 'util/ipa_krb5.c')
-rw-r--r--util/ipa_krb5.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/util/ipa_krb5.c b/util/ipa_krb5.c
new file mode 100644
index 000000000..5765087c9
--- /dev/null
+++ b/util/ipa_krb5.c
@@ -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;
+}