There is some duplicate code for reading configuration in all 3 daemons. Because good prog. practise is to avoid duplicate for lowering cost of software maintainance, i am offering following:
imapd example: take function void SetConfigItems(serverConfig_t * config) add const char * servicename argument and after a little hacking with new argument in code and removing imap specific parts move it into server.c. Then add new function into imapd like void SetImapConfigItems() for handling imap specific settings. This change gives us, for example, new localsocket support for all 3 daemons.