Commits


revoke filesystem access in gotd listen process via unveil(2) This should avoid involuntary use of bind(2) with arbitrary socket paths. ok op@


expose 'gotctl info' output only to the root user Now that anyone can connect to the socket, it is probably safer to expose information about currently connected clients only to root.


remove the gotsh group requirement from gotd; any user can now connect Repository access is now controlled by access rules in gotd.conf, and concurrent connections to the gotd socket by local users are limited by the listen process. We should keep refining our anti-DoS measures in the future, but at least we have something in place now. ok jamsek, op


introduce connection options to gotd.conf Allow administrators to tweak the default authentication and request timeouts if needed, and to tweak the limit of concurrent connections for specific user accounts. with several tweaks from and ok op@


fmt


gotd: nix trailing whitespace and indentation fix ok op@, stsp@


remove filesystem access via bind(2) from gotd auth process op@ pointed out a problem in my initial patch where I forgot to call unveil(2) with a path before unveil(NULL, NULL). ok op, jamsek


move "unix" pledge promise from gotd parent to auth process The listen process now communicates the client UID/GID to the parent, and the auth process verifies this on behalf of the parent. This allows us to remove the "unix" pledge promise from the parent, removing parent access to syscalls such as listen() and accept() in the AF_UNIX domain. ok tracey@ op@


fix gotd authentication timeout The authentication timeout was accidentally overriden by the request timeout. Fix this and set both timeouts in the same place for clarity. ok op@


run gotd authentication in a separate child process ok op@


fork gotd repo_read/repo_write children on demand ok op, jamsek


gotd: tweak error message if getpwnam fails errno may not be set to something interesting so switch to fatalx, and simplify the error message (knowing the failed function, which is also wrong, doesn't buy much here.) ok jamsek


switch gotd from chroot(2) to unveil(2) In the future, gotd will fork+exec new processes for each client connection. Using unveil instead of chroot avoids having to start such processes as root. The -portable version could use chroot(2) where no equivalent to unveil(2) exists. A future component which starts new processes will be isolated as a separate process, which could run as root in the -portable version. ok op@


add a gotd "listen" process which watches the unix socket ok op@


fix gotd startup without any -v options


rename GOTD_SOCK_FILENO to GOTD_FILENO_MSG_PIPE for clarity (it's not a socket)


tedu Ted's copyright added to gotd.c by accident; doas-derived code is in auth.c


fix group membership check in gotd auth ok op@


implement per-repository read/write authorization rules in gotd ok op@


gotd: Don't include stdlib.h twice


fix crash in gotd if client gets disconnected on error; reported by Mikhail


use mkstemps(3) instead of mkstemp(3) for opening named temporary files Allows 'got commit' to use a ".diff" suffix for temporary diff files. ok op@


gotd: propagate confpath to children as well otherwise they end up running with default config which isn't ideal. ok stsp@


add gotctl(8); initially supported commands are 'info' and 'stop' This will be used by an upcoming regress test suite for gotd(8). ok tracey


remove sendfd pledge promise from gotd repo_read process Have the parent process send one end of the pipe directly to gotsh(1), such that repo_write can run without "sendfd". Combining "sendfd" and "recvfd" in the same process is frowned upon. ok tracey