shithub: riscv

Download patch

ref: 53fb93e64ae8e28cd2c666ff7f5125eb77f6b1dd
parent: af561602ea37d595b29ef7a2e5a2538148f66636
author: Tobias Heinicke <theinicke@bss-wf.de>
date: Tue Dec 14 14:39:59 EST 2021

delete import, oexportfs src

--- a/sys/src/cmd/exportfs/mkfile
+++ b/sys/src/cmd/exportfs/mkfile
@@ -1,6 +1,6 @@
 </$objtype/mkfile
 
-TARG=exportfs oexportfs
+TARG=exportfs
 OFILES=\
 	exportsrv.$O\
 	pattern.$O\
--- a/sys/src/cmd/exportfs/oexportfs.c
+++ /dev/null
@@ -1,432 +1,0 @@
-/*
- * oexportfs - legacy exportfs for cpu and import
- */
-#include <u.h>
-#include <libc.h>
-#include <auth.h>
-#include <fcall.h>
-#include <libsec.h>
-#define Extern
-#include "exportfs.h"
-
-enum {
-	Encnone,
-	Encssl,
-	Enctls,
-};
-
-int	srvfd = -1;
-int	nonone = 1;
-char	*filterp;
-char	*ealgs = "rc4_256 sha1";
-char	*aanfilter = "/bin/aan";
-int	encproto = Encnone;
-int	readonly;
-
-static char *anstring  = "tcp!*!0";
-
-static void
-filter(int fd, char *cmd, char *host)
-{
-	char addr[128], buf[256], *s, *file, *argv[16];
-	int lfd, p[2], len, argc;
-
-	if(host == nil){
-		/* Get a free port and post it to the client. */
-		if (announce(anstring, addr) < 0)
-			fatal("filter: Cannot announce %s: %r", anstring);
-
-		snprint(buf, sizeof(buf), "%s/local", addr);
-		if ((lfd = open(buf, OREAD)) < 0)
-			fatal("filter: Cannot open %s: %r", buf);
-		if ((len = read(lfd, buf, sizeof buf - 1)) < 0)
-			fatal("filter: Cannot read %s: %r", buf);
-		close(lfd);
-		buf[len] = '\0';
-		if ((s = strchr(buf, '\n')) != nil)
-			len = s - buf;
-		if (write(fd, buf, len) != len) 
-			fatal("filter: cannot write port; %r");
-	} else {
-		/* Read address string from connection */
-		if ((len = read(fd, buf, sizeof buf - 1)) < 0)
-			sysfatal("filter: cannot write port; %r");
-		buf[len] = '\0';
-
-		if ((s = strrchr(buf, '!')) == nil)
-			sysfatal("filter: illegally formatted port %s", buf);
-		strecpy(addr, addr+sizeof(addr), netmkaddr(host, "tcp", s+1));
-		strecpy(strrchr(addr, '!'), addr+sizeof(addr), s);
-	}
-
-	DEBUG(2, "filter: %s\n", addr);
-
-	snprint(buf, sizeof(buf), "%s", cmd);
-	argc = tokenize(buf, argv, nelem(argv)-3);
-	if (argc == 0)
-		sysfatal("filter: empty command");
-
-	if(host != nil)
-		argv[argc++] = "-c";
-	argv[argc++] = addr;
-	argv[argc] = nil;
-
-	file = argv[0];
-	if((s = strrchr(argv[0], '/')) != nil)
-		argv[0] = s+1;
-
-	if(pipe(p) < 0)
-		sysfatal("pipe: %r");
-
-	switch(rfork(RFNOWAIT|RFPROC|RFMEM|RFFDG|RFREND)) {
-	case -1:
-		fatal("filter: rfork; %r\n");
-	case 0:
-		close(fd);
-		if (dup(p[0], 1) < 0)
-			fatal("filter: Cannot dup to 1; %r");
-		if (dup(p[0], 0) < 0)
-			fatal("filter: Cannot dup to 0; %r");
-		close(p[0]);
-		close(p[1]);
-		exec(file, argv);
-		fatal("filter: exec; %r");
-	default:
-		dup(p[1], fd);
-		close(p[0]);
-		close(p[1]);
-	}
-}
-
-static void
-mksecret(char *t, uchar *f)
-{
-	sprint(t, "%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux",
-		f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9]);
-}
-
-void
-usage(void)
-{
-	fprint(2, "usage: %s [-adnsR] [-m msize] [-r root] "
-		"[-S srvfile] [-e 'crypt hash'] [-P exclusion-file] "
-		"[-A announce-string] [-B address]\n", argv0);
-	fatal("usage");
-}
-
-void
-main(int argc, char **argv)
-{
-	char buf[ERRMAX], ebuf[ERRMAX], initial[4], *ini, *srvfdfile;
-	char *srv, *na, *nsfile, *keyspec;
-	int doauth, n, fd;
-	AuthInfo *ai;
-	Fsrpc *r;
-
-	srv = nil;
-	srvfd = -1;
-	srvfdfile = nil;
-	na = nil;
-	nsfile = nil;
-	keyspec = "";
-	doauth = 0;
-
-	ai = nil;
-	ARGBEGIN{
-	case 'a':
-		doauth = 1;
-		break;
-
-	case 'd':
-		dbg++;
-		break;
-
-	case 'e':
-		ealgs = EARGF(usage());
-		if(*ealgs == 0 || strcmp(ealgs, "clear") == 0)
-			ealgs = nil;
-		break;
-
-	case 'k':
-		keyspec = EARGF(usage());
-		break;
-
-	case 'm':
-		messagesize = strtoul(EARGF(usage()), nil, 0);
-		break;
-
-	case 'n':
-		nonone = 0;
-		break;
-
-	case 'r':
-		srv = EARGF(usage());
-		break;
-
-	case 's':
-		srv = "/";
-		break;
-
-	case 'A':
-		anstring = EARGF(usage());
-		break;
-
-	case 'B':
-		na = EARGF(usage());
-		break;
-
-	case 'F':
-		/* accepted but ignored, for backwards compatibility */
-		break;
-
-	case 'N':
-		nsfile = EARGF(usage());
-		break;
-
-	case 'P':
-		patternfile = EARGF(usage());
-		break;
-
-	case 'R':
-		readonly = 1;
-		break;
-
-	case 'S':
-		if(srvfdfile != nil)
-			usage();
-		srvfdfile = EARGF(usage());
-		break;
-
-	default:
-		usage();
-	}ARGEND
-	USED(argc, argv);
-
-	if(na == nil && doauth){
-		/*
-		 * We use p9any so we don't have to visit this code again, with the
-		 * cost that this code is incompatible with the old world, which
-		 * requires p9sk2. (The two differ in who talks first, so compatibility
-		 * is awkward.)
-		 */
-		ai = auth_proxy(0, auth_getkey, "proto=p9any role=server %s", keyspec);
-		if(ai == nil)
-			fatal("auth_proxy: %r");
-		if(nonone && strcmp(ai->cuid, "none") == 0)
-			fatal("exportfs by none disallowed");
-		if(auth_chuid(ai, nsfile) < 0)
-			fatal("auth_chuid: %r");
-		else {	/* chown network connection */
-			Dir nd;
-			nulldir(&nd);
-			nd.mode = 0660;
-			nd.uid = ai->cuid;
-			dirfwstat(0, &nd);
-		}
-		putenv("service", "exportfs");
-	}
-
-	if(srvfdfile != nil){
-		if((srvfd = open(srvfdfile, ORDWR)) < 0)
-			fatal("open %s: %r", srvfdfile);
-	}
-
-	if(na != nil){
-		if(srv == nil)
-			fatal("-B requires -s");
-
-		if((fd = dial(netmkaddr(na, 0, "importfs"), 0, 0, 0)) < 0)
-			fatal("can't dial %s: %r", na);
-	
-		ai = auth_proxy(fd, auth_getkey, "proto=p9any role=client %s", keyspec);
-		if(ai == nil)
-			fatal("%r: %s", na);
-
-		dup(fd, 0);
-		dup(fd, 1);
-		close(fd);
-	}
-
-	exclusions();
-
-	if(srvfd >= 0 && srv != nil){
-		fprint(2, "%s: -S cannot be used with -r or -s\n", argv0);
-		usage();
-	}
-
-	DEBUG(2, "%s: started\n", argv0);
-
-	rfork(RFNOTEG|RFREND);
-
-	if(messagesize == 0){
-		messagesize = iounit(0);
-		if(messagesize == 0)
-			messagesize = 8192+IOHDRSZ;
-	}
-	fhash = emallocz(sizeof(Fid*)*FHASHSIZE);
-
-	fmtinstall('F', fcallfmt);
-
-	/*
-	 * Get tree to serve from network connection,
-	 * check we can get there and ack the connection
- 	 */
-	if(srvfd != -1) {
-		/* do nothing */
-	}
-	else if(srv != nil) {
-		if(chdir(srv) < 0) {
-			ebuf[0] = '\0';
-			errstr(ebuf, sizeof ebuf);
-			DEBUG(2, "chdir(\"%s\"): %s\n", srv, ebuf);
-			mounterror(ebuf);
-		}
-		DEBUG(2, "invoked as server for %s", srv);
-		strncpy(buf, srv, sizeof buf);
-	}
-	else {
-		buf[0] = 0;
-		n = read(0, buf, sizeof(buf)-1);
-		if(n < 0) {
-			errstr(buf, sizeof buf);
-			fprint(0, "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(2, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
-			exits(ebuf);
-		}
-	}
-
-	DEBUG(2, "\niniting root\n");
-	initroot();
-
-	DEBUG(2, "%s: %s\n", argv0, buf);
-
-	if(srv == nil && srvfd == -1 && write(0, "OK", 2) != 2)
-		fatal("open ack write");
-
-	ini = initial;
-	n = readn(0, initial, sizeof(initial));
-	if(n == 0)
-		fatal(nil);	/* port scan or spurious open/close on exported /srv file (unmount) */
-	if(n < sizeof(initial))
-		fatal("can't read initial string: %r");
-
-	if(memcmp(ini, "impo", 4) == 0) {
-		char buf[128], *p, *args[3];
-
-		ini = nil;
-		p = buf;
-		for(;;){
-			if((n = read(0, p, 1)) < 0)
-				fatal("can't read impo arguments: %r");
-			if(n == 0)
-				fatal("connection closed while reading arguments");
-			if(*p == '\n') 
-				*p = '\0';
-			if(*p++ == '\0')
-				break;
-			if(p >= buf + sizeof(buf))
-				fatal("import parameters too long");
-		}
-		
-		if(tokenize(buf, args, nelem(args)) != 2)
-			fatal("impo arguments invalid: impo%s...", buf);
-
-		if(strcmp(args[0], "aan") == 0)
-			filterp = aanfilter;
-		else if(strcmp(args[0], "nofilter") != 0)
-			fatal("import filter argument unsupported: %s", args[0]);
-
-		if(strcmp(args[1], "ssl") == 0)
-			encproto = Encssl;
-		else if(strcmp(args[1], "tls") == 0)
-			encproto = Enctls;
-		else if(strcmp(args[1], "clear") != 0)
-			fatal("import encryption proto unsupported: %s", args[1]);
-
-		if(encproto == Enctls)
-			fatal("%s: tls has not yet been implemented", argv[0]);
-	}
-
-	if(encproto != Encnone && ealgs != nil && ai != nil) {
-		uchar key[16], digest[SHA1dlen];
-		char fromclientsecret[21];
-		char fromserversecret[21];
-		int i;
-
-		if(ai->nsecret < 8)
-			fatal("secret too small for ssl");
-		memmove(key+4, ai->secret, 8);
-
-		/* exchange random numbers */
-		srand(truerand());
-		for(i = 0; i < 4; i++)
-			key[i+12] = rand();
-
-		if(ini != nil) 
-			fatal("Protocol botch: old import");
-		if(readn(0, key, 4) != 4)
-			fatal("can't read key part; %r");
-
-		if(write(0, key+12, 4) != 4)
-			fatal("can't write key part; %r");
-
-		/* scramble into two secrets */
-		sha1(key, sizeof(key), digest, nil);
-		mksecret(fromclientsecret, digest);
-		mksecret(fromserversecret, digest+10);
-
-		if(filterp != nil)
-			filter(0, filterp, na);
-
-		switch(encproto) {
-		case Encssl:
-			fd = pushssl(0, ealgs, fromserversecret, fromclientsecret, nil);
-			if(fd < 0)
-				fatal("can't establish ssl connection: %r");
-			if(fd != 0){
-				dup(fd, 0);
-				close(fd);
-			}
-			break;
-		case Enctls:
-		default:
-			fatal("Unsupported encryption protocol");
-		}
-	}
-	else if(filterp != nil) {
-		if(ini != nil)
-			fatal("Protocol botch: don't know how to deal with this");
-		filter(0, filterp, na);
-	}
-	dup(0, 1);
-
-	if(ai != nil)
-		auth_freeAI(ai);
-
-	if(ini != nil){
-		extern void (*fcalls[])(Fsrpc*);
-
-		r = getsbuf();
-		memmove(r->buf, ini, BIT32SZ);
-		n = GBIT32(r->buf);
-		if(n <= BIT32SZ || n > messagesize)
-			fatal("bad length in 9P2000 message header");
-		n -= BIT32SZ;
-		if(readn(0, r->buf+BIT32SZ, n) != n)
-			fatal(nil);
-		n += BIT32SZ;
-
-		if(convM2S(r->buf, n, &r->work) != n)
-			fatal("convM2S format error");
-		DEBUG(2, "%F\n", &r->work);
-		(fcalls[r->work.type])(r);
-	}
-	io();
-}
--- a/sys/src/cmd/import.c
+++ /dev/null
@@ -1,381 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <auth.h>
-#include <libsec.h>
-
-enum {
-	Encnone,
-	Encssl,
-	Enctls,
-};
-
-static char *encprotos[] = {
-	[Encnone] =	"clear",
-	[Encssl] =	"ssl",
-	[Enctls] = 	"tls",
-			nil,
-};
-
-char		*keyspec = "";
-char		*filterp;
-char		*ealgs = "rc4_256 sha1";
-int		encproto = Encnone;
-char		*aan = "/bin/aan";
-char		*anstring  = "tcp!*!0";
-AuthInfo 	*ai;
-int		debug;
-int		doauth = 1;
-int		timedout;
-int		skiptree;
-
-int	connect(char*, char*);
-int	passive(void);
-void	catcher(void*, char*);
-void	sysfatal(char*, ...);
-void	usage(void);
-int	filter(int, char *, char *);
-
-static void	mksecret(char *, uchar *);
-
-void
-post(char *name, char *envname, int srvfd)
-{
-	int fd;
-	char buf[32];
-
-	fd = create(name, OWRITE, 0600);
-	if(fd < 0)
-		return;
-	snprint(buf, sizeof(buf), "%d", srvfd);
-	if(write(fd, buf, strlen(buf)) != strlen(buf))
-		sysfatal("srv write: %r");
-	close(fd);
-	putenv(envname, name);
-}
-
-static int
-lookup(char *s, char *l[])
-{
-	int i;
-
-	for (i = 0; l[i] != 0; i++)
-		if (strcmp(l[i], s) == 0)
-			return i;
-	return -1;
-}
-
-void
-main(int argc, char **argv)
-{
-	char *mntpt, *srvpost, srvfile[64];
-	int backwards = 0, fd, mntflags;
-
-	quotefmtinstall();
-	srvpost = nil;
-	mntflags = MREPL;
-	ARGBEGIN{
-	case 'A':
-		doauth = 0;
-		break;
-	case 'a':
-		mntflags = MAFTER;
-		break;
-	case 'b':
-		mntflags = MBEFORE;
-		break;
-	case 'c':
-		mntflags |= MCREATE;
-		break;
-	case 'C':
-		mntflags |= MCACHE;
-		break;
-	case 'd':
-		debug++;
-		break;
-	case 'f':
-		/* ignored but allowed for compatibility */
-		break;
-	case 'E':
-		if ((encproto = lookup(EARGF(usage()), encprotos)) < 0)
-			usage();
-		break;
-	case 'e':
-		ealgs = EARGF(usage());
-		if(*ealgs == 0 || strcmp(ealgs, "clear") == 0)
-			ealgs = nil;
-		break;
-	case 'k':
-		keyspec = EARGF(usage());
-		break;
-	case 'p':
-		filterp = aan;
-		break;
-	case 'n':
-		anstring = EARGF(usage());
-		break;
-	case 's':
-		srvpost = EARGF(usage());
-		break;
-	case 'B':
-		backwards = 1;
-		break;
-	case 'z':
-		skiptree = 1;
-		break;
-	default:
-		usage();
-	}ARGEND;
-
-	mntpt = 0;		/* to shut up compiler */
-	if(backwards){
-		switch(argc) {
-		default:
-			mntpt = argv[0];
-			break;
-		case 0:
-			usage();
-		}
-	} else {
-		switch(argc) {
-		case 2:
-			mntpt = argv[1];
-			break;
-		case 3:
-			mntpt = argv[2];
-			break;
-		default:
-			usage();
-		}
-	}
-
-	if (encproto == Enctls)
-		sysfatal("%s: tls has not yet been implemented", argv[0]);
-
-	notify(catcher);
-	alarm(60*1000);
-
-	if (backwards)
-		fd = passive();
-	else
-		fd = connect(argv[0], argv[1]);
-
-	fprint(fd, "impo %s %s\n", filterp? "aan": "nofilter", encprotos[encproto]);
-
-	if (encproto != Encnone && ealgs && ai) {
-		uchar key[16], digest[SHA1dlen];
-		char fromclientsecret[21];
-		char fromserversecret[21];
-		int i;
-
-		if(ai->nsecret < 8)
-			sysfatal("secret too small to ssl");
-		memmove(key+4, ai->secret, 8);
-
-		/* exchange random numbers */
-		srand(truerand());
-		for(i = 0; i < 4; i++)
-			key[i] = rand();
-		if(write(fd, key, 4) != 4)
-			sysfatal("can't write key part: %r");
-		if(readn(fd, key+12, 4) != 4)
-			sysfatal("can't read key part: %r");
-
-		/* scramble into two secrets */
-		sha1(key, sizeof(key), digest, nil);
-		mksecret(fromclientsecret, digest);
-		mksecret(fromserversecret, digest+10);
-
-		if (filterp)
-			fd = filter(fd, filterp, backwards ? nil : argv[0]);
-
-		/* set up encryption */
-		procsetname("pushssl");
-		fd = pushssl(fd, ealgs, fromclientsecret, fromserversecret, nil);
-		if(fd < 0)
-			sysfatal("can't establish ssl connection: %r");
-	}
-	else if (filterp)
-		fd = filter(fd, filterp, backwards ? nil : argv[0]);
-
-	if(ai)
-		auth_freeAI(ai);
-
-	if(srvpost){
-		snprint(srvfile, sizeof(srvfile), "/srv/%s", srvpost);
-		remove(srvfile);
-		post(srvfile, srvpost, fd);
-	}
-	procsetname("mount on %s", mntpt);
-	if(mount(fd, -1, mntpt, mntflags, "") == -1)
-		sysfatal("can't mount %s: %r", argv[1]);
-	alarm(0);
-
-	if(backwards && argc > 1){
-		exec(argv[1], &argv[1]);
-		sysfatal("exec: %r");
-	}
-	exits(0);
-}
-
-void
-catcher(void*, char *msg)
-{
-	timedout = 1;
-	if(strcmp(msg, "alarm") == 0)
-		noted(NCONT);
-	noted(NDFLT);
-}
-
-int
-connect(char *system, char *tree)
-{
-	char buf[ERRMAX], dir[128], *na;
-	int fd, n;
-
-	na = netmkaddr(system, 0, "exportfs");
-	procsetname("dial %s", na);
-	if((fd = dial(na, 0, dir, 0)) < 0)
-		sysfatal("can't dial %s: %r", system);
-
-	if(doauth){
-		procsetname("auth_proxy auth_getkey proto=p9any role=client %s", keyspec);
-		ai = auth_proxy(fd, auth_getkey, "proto=p9any role=client %s", keyspec);
-		if(ai == nil)
-			sysfatal("%r: %s", system);
-	}
-
-	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);
-		}
-	}
-	return fd;
-}
-
-int
-passive(void)
-{
-	int fd;
-
-	/*
-	 * Ignore doauth==0 on purpose.  Is it useful here?
-	 */
-
-	procsetname("auth_proxy auth_getkey proto=p9any role=server");
-	ai = auth_proxy(0, auth_getkey, "proto=p9any role=server");
-	if(ai == nil)
-		sysfatal("auth_proxy: %r");
-	if(auth_chuid(ai, nil) < 0)
-		sysfatal("auth_chuid: %r");
-	putenv("service", "import");
-
-	fd = dup(0, -1);
-	close(0);
-	open("/dev/null", ORDWR);
-	close(1);
-	open("/dev/null", ORDWR);
-
-	return fd;
-}
-
-void
-usage(void)
-{
-	fprint(2, "usage: import [-abcC] [-A] [-E clear|ssl|tls] "
-"[-e 'crypt auth'|clear] [-k keypattern] [-p] [-n address ] [-z] host remotefs [mountpoint]\n");
-	exits("usage");
-}
-
-int
-filter(int fd, char *cmd, char *host)
-{
-	char addr[128], buf[256], *s, *file, *argv[16];
-	int lfd, p[2], len, argc;
-
-	if(host == nil){
-		/* Get a free port and post it to the client. */
-		if (announce(anstring, addr) < 0)
-			sysfatal("filter: Cannot announce %s: %r", anstring);
-
-		snprint(buf, sizeof(buf), "%s/local", addr);
-		if ((lfd = open(buf, OREAD)) < 0)
-			sysfatal("filter: Cannot open %s: %r", buf);
-		if ((len = read(lfd, buf, sizeof buf - 1)) < 0)
-			sysfatal("filter: Cannot read %s: %r", buf);
-		close(lfd);
-		buf[len] = '\0';
-		if ((s = strchr(buf, '\n')) != nil)
-			len = s - buf;
-		if (write(fd, buf, len) != len) 
-			sysfatal("filter: cannot write port; %r");
-	} else {
-		/* Read address string from connection */
-		if ((len = read(fd, buf, sizeof buf - 1)) < 0)
-			sysfatal("filter: cannot write port; %r");
-		buf[len] = '\0';
-
-		if ((s = strrchr(buf, '!')) == nil)
-			sysfatal("filter: illegally formatted port %s", buf);
-		strecpy(addr, addr+sizeof(addr), netmkaddr(host, "tcp", s+1));
-		strecpy(strrchr(addr, '!'), addr+sizeof(addr), s);
-	}
-
-	if(debug)
-		fprint(2, "filter: %s\n", addr);
-
-	snprint(buf, sizeof(buf), "%s", cmd);
-	argc = tokenize(buf, argv, nelem(argv)-3);
-	if (argc == 0)
-		sysfatal("filter: empty command");
-
-	if(host != nil)
-		argv[argc++] = "-c";
-	argv[argc++] = addr;
-	argv[argc] = nil;
-
-	file = argv[0];
-	if((s = strrchr(argv[0], '/')) != nil)
-		argv[0] = s+1;
-
-	if(pipe(p) < 0)
-		sysfatal("pipe: %r");
-
-	switch(rfork(RFNOWAIT|RFPROC|RFMEM|RFFDG|RFREND)) {
-	case -1:
-		sysfatal("filter: rfork; %r\n");
-	case 0:
-		close(fd);
-		if (dup(p[0], 1) < 0)
-			sysfatal("filter: Cannot dup to 1; %r");
-		if (dup(p[0], 0) < 0)
-			sysfatal("filter: Cannot dup to 0; %r");
-		close(p[0]);
-		close(p[1]);
-		exec(file, argv);
-		sysfatal("filter: exec; %r");
-	default:
-		dup(p[1], fd);
-		close(p[0]);
-		close(p[1]);
-	}
-	return fd;
-}
-
-static void
-mksecret(char *t, uchar *f)
-{
-	sprint(t, "%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux",
-		f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9]);
-}