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