diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/9nfs/9auth.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/9nfs/9auth.c')
-rwxr-xr-x | sys/src/cmd/9nfs/9auth.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/sys/src/cmd/9nfs/9auth.c b/sys/src/cmd/9nfs/9auth.c new file mode 100755 index 000000000..588aca4cb --- /dev/null +++ b/sys/src/cmd/9nfs/9auth.c @@ -0,0 +1,88 @@ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <stdio.h> + +#define NETCHLEN 16 /* max network challenge length */ + +char * argv0; +int debug; +int delete; + +char * root = "/n/emelie"; +char * user; +char file[64]; +char challenge[NETCHLEN]; +char response[NETCHLEN]; + +void +usage(void) +{ + printf("usage: %s [-d] username\n", argv0); + exit(1); +} + +void +main(int argc, char **argv) +{ + int fd, n; + + for(argv0=*argv++,--argc; argc>0; ++argv,--argc){ + if(argv[0][0] != '-' || argv[0][1] == '-') + break; + switch(argv[0][1]){ + case 'D': + ++debug; + break; + case 'd': + ++delete; + break; + case 'r': + root = argv[0][2] ? &argv[0][2] : (--argc, *++argv); + break; + default: + usage(); + break; + } + } + if(argc != 1) + usage(); + user = argv[0]; + snprintf(file, sizeof file, "%s/#%s", root, user); + if(debug) + printf("debug=%d, file=%s\n", debug, file); + if(delete){ + fd = creat(file, 0600); + if(fd < 0){ + perror(file); + exit(1); + } + exit(0); + } + fd = open(file, 2); + if(fd < 0){ + perror(file); + exit(1); + } + n = read(fd, challenge, NETCHLEN); + if(debug) + printf("read %d\n", n); + if(n <= 0){ + printf("read %d: ", n); + perror(""); + exit(1); + } + printf("challenge: %s\n", challenge); + write(1, "response: ", 10); + read(0, response, NETCHLEN-1); + lseek(fd, 0, 0); + n = write(fd, response, NETCHLEN); + if(debug) + printf("write %d\n", n); + if(n <= 0){ + printf("write %d: ", n); + perror(""); + exit(1); + } + exit(0); +} |