URI:
       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 }