From 182ed8a2b5acf59cbf6f0e3812b8416c03c823e8 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 2 Apr 2013 04:23:26 +0200 Subject: [PATCH] add import -z option to skip initial tree negotiation (from mycroftiv) --- sys/man/4/import | 13 +++++++++++++ sys/src/cmd/import.c | 32 +++++++++++++++++++------------- 2 files changed, 32 insertions(+), 13 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"); + 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"); + 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); + 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"); }