xref: /plan9/sys/src/cmd/9nfs/9auth.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier #include <sys/types.h>
2*7dd7cddfSDavid du Colombier #include <sys/stat.h>
3*7dd7cddfSDavid du Colombier #include <fcntl.h>
4*7dd7cddfSDavid du Colombier #include <stdio.h>
5*7dd7cddfSDavid du Colombier 
6*7dd7cddfSDavid du Colombier #define	NETCHLEN	16		/* max network challenge length	*/
7*7dd7cddfSDavid du Colombier 
8*7dd7cddfSDavid du Colombier char *	argv0;
9*7dd7cddfSDavid du Colombier int	debug;
10*7dd7cddfSDavid du Colombier int	delete;
11*7dd7cddfSDavid du Colombier 
12*7dd7cddfSDavid du Colombier char *	root = "/n/emelie";
13*7dd7cddfSDavid du Colombier char *	user;
14*7dd7cddfSDavid du Colombier char	file[64];
15*7dd7cddfSDavid du Colombier char	challenge[NETCHLEN];
16*7dd7cddfSDavid du Colombier char	response[NETCHLEN];
17*7dd7cddfSDavid du Colombier 
18*7dd7cddfSDavid du Colombier void
19*7dd7cddfSDavid du Colombier usage(void)
20*7dd7cddfSDavid du Colombier {
21*7dd7cddfSDavid du Colombier 	printf("usage: %s [-d] username\n", argv0);
22*7dd7cddfSDavid du Colombier 	exit(1);
23*7dd7cddfSDavid du Colombier }
24*7dd7cddfSDavid du Colombier 
25*7dd7cddfSDavid du Colombier void
26*7dd7cddfSDavid du Colombier main(int argc, char **argv)
27*7dd7cddfSDavid du Colombier {
28*7dd7cddfSDavid du Colombier 	int fd, n;
29*7dd7cddfSDavid du Colombier 
30*7dd7cddfSDavid du Colombier 	for(argv0=*argv++,--argc; argc>0; ++argv,--argc){
31*7dd7cddfSDavid du Colombier 		if(argv[0][0] != '-' || argv[0][1] == '-')
32*7dd7cddfSDavid du Colombier 			break;
33*7dd7cddfSDavid du Colombier 		switch(argv[0][1]){
34*7dd7cddfSDavid du Colombier 		case 'D':
35*7dd7cddfSDavid du Colombier 			++debug;
36*7dd7cddfSDavid du Colombier 			break;
37*7dd7cddfSDavid du Colombier 		case 'd':
38*7dd7cddfSDavid du Colombier 			++delete;
39*7dd7cddfSDavid du Colombier 			break;
40*7dd7cddfSDavid du Colombier 		case 'r':
41*7dd7cddfSDavid du Colombier 			root = argv[0][2] ? &argv[0][2] : (--argc, *++argv);
42*7dd7cddfSDavid du Colombier 			break;
43*7dd7cddfSDavid du Colombier 		default:
44*7dd7cddfSDavid du Colombier 			usage();
45*7dd7cddfSDavid du Colombier 			break;
46*7dd7cddfSDavid du Colombier 		}
47*7dd7cddfSDavid du Colombier 	}
48*7dd7cddfSDavid du Colombier 	if(argc != 1)
49*7dd7cddfSDavid du Colombier 		usage();
50*7dd7cddfSDavid du Colombier 	user = argv[0];
51*7dd7cddfSDavid du Colombier 	sprintf(file, "%s/#%s", root, user);
52*7dd7cddfSDavid du Colombier 	if(debug)
53*7dd7cddfSDavid du Colombier 		printf("debug=%d, file=%s\n", debug, file);
54*7dd7cddfSDavid du Colombier 	if(delete){
55*7dd7cddfSDavid du Colombier 		fd = creat(file, 0600);
56*7dd7cddfSDavid du Colombier 		if(fd < 0){
57*7dd7cddfSDavid du Colombier 			perror(file);
58*7dd7cddfSDavid du Colombier 			exit(1);
59*7dd7cddfSDavid du Colombier 		}
60*7dd7cddfSDavid du Colombier 		exit(0);
61*7dd7cddfSDavid du Colombier 	}
62*7dd7cddfSDavid du Colombier 	fd = open(file, 2);
63*7dd7cddfSDavid du Colombier 	if(fd < 0){
64*7dd7cddfSDavid du Colombier 		perror(file);
65*7dd7cddfSDavid du Colombier 		exit(1);
66*7dd7cddfSDavid du Colombier 	}
67*7dd7cddfSDavid du Colombier 	n = read(fd, challenge, NETCHLEN);
68*7dd7cddfSDavid du Colombier 	if(debug)
69*7dd7cddfSDavid du Colombier 		printf("read %d\n", n);
70*7dd7cddfSDavid du Colombier 	if(n <= 0){
71*7dd7cddfSDavid du Colombier 		printf("read %d: ", n);
72*7dd7cddfSDavid du Colombier 		perror("");
73*7dd7cddfSDavid du Colombier 		exit(1);
74*7dd7cddfSDavid du Colombier 	}
75*7dd7cddfSDavid du Colombier 	printf("challenge: %s\n", challenge);
76*7dd7cddfSDavid du Colombier 	write(1, "response: ", 10);
77*7dd7cddfSDavid du Colombier 	read(0, response, NETCHLEN-1);
78*7dd7cddfSDavid du Colombier 	lseek(fd, 0, 0);
79*7dd7cddfSDavid du Colombier 	n = write(fd, response, NETCHLEN);
80*7dd7cddfSDavid du Colombier 	if(debug)
81*7dd7cddfSDavid du Colombier 		printf("write %d\n", n);
82*7dd7cddfSDavid du Colombier 	if(n <= 0){
83*7dd7cddfSDavid du Colombier 		printf("write %d: ", n);
84*7dd7cddfSDavid du Colombier 		perror("");
85*7dd7cddfSDavid du Colombier 		exit(1);
86*7dd7cddfSDavid du Colombier 	}
87*7dd7cddfSDavid du Colombier 	exit(0);
88*7dd7cddfSDavid du Colombier }
89