136342Skfall #include <sys/types.h>
236342Skfall #include <kerberos/krb.h>
336342Skfall #include <stdio.h>
436342Skfall #include <netdb.h>
536342Skfall #include <netinet/in.h>
636342Skfall #include <sys/file.h>
736342Skfall #include "register_proto.h"
836342Skfall
936342Skfall #define KFILE "update.key%s"
1036342Skfall
main(argc,argv)1136342Skfall main(argc, argv)
1236342Skfall char **argv;
1336342Skfall {
1436342Skfall char namebuf[255];
1536342Skfall int fd;
1636342Skfall struct hostent *hp;
1736342Skfall char *addr;
1836342Skfall int i;
1936342Skfall struct sockaddr_in sin;
2036342Skfall
2136342Skfall if(argc != 2) {
2236342Skfall usage(argv[0]);
2336342Skfall exit(1);
2436342Skfall }
2536342Skfall
2636342Skfall hp = gethostbyname(argv[1]);
2736342Skfall for(i = 0; addr = hp->h_addr_list[i]; i++) {
2836342Skfall addr = hp->h_addr_list[i];
2936342Skfall bcopy(addr, &sin.sin_addr, hp->h_length);
3036342Skfall
3136342Skfall printf("Making key for host %s (%s)\n",
3236342Skfall argv[1], inet_ntoa(sin.sin_addr));
3336342Skfall make_key(sin.sin_addr);
3436342Skfall }
3536342Skfall printf("==========\n");
3636342Skfall printf("One copy of the each key should be put in /kerberos on the\n");
3736342Skfall printf("Kerberos machine (mode 600, owner root).\n");
3836342Skfall printf("Another copy of each key should be put on the named\n");
39*36351Skfall printf("client as /.update.keyXXX.XXX.XXX.XXX (same modes as above).\n");
4036342Skfall fflush(stdout);
4136342Skfall }
4236342Skfall
4336342Skfall make_key(addr)
4436342Skfall struct in_addr addr;
4536342Skfall {
4636342Skfall struct keyfile_data kfile;
4736342Skfall char namebuf[255];
4836342Skfall int fd;
4936342Skfall
5036342Skfall sprintf(namebuf, KFILE, inet_ntoa(addr));
5136342Skfall fd = open(namebuf, O_WRONLY|O_CREAT, 0600);
5236342Skfall if(fd < 0) {
5336342Skfall perror("open");
5436342Skfall exit(1);
5536342Skfall }
5636342Skfall random_key(kfile.kf_key);
5736342Skfall if(write(fd, &kfile, sizeof(kfile)) != sizeof(kfile)) {
5836342Skfall fprintf(stderr, "error writing file %s\n", namebuf);
5936342Skfall }
6036342Skfall close(fd);
6136342Skfall }
usage(name)6236342Skfall usage(name)
6336342Skfall char *name;
6436342Skfall {
6536342Skfall fprintf(stderr, "usage: %s host\n", name);
6636342Skfall }
67