iadd flag -c: chroot(2) support - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 3ed956cf71a15015b443dd7ab36299c242acd1af /scm/geomyidae/commit/3ed956cf71a15015b443dd7ab36299c242acd1af.gph bitreich.org 70 1parent 405a6206fe77dbdfd2be75960658fc383d7ad808 /scm/geomyidae/commit/405a6206fe77dbdfd2be75960658fc383d7ad808.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Fri, 30 Jun 2017 15:12:14 +0200 Err bitreich.org 70 i Err bitreich.org 70 iadd flag -c: chroot(2) support Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M geomyidae.8 | 8 ++++++++ Err bitreich.org 70 i M main.c | 17 ++++++++++++++++- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 24 insertions(+), 1 deletion(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/geomyidae.8 b/geomyidae.8 /scm/geomyidae/file/geomyidae.8.gph bitreich.org 70 i@@ -13,6 +13,7 @@ Err bitreich.org 70 i .Bk -words Err bitreich.org 70 i .Op Fl 4 Err bitreich.org 70 i .Op Fl 6 Err bitreich.org 70 i+.Op Fl c Err bitreich.org 70 i .Op Fl d Err bitreich.org 70 i .Op Fl l Ar logfile Err bitreich.org 70 i .Op Fl v Ar loglevel Err bitreich.org 70 i@@ -85,6 +86,13 @@ Only use IPv4. Err bitreich.org 70 i .It Fl 6 Err bitreich.org 70 i Only use IPv6. Err bitreich.org 70 i . Err bitreich.org 70 i+.It Fl c Err bitreich.org 70 i+Use Err bitreich.org 70 i+.Xr chroot 2 Err bitreich.org 70 i+for the Err bitreich.org 70 i+.Ar base Err bitreich.org 70 i+directory (by default off). Err bitreich.org 70 i+. Err bitreich.org 70 i .It Fl d Err bitreich.org 70 i Don't fork into background. If no log file is given, this implies logging to Err bitreich.org 70 i the standard output. Err bitreich.org 70 1diff --git a/main.c b/main.c /scm/geomyidae/file/main.c.gph bitreich.org 70 i@@ -328,7 +328,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct addrinfo hints; Err bitreich.org 70 i struct sockaddr_storage clt; Err bitreich.org 70 i socklen_t cltlen; Err bitreich.org 70 i- int sock, dofork, v4, v6; Err bitreich.org 70 i+ int sock, dofork, v4, v6, usechroot = 0; Err bitreich.org 70 i char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV]; Err bitreich.org 70 i char *user, *group, *bindip, *ohost, *sport; Err bitreich.org 70 i struct passwd *us; Err bitreich.org 70 i@@ -357,6 +357,9 @@ main(int argc, char *argv[]) Err bitreich.org 70 i case 'b': Err bitreich.org 70 i base = EARGF(usage()); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case 'c': Err bitreich.org 70 i+ usechroot = 1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'p': Err bitreich.org 70 i port = EARGF(usage()); Err bitreich.org 70 i break; Err bitreich.org 70 i@@ -460,6 +463,18 @@ main(int argc, char *argv[]) Err bitreich.org 70 i return 1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ if(usechroot) { Err bitreich.org 70 i+ if(chdir(base) < 0) { Err bitreich.org 70 i+ perror("chdir"); Err bitreich.org 70 i+ return 1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ base = ""; Err bitreich.org 70 i+ if(chroot(".") < 0) { Err bitreich.org 70 i+ perror("chroot"); Err bitreich.org 70 i+ return 1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i if(dropprivileges(gr, us) < 0) { Err bitreich.org 70 i perror("dropprivileges"); Err bitreich.org 70 i close(listfd); Err bitreich.org 70 .