summaryrefslogtreecommitdiff
path: root/nslcd/common.h
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2014-10-04 16:13:03 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2014-10-04 16:13:03 -0400
commitc9618dfe442305531ee6cab9660333f4a697e094 (patch)
tree63da3cf1c107fdebd82987519b858f0d98c12d23 /nslcd/common.h
parentbe4588009b7106859e1beae6038aaea8d7f85825 (diff)
foo
Diffstat (limited to 'nslcd/common.h')
-rw-r--r--nslcd/common.h47
1 files changed, 16 insertions, 31 deletions
diff --git a/nslcd/common.h b/nslcd/common.h
index 5ca06c1..ce87b09 100644
--- a/nslcd/common.h
+++ b/nslcd/common.h
@@ -166,7 +166,6 @@ void invalidator_do(enum ldap_map_selector map);
#define BUFLEN_PASSWORDHASH 256 /* passwords hashes */
#define BUFLEN_DN 512 /* distinguished names */
#define BUFLEN_SAFEDN 600 /* escapedd dn */
-#define BUFLEN_FILTER 4096 /* search filters */
#define BUFLEN_HOSTNAME (HOST_NAME_MAX + 1) /* host names (+ escaped) */
#define BUFLEN_MESSAGE 1024 /* message strings */
@@ -257,49 +256,35 @@ int nslcd_pam_pwmod(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid);
int nslcd_usermod(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid);
/* macros for generating service handling code */
-#define NSLCD_HANDLE(db, fn, action, readfn, mkfilter, writefn) \
+#define NSLCD_HANDLE(db, fn, action, fndecls, fnread, fncheck, fnsearch, fnwrite) \
int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *session) \
- NSLCD_HANDLE_BODY(db, fn, action, readfn, mkfilter, writefn)
-#define NSLCD_HANDLE_UID(db, fn, action, readfn, mkfilter, writefn) \
+ NSLCD_HANDLE_BODY(db, fn, action, fndecls, fnread, fncheck, fnsearch, fnwrite)
+#define NSLCD_HANDLE_UID(db, fn, action, fndecls, fnread, fncheck, fnsearch, fnwrite) \
int nslcd_##db##_##fn(TFILE *fp, MYLDAP_SESSION *session, uid_t calleruid) \
- NSLCD_HANDLE_BODY(db, fn, action, readfn, mkfilter, writefn)
-#define NSLCD_HANDLE_BODY(db, fn, action, readfn, mkfilter, writefn) \
+ NSLCD_HANDLE_BODY(db, fn, action, fndecls, fnread, fncheck, fnsearch, fnwrite)
+#define NSLCD_HANDLE_BODY(db, fn, action, fndecls, fnread, fncheck, fnsearch, fnwrite) \
{ \
/* define common variables */ \
int32_t tmpint32; \
- MYLDAP_SEARCH *search; \
- MYLDAP_ENTRY *entry; \
- const char *base; \
- int rc, i; \
+ void *entry = NULL; \
+ int rc = 1; \
+ fndecls \
+ MYLDAP_ENTRY *search(int *rcp) { fnsearch } \
/* read request parameters */ \
- readfn; \
+ fnread \
+ /* validate request parameters */ \
+ fncheck \
/* write the response header */ \
WRITE_INT32(fp, NSLCD_VERSION); \
WRITE_INT32(fp, action); \
- /* prepare the search filter */ \
- if (mkfilter) \
+ /* go over results */ \
+ while ((entry = search(&rc)) != NULL) \
{ \
- log_log(LOG_ERR, "nslcd_" __STRING(db) "_" __STRING(fn) \
- "(): filter buffer too small"); \
- return -1; \
- } \
- /* perform a search for each search base */ \
- for (i = 0; (base = db##_bases[i]) != NULL; i++) \
- { \
- /* do the LDAP search */ \
- search = myldap_search(session, base, db##_scope, filter, \
- db##_attrs, NULL); \
- if (search == NULL) \
+ if ( ({ fnwrite }) ) \
return -1; \
- /* go over results */ \
- while ((entry = myldap_get_entry(search, &rc)) != NULL) \
- { \
- if (writefn) \
- return -1; \
- } \
} \
/* write the final result code */ \
- if (rc == LDAP_SUCCESS) \
+ if (rc == 0) \
{ \
WRITE_INT32(fp, NSLCD_RESULT_END); \
} \