Commits


initial gotd-secrets.conf implementation This moves the handling of the secrets outside gotd.conf. There will be a few changes to this, committing it as-is to continue hacking in tree. ok stsp@


trailing whitespaces


add support for HMAC digests to gotd HTTP notifications Works similar to how several Git forges authenticate their webhooks. Feature requested by dch@freebsd. Help from tb@ regarding which libcrypto calls to use, thanks! ok op@ (with some follow-up tweaks suggested)


only warn about missing repositories in gotd startup as was intended This was broken in commit 4b3827cd43394b89d2af822dcd1d9a9179c1ee10 "make gitwrapper ignore 'permission denied' for repository paths"


gotd: support UIDs in the user directive Requested by PyR3X on IRC. ok/improvements stsp@


gotd: allow (as documented) numeric IDs in permit/deny Noticed and diff tested by PyR3X on IRC, thanks! ok stsp@


gotd: use a struct got_object_id instead of an hash buffer ok stsp@


set a default port for http notifications if not specified in gotd.conf ok op@


make it harder to leak notification credentials over plaintext HTTP ok op@


cast a time_t to long long for printf for portability


add got-notify-http ok stsp@


fix gotd_parse_url() A path of "/" is valid and trailing slashes must be preserved. ok stsp@


plug memleak in parsing the notify options The strings need to be released regardless of the process parsing the file.


add initial support for commit notifications to gotd(8) At present only email notifications are implemented. Code for HTTP notifications is not yet finished, hence HTTP-related documentation remains hidden for now. This adds a new 'notify' process which has an "exec" pledge. It runs helper programs which implement the notification transport layer, such as got-notify-email which speaks SMTP. This design avoids having to link all of gotd with network libraries and related crypto libraries. Notification content is generated by the 'repo_write' process. Commit log messages and diffstats are written to a file which the 'notify' process will pass on to its helpers on stdin. The default output looks similar to 'got log -d'. If too many new commits are present the output looks similar to 'got log -s' instead. Tags always look like 'got tag -l'. The session process coordinates generation of notifications. It maintains a notification queue which holds one notification per updated reference, and passes notification requests from this queue to the 'repo_write' process for notification content creation and then to the 'notify' process for notification delivery. Only one notification can be in flight at a time to avoid file descriptor starvation if many references get updated in a single client session. ok op@


allow setting variables in gotd.conf; code from gotwebd/parse.y ok op@


make gitwrapper ignore 'permission denied' for repository paths We recommend that gotsh users should not have direct filesystem access to repositories served by gotd. Which means admins will be setting things up as follows if public read-access should be denied: chown _gotd /git chmod 700 /git su -m _gotd -c 'gotadmin init /git/repo.git" However, gitwrapper would error out when repositories listed in gotd.conf were inaccessible to the user invoking gitwrapper: git-upload-pack: /etc/gotd.conf:2: realpath /git/repo.git: Permission denied Make gitwrapper ignore such errors as they are expected in this situation. While here, add a PROC_GITWRAPPER process ID for use as a global variable parse.y can check while special-casing any specific behaviour required by gitwrapper. (The worse alternative would have been adding a new global variable to parse.y just to control the behaviour on realpath errors.) ok op@


drop unused strlen; ok stsp@


remove dependency of gitwrapper on gotd/auth.c Move gotd_auth_parseuid() from auth.c to parse.y as gotd_parseuid(), and remove auth.c from the list of source files required by gitwrapper.


remove dependency of gitwrapper on gotd/listen.c Move gotd_find_uid_connection_limit() from listen.c into parse.y and remove listen.c from the list of source files required by gitwrapper.


make gotd/gitwrapper start up even if a repository is missing on disk This should result in more useful behaviour when gitwrapper runs and repositories listed in gotd.conf do not yet exist or do no longer exist.


grammar fix for parse.y error message


reject overlapping protected branch vs. tag namespaces ok op@


gotd.conf: free STRINGS in all code paths ok stsp@


gotd.conf: fix memleak in `protect' error path and disallow dups too ok stsp@


add support for protecting references against 'got send -f' to gotd ok op@