summaryrefslogtreecommitdiff
path: root/nslcd/Makefile.am
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/Makefile.am')
-rw-r--r--nslcd/Makefile.am27
1 files changed, 27 insertions, 0 deletions
diff --git a/nslcd/Makefile.am b/nslcd/Makefile.am
index 8e501da..bbd76cb 100644
--- a/nslcd/Makefile.am
+++ b/nslcd/Makefile.am
@@ -28,9 +28,36 @@ nslcd_SOURCES = nslcd.c ../nslcd.h ../common/nslcd-prot.h \
../compat/attrs.h \
log.c log.h \
common.c common.h \
+ dispatch.c dispatch.h \
cfg.c cfg.h \
nsswitch.c invalidator.c \
db_config.c db_pam.c db_passwd.c db_shadow.c
nslcd_LDADD = ../common/libtio.a ../common/libdict.a \
../common/libexpr.a ../compat/libcompat.a \
@nslcd_LIBS@ @PTHREAD_LIBS@
+
+dispatch.c: $(filter db_%.c,$(nslcd_SOURCES)) $(MAKEFILE_LIST)
+ { \
+ echo '#define _XOPEN_SOURCE 500 /* for pthread_rwlock_t */' && \
+ echo '#include "common.h"' && \
+ echo '#include "log.h"' && \
+ { \
+ echo '#define NSLCD_HANDLE(db, fn) case NSLCD_ACTION_##db##_##fn: (void)nslcd_##db##_##fn(fp, session); break;' && \
+ echo '#define NSLCD_HANDLE_UID(db, fn) case NSLCD_ACTION_##db##_##fn: (void)nslcd_##db##_##fn(fp, session, uid); break;' && \
+ echo 'void dispatch(TFILE *fp, int32_t action, MYLDAP_SESSION *session, uid_t uid) {' && \
+ echo ' switch (action) {' && \
+ sed -n 's/^NSLCD_HANDLE.*/ &)/p' $(filter %.c,$^) && \
+ echo ' default:' && \
+ echo ' log_log(LOG_WARNING, "invalid request id: 0x%08x", (unsigned int)action);' && \
+ echo ' }' ; \
+ echo '}' ; \
+ } | cpp | sed '/^#/d' ; \
+ } > $@
+
+dispatch.h: $(filter db_%.c,$(nslcd_SOURCES)) $(MAKEFILE_LIST)
+ { \
+ echo '#define NSLCD_HANDLE(db, fn) int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *);' && \
+ echo '#define NSLCD_HANDLE_UID(db, fn) int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *, uid_t);' && \
+ echo 'void dispatch(TFILE *fp, int32_t action, MYLDAP_SESSION *session, uid_t uid);' && \
+ sed -n 's/^NSLCD_HANDLE.*/&)/p' $(filter %.c,$^); \
+ } | cpp | sed '/^#/d' > $@