summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlexandra Ellwood <lxs@mit.edu>2008-06-27 19:46:33 +0000
committerAlexandra Ellwood <lxs@mit.edu>2008-06-27 19:46:33 +0000
commitd8dda3014aca5b3d3c4d5165d052ca2e9b0de706 (patch)
treeda7df52439ec20b2873a91722fa1fcc69308ddbb /src
parent086dcfda3d3857f394c2dc9c75488b0cdfe11d21 (diff)
downloadkrb5-d8dda3014aca5b3d3c4d5165d052ca2e9b0de706.tar.gz
krb5-d8dda3014aca5b3d3c4d5165d052ca2e9b0de706.tar.xz
krb5-d8dda3014aca5b3d3c4d5165d052ca2e9b0de706.zip
Big endian stash file support
Added support for stash files with a consistent endianness (big endian) so that one can migrate a KDC from a machine with one endianess to a machine with the other endianess. Used by Kerberos for Macintosh. ticket: new git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20489 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/kdb/kdb_default.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/lib/kdb/kdb_default.c b/src/lib/kdb/kdb_default.c
index fd95c8379..093bbc4bc 100644
--- a/src/lib/kdb/kdb_default.c
+++ b/src/lib/kdb/kdb_default.c
@@ -30,6 +30,7 @@
#include <string.h>
#include <stdio.h>
#include <errno.h>
+#include <arpa/inet.h>
/*
@@ -142,6 +143,7 @@ krb5_def_store_mkey(context, keyfile, mname, key, master_pwd)
FILE *kf;
krb5_error_code retval = 0;
krb5_ui_2 enctype;
+ unsigned long keylength;
char defkeyfile[MAXPATHLEN+1];
krb5_data *realm = krb5_princ_realm(context, mname);
#if HAVE_UMASK
@@ -176,11 +178,17 @@ krb5_def_store_mkey(context, keyfile, mname, key, master_pwd)
return e;
}
set_cloexec_file(kf);
+#if BIG_ENDIAN_MASTER_KEY
+ enctype = htons(key->enctype);
+ keylength = htonl(key->length);
+#else
enctype = key->enctype;
+ keylength = key->length;
+#endif
if ((fwrite((krb5_pointer) &enctype,
2, 1, kf) != 1) ||
- (fwrite((krb5_pointer) &key->length,
- sizeof(key->length), 1, kf) != 1) ||
+ (fwrite((krb5_pointer) &keylength,
+ sizeof(keylength), 1, kf) != 1) ||
(fwrite((krb5_pointer) key->contents,
sizeof(key->contents[0]), (unsigned) key->length,
kf) != key->length)) {
@@ -229,6 +237,10 @@ krb5_db_def_fetch_mkey( krb5_context context,
goto errout;
}
+#if BIG_ENDIAN_MASTER_KEY
+ enctype = ntohs(enctype);
+#endif
+
if (key->enctype == ENCTYPE_UNKNOWN)
key->enctype = enctype;
else if (enctype != key->enctype) {
@@ -242,6 +254,10 @@ krb5_db_def_fetch_mkey( krb5_context context,
goto errout;
}
+#if BIG_ENDIAN_MASTER_KEY
+ key->length = ntohl(key->length);
+#endif
+
if (!key->length || ((int) key->length) < 0) {
retval = KRB5_KDB_BADSTORED_MKEY;
goto errout;