tmain.c - plan9port - [fork] Plan 9 from user space
HTML git clone git://src.adamsgaard.dk/plan9port
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tmain.c (2079B)
---
1 #include "a.h"
2
3 char *keypattern = "";
4 char *sessid;
5 Json *userinfo;
6 int printerrors;
7
8 void
9 usage(void)
10 {
11 fprint(2, "usage: smugfs [-k keypattern] [-m mtpt] [-s srv]\n");
12 threadexitsall("usage");
13 }
14
15 void
16 smuglogin(void)
17 {
18 Json *v;
19 char *s;
20 UserPasswd *up;
21
22 printerrors = 1;
23 up = auth_getuserpasswd(auth_getkey,
24 "proto=pass role=client server=smugmug.com "
25 "user? !password? %s", keypattern);
26 if(up == nil)
27 sysfatal("cannot get username/password: %r");
28
29 v = ncsmug("smugmug.login.withPassword",
30 "EmailAddress", up->user,
31 "Password", up->passwd,
32 nil);
33 if(v == nil)
34 sysfatal("login failed: %r");
35
36 memset(up->user, 'X', strlen(up->user));
37 memset(up->passwd, 'X', strlen(up->passwd));
38 free(up);
39
40 sessid = jstring(jwalk(v, "Login/Session/id"));
41 if(sessid == nil)
42 sysfatal("no session id");
43 sessid = estrdup(sessid);
44 s = jstring(jwalk(v, "Login/User/NickName"));
45 if(s == nil)
46 sysfatal("no nick name");
47 if(nickindex(s) != 0)
48 sysfatal("bad nick name");
49 userinfo = jincref(jwalk(v, "Login"));
50 jclose(v);
51 printerrors = 0;
52 }
53
54 int
55 threadmaybackground(void)
56 {
57 return 1;
58 }
59
60 void
61 threadmain(int argc, char **argv)
62 {
63 char *mtpt, *name;
64
65 mtpt = nil;
66 name = nil;
67 ARGBEGIN{
68 case 'D':
69 chatty9p++;
70 break;
71 case 'F':
72 chattyfuse++;
73 break;
74 case 'H':
75 chattyhttp++;
76 break;
77 case 'm':
78 mtpt = EARGF(usage());
79 break;
80 case 's':
81 name = EARGF(usage());
82 break;
83 case 'k':
84 keypattern = EARGF(usage());
85 break;
86 default:
87 usage();
88 }ARGEND
89
90 if(argc != 0)
91 usage();
92
93 if(name == nil && mtpt == nil)
94 mtpt = "/n/smug";
95
96 /*
97 * Check twice -- if there is an exited smugfs instance
98 * mounted there, the first access will fail but unmount it.
99 */
100 if(mtpt && access(mtpt, AEXIST) < 0 && access(mtpt, AEXIST) < 0)
101 sysfatal("mountpoint %s does not exist", mtpt);
102
103 fmtinstall('H', encodefmt);
104 fmtinstall('[', encodefmt); // base-64
105 fmtinstall('J', jsonfmt);
106 fmtinstall('M', dirmodefmt);
107 fmtinstall('T', timefmt);
108 fmtinstall('U', urlencodefmt);
109
110 xinit();
111 smuglogin();
112 threadpostmountsrv(&xsrv, name, mtpt, 0);
113 threadexits(nil);
114 }