smugfs(4): new program
This commit is contained in:
parent
3d36f44373
commit
18824b5868
17 changed files with 4299 additions and 0 deletions
108
src/cmd/smugfs/main.c
Normal file
108
src/cmd/smugfs/main.c
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
#include "a.h"
|
||||
|
||||
char *keypattern = "";
|
||||
char *sessid;
|
||||
Json *userinfo;
|
||||
int printerrors;
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: smugfs [-k keypattern] [-m mtpt] [-s srv]\n");
|
||||
threadexitsall("usage");
|
||||
}
|
||||
|
||||
void
|
||||
smuglogin(void)
|
||||
{
|
||||
Json *v;
|
||||
char *s;
|
||||
UserPasswd *up;
|
||||
|
||||
printerrors = 1;
|
||||
up = auth_getuserpasswd(auth_getkey,
|
||||
"proto=pass role=client server=smugmug.com "
|
||||
"user? !password? %s", keypattern);
|
||||
if(up == nil)
|
||||
sysfatal("cannot get username/password: %r");
|
||||
|
||||
v = ncsmug("smugmug.login.withPassword",
|
||||
"EmailAddress", up->user,
|
||||
"Password", up->passwd,
|
||||
nil);
|
||||
if(v == nil)
|
||||
sysfatal("login failed: %r");
|
||||
|
||||
memset(up->user, 'X', strlen(up->user));
|
||||
memset(up->passwd, 'X', strlen(up->passwd));
|
||||
free(up);
|
||||
|
||||
sessid = jstring(jwalk(v, "Login/Session/id"));
|
||||
if(sessid == nil)
|
||||
sysfatal("no session id");
|
||||
sessid = estrdup(sessid);
|
||||
s = jstring(jwalk(v, "Login/User/NickName"));
|
||||
if(s == nil)
|
||||
sysfatal("no nick name");
|
||||
if(nickindex(s) != 0)
|
||||
sysfatal("bad nick name");
|
||||
userinfo = jincref(jwalk(v, "Login"));
|
||||
jclose(v);
|
||||
printerrors = 0;
|
||||
}
|
||||
|
||||
void
|
||||
threadmain(int argc, char **argv)
|
||||
{
|
||||
char *mtpt, *name;
|
||||
|
||||
mtpt = nil;
|
||||
name = nil;
|
||||
ARGBEGIN{
|
||||
case 'D':
|
||||
chatty9p++;
|
||||
break;
|
||||
case 'F':
|
||||
chattyfuse++;
|
||||
break;
|
||||
case 'H':
|
||||
chattyhttp++;
|
||||
break;
|
||||
case 'm':
|
||||
mtpt = EARGF(usage());
|
||||
break;
|
||||
case 's':
|
||||
name = EARGF(usage());
|
||||
break;
|
||||
case 'k':
|
||||
keypattern = EARGF(usage());
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
if(argc != 0)
|
||||
usage();
|
||||
|
||||
if(name == nil && mtpt == nil)
|
||||
mtpt = "/n/smug";
|
||||
|
||||
/*
|
||||
* Check twice -- if there is an exited smugfs instance
|
||||
* mounted there, the first access will fail but unmount it.
|
||||
*/
|
||||
if(mtpt && access(mtpt, AEXIST) < 0 && access(mtpt, AEXIST) < 0)
|
||||
sysfatal("mountpoint %s does not exist", mtpt);
|
||||
|
||||
fmtinstall('H', encodefmt);
|
||||
fmtinstall('[', encodefmt); // base-64
|
||||
fmtinstall('J', jsonfmt);
|
||||
fmtinstall('M', dirmodefmt);
|
||||
fmtinstall('T', timefmt);
|
||||
fmtinstall('U', urlencodefmt);
|
||||
|
||||
xinit();
|
||||
smuglogin();
|
||||
threadpostmountsrv(&xsrv, name, mtpt, 0);
|
||||
threadexits(nil);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue