diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2014-10-04 16:13:03 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2014-10-04 16:13:03 -0400 |
commit | c9618dfe442305531ee6cab9660333f4a697e094 (patch) | |
tree | 63da3cf1c107fdebd82987519b858f0d98c12d23 /nslcd/common.h | |
parent | be4588009b7106859e1beae6038aaea8d7f85825 (diff) |
foo
Diffstat (limited to 'nslcd/common.h')
-rw-r--r-- | nslcd/common.h | 47 |
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); \ } \ |