summaryrefslogtreecommitdiff
path: root/ldap-parse.h
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2006-10-11 13:34:15 +0000
committerArthur de Jong <arthur@arthurdejong.org>2006-10-11 13:34:15 +0000
commit6f17403298cf33747a45fb5ecbe78bf7632531f9 (patch)
treea5fc4cfdc3b091a0ee86f3c5c8d5e0ea8fc2c564 /ldap-parse.h
import release 251 of nss-ldap
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss_ldap-251@1 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'ldap-parse.h')
-rw-r--r--ldap-parse.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/ldap-parse.h b/ldap-parse.h
new file mode 100644
index 0000000..b8d5e90
--- /dev/null
+++ b/ldap-parse.h
@@ -0,0 +1,202 @@
+/* Copyright (C) 1997-2005 Luke Howard.
+ This file is part of the nss_ldap library.
+ Contributed by Luke Howard, <lukeh@padl.com>, 1997.
+
+ The nss_ldap library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The nss_ldap library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the nss_ldap library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ $Id: ldap-parse.h,v 2.21 2005/05/20 05:30:41 lukeh Exp $
+ */
+
+
+#ifndef _LDAP_NSS_LDAP_LDAP_PARSE_H
+#define _LDAP_NSS_LDAP_LDAP_PARSE_H
+
+#if defined(HAVE_NSSWITCH_H)
+#define NSS_ARGS(args) ((nss_XbyY_args_t *)args)
+
+#define LOOKUP_NAME(args, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ NSS_STATUS s; \
+ if (NSS_ARGS(args)->buf.buflen < req_buflen) { \
+ NSS_ARGS(args)->erange = 1; \
+ return NSS_TRYAGAIN; \
+ } \
+ LA_INIT(a); \
+ LA_STRING(a) = NSS_ARGS(args)->key.name; \
+ LA_TYPE(a) = LA_TYPE_STRING; \
+ s = _nss_ldap_getbyname(&a, \
+ NSS_ARGS(args)->buf.result, \
+ NSS_ARGS(args)->buf.buffer, \
+ NSS_ARGS(args)->buf.buflen, \
+ &NSS_ARGS(args)->erange, \
+ filter, \
+ selector, \
+ parser); \
+ if (s == NSS_SUCCESS) { \
+ NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result; \
+ } \
+ return s
+#define LOOKUP_NUMBER(args, field, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ NSS_STATUS s; \
+ if (NSS_ARGS(args)->buf.buflen < req_buflen) { \
+ NSS_ARGS(args)->erange = 1; \
+ return NSS_TRYAGAIN; \
+ } \
+ LA_INIT(a); \
+ LA_NUMBER(a) = NSS_ARGS(args)->field; \
+ LA_TYPE(a) = LA_TYPE_NUMBER; \
+ s = _nss_ldap_getbyname(&a, \
+ NSS_ARGS(args)->buf.result, \
+ NSS_ARGS(args)->buf.buffer, \
+ NSS_ARGS(args)->buf.buflen, \
+ &NSS_ARGS(args)->erange, \
+ filter, \
+ selector, \
+ parser); \
+ if (s == NSS_SUCCESS) { \
+ NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result; \
+ } \
+ return s
+#define LOOKUP_GETENT(args, be, filter, selector, parser, req_buflen) \
+ NSS_STATUS s; \
+ if (NSS_ARGS(args)->buf.buflen < req_buflen) { \
+ NSS_ARGS(args)->erange = 1; \
+ return NSS_TRYAGAIN; \
+ } \
+ s = _nss_ldap_getent(&((nss_ldap_backend_t *)be)->state, \
+ NSS_ARGS(args)->buf.result, \
+ NSS_ARGS(args)->buf.buffer, \
+ NSS_ARGS(args)->buf.buflen, \
+ &NSS_ARGS(args)->erange, \
+ filter, \
+ selector, \
+ parser); \
+ if (s == NSS_SUCCESS) { \
+ NSS_ARGS(args)->returnval = NSS_ARGS(args)->buf.result; \
+ } \
+ return s
+
+#elif defined(HAVE_NSS_H)
+
+#define LOOKUP_NAME(name, result, buffer, buflen, errnop, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ if (buflen < req_buflen) { \
+ *errnop = ERANGE; \
+ return NSS_TRYAGAIN; \
+ } \
+ LA_INIT(a); \
+ LA_STRING(a) = name; \
+ LA_TYPE(a) = LA_TYPE_STRING; \
+ return _nss_ldap_getbyname(&a, result, buffer, buflen, errnop, filter, selector, parser);
+#define LOOKUP_NUMBER(number, result, buffer, buflen, errnop, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ if (buflen < req_buflen) { \
+ *errnop = ERANGE; \
+ return NSS_TRYAGAIN; \
+ } \
+ LA_INIT(a); \
+ LA_NUMBER(a) = number; \
+ LA_TYPE(a) = LA_TYPE_NUMBER; \
+ return _nss_ldap_getbyname(&a, result, buffer, buflen, errnop, filter, selector, parser)
+#define LOOKUP_GETENT(key, result, buffer, buflen, errnop, filter, selector, parser, req_buflen) \
+ if (buflen < req_buflen) { \
+ *errnop = ERANGE; \
+ return NSS_TRYAGAIN; \
+ } \
+ return _nss_ldap_getent(&key, result, buffer, buflen, errnop, filter, selector, parser)
+
+#elif defined(HAVE_IRS_H)
+
+#define LOOKUP_NAME(name, this, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ struct pvt *pvt = (struct pvt *)this->private; \
+ NSS_STATUS s; \
+ LA_INIT(a); \
+ LA_STRING(a) = name; \
+ LA_TYPE(a) = LA_TYPE_STRING; \
+ s = _nss_ldap_getbyname(&a, &pvt->result, pvt->buffer, sizeof(pvt->buffer), &errno, filter, \
+ selector, parser); \
+ if (s != NSS_SUCCESS) { \
+ MAP_ERRNO(s, errno); \
+ return NULL; \
+ } \
+ return &pvt->result;
+#define LOOKUP_NUMBER(number, this, filter, selector, parser, req_buflen) \
+ ldap_args_t a; \
+ struct pvt *pvt = (struct pvt *)this->private; \
+ NSS_STATUS s; \
+ LA_INIT(a); \
+ LA_NUMBER(a) = number; \
+ LA_TYPE(a) = LA_TYPE_NUMBER; \
+ s = _nss_ldap_getbyname(&a, &pvt->result, pvt->buffer, sizeof(pvt->buffer), &errno, filter, \
+ selector, parser); \
+ if (s != NSS_SUCCESS) { \
+ MAP_ERRNO(s, errno); \
+ return NULL; \
+ } \
+ return &pvt->result;
+#define LOOKUP_GETENT(this, filter, selector, parser, req_buflen) \
+ struct pvt *pvt = (struct pvt *)this->private; \
+ NSS_STATUS s; \
+ s = _nss_ldap_getent(&pvt->state, &pvt->result, pvt->buffer, \
+ sizeof(pvt->buffer), &errno, filter, \
+ selector, parser); \
+ if (s != NSS_SUCCESS) { \
+ MAP_ERRNO(s, errno); \
+ return NULL; \
+ } \
+ return &pvt->result;
+#endif /* HAVE_NSSWITCH_H */
+
+#if defined(HAVE_NSSWITCH_H)
+
+#define LOOKUP_SETENT(key) \
+ if (_nss_ldap_ent_context_init(&((nss_ldap_backend_t *)key)->state) == NULL) \
+ return NSS_UNAVAIL; \
+ return NSS_SUCCESS
+#define LOOKUP_ENDENT(key) \
+ _nss_ldap_enter(); \
+ _nss_ldap_ent_context_release(((nss_ldap_backend_t *)key)->state); \
+ _nss_ldap_leave(); \
+ return NSS_SUCCESS
+
+#elif defined(HAVE_NSS_H)
+
+#define LOOKUP_SETENT(key) \
+ if (_nss_ldap_ent_context_init(&key) == NULL) \
+ return NSS_UNAVAIL; \
+ return NSS_SUCCESS
+#define LOOKUP_ENDENT(key) \
+ _nss_ldap_enter(); \
+ _nss_ldap_ent_context_release(key); \
+ _nss_ldap_leave(); \
+ return NSS_SUCCESS
+
+#elif defined(HAVE_IRS_H)
+
+#define LOOKUP_SETENT(this) \
+ struct pvt *pvt = (struct pvt *)this->private; \
+ (void) _nss_ldap_ent_context_init(&pvt->state)
+#define LOOKUP_ENDENT(this) \
+ struct pvt *pvt = (struct pvt *)this->private; \
+ _nss_ldap_enter(); \
+ _nss_ldap_ent_context_release(pvt->state); \
+ _nss_ldap_leave();
+
+#endif /* HAVE_NSSWITCH_H */
+
+#endif /* _LDAP_NSS_LDAP_LDAP_PARSE_H */