freebsd-dev/eBones/kstash/kstash.c
csgr 105186eeee Initial import of eBones.
(Including all changes for FreeBSD - importing the original eBones distribution
would be too complex at this stage, since I don't have access to Piero's 
CVS.)
(If you want to include eBones in your system, don't forget to include
MAKE_EBONES in /etc/make.conf.)
(This stuff is now also suppable from braae.ru.ac.za.)

Bones originally from MIT SIPB.
Original port to FreeBSD 1.x  by Piero Serini.
Moved to FreeBSD 2.0 by Doug Rabson and Geoff Rehmet.
Nice bug fixes from Doug Rabson.
1994-09-30 14:50:09 +00:00

93 lines
2.1 KiB
C

/*
* Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
* of Technology
* For copying and distribution information, please see the file
* <Copyright.MIT>.
*
* from: kstash.c,v 4.0 89/01/23 09:45:43 jtkohl Exp $
* $Id: kstash.c,v 1.2 1994/07/19 19:27:05 g89r4222 Exp $
*/
#ifndef lint
static char rcsid[] =
"$Id: kstash.c,v 1.2 1994/07/19 19:27:05 g89r4222 Exp $";
#endif lint
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <signal.h>
#include <sgtty.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/file.h>
#include <krb.h>
#include <des.h>
#include <klog.h>
#include <prot.h>
#include <krb_db.h>
#include <kdc.h>
extern int errno;
/* change this later, but krblib_dbm needs it for now */
char *progname;
static C_Block master_key;
static Key_schedule master_key_schedule;
static Principal s_name_data; /* for services requested */
static unsigned char master_key_version;
int debug;
static int more;
static int kfile;
static void clear_secrets();
main(argc, argv)
int argc;
char **argv;
{
long n;
if (n = kerb_init()) {
fprintf(stderr, "Kerberos db and cache init failed = %d\n", n);
exit(1);
}
if (kdb_get_master_key (TRUE, master_key, master_key_schedule) != 0) {
fprintf (stderr, "%s: Couldn't read master key.\n", argv[0]);
fflush (stderr);
clear_secrets();
exit (-1);
}
if (kdb_verify_master_key (master_key, master_key_schedule, stderr) < 0) {
clear_secrets();
exit (-1);
}
kfile = open(MKEYFILE, O_TRUNC | O_RDWR | O_CREAT, 0600);
if (kfile < 0) {
clear_secrets();
fprintf(stderr, "\n\07\07%s: Unable to open master key file\n",
argv[0]);
exit(1);
}
if (write(kfile, (char *) master_key, 8) < 0) {
clear_secrets();
fprintf(stderr, "\n%s: Write I/O error on master key file\n",
argv[0]);
exit(1);
}
(void) close(kfile);
clear_secrets();
}
static void
clear_secrets()
{
bzero(master_key_schedule, sizeof(master_key_schedule));
bzero(master_key, sizeof(master_key));
}