summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorJohn Kohl <jtkohl@mit.edu>1990-04-27 16:13:11 +0000
committerJohn Kohl <jtkohl@mit.edu>1990-04-27 16:13:11 +0000
commita69d6e4164eedb974a5fbd81f958aec5353e785e (patch)
tree72f8692dce8f6e316532a08637b3d4a1fe556869 /src/lib
parent905ac354b66b2bcd5b609a1a21b9adccfa0c3d98 (diff)
downloadkrb5-a69d6e4164eedb974a5fbd81f958aec5353e785e.tar.gz
krb5-a69d6e4164eedb974a5fbd81f958aec5353e785e.tar.xz
krb5-a69d6e4164eedb974a5fbd81f958aec5353e785e.zip
*** empty log message ***
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@615 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/kdb/kdbint.h21
-rw-r--r--src/lib/kdb/store_mkey.c88
2 files changed, 109 insertions, 0 deletions
diff --git a/src/lib/kdb/kdbint.h b/src/lib/kdb/kdbint.h
new file mode 100644
index 000000000..4fade0f1a
--- /dev/null
+++ b/src/lib/kdb/kdbint.h
@@ -0,0 +1,21 @@
+/*
+ * $Source$
+ * $Author$
+ * $Id$
+ *
+ * Copyright 1990 by the Massachusetts Institute of Technology.
+ *
+ * For copying and distribution information, please see the file
+ * <krb5/copyright.h>.
+ *
+ * Internal include file for libkdb.
+ */
+
+#include <krb5/copyright.h>
+
+#ifndef KRB5_KDBINT__
+#define KRB5_KDBINT__
+
+#define DEFAULT_KEYFILE_STUB "/.k5."
+
+#endif /* KRB5_KDBINT__ */
diff --git a/src/lib/kdb/store_mkey.c b/src/lib/kdb/store_mkey.c
new file mode 100644
index 000000000..f3f99a4b3
--- /dev/null
+++ b/src/lib/kdb/store_mkey.c
@@ -0,0 +1,88 @@
+/*
+ * $Source$
+ * $Author$
+ *
+ * Copyright 1990 by the Massachusetts Institute of Technology.
+ *
+ * For copying and distribution information, please see the file
+ * <krb5/copyright.h>.
+ *
+ * krb5_db_store_mkey():
+ * Store a database master key in a file.
+ */
+
+#if !defined(lint) && !defined(SABER)
+static char rcsid_store_mkey_c[] =
+"$Id$";
+#endif /* !lint & !SABER */
+
+#include <krb5/copyright.h>
+#include <krb5/krb5.h>
+#include <krb5/kdb.h>
+#include <errno.h>
+#include <stdio.h>
+#include <krb5/libos-proto.h>
+#include <krb5/ext-proto.h>
+#include "kdbint.h"
+#include <sys/param.h> /* XXX for MAXPATHLEN */
+#ifdef unix
+#include <sys/file.h> /* XX for umask prototype */
+#endif
+
+/*
+ * Put the KDC database master key into a file. If keyfile is NULL,
+ * then a default name derived from the principal name mname is used.
+ */
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+krb5_error_code
+krb5_db_store_mkey(keyfile, mname, key)
+char *keyfile;
+krb5_principal mname;
+krb5_keyblock *key;
+{
+ FILE *kf;
+ krb5_error_code retval = 0;
+ char defkeyfile[MAXPATHLEN+1];
+ krb5_data *realm = krb5_princ_realm(mname);
+#if defined(unix) || defined(__unix__)
+ int oumask;
+#endif
+
+ if (!keyfile) {
+ (void) strcpy(defkeyfile, DEFAULT_KEYFILE_STUB);
+ (void) strncat(defkeyfile, realm->data,
+ min(sizeof(defkeyfile)-sizeof(DEFAULT_KEYFILE_STUB)-1,
+ realm->length));
+ (void) strcat(defkeyfile, "");
+ keyfile = defkeyfile;
+ }
+
+#if defined(unix) || defined(__unix__)
+ oumask = umask(077);
+#endif
+ if (!(kf = fopen(keyfile, "w"))) {
+#if defined(unix) || defined(__unix__)
+ (void) umask(oumask);
+#endif
+ return errno;
+ }
+ if ((fwrite((krb5_pointer) &key->keytype,
+ sizeof(key->keytype), 1, kf) != 1) ||
+ (fwrite((krb5_pointer) &key->length,
+ sizeof(key->length), 1, kf) != 1) ||
+ (fwrite((krb5_pointer) key->contents,
+ sizeof(key->contents[0]), key->length, kf) != key->length)) {
+ retval = errno;
+ (void) fclose(kf);
+ }
+ if (fclose(kf) == EOF)
+ retval = errno;
+#if defined(unix) || defined(__unix__)
+ (void) umask(oumask);
+#endif
+ return retval;
+}