xref: /plan9/sys/src/cmd/9nfs/9auth.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier #include <sys/types.h>
27dd7cddfSDavid du Colombier #include <sys/stat.h>
37dd7cddfSDavid du Colombier #include <fcntl.h>
47dd7cddfSDavid du Colombier #include <stdio.h>
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier #define	NETCHLEN	16		/* max network challenge length	*/
77dd7cddfSDavid du Colombier 
87dd7cddfSDavid du Colombier char *	argv0;
97dd7cddfSDavid du Colombier int	debug;
107dd7cddfSDavid du Colombier int	delete;
117dd7cddfSDavid du Colombier 
127dd7cddfSDavid du Colombier char *	root = "/n/emelie";
137dd7cddfSDavid du Colombier char *	user;
147dd7cddfSDavid du Colombier char	file[64];
157dd7cddfSDavid du Colombier char	challenge[NETCHLEN];
167dd7cddfSDavid du Colombier char	response[NETCHLEN];
177dd7cddfSDavid du Colombier 
187dd7cddfSDavid du Colombier void
usage(void)197dd7cddfSDavid du Colombier usage(void)
207dd7cddfSDavid du Colombier {
217dd7cddfSDavid du Colombier 	printf("usage: %s [-d] username\n", argv0);
227dd7cddfSDavid du Colombier 	exit(1);
237dd7cddfSDavid du Colombier }
247dd7cddfSDavid du Colombier 
257dd7cddfSDavid du Colombier void
main(int argc,char ** argv)267dd7cddfSDavid du Colombier main(int argc, char **argv)
277dd7cddfSDavid du Colombier {
287dd7cddfSDavid du Colombier 	int fd, n;
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier 	for(argv0=*argv++,--argc; argc>0; ++argv,--argc){
317dd7cddfSDavid du Colombier 		if(argv[0][0] != '-' || argv[0][1] == '-')
327dd7cddfSDavid du Colombier 			break;
337dd7cddfSDavid du Colombier 		switch(argv[0][1]){
347dd7cddfSDavid du Colombier 		case 'D':
357dd7cddfSDavid du Colombier 			++debug;
367dd7cddfSDavid du Colombier 			break;
377dd7cddfSDavid du Colombier 		case 'd':
387dd7cddfSDavid du Colombier 			++delete;
397dd7cddfSDavid du Colombier 			break;
407dd7cddfSDavid du Colombier 		case 'r':
417dd7cddfSDavid du Colombier 			root = argv[0][2] ? &argv[0][2] : (--argc, *++argv);
427dd7cddfSDavid du Colombier 			break;
437dd7cddfSDavid du Colombier 		default:
447dd7cddfSDavid du Colombier 			usage();
457dd7cddfSDavid du Colombier 			break;
467dd7cddfSDavid du Colombier 		}
477dd7cddfSDavid du Colombier 	}
487dd7cddfSDavid du Colombier 	if(argc != 1)
497dd7cddfSDavid du Colombier 		usage();
507dd7cddfSDavid du Colombier 	user = argv[0];
51*9a747e4fSDavid du Colombier 	snprintf(file, sizeof file, "%s/#%s", root, user);
527dd7cddfSDavid du Colombier 	if(debug)
537dd7cddfSDavid du Colombier 		printf("debug=%d, file=%s\n", debug, file);
547dd7cddfSDavid du Colombier 	if(delete){
557dd7cddfSDavid du Colombier 		fd = creat(file, 0600);
567dd7cddfSDavid du Colombier 		if(fd < 0){
577dd7cddfSDavid du Colombier 			perror(file);
587dd7cddfSDavid du Colombier 			exit(1);
597dd7cddfSDavid du Colombier 		}
607dd7cddfSDavid du Colombier 		exit(0);
617dd7cddfSDavid du Colombier 	}
627dd7cddfSDavid du Colombier 	fd = open(file, 2);
637dd7cddfSDavid du Colombier 	if(fd < 0){
647dd7cddfSDavid du Colombier 		perror(file);
657dd7cddfSDavid du Colombier 		exit(1);
667dd7cddfSDavid du Colombier 	}
677dd7cddfSDavid du Colombier 	n = read(fd, challenge, NETCHLEN);
687dd7cddfSDavid du Colombier 	if(debug)
697dd7cddfSDavid du Colombier 		printf("read %d\n", n);
707dd7cddfSDavid du Colombier 	if(n <= 0){
717dd7cddfSDavid du Colombier 		printf("read %d: ", n);
727dd7cddfSDavid du Colombier 		perror("");
737dd7cddfSDavid du Colombier 		exit(1);
747dd7cddfSDavid du Colombier 	}
757dd7cddfSDavid du Colombier 	printf("challenge: %s\n", challenge);
767dd7cddfSDavid du Colombier 	write(1, "response: ", 10);
777dd7cddfSDavid du Colombier 	read(0, response, NETCHLEN-1);
787dd7cddfSDavid du Colombier 	lseek(fd, 0, 0);
797dd7cddfSDavid du Colombier 	n = write(fd, response, NETCHLEN);
807dd7cddfSDavid du Colombier 	if(debug)
817dd7cddfSDavid du Colombier 		printf("write %d\n", n);
827dd7cddfSDavid du Colombier 	if(n <= 0){
837dd7cddfSDavid du Colombier 		printf("write %d: ", n);
847dd7cddfSDavid du Colombier 		perror("");
857dd7cddfSDavid du Colombier 		exit(1);
867dd7cddfSDavid du Colombier 	}
877dd7cddfSDavid du Colombier 	exit(0);
887dd7cddfSDavid du Colombier }
89