*** empty log message ***
authorJohn Kohl <jtkohl@mit.edu>
Fri, 27 Apr 1990 16:13:11 +0000 (16:13 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Fri, 27 Apr 1990 16:13:11 +0000 (16:13 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@615 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/kdb/kdbint.h [new file with mode: 0644]
src/lib/kdb/store_mkey.c [new file with mode: 0644]

diff --git a/src/lib/kdb/kdbint.h b/src/lib/kdb/kdbint.h
new file mode 100644 (file)
index 0000000..4fade0f
--- /dev/null
@@ -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 (file)
index 0000000..f3f99a4
--- /dev/null
@@ -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;
+}