/******************************************************************************/
-/* postlicyd: a postfix policy daemon with a lot of features */
+/* pfixtools: a collection of postfix related tools */
/* ~~~~~~~~~ */
/* ________________________________________________________________________ */
/* */
* Copyright © 2007 Pierre Habouzit
*/
-#ifndef POSTLICYD_H
-#define POSTLICYD_H
+#ifndef PFIXTOOLS_COMMON_H
+#define PFIXTOOLS_COMMON_H
#include <errno.h>
+#include <fcntl.h>
#include <limits.h>
-#include <pthread.h>
+#include <netinet/in.h>
+#include <signal.h>
#include <stdbool.h>
#include <stdbool.h>
-#include <stdio.h>
#include <stdint.h>
+#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <sys/socket.h>
+#include <sys/stat.h>
#include <sys/types.h>
+#include <time.h>
#include <unistd.h>
+#include "mem.h"
+
#define UNIXERR(fun) \
syslog(LOG_ERR, "%s:%d:%s: %s: %m", \
__FILE__, __LINE__, __func__, fun)
+typedef int (*initcall_t)(void);
+typedef void (*exitcall_t)(void);
+
+#define __init __attribute__((__used__,__section__(".mad.init")))
+#define __exit __attribute__((__used__,__section__(".mad.exit")))
+
+#define module_init(fn) static __init initcall_t __init_##fn = fn;
+#define module_exit(fn) static __exit exitcall_t __exit_##fn = fn;
+
+/* common.c */
+extern sig_atomic_t sigint;
+extern sig_atomic_t sighup;
+
+void common_sighandler(int sig);
+
+/* daemon.c */
+int tcp_listen_nonblock(const struct sockaddr *addr, socklen_t len);
+int accept_nonblock(int fd);
+
+int daemon_detach(void);
+int drop_privileges(const char *user, const char *group);
+
#endif