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