diff options
Diffstat (limited to 'nslcd/Makefile.am')
-rw-r--r-- | nslcd/Makefile.am | 27 |
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' > $@ |