diff options
Diffstat (limited to 'nslcd/common.h')
-rw-r--r-- | nslcd/common.h | 73 |
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 |