|
|
1.1 root 1: /*
2: * Copyright (c) 1989 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)make_keypair.c 1.5 (Berkeley) 6/25/90";
20: #endif /* not lint */
21:
22: #include <sys/types.h>
23: #include <sys/file.h>
24: #include <netinet/in.h>
25: #include <stdio.h>
26: #include <netdb.h>
27: #include <kerberosIV/des.h>
28: #include <kerberosIV/krb.h>
29: #include "pathnames.h"
30: #include "register_proto.h"
31:
32: extern void random_key(), herror();
33: void make_key(), usage();
34:
35: main(argc, argv)
36: int argc;
37: char **argv;
38: {
39: struct hostent *hp;
40: char *addr;
41: int i;
42: struct sockaddr_in sin;
43:
44: if (argc != 2) {
45: usage(argv[0]);
46: exit(1);
47: }
48:
49: if ((hp = gethostbyname(argv[1])) == NULL) {
50: herror(argv[1]);
51: exit(1);
52: }
53:
54: for (i = 0; addr = hp->h_addr_list[i]; i++) {
55: addr = hp->h_addr_list[i];
56: bcopy(addr, &sin.sin_addr, hp->h_length);
57:
58: printf("Making key for host %s (%s)\n",
59: argv[1], inet_ntoa(sin.sin_addr));
60: make_key(sin.sin_addr);
61: }
62: printf("==========\n");
63: printf("One copy of the each key should be put in %s on the\n",
64: SERVER_KEYDIR);
65: printf("Kerberos server machine (mode 600, owner root).\n");
66: printf("Another copy of each key should be put on the named\n");
67: printf("client as %sXXX.XXX.XXX.XXX (same modes as above),\n",
68: CLIENT_KEYFILE);
69: printf("where the X's refer to digits of the host's inet address.\n");
70: (void)fflush(stdout);
71: exit(0);
72: }
73:
74: void
75: make_key(addr)
76: struct in_addr addr;
77: {
78: struct keyfile_data kfile;
79: char namebuf[255];
80: int fd;
81:
82: (void)sprintf(namebuf, ".%s%s",
83: CLIENT_KEYFILE,
84: inet_ntoa(addr));
85: fd = open(namebuf, O_WRONLY|O_CREAT, 0600);
86: if (fd < 0) {
87: perror("open");
88: exit(1);
89: }
90: random_key(kfile.kf_key);
91: printf("writing to file -> %s ...", namebuf);
92: if (write(fd, &kfile, sizeof(kfile)) != sizeof(kfile)) {
93: fprintf(stderr, "error writing file %s\n", namebuf);
94: }
95: printf("done.\n");
96: (void)close(fd);
97: return;
98: }
99:
100: void
101: usage(name)
102: char *name;
103: {
104: fprintf(stderr, "usage: %s host\n", name);
105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.