From e524e8d65a7573c46d7beb49e77bfc2d55a5563d Mon Sep 17 00:00:00 2001 From: amavect Date: Sat, 14 Aug 2021 19:50:23 +0000 Subject: [PATCH] exportfs: make -d log to stderr exportfs -d logs 9p traffic to /tmp/exportdb. -f allows writing to a different file. exportfs silently continues if it doesn't have permissions to create or write to /tmp/exportdb. These are poor behaviors. A better default is to write to stderr, since it is 9P debug info that is better immediately printed, and not user info that is better handled by syslog(). As a result, -f is obsolete and thus removed. Redirect responsibility is now on rc. As a side effect, rc will fail if it doesn't have permissions to write. exportfs(4) is updated to reflect all changes and with a better Synopsis. --- sys/man/4/exportfs | 25 +++++++++++++++++++------ sys/src/cmd/exportfs/exportfs.c | 26 +++++++------------------- sys/src/cmd/exportfs/exportfs.h | 1 - sys/src/cmd/exportfs/exportsrv.c | 16 ++++++++-------- sys/src/cmd/exportfs/io.c | 16 ++++++++-------- sys/src/cmd/exportfs/oexportfs.c | 20 ++++++++++---------- sys/src/cmd/exportfs/pattern.c | 18 +++++++++--------- 7 files changed, 61 insertions(+), 61 deletions(-) diff --git a/sys/man/4/exportfs b/sys/man/4/exportfs index b6108c1ab..bf26b641b 100644 --- a/sys/man/4/exportfs +++ b/sys/man/4/exportfs @@ -4,7 +4,23 @@ exportfs, srvfs \- file server plumbing .SH SYNOPSIS .B exportfs [ -.I options +.B -dsR +] +[ +.B -m +.I msize +] +[ +.B -r +.I root +] +[ +.B -P +.I patternfile +] +[ +.B -S +.I srvfile ] .PP .B srvfs @@ -39,11 +55,8 @@ into a local file tree. .PP The options are: .TP -.B -d -f \fIdbgfile -Log all 9P traffic to -.I dbgfile -(default -.BR /tmp/exportdb ). +.B -d +Log all 9P traffic to stderr. .TP .B -P \fIpatternfile Restrict the set of exported files. diff --git a/sys/src/cmd/exportfs/exportfs.c b/sys/src/cmd/exportfs/exportfs.c index b17cec499..86680e1f6 100644 --- a/sys/src/cmd/exportfs/exportfs.c +++ b/sys/src/cmd/exportfs/exportfs.c @@ -10,18 +10,16 @@ int readonly; void usage(void) { - fprint(2, "usage: %s [-dsR] [-f dbgfile] [-m msize] [-r root] " - "[-S srvfile] [-P exclusion-file]\n", argv0); + fprint(2, "usage: %s [-dsR] [-m msize] [-r root] " + "[-P patternfile] [-S srvfile]\n", argv0); fatal("usage"); } void main(int argc, char **argv) { - char *dbfile, *srv, *srvfdfile; - int n; + char *srv, *srvfdfile; - dbfile = "/tmp/exportdb"; srv = nil; srvfd = -1; srvfdfile = nil; @@ -31,10 +29,6 @@ main(int argc, char **argv) dbg++; break; - case 'f': - dbfile = EARGF(usage()); - break; - case 'm': messagesize = strtoul(EARGF(usage()), nil, 0); break; @@ -82,13 +76,7 @@ main(int argc, char **argv) exclusions(); - if(dbg) { - n = create(dbfile, OWRITE|OTRUNC, 0666); - dup(n, DFD); - close(n); - } - - DEBUG(DFD, "exportfs: started\n"); + DEBUG(2, "exportfs: started\n"); rfork(RFNOTEG|RFREND); @@ -106,13 +94,13 @@ main(int argc, char **argv) char ebuf[ERRMAX]; ebuf[0] = '\0'; errstr(ebuf, sizeof ebuf); - DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf); + DEBUG(2, "chdir(\"%s\"): %s\n", srv, ebuf); mounterror(ebuf); } - DEBUG(DFD, "invoked as server for %s", srv); + DEBUG(2, "invoked as server for %s", srv); } - DEBUG(DFD, "\niniting root\n"); + DEBUG(2, "\niniting root\n"); initroot(); io(); } diff --git a/sys/src/cmd/exportfs/exportfs.h b/sys/src/cmd/exportfs/exportfs.h index 344304b7c..6723620cd 100644 --- a/sys/src/cmd/exportfs/exportfs.h +++ b/sys/src/cmd/exportfs/exportfs.h @@ -3,7 +3,6 @@ */ #define DEBUG if(!dbg){}else fprint -#define DFD 9 #define fidhash(s) fhash[s%FHASHSIZE] typedef struct Fsrpc Fsrpc; diff --git a/sys/src/cmd/exportfs/exportsrv.c b/sys/src/cmd/exportfs/exportsrv.c index b7ddd64b5..3bd9e3aeb 100644 --- a/sys/src/cmd/exportfs/exportsrv.c +++ b/sys/src/cmd/exportfs/exportsrv.c @@ -65,7 +65,7 @@ Xflush(Fsrpc *t) w = m->busy; if(w != nil && w->work.tag == t->work.oldtag) { w->flushtag = t->work.tag; - DEBUG(DFD, "\tset flushtag %d\n", t->work.tag); + DEBUG(2, "\tset flushtag %d\n", t->work.tag); postnote(PNPROC, m->pid, "flush"); unlock(m); putsbuf(t); @@ -75,7 +75,7 @@ Xflush(Fsrpc *t) } reply(&t->work, &rhdr, 0); - DEBUG(DFD, "\tflush reply\n"); + DEBUG(2, "\tflush reply\n"); putsbuf(t); } @@ -359,7 +359,7 @@ Xremove(Fsrpc *t) } path = makepath(f->f, ""); - DEBUG(DFD, "\tremove: %s\n", path); + DEBUG(2, "\tremove: %s\n", path); if(remove(path) < 0) { free(path); errstr(err, sizeof err); @@ -518,7 +518,7 @@ blockingslave(Proc *m) if(p == nil) /* Swept */ break; - DEBUG(DFD, "\tslave: %d %F\n", m->pid, &p->work); + DEBUG(2, "\tslave: %d %F\n", m->pid, &p->work); if(p->flushtag != NOTAG) goto flushme; @@ -629,7 +629,7 @@ slaveopen(Fsrpc *p) } path = makepath(f->f, ""); - DEBUG(DFD, "\topen: %s %d\n", path, work->mode); + DEBUG(2, "\topen: %s %d\n", path, work->mode); f->fid = open(path, work->mode); free(path); if(f->fid < 0 || (d = dirfstat(f->fid)) == nil) { @@ -646,7 +646,7 @@ slaveopen(Fsrpc *p) goto Error; } - DEBUG(DFD, "\topen: fd %d\n", f->fid); + DEBUG(2, "\topen: fd %d\n", f->fid); f->mode = work->mode; f->offset = 0; rhdr.iounit = getiounit(f->fid); @@ -688,7 +688,7 @@ slaveread(Fsrpc *p) reply(work, &rhdr, err); return; } - DEBUG(DFD, "\tread: fd=%d %d bytes\n", f->fid, r); + DEBUG(2, "\tread: fd=%d %d bytes\n", f->fid, r); rhdr.data = data; rhdr.count = r; @@ -720,7 +720,7 @@ slavewrite(Fsrpc *p) return; } - DEBUG(DFD, "\twrite: %d bytes fd=%d\n", n, f->fid); + DEBUG(2, "\twrite: %d bytes fd=%d\n", n, f->fid); rhdr.count = n; reply(work, &rhdr, 0); diff --git a/sys/src/cmd/exportfs/io.c b/sys/src/cmd/exportfs/io.c index ad1d7154b..2309168a8 100644 --- a/sys/src/cmd/exportfs/io.c +++ b/sys/src/cmd/exportfs/io.c @@ -49,7 +49,7 @@ io(void) if(convM2S(r->buf, n, &r->work) != n) fatal("convM2S format error"); - DEBUG(DFD, "%F\n", &r->work); + DEBUG(2, "%F\n", &r->work); (fcalls[r->work.type])(r); } } @@ -69,7 +69,7 @@ reply(Fcall *r, Fcall *t, char *err) else t->type = r->type + 1; - DEBUG(DFD, "\t%F\n", t); + DEBUG(2, "\t%F\n", t); data = malloc(messagesize); /* not mallocz; no need to clear */ if(data == nil) @@ -224,7 +224,7 @@ freefile(File *f) while(--f->ref == 0){ freecnt++; - DEBUG(DFD, "free %s\n", f->name); + DEBUG(2, "free %s\n", f->name); /* delete from parent */ parent = f->parent; if(parent->child == f) @@ -250,7 +250,7 @@ file(File *parent, char *name) char *path; File *f; - DEBUG(DFD, "\tfile: 0x%p %s name %s\n", parent, parent->name, name); + DEBUG(2, "\tfile: 0x%p %s name %s\n", parent, parent->name, name); path = makepath(parent, name); if(patternfile != nil && excludefile(path)){ @@ -429,17 +429,17 @@ uniqueqid(Dir *d) } path = d->qid.path; while(qidexists(path)){ - DEBUG(DFD, "collision on %s\n", d->name); + DEBUG(2, "collision on %s\n", d->name); /* collision: find a new one */ ncollision++; path &= QIDPATH; ++newqid; if(newqid >= (1<<16)){ - DEBUG(DFD, "collision wraparound\n"); + DEBUG(2, "collision wraparound\n"); newqid = 1; } path |= newqid<<48; - DEBUG(DFD, "assign qid %.16llux\n", path); + DEBUG(2, "assign qid %.16llux\n", path); } qidcnt++; q = emallocz(sizeof(Qidtab)); @@ -472,7 +472,7 @@ fatal(char *s, ...) postnote(PNPROC, m->pid, "kill"); if(s != nil) { - DEBUG(DFD, "%s\n", buf); + DEBUG(2, "%s\n", buf); sysfatal("%s", buf); /* caution: buf could contain '%' */ } else exits(nil); diff --git a/sys/src/cmd/exportfs/oexportfs.c b/sys/src/cmd/exportfs/oexportfs.c index c6683a174..e9fa819c7 100644 --- a/sys/src/cmd/exportfs/oexportfs.c +++ b/sys/src/cmd/exportfs/oexportfs.c @@ -59,7 +59,7 @@ filter(int fd, char *cmd, char *host) strecpy(strrchr(addr, '!'), addr+sizeof(addr), s); } - DEBUG(DFD, "filter: %s\n", addr); + DEBUG(2, "filter: %s\n", addr); snprint(buf, sizeof(buf), "%s", cmd); argc = tokenize(buf, argv, nelem(argv)-3); @@ -256,7 +256,7 @@ main(int argc, char **argv) if(dbg) { n = create(dbfile, OWRITE|OTRUNC, 0666); - dup(n, DFD); + dup(n, 2); close(n); } @@ -265,7 +265,7 @@ main(int argc, char **argv) usage(); } - DEBUG(DFD, "%s: started\n", argv0); + DEBUG(2, "%s: started\n", argv0); rfork(RFNOTEG|RFREND); @@ -289,10 +289,10 @@ main(int argc, char **argv) if(chdir(srv) < 0) { ebuf[0] = '\0'; errstr(ebuf, sizeof ebuf); - DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf); + DEBUG(2, "chdir(\"%s\"): %s\n", srv, ebuf); mounterror(ebuf); } - DEBUG(DFD, "invoked as server for %s", srv); + DEBUG(2, "invoked as server for %s", srv); strncpy(buf, srv, sizeof buf); } else { @@ -301,22 +301,22 @@ main(int argc, char **argv) if(n < 0) { errstr(buf, sizeof buf); fprint(0, "read(0): %s\n", buf); - DEBUG(DFD, "read(0): %s\n", buf); + DEBUG(2, "read(0): %s\n", buf); exits(buf); } buf[n] = 0; if(chdir(buf) < 0) { errstr(ebuf, sizeof ebuf); fprint(0, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf); - DEBUG(DFD, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf); + DEBUG(2, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf); exits(ebuf); } } - DEBUG(DFD, "\niniting root\n"); + DEBUG(2, "\niniting root\n"); initroot(); - DEBUG(DFD, "%s: %s\n", argv0, buf); + DEBUG(2, "%s: %s\n", argv0, buf); if(srv == nil && srvfd == -1 && write(0, "OK", 2) != 2) fatal("open ack write"); @@ -436,7 +436,7 @@ main(int argc, char **argv) if(convM2S(r->buf, n, &r->work) != n) fatal("convM2S format error"); - DEBUG(DFD, "%F\n", &r->work); + DEBUG(2, "%F\n", &r->work); (fcalls[r->work.type])(r); } io(); diff --git a/sys/src/cmd/exportfs/pattern.c b/sys/src/cmd/exportfs/pattern.c index 4dfed5bca..f014a9812 100644 --- a/sys/src/cmd/exportfs/pattern.c +++ b/sys/src/cmd/exportfs/pattern.c @@ -42,7 +42,7 @@ exclusions(void) if(include == nil) fatal("out of memory"); } - DEBUG(DFD, "\tinclude %s\n", line+2); + DEBUG(2, "\tinclude %s\n", line+2); include[ni] = regcomp(line+2); include[++ni] = nil; break; @@ -53,12 +53,12 @@ exclusions(void) if(exclude == nil) fatal("out of memory"); } - DEBUG(DFD, "\texclude %s\n", line+2); + DEBUG(2, "\texclude %s\n", line+2); exclude[ne] = regcomp(line+2); exclude[++ne] = nil; break; default: - DEBUG(DFD, "ignoring pattern %s\n", line); + DEBUG(2, "ignoring pattern %s\n", line); break; } } @@ -76,16 +76,16 @@ excludefile(char *path) else p = path+1; - DEBUG(DFD, "checking %s\n", p); + DEBUG(2, "checking %s\n", p); for(re = include; *re != nil; re++){ if(regexec(*re, p, nil, 0) != 1){ - DEBUG(DFD, "excluded+ %s\n", p); + DEBUG(2, "excluded+ %s\n", p); return -1; } } for(re = exclude; *re != nil; re++){ if(regexec(*re, p, nil, 0) == 1){ - DEBUG(DFD, "excluded- %s\n", p); + DEBUG(2, "excluded- %s\n", p); return -1; } } @@ -98,7 +98,7 @@ preaddir(Fid *f, uchar *data, int n, vlong offset) int r = 0, m; Dir *d; - DEBUG(DFD, "\tpreaddir n=%d wo=%lld fo=%lld\n", n, offset, f->offset); + DEBUG(2, "\tpreaddir n=%d wo=%lld fo=%lld\n", n, offset, f->offset); if(offset == 0 && f->offset != 0){ if(seek(f->fid, 0, 0) != 0) return -1; @@ -128,9 +128,9 @@ preaddir(Fid *f, uchar *data, int n, vlong offset) free(p); } m = convD2M(d, data, n); - DEBUG(DFD, "\t\tconvD2M %d\n", m); + DEBUG(2, "\t\tconvD2M %d\n", m); if(m <= BIT16SZ){ - DEBUG(DFD, "\t\t\tneeded %d\n", GBIT16(data)); + DEBUG(2, "\t\t\tneeded %d\n", GBIT16(data)); /* not enough room for full entry; leave for next time */ f->cdir--; return r;