summaryrefslogtreecommitdiff
path: root/sys/src/cmd/srvfs.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-13 20:09:03 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-13 20:09:03 +0100
commit27a83106f4b5b68d77afa8f800d92398163a7043 (patch)
tree885db879a8f73d6436cdc3510d5eae430cb4df28 /sys/src/cmd/srvfs.c
parent0b33b3b8adf95bcf6cf0764fe425169ee0b8be0e (diff)
oexportfs: move legacy code for cpu and import to separate program
The initial protocol handling in exportfs for cpu and import services is a huge mess. Saparate the code out into its own program with its own oexportfs(4) manpage.
Diffstat (limited to 'sys/src/cmd/srvfs.c')
-rw-r--r--sys/src/cmd/srvfs.c45
1 files changed, 15 insertions, 30 deletions
diff --git a/sys/src/cmd/srvfs.c b/sys/src/cmd/srvfs.c
index d5c028150..a500c8ed2 100644
--- a/sys/src/cmd/srvfs.c
+++ b/sys/src/cmd/srvfs.c
@@ -12,7 +12,7 @@ void
main(int argc, char **argv)
{
char *ename, *arglist[16], **argp;
- int n, fd, pipefd[2];
+ int fd, pipefd[2];
char buf[64];
int perm = 0600;
@@ -39,14 +39,27 @@ main(int argc, char **argv)
*argp++ = "-R";
break;
}ARGEND
- *argp = 0;
if(argc != 2)
usage();
+ *argp++ = "-r";
+ *argp++ = argv[1];
+ *argp = 0;
if(pipe(pipefd) < 0){
fprint(2, "can't pipe: %r\n");
exits("pipe");
}
+ if(argv[0][0] == '/')
+ strecpy(buf, buf+sizeof buf, argv[0]);
+ else
+ snprint(buf, sizeof buf, "/srv/%s", argv[0]);
+ fd = create(buf, OWRITE|ORCLOSE, perm);
+ if(fd < 0){
+ fprint(2, "can't create %s: %r\n", buf);
+ exits("create");
+ }
+ fprint(fd, "%d", pipefd[1]);
+ close(pipefd[1]);
switch(rfork(RFPROC|RFNOWAIT|RFNOTEG|RFFDG)){
case -1:
@@ -56,39 +69,11 @@ main(int argc, char **argv)
dup(pipefd[0], 0);
dup(pipefd[0], 1);
close(pipefd[0]);
- close(pipefd[1]);
exec(ename, arglist);
fprint(2, "can't exec exportfs: %r\n");
exits("exec");
default:
break;
}
- close(pipefd[0]);
- if(fprint(pipefd[1], "%s", argv[1]) < 0){
- fprint(2, "can't write pipe: %r\n");
- exits("write");
- }
- n = read(pipefd[1], buf, sizeof buf-1);
- if(n < 0){
- fprint(2, "can't read pipe: %r\n");
- exits("read");
- }
- buf[n] = 0;
- if(n != 2 || strcmp(buf, "OK") != 0){
- fprint(2, "not OK (%d): %s\n", n, buf);
- exits("OK");
- }
- if(argv[0][0] == '/')
- strecpy(buf, buf+sizeof buf, argv[0]);
- else
- snprint(buf, sizeof buf, "/srv/%s", argv[0]);
- fd = create(buf, OWRITE, perm);
- if(fd < 0){
- fprint(2, "can't create %s: %r\n", buf);
- exits("create");
- }
- fprint(fd, "%d", pipefd[1]);
- close(fd);
- close(pipefd[1]);
exits(0);
}