315 lines
9.7 KiB
C
315 lines
9.7 KiB
C
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef _LDAP_H_
|
|
#define _LDAP_H_
|
|
|
|
#include "certt.h"
|
|
#include "pkixt.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern const SEC_ASN1Template PKIX_PL_LDAPCrossCertPairTemplate[];
|
|
SEC_ASN1_CHOOSER_DECLARE(PKIX_PL_LDAPCrossCertPairTemplate)
|
|
extern const SEC_ASN1Template PKIX_PL_LDAPMessageTemplate[];
|
|
SEC_ASN1_CHOOSER_DECLARE(PKIX_PL_LDAPMessageTemplate)
|
|
extern const SEC_ASN1Template LDAPFilterTemplate[];
|
|
SEC_ASN1_CHOOSER_DECLARE(LDAPFilterTemplate)
|
|
|
|
/* ********************************************************************** */
|
|
|
|
#define SEC_ASN1_LDAP_STRING SEC_ASN1_OCTET_STRING
|
|
|
|
#define LDAPATTR_CACERT (1<<0)
|
|
#define LDAPATTR_USERCERT (1<<1)
|
|
#define LDAPATTR_CROSSPAIRCERT (1<<2)
|
|
#define LDAPATTR_CERTREVLIST (1<<3)
|
|
#define LDAPATTR_AUTHREVLIST (1<<4)
|
|
#define MAX_LDAPATTRS 5
|
|
typedef PKIX_UInt32 LdapAttrMask;
|
|
|
|
typedef enum {
|
|
SIMPLE_AUTH = 0,
|
|
KRBV42LDAP_AUTH = 1,
|
|
KRBV42DSA_AUTH = 2
|
|
} AuthType;
|
|
|
|
typedef enum {
|
|
BASE_OBJECT = 0,
|
|
SINGLE_LEVEL = 1,
|
|
WHOLE_SUBTREE = 2
|
|
} ScopeType;
|
|
|
|
typedef enum {
|
|
NEVER_DEREF = 0,
|
|
DEREF_IN_SEARCHING = 1,
|
|
DEREF_FINDING_BASEOBJ = 2,
|
|
ALWAYS_DEREF = 3
|
|
} DerefType;
|
|
|
|
typedef enum {
|
|
LDAP_INITIALSUBSTRING_TYPE = 0,
|
|
LDAP_ANYSUBSTRING_TYPE = 1,
|
|
LDAP_FINALSUBSTRING_TYPE = 2
|
|
} LDAPSubstringFilterType;
|
|
|
|
typedef enum {
|
|
LDAP_ANDFILTER_TYPE = 0,
|
|
LDAP_ORFILTER_TYPE = 1,
|
|
LDAP_NOTFILTER_TYPE = 2,
|
|
LDAP_EQUALFILTER_TYPE = 3,
|
|
LDAP_SUBSTRINGFILTER_TYPE = 4,
|
|
LDAP_GREATEROREQUALFILTER_TYPE = 5,
|
|
LDAP_LESSOREQUALFILTER_TYPE = 6,
|
|
LDAP_PRESENTFILTER_TYPE = 7,
|
|
LDAP_APPROXMATCHFILTER_TYPE = 8
|
|
} LDAPFilterType;
|
|
|
|
typedef enum {
|
|
LDAP_BIND_TYPE = 0,
|
|
LDAP_BINDRESPONSE_TYPE = 1,
|
|
LDAP_UNBIND_TYPE = 2,
|
|
LDAP_SEARCH_TYPE = 3,
|
|
LDAP_SEARCHRESPONSEENTRY_TYPE = 4,
|
|
LDAP_SEARCHRESPONSERESULT_TYPE = 5,
|
|
LDAP_ABANDONREQUEST_TYPE = 16
|
|
} LDAPMessageType;
|
|
|
|
typedef enum {
|
|
SUCCESS = 0,
|
|
OPERATIONSERROR = 1,
|
|
PROTOCOLERROR = 2,
|
|
TIMELIMITEXCEEDED = 3,
|
|
SIZELIMITEXCEEDED = 4,
|
|
COMPAREFALSE = 5,
|
|
COMPARETRUE = 6,
|
|
AUTHMETHODNOTSUPPORTED = 7,
|
|
STRONGAUTHREQUIRED = 8,
|
|
NOSUCHATTRIBUTE = 16,
|
|
UNDEFINEDATTRIBUTETYPE = 17,
|
|
INAPPROPRIATEMATCHING = 18,
|
|
CONSTRAINTVIOLATION = 19,
|
|
ATTRIBUTEORVALUEEXISTS = 20,
|
|
INVALIDATTRIBUTESYNTAX = 21,
|
|
NOSUCHOBJECT = 32,
|
|
ALIASPROBLEM = 33,
|
|
INVALIDDNSYNTAX = 34,
|
|
ISLEAF = 35,
|
|
ALIASDEREFERENCINGPROBLEM = 36,
|
|
INAPPROPRIATEAUTHENTICATION = 48,
|
|
INVALIDCREDENTIALS = 49,
|
|
INSUFFICIENTACCESSRIGHTS = 50,
|
|
BUSY = 51,
|
|
UNAVAILABLE = 52,
|
|
UNWILLINGTOPERFORM = 53,
|
|
LOOPDETECT = 54,
|
|
NAMINGVIOLATION = 64,
|
|
OBJECTCLASSVIOLATION = 65,
|
|
NOTALLOWEDONNONLEAF = 66,
|
|
NOTALLOWEDONRDN = 67,
|
|
ENTRYALREADYEXISTS = 68,
|
|
OBJECTCLASSMODSPROHIBITED = 69,
|
|
OTHER = 80
|
|
} LDAPResultCode;
|
|
|
|
typedef struct LDAPLocationStruct LDAPLocation;
|
|
typedef struct LDAPCertPairStruct LDAPCertPair;
|
|
typedef struct LDAPSimpleBindStruct LDAPSimpleBind;
|
|
typedef struct LDAPBindAPIStruct LDAPBindAPI;
|
|
typedef struct LDAPBindStruct LDAPBind;
|
|
typedef struct LDAPResultStruct LDAPBindResponse;
|
|
typedef struct LDAPResultStruct LDAPResult;
|
|
typedef struct LDAPSearchResponseAttrStruct LDAPSearchResponseAttr;
|
|
typedef struct LDAPSearchResponseEntryStruct LDAPSearchResponseEntry;
|
|
typedef struct LDAPResultStruct LDAPSearchResponseResult;
|
|
typedef struct LDAPUnbindStruct LDAPUnbind;
|
|
typedef struct LDAPFilterStruct LDAPFilter;
|
|
typedef struct LDAPAndFilterStruct LDAPAndFilter;
|
|
typedef struct LDAPNotFilterStruct LDAPNotFilter;
|
|
typedef struct LDAPSubstringStruct LDAPSubstring;
|
|
typedef struct LDAPSubstringFilterStruct LDAPSubstringFilter;
|
|
typedef struct LDAPPresentFilterStruct LDAPPresentFilter;
|
|
typedef struct LDAPAttributeValueAssertionStruct LDAPAttributeValueAssertion;
|
|
typedef struct LDAPNameComponentStruct LDAPNameComponent;
|
|
typedef struct LDAPRequestParamsStruct LDAPRequestParams;
|
|
typedef struct LDAPSearchStruct LDAPSearch;
|
|
typedef struct LDAPAbandonRequestStruct LDAPAbandonRequest;
|
|
typedef struct protocolOpStruct LDAPProtocolOp;
|
|
typedef struct LDAPMessageStruct LDAPMessage;
|
|
typedef LDAPAndFilter LDAPOrFilter;
|
|
typedef LDAPAttributeValueAssertion LDAPEqualFilter;
|
|
typedef LDAPAttributeValueAssertion LDAPGreaterOrEqualFilter;
|
|
typedef LDAPAttributeValueAssertion LDAPLessOrEqualFilter;
|
|
typedef LDAPAttributeValueAssertion LDAPApproxMatchFilter;
|
|
|
|
struct LDAPLocationStruct {
|
|
PLArenaPool *arena;
|
|
void *serverSite;
|
|
void **filterString;
|
|
void **attrBitString;
|
|
};
|
|
|
|
struct LDAPCertPairStruct {
|
|
SECItem forward;
|
|
SECItem reverse;
|
|
};
|
|
|
|
struct LDAPSimpleBindStruct {
|
|
char *bindName;
|
|
char *authentication;
|
|
};
|
|
|
|
struct LDAPBindAPIStruct {
|
|
AuthType selector;
|
|
union {
|
|
LDAPSimpleBind simple;
|
|
} chooser;
|
|
};
|
|
|
|
struct LDAPBindStruct {
|
|
SECItem version;
|
|
SECItem bindName;
|
|
SECItem authentication;
|
|
};
|
|
|
|
struct LDAPResultStruct {
|
|
SECItem resultCode;
|
|
SECItem matchedDN;
|
|
SECItem errorMessage;
|
|
};
|
|
|
|
struct LDAPSearchResponseAttrStruct {
|
|
SECItem attrType;
|
|
SECItem **val;
|
|
};
|
|
|
|
struct LDAPSearchResponseEntryStruct {
|
|
SECItem objectName;
|
|
LDAPSearchResponseAttr **attributes;
|
|
};
|
|
|
|
struct LDAPUnbindStruct {
|
|
SECItem dummy;
|
|
};
|
|
|
|
struct LDAPAndFilterStruct {
|
|
LDAPFilter **filters;
|
|
};
|
|
|
|
struct LDAPNotFilterStruct {
|
|
LDAPFilter *filter;
|
|
};
|
|
|
|
struct LDAPSubstringStruct {
|
|
LDAPSubstringFilterType selector;
|
|
SECItem item;
|
|
};
|
|
|
|
struct LDAPSubstringFilterStruct {
|
|
SECItem attrType;
|
|
LDAPSubstring *strings;
|
|
};
|
|
|
|
struct LDAPPresentFilterStruct {
|
|
SECItem attrType;
|
|
};
|
|
|
|
struct LDAPAttributeValueAssertionStruct {
|
|
SECItem attrType;
|
|
SECItem attrValue;
|
|
};
|
|
|
|
struct LDAPFilterStruct {
|
|
LDAPFilterType selector;
|
|
union {
|
|
LDAPAndFilter andFilter;
|
|
LDAPOrFilter orFilter;
|
|
LDAPNotFilter notFilter;
|
|
LDAPEqualFilter equalFilter;
|
|
LDAPSubstringFilter substringFilter;
|
|
LDAPGreaterOrEqualFilter greaterOrEqualFilter;
|
|
LDAPLessOrEqualFilter lessOrEqualFilter;
|
|
LDAPPresentFilter presentFilter;
|
|
LDAPApproxMatchFilter approxMatchFilter;
|
|
} filter;
|
|
};
|
|
|
|
struct LDAPNameComponentStruct {
|
|
unsigned char *attrType;
|
|
unsigned char *attrValue;
|
|
};
|
|
|
|
struct LDAPRequestParamsStruct {
|
|
char *baseObject; /* e.g. "c=US" */
|
|
ScopeType scope;
|
|
DerefType derefAliases;
|
|
PKIX_UInt32 sizeLimit; /* 0 = no limit */
|
|
PRIntervalTime timeLimit; /* 0 = no limit */
|
|
LDAPNameComponent **nc; /* e.g. {{"cn","xxx"},{"o","yyy"},NULL} */
|
|
LdapAttrMask attributes;
|
|
};
|
|
|
|
struct LDAPSearchStruct {
|
|
SECItem baseObject;
|
|
SECItem scope;
|
|
SECItem derefAliases;
|
|
SECItem sizeLimit;
|
|
SECItem timeLimit;
|
|
SECItem attrsOnly;
|
|
LDAPFilter filter;
|
|
SECItem **attributes;
|
|
};
|
|
|
|
struct LDAPAbandonRequestStruct {
|
|
SECItem messageID;
|
|
};
|
|
|
|
struct protocolOpStruct {
|
|
LDAPMessageType selector;
|
|
union {
|
|
LDAPBind bindMsg;
|
|
LDAPBindResponse bindResponseMsg;
|
|
LDAPUnbind unbindMsg;
|
|
LDAPSearch searchMsg;
|
|
LDAPSearchResponseEntry searchResponseEntryMsg;
|
|
LDAPSearchResponseResult searchResponseResultMsg;
|
|
LDAPAbandonRequest abandonRequestMsg;
|
|
} op;
|
|
};
|
|
|
|
struct LDAPMessageStruct {
|
|
SECItem messageID;
|
|
LDAPProtocolOp protocolOp;
|
|
};
|
|
|
|
typedef struct PKIX_PL_LdapClientStruct PKIX_PL_LdapClient;
|
|
|
|
typedef PKIX_Error *
|
|
(*PKIX_PL_LdapClient_InitiateFcn)(
|
|
PKIX_PL_LdapClient *client,
|
|
LDAPRequestParams *requestParams,
|
|
void **pNBIO,
|
|
PKIX_List **pResponse,
|
|
void *plContext);
|
|
|
|
typedef PKIX_Error *
|
|
(*PKIX_PL_LdapClient_ResumeFcn)(
|
|
PKIX_PL_LdapClient *client,
|
|
void **pNBIO,
|
|
PKIX_List **pResponse,
|
|
void *plContext);
|
|
|
|
struct PKIX_PL_LdapClientStruct {
|
|
PKIX_PL_LdapClient_InitiateFcn initiateFcn;
|
|
PKIX_PL_LdapClient_ResumeFcn resumeFcn;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|