Commit Briefs

Thomas Adam

portable: add got_compat.h where necessary

Where new files have appeared, etc., in -portable, "got_compat.h" needs to be added.


Thomas Adam

portable: update imsg from OpenBSD libutil

Sync latest changes of imsg from OpenBSD, as some of its newer fd handling is required.



Thomas Adam

gotwebd: fix broken signal catching due to a pasto

While here, remove completely the libevent handling of SIGPIPE in favour of the already existing signal(3) call to ignore it; there's no point in logging a SIGPIPE.


Thomas Adam

fix memory leak on error in got_privsep_recv_painted_commits()

Diff from Kyle Ackerman, thank you! I've added a imsg_free() call before the break too.



Thomas Adam

gotwebd: inline and remove IMSG_SIZE_CHECK()

I always find confusing if IMSG_SIZE_CHECK() takes pointers or not, and we had at least a few instances of wrong usages, so inline (with exact size checks) and remove the macro. ok stsp@


Thomas Adam

remove the gotwebd repository cache

It only had 4 slots so was never quite useful, and sharing of sock->pack_fds across cached repositories seems problematic. with help from + ok op@


Thomas Adam

whitespace fix



Thomas Adam

gotwebd: send a UNIQUE temp fd

main_compose_sockets() has the 'feature' of implicitly dup(2)'ing the passed file descriptior. But it's not what we need for the temp fds, since those needs to be unique per-children. debugged with stsp@


Thomas Adam

gotwebd: don't chdir to / before spawning the child processes

allows to run gotwebd from the got checkout again.



Thomas Adam

gotwebd: define constant instead of using the magic number 3

suggested by stsp@


Thomas Adam

gotwebd: make main_compose_sockets() close the fd on error

concern raised by stsp@


Thomas Adam

gotwebd: get rid of proc.[ch]

proc.c really shines when there's a network of different types of processes, potentially with a various number of instances each, that needs to exchange messages. Gotwebd instead has a much simpler design, and using proc.c causes more overhead (/headaches) than it solves. So, this attempts to provide the same functionalities but with a much simpler implementation that fits gotwebd better. ok stsp@


Thomas Adam

gotwebd: improve gotwebd_assign_querystring()

This prevents the issues that we just hit with forgetting to remove PREVID: instead of relying on the enum value to yield the size of a table, use nitems(). Also, quit as soon as the matching key was found, no need to iterate further. ok stsp@


Thomas Adam

portable: add back drop_privs


Thomas Adam

allow gotd repo read/write processes to max out data-size resource limits

Proccessing large pack files can easily result in out-of-memory errors if the datasize limit is too conservative.


Thomas Adam

gotwebd: garbage-collect PREVID, removed long time ago

This leftover kept QSELEM__MAX bigger than the querystring_keys[] table and causes gotweb_assign_querystring to go out of bounds. Spotted on alpine (thanks to -portable.)


Thomas Adam

portable: remove sockaddr-linux code

Now that socket handling is being done in a portable way upstream, there's no need to carry -portable specific code.


Thomas Adam

gotwebd: move log_init() call a bit earlier

Otherwise the log_warnx() call in the -D case logs to syslog.


Thomas Adam

gotwebd: clean up sockets_create_socket a bit

Instead of hardcoding the flags, keep ai_{family,socktype,protocol} from the getaddrinfo() call and apply them here. ok stsp@


Thomas Adam

gotadmin: get rid of got_sockaddr.[ch] usage

It was added due to gotwebd weird structure sockaddr_storage handling. Instead, save the size reported by getaddrinfo() and not reach into the struct sockaddr_storage at all (except for extracting the port number for diagnostics purposes.) sockets_conf_new_socket_fcgi() gets an hardcoded ipproto to zero (which is the only value it can get in practice, and keeps for the moment the hardcoded SOCK_STREAM. It'll be cleaned in a follow-up. ok stsp@