Commit Briefs

2a83fef7ce Omar Polo

gotwebd: use less temp files

Instead of allocating a whole set of temp fd per `listen' directive, just use a global set per "sockets" process. This is fine since gotwebd doesn't keep multiple connections open at the same time, once it enters gotwebd_process_request() it won't exit until all the page has been processed. (this because we don't have async APIs for got operations.) ok stsp@


1220d7ea84 Omar Polo

got{,web}d: unify log.c

gotd and gotwebd are using almost the same log.c file, so unify. This only slightly changes gotwebd logs to include the process name, like gotd. ok stsp@


360794246d Omar Polo

gotwebd: simplify handling of unix sockets

- don't assume an implicit "listen on socket" when another listen was specified in a server block - allow servers to share the sockets they're listening on - fix unix_socket_name; now it's actually used - remove `listen on socket off' and `unix_socket off' options that are now no longer useful - unify the internal handling of the sockets, i.e. don't consider unix socket special. ok tracey@


736fac9082 Omar Polo

fix logging during gotwebd shutdown

During `rcctl stop gotwebd' the sockets process gets a SIGTERM and dies, and this makes the parent process assume it exited abnormally. Instead, catch SIGINT and SIGTERM and exit gracefully. Issue reported by xs on IRC. ok jamsek


56a9d3151c Omar Polo

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.


1632f50aca Stefan Sperling

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@


8def94257d Omar Polo

gotwebd: ignore SIGPIPE in the sockets processes too


26678adde2 Omar Polo

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@


0c64c2f803 Omar Polo

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@


cdfd248aa7 Omar Polo

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@



6fe3b58aaa Stefan Sperling

fix gotwebd unveil permissions

The main process doesn't need write access anywhere and /tmp is not needed. The sockets process didn't use unveil at all so far, but is happy with just "x" for libexec helpers and "r" for each server's repository path. Input from op@ Tested by myself and Kyle Ackerman who also reviewed the diffs. Prompted by questions from mlarkin@ ok mlarkin@, op@


62eab86e6a Omar Polo

gotwebd: move the buffering from the fastcgi layer to the template

Reduces the indirection in fcgi.c, starts to make the struct template opaque, simplifies the template usage. All with a net negative :-) reads fine to stsp@ (thanks!)


4448825ab5 Omar Polo

dropping unnecessary strlen()s

ok jamsek, stsp


1adf41e808 Omar Polo

gotwebd: drop unused `prefixlen' from struct address

ok stsp@


df2d3cd254 Omar Polo

gotwebd: provide gotweb_render_page() entrypoint for all pages

simplify gotweb_process_request more, handling all the pages inside the big switch. There's only one entrypoint for rendering the templates gotweb_render_page() that takes the page' content as argument. The only real difference is that gotweb_render_index() now skips directory entries which fails to handle. ok tracey@


5add7f42e1 Omar Polo

gotwebd: handle short reads and timeouts

If a short read happens, or if all the fastcgi record to read don't fit in the buffer, gotwebd fails to continue reading and hits the timeout. If this happens before gotweb_process_request is called, it will crash in gotweb_free_transport since c->t will be NULL. This register the event with EV_PERSIST so fcgi_request is called again when there's more to read and guards gotweb_free_transport. It also makes spaces for the records as soon as they're successfully parsed. With lots of help from stsp ok stsp@


ed619ca07e Omar Polo

gotwebd: start using the template system

ok tracey@


b5c757f5f8 Stefan Sperling

make gotwebd cache open repository handles in struct server

ok op@


67d8de2a7e Stefan Sperling

allow multiple "listen on" statements per server in gotwebd.conf

ok tracey


026ac2c462 Stefan Sperling

mark functions internally used by sockets.c as static

ok tracey


859aa9f483 Stefan Sperling

fix previous: store port number in host byte order, convert for struct sockaddr

With the previous patch the listen port was correct, but the debug log output was still displaying the swapped port number. Now both listen behaviour and debug log output agree.


610dd8c9f4 Stefan Sperling

gotwebd: struct socket_conf can only use a single address, so don't use a list

ok tracey


4fcc9f7404 Stefan Sperling

gotwebd: initialize IPv4 and IPv6 sockets in the same way

ok tracey


2ad48e9a6b Stefan Sperling

gotwebd: do not allocate server/socket list heads separately

ok millert@