git: 9front

Download patch

ref: 54c77ef974cb075df205c5757aea81c2feb880cb
parent: 5fad2a71b32b4b5f89645fe901df83302c099e8a
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Feb 10 18:31:26 EST 2013

exportfs: applying exportfs-chdir patch (from sources)

Fix the behavior of exportfs -r.

Check the return of chdir(srv) to prevent exporting accidentally
the current working directory when the directory specified
with option -r doesn't exist.

Also fix at the same time the missing trailing \n in error
messages printed just before exits().

--- a/sys/src/cmd/exportfs/exportfs.c
+++ b/sys/src/cmd/exportfs/exportfs.c
@@ -251,7 +251,12 @@
 		/* do nothing */
 	}
 	else if(srv) {
-		chdir(srv);
+		if(chdir(srv) < 0) {
+			errstr(ebuf, sizeof ebuf);
+			fprint(0, "chdir(\"%s\"): %s\n", srv, ebuf);
+			DEBUG(DFD, "chdir(\"%s\"): %s\n", srv, ebuf);
+			exits(ebuf);
+		}
 		DEBUG(DFD, "invoked as server for %s", srv);
 		strncpy(buf, srv, sizeof buf);
 	}
@@ -261,15 +266,15 @@
 		n = read(0, buf, sizeof(buf)-1);
 		if(n < 0) {
 			errstr(buf, sizeof buf);
-			fprint(0, "read(0): %s", buf);
-			DEBUG(DFD, "read(0): %s", buf);
+			fprint(0, "read(0): %s\n", buf);
+			DEBUG(DFD, "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, buf, ebuf);
-			DEBUG(DFD, "chdir(%d:\"%s\"): %s", n, buf, ebuf);
+			fprint(0, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
+			DEBUG(DFD, "chdir(%d:\"%s\"): %s\n", n, buf, ebuf);
 			exits(ebuf);
 		}
 	}
--