summaryrefslogtreecommitdiff
path: root/nslcd/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/common.h')
-rw-r--r--nslcd/common.h73
1 files changed, 40 insertions, 33 deletions
diff --git a/nslcd/common.h b/nslcd/common.h
index 9364031..6477284 100644
--- a/nslcd/common.h
+++ b/nslcd/common.h
@@ -102,42 +102,49 @@ void invalidator_do(enum nss_map_selector map);
/* macros for generating service handling code */
#define NSLCD_HANDLE(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean) \
- int nslcd_##db##_##fn(TFILE *fp, struct session *session) \
+ int nslcd_##db##_##fn(TFILE *_handle_fp, struct session *_handle_session) \
NSLCD_HANDLE_BODY(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean)
-#define NSLCD_HANDLE_UID(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean) \
- int nslcd_##db##_##fn(TFILE *fp, struct session *session, uid_t calleruid) \
+#define NSLCD_HANDLE_UID(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean) \
+ int nslcd_##db##_##fn(TFILE *_handle_fp, struct session *_handle_session, uid_t calleruid) \
NSLCD_HANDLE_BODY(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean)
#define NSLCD_HANDLE_BODY(db, fn, fndecls, fnread, fncheck, tentry, fnsearch, fnwrite, fnclean) \
- { \
- /* define common variables */ \
- tentry *entry = NULL; \
- int rc = 1; \
- fndecls \
- __extension__ tentry *search(int *rcp) { fnsearch } \
- __extension__ int write(TFILE *fp, tentry *entry) { fnwrite } \
- __extension__ void clean() { fnclean } \
- /* read request parameters */ \
- fnread \
- /* validate request parameters */ \
- fncheck \
- /* write the response header */ \
- WRITE_INT32(fp, NSLCD_VERSION); \
- WRITE_INT32(fp, NSLCD_ACTION_##db##_##fn); \
- /* go over results */ \
- while ((entry = search(&rc)) != NULL) \
- { \
- if ( write(fp, entry) ) { \
- clean(); \
- return -1; \
- } \
- } \
- /* write the final result code */ \
- if (rc == 0) \
- { \
- WRITE_INT32(fp, NSLCD_RESULT_END); \
- } \
- clean(); \
- return 0; \
+ { \
+ /* define common variables */ \
+ tentry *_handle_entry = NULL; \
+ int _handle_rc = 1; \
+ bool _handle_more = true; \
+ fndecls \
+ __extension__ int read(TFILE *fp) { fnread } \
+ __extension__ tentry *search(struct session *session, \
+ int *rcp, bool *more) { fnsearch } \
+ __extension__ int write(TFILE *fp, tentry *entry) { fnwrite } \
+ __extension__ void clean() { fnclean } \
+ /* read request parameters */ \
+ if ((_handle_rc = read(_handle_fp)) != 0) \
+ return _handle_rc; \
+ _handle_rc = 1; \
+ /* validate request parameters */ \
+ fncheck \
+ /* write the response header */ \
+ WRITE_INT32(_handle_fp, NSLCD_VERSION); \
+ WRITE_INT32(_handle_fp, NSLCD_ACTION_##db##_##fn); \
+ /* go over results */ \
+ while ((_handle_entry = search(_handle_session, &_handle_rc, &_handle_more)) != NULL)\
+ { \
+ if ( write(_handle_fp, _handle_entry) ) { \
+ clean(); \
+ return -1; \
+ } \
+ if (! _handle_more) \
+ break; \
+ } \
+ /* write the final result code */ \
+ if (_handle_rc == 0) \
+ { \
+ WRITE_INT32(_handle_fp, NSLCD_RESULT_END); \
+ } \
+ clean(); \
+ return 0; \
}
/* macro to compare strings which uses the ignorecase config option to