diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-04-02 04:23:26 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-04-02 04:23:26 +0200 |
commit | 182ed8a2b5acf59cbf6f0e3812b8416c03c823e8 (patch) | |
tree | 13ed8ab04eafa52c1888561eaff79fb293935500 | |
parent | d645d4d81bed04bba1530d1dabb921279e3c4c34 (diff) |
add import -z option to skip initial tree negotiation (from mycroftiv)
-rw-r--r-- | sys/man/4/import | 13 | ||||
-rw-r--r-- | sys/src/cmd/import.c | 36 |
2 files changed, 34 insertions, 15 deletions
diff --git a/sys/man/4/import b/sys/man/4/import index d8026c7af..17ebe95fb 100644 --- a/sys/man/4/import +++ b/sys/man/4/import @@ -68,6 +68,19 @@ is a directory. Skip the authentication protocol. This is useful for connecting to foreign systems like Inferno. .TP +.B -z +Bypass the initial protocol request for which remote tree to serve. +This is necessary when the remote +.IR exportfs (4) +is running with the +.B -r +or +.B -S +options which pre-select a file tree to serve. The exception is if both sides are +operating in the +.B -B +backwards mode. +.TP .B -B Run in ``backwards'' mode, described below. .TP diff --git a/sys/src/cmd/import.c b/sys/src/cmd/import.c index f834db929..07ed96fe6 100644 --- a/sys/src/cmd/import.c +++ b/sys/src/cmd/import.c @@ -25,6 +25,7 @@ AuthInfo *ai; int debug; int doauth = 1; int timedout; +int skiptree; int connect(char*, char*, int); int passive(void); @@ -145,6 +146,9 @@ main(int argc, char **argv) case 'B': backwards = 1; break; + case 'z': + skiptree = 1; + break; default: usage(); }ARGEND; @@ -315,20 +319,22 @@ connect(char *system, char *tree, int oldserver) sysfatal("%r: %s", system); } - procsetname("writing tree name %s", tree); - n = write(fd, tree, strlen(tree)); - if(n < 0) - sysfatal("can't write tree: %r"); - - strcpy(buf, "can't read tree"); - - procsetname("awaiting OK for %s", tree); - n = read(fd, buf, sizeof buf - 1); - if(n!=2 || buf[0]!='O' || buf[1]!='K'){ - if (timedout) - sysfatal("timed out connecting to %s", na); - buf[sizeof buf - 1] = '\0'; - sysfatal("bad remote tree: %s", buf); + if(!skiptree){ + procsetname("writing tree name %s", tree); + n = write(fd, tree, strlen(tree)); + if(n < 0) + sysfatal("can't write tree: %r"); + + strcpy(buf, "can't read tree"); + + procsetname("awaiting OK for %s", tree); + n = read(fd, buf, sizeof buf - 1); + if(n!=2 || buf[0]!='O' || buf[1]!='K'){ + if (timedout) + sysfatal("timed out connecting to %s", na); + buf[sizeof buf - 1] = '\0'; + sysfatal("bad remote tree: %s", buf); + } } if(oldserver) @@ -366,7 +372,7 @@ void usage(void) { fprint(2, "usage: import [-abcC] [-A] [-E clear|ssl|tls] " -"[-e 'crypt auth'|clear] [-k keypattern] [-p] host remotefs [mountpoint]\n"); +"[-e 'crypt auth'|clear] [-k keypattern] [-p] [-z] host remotefs [mountpoint]\n"); exits("usage"); } |