Commit Briefs
fix INSTALL handling
Set a sane default for INSTALL, allow it to be changed either as environment variable or configure argument, and propagate it correctly to the generated config.mk. Issue reported by xavi, thanks!
address the strnvis(3) portability fiasco
strnvis originates on OpenBSD. When NetBSD added it to their libc they decided to swap the argument. Without starting a holy war on the "best" argument order, adding an implementation of a function that's widely available and making its signature purposefully incompatible is beyond justification. FreeBSD (and so macos too?) followed NetBSD in this, so we end up with *two* major and incompatible strnvis implementations. libbsd is in a limbo, they started with the OpenBSD version but they'll probably switch to the NetBSD version in the future. That's why we can't have nice things. Do the right thing(tm) and check for the presence of the original strnvis(3), if not available or broken use the bundled one.
don't quote $5 when calling pkg-config
otherwise we fail the openssl test 'libcrypto libssl'
rework the configure script
now it resembles less oconfigure and more the configure scripts I'm using in my recent projects. I'd argue it's more easy to use it.
add -Wpointer-sign to the mix
It's not present in -W -Wall -Wextra on OpenBSD but it is enabled on other systems.
use -MMD if the compiler supports it
it's better than the previous Makefile.depend approach since this automatically adapts to the included headers without requiring manual intervention to regen the list.
rework the daemon to do fork+exec
It uses the 'common' proc.c from various OpenBSD-daemons. gmid grew organically bit by bit and it was also the first place where I tried to implement privsep. It wasn't done very well, in fact the parent process (that retains root privileges) just fork()s a generation of servers, all sharing *exactly* the same address space. No good! Now, we fork() and re-exec() ourselves, so that each process has a fresh address space. Some features (require client ca for example) are temporarly disabled, will be fixed in subsequent commits. The "ge" program is also temporarly disabled as it needs tweaks to do privsep too.
drop landlock/seccomp and capsicum support
it reached a point where this stuff is not maintenable. I'd like to move forward with gmid, but the restriction of capsicum and the linux environment at large that make landlock unusable (how can you resolve DNS portably when under landlock?) -and don't get me started on seccomp- makes it impossible for me to do any work. So, I prefer removing the crap, resuming working on gmid by cleaning stuff and consolidating the features, improving various things etc... and then eventually see how to introduce some sandboxing again on other systems. Patches to resume sandboxing are, as always, welcome!