summaryrefslogtreecommitdiffstats
path: root/eBones/registerd/registerd.c
diff options
context:
space:
mode:
Diffstat (limited to 'eBones/registerd/registerd.c')
-rw-r--r--eBones/registerd/registerd.c354
1 files changed, 0 insertions, 354 deletions
diff --git a/eBones/registerd/registerd.c b/eBones/registerd/registerd.c
deleted file mode 100644
index 12a3939..0000000
--- a/eBones/registerd/registerd.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if 0
-#ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1990, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-static char sccsid[] = "@(#)registerd.c 8.1 (Berkeley) 6/1/93";
-#endif /* not lint */
-#endif
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/signal.h>
-#include <sys/resource.h>
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <syslog.h>
-#include <des.h>
-#include <krb.h>
-#include <krb_db.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include "register_proto.h"
-#include "pathnames.h"
-
-#define KBUFSIZ (sizeof(struct keyfile_data))
-#define RCRYPT 0x00
-#define CLEAR 0x01
-
-char *progname, msgbuf[BUFSIZ];
-
-void cleanup(void);
-void die(void);
-void send_packet(char *msg, int flag);
-int net_get_principal(char *pname, char *iname, C_Block *keyp);
-int do_append(struct sockaddr_in *sinp);
-
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- static Key_schedule schedule;
- static struct rlimit rl = { 0, 0 };
- struct keyfile_data *kfile;
- u_char code;
- int kf, retval, sval;
- struct sockaddr_in sin;
- char keyfile[MAXPATHLEN], keybuf[KBUFSIZ];
-
- progname = argv[0]; /* for the library routines */
-
- openlog("registerd", LOG_PID, LOG_AUTH);
-
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGTSTP, SIG_IGN);
- signal(SIGPIPE, (__sighandler_t *)die);
-
- if (setrlimit(RLIMIT_CORE, &rl) < 0) {
- syslog(LOG_ERR, "setrlimit: %m");
- exit(1);
- }
-
-
- /* figure out who we are talking to */
-
- sval = sizeof(sin);
- if (getpeername(0, (struct sockaddr *) &sin, &sval) < 0) {
- syslog(LOG_ERR, "getpeername: %m");
- exit(1);
- }
-
- /* get encryption key */
-
- (void) sprintf(keyfile, "%s/%s%s",
- SERVER_KEYDIR,
- KEYFILE_BASE,
- inet_ntoa(sin.sin_addr));
-
- if ((kf = open(keyfile, O_RDONLY)) < 0) {
- syslog(LOG_ERR,
- "error opening Kerberos update keyfile (%s): %m", keyfile);
- sprintf(msgbuf,
- "couldn't open session keyfile for your host");
- send_packet(msgbuf, CLEAR);
- exit(1);
- }
-
- if (read(kf, keybuf, KBUFSIZ) != KBUFSIZ) {
- syslog(LOG_ERR, "wrong read size of Kerberos update keyfile");
- sprintf(msgbuf,
- "couldn't read session key from your host's keyfile");
- send_packet(msgbuf, CLEAR);
- exit(1);
- }
- sprintf(msgbuf, GOTKEY_MSG);
- send_packet(msgbuf, CLEAR);
- kfile = (struct keyfile_data *) keybuf;
- key_sched((C_Block *)kfile->kf_key, schedule);
- des_set_key((des_cblock *)kfile->kf_key, schedule);
-
- /* read the command code byte */
-
- if (des_read(0, &code, 1) == 1) {
-
- switch(code) {
- case APPEND_DB:
- retval = do_append(&sin);
- break;
- case ABORT:
- cleanup();
- close(0);
- exit(0);
- default:
- retval = KFAILURE;
- syslog(LOG_NOTICE,
- "invalid command code on db update (0x%x)",
- code);
- }
-
- } else {
- retval = KFAILURE;
- syslog(LOG_ERR,
- "couldn't read command code on Kerberos update");
- }
-
- code = (u_char) retval;
- if (code != KSUCCESS) {
- sprintf(msgbuf, "%s", krb_err_txt[code]);
- send_packet(msgbuf, RCRYPT);
- } else {
- sprintf(msgbuf, "Update complete.");
- send_packet(msgbuf, RCRYPT);
- }
- cleanup();
- close(0);
- exit(0);
-}
-
-#define MAX_PRINCIPAL 10
-static Principal principal_data[MAX_PRINCIPAL];
-static C_Block key, master_key;
-static Key_schedule master_key_schedule;
-
-int
-do_append(sinp)
- struct sockaddr_in *sinp;
-{
- Principal default_princ;
- char input_name[ANAME_SZ];
- char input_instance[INST_SZ];
- int j,n, more;
- long mkeyversion;
-
-
-
- /* get master key from MKEYFILE */
- if (kdb_get_master_key(0, master_key, master_key_schedule) != 0) {
- syslog(LOG_ERR, "couldn't get master key");
- return(KFAILURE);
- }
-
- mkeyversion = kdb_verify_master_key(master_key, master_key_schedule, NULL);
- if (mkeyversion < 0) {
- syslog(LOG_ERR, "couldn't validate master key");
- return(KFAILURE);
- }
-
- n = kerb_get_principal(KERB_DEFAULT_NAME, KERB_DEFAULT_INST,
- &default_princ, 1, &more);
-
- if (n != 1) {
- syslog(LOG_ERR, "couldn't get default principal");
- return(KFAILURE);
- }
-
- /*
- * get principal name, instance, and password from network.
- * convert password to key and store it
- */
-
- if (net_get_principal(input_name, input_instance, (C_Block *)key) != 0) {
- return(KFAILURE);
- }
-
-
- j = kerb_get_principal(
- input_name,
- input_instance,
- principal_data,
- MAX_PRINCIPAL,
- &more
- );
-
- if (j != 0) {
- /* already in database, no update */
- syslog(LOG_NOTICE,
- "attempt to add duplicate entry for principal %s.%s",
- input_name, input_instance);
- return(KDC_PR_N_UNIQUE);
- }
-
- /*
- * set up principal's name, instance
- */
-
- strcpy(principal_data[0].name, input_name);
- strcpy(principal_data[0].instance, input_instance);
- principal_data[0].old = NULL;
-
-
- /* and the expiration date and version #s */
-
- principal_data[0].exp_date = default_princ.exp_date;
- strcpy(principal_data[0].exp_date_txt, default_princ.exp_date_txt);
- principal_data[0].max_life = default_princ.max_life;
- principal_data[0].attributes = default_princ.attributes;
- principal_data[0].kdc_key_ver = default_princ.kdc_key_ver;
-
-
- /* and the key */
-
- kdb_encrypt_key(key, key, master_key, master_key_schedule,
- ENCRYPT);
- bcopy(key, &principal_data[0].key_low, 4);
- bcopy(((long *) key) + 1, &principal_data[0].key_high,4);
- bzero(key, sizeof(key));
-
- principal_data[0].key_version = 1; /* 1st entry */
-
- /* and write it to the database */
-
- if (kerb_put_principal(&principal_data[0], 1)) {
- syslog(LOG_INFO, "Kerberos update failure: put_principal failed");
- return(KFAILURE);
- }
-
- syslog(LOG_NOTICE, "Kerberos update: wrote new record for %s.%s from %s",
- principal_data[0].name,
- principal_data[0].instance,
- inet_ntoa(sinp->sin_addr)
- );
-
- return(KSUCCESS);
-
-}
-
-void
-send_packet(msg,flag)
- char *msg;
- int flag;
-{
- int len = strlen(msg);
- msg[len++] = '\n';
- msg[len] = '\0';
- if (len > sizeof(msgbuf)) {
- syslog(LOG_ERR, "send_packet: invalid msg size");
- return;
- }
- if (flag == RCRYPT) {
- if (des_write(0, msg, len) != len)
- syslog(LOG_ERR, "couldn't write reply message");
- } else if (flag == CLEAR) {
- if (write(0, msg, len) != len)
- syslog(LOG_ERR, "couldn't write reply message");
- } else
- syslog(LOG_ERR, "send_packet: invalid flag (%d)", flag);
-
-}
-
-int
-net_get_principal(pname, iname, keyp)
- char *pname, *iname;
- C_Block *keyp;
-{
- int cc;
- static char password[255];
-
- cc = des_read(0, pname, ANAME_SZ);
- if (cc != ANAME_SZ) {
- syslog(LOG_ERR, "couldn't get principal name");
- return(-1);
- }
-
- cc = des_read(0, iname, INST_SZ);
- if (cc != INST_SZ) {
- syslog(LOG_ERR, "couldn't get instance name");
- return(-1);
- }
-
- cc = des_read(0, password, 255);
- if (cc != 255) {
- syslog(LOG_ERR, "couldn't get password");
- bzero(password, 255);
- return(-1);
- }
-
- string_to_key(password, (des_cblock *)*keyp);
- bzero(password, 255);
- return(0);
-}
-
-void
-cleanup()
-{
- bzero(master_key, sizeof(master_key));
- bzero(key, sizeof(key));
- bzero(master_key_schedule, sizeof(master_key_schedule));
-}
-
-void
-die()
-{
- syslog(LOG_ERR, "remote end died (SIGPIPE)");
- cleanup();
- exit(1);
-}
OpenPOWER on IntegriCloud