📄 ldap.h
字号:
/*
* Copyright (c) 1990 Regents of the University of Michigan.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of Michigan at Ann Arbor. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*/
#ifndef _LDAP_H
#define _LDAP_H
#include "lber.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef PGPSOCKETSLDAP /* jason */
#if WINSOCK
#include "msdos.h"
#include <winsock.h>
#endif
#endif /* PGPSOCKETSLDAP */
#if !defined( NEEDPROTOS ) && defined(__STDC__)
#define NEEDPROTOS 1
#endif
#define LDAP_PORT 389
#define LDAP_SECURE_PORT 636
#define LDAP_VERSION1 1
#define LDAP_VERSION2 2
#define LDAP_VERSION LDAP_VERSION2
#define COMPAT20
#define COMPAT30
#if defined(COMPAT20) || defined(COMPAT30)
#define COMPAT
#endif
#define LDAP_MAX_ATTR_LEN 100
/* debugging stuff */
#ifdef LDAP_DEBUG /* [ */
extern int ldap_debug;
#ifdef LDAP_SYSLOG
extern int ldap_syslog;
extern int ldap_syslog_level;
#endif
#define LDAP_DEBUG_TRACE 0x001
#define LDAP_DEBUG_PACKETS 0x002
#define LDAP_DEBUG_ARGS 0x004
#define LDAP_DEBUG_CONNS 0x008
#define LDAP_DEBUG_BER 0x010
#define LDAP_DEBUG_FILTER 0x020
#define LDAP_DEBUG_CONFIG 0x040
#define LDAP_DEBUG_ACL 0x080
#define LDAP_DEBUG_STATS 0x100
#define LDAP_DEBUG_STATS2 0x200
#define LDAP_DEBUG_SHELL 0x400
#define LDAP_DEBUG_PARSE 0x800
#define LDAP_DEBUG_THREADID 0x1000
#define LDAP_DEBUG_ERROR 0x2000
#define LDAP_DEBUG_ANY 0xffff
enum ErrorLogLevels_ {
kErrLevelVerbose = 0x0001u,
kErrLevelInfo = 0x0002u,
kErrLevelWarning = 0x0004u,
kErrLevelError = 0x0008u
};
void
LogError(int lLevel, const char *pszFormat, ...);
#ifdef WIN32
#define strcasecmp stricmp
#define strncasecmp strnicmp
extern __declspec(dllimport) unsigned long __stdcall
GetCurrentThreadId(void); /* Defined in windows.h */
#define GetThreadID GetCurrentThreadId
#elif PGP_UNIX_SOLARIS
#define GetThreadID thr_self
#elif PGP_UNIX_LINUX
#define GetThreadID pthread_self
#endif
#if PGP_MACINTOSH
#define Debug( level, fmt, arg1, arg2, arg3 ) {} /* Nothing */
#else
#define Debug( level, fmt, arg1, arg2, arg3 ) \
{ \
if ( ldap_debug & level ) { \
if (ldap_debug & LDAP_DEBUG_THREADID) \
fprintf( stderr, "[% 4.4d] " fmt, GetThreadID(), \
arg1, arg2, arg3 ); \
else \
fprintf( stderr, fmt, arg1, arg2, arg3 ); \
fflush(stderr); \
} \
}
#endif
#else /* ] LDAP_DEBUG [ */
#define Debug( level, fmt, arg1, arg2, arg3 ) {} /* Nothing */
#endif /* ] LDAP_DEBUG */
/*
* specific LDAP instantiations of BER types we know about
*/
/* general stuff */
#define LDAP_TAG_MESSAGE 0x30L /* tag is 16 + constructed bit */
#define OLD_LDAP_TAG_MESSAGE 0x10L /* forgot the constructed bit */
#define LDAP_TAG_MSGID 0x02L
/* possible operations a client can invoke */
#define LDAP_REQ_BIND 0x60L /* application + constructed */
#define LDAP_REQ_UNBIND 0x42L /* application + primitive */
#define LDAP_REQ_SEARCH 0x63L /* application + constructed */
#define LDAP_REQ_MODIFY 0x66L /* application + constructed */
#define LDAP_REQ_ADD 0x68L /* application + constructed */
#define LDAP_REQ_DELETE 0x4aL /* application + primitive */
#define LDAP_REQ_MODRDN 0x6cL /* application + constructed */
#define LDAP_REQ_COMPARE 0x6eL /* application + constructed */
#define LDAP_REQ_ABANDON 0x50L /* application + primitive */
/* version 3.0 compatibility stuff */
#define LDAP_REQ_UNBIND_30 0x62L
#define LDAP_REQ_DELETE_30 0x6aL
#define LDAP_REQ_ABANDON_30 0x70L
/*
* old broken stuff for backwards compatibility - forgot application tag
* and constructed/primitive bit
*/
#define OLD_LDAP_REQ_BIND 0x00L
#define OLD_LDAP_REQ_UNBIND 0x02L
#define OLD_LDAP_REQ_SEARCH 0x03L
#define OLD_LDAP_REQ_MODIFY 0x06L
#define OLD_LDAP_REQ_ADD 0x08L
#define OLD_LDAP_REQ_DELETE 0x0aL
#define OLD_LDAP_REQ_MODRDN 0x0cL
#define OLD_LDAP_REQ_COMPARE 0x0eL
#define OLD_LDAP_REQ_ABANDON 0x10L
/* possible result types a server can return */
#define LDAP_RES_BIND 0x61L /* application + constructed */
#define LDAP_RES_SEARCH_ENTRY 0x64L /* application + constructed */
#define LDAP_RES_SEARCH_RESULT 0x65L /* application + constructed */
#define LDAP_RES_MODIFY 0x67L /* application + constructed */
#define LDAP_RES_ADD 0x69L /* application + constructed */
#define LDAP_RES_DELETE 0x6bL /* application + constructed */
#define LDAP_RES_MODRDN 0x6dL /* application + constructed */
#define LDAP_RES_COMPARE 0x6fL /* application + constructed */
#define LDAP_RES_ANY (-1L)
/* old broken stuff for backwards compatibility */
#define OLD_LDAP_RES_BIND 0x01L
#define OLD_LDAP_RES_SEARCH_ENTRY 0x04L
#define OLD_LDAP_RES_SEARCH_RESULT 0x05L
#define OLD_LDAP_RES_MODIFY 0x07L
#define OLD_LDAP_RES_ADD 0x09L
#define OLD_LDAP_RES_DELETE 0x0bL
#define OLD_LDAP_RES_MODRDN 0x0dL
#define OLD_LDAP_RES_COMPARE 0x0fL
/* authentication methods available */
#define LDAP_AUTH_NONE 0x00L /* no authentication */
#define LDAP_AUTH_SIMPLE 0x80L /* context specific + primitive */
#define LDAP_AUTH_KRBV4 0xffL /* means do both of the following */
#define LDAP_AUTH_KRBV41 0x81L /* context specific + primitive */
#define LDAP_AUTH_KRBV42 0x82L /* context specific + primitive */
/* 3.0 compatibility auth methods */
#define LDAP_AUTH_SIMPLE_30 0xa0L /* context specific + constructed */
#define LDAP_AUTH_KRBV41_30 0xa1L /* context specific + constructed */
#define LDAP_AUTH_KRBV42_30 0xa2L /* context specific + constructed */
/* old broken stuff */
#define OLD_LDAP_AUTH_SIMPLE 0x00L
#define OLD_LDAP_AUTH_KRBV4 0x01L
#define OLD_LDAP_AUTH_KRBV42 0x02L
/* filter types */
#define LDAP_FILTER_AND 0xa0L /* context specific + constructed */
#define LDAP_FILTER_OR 0xa1L /* context specific + constructed */
#define LDAP_FILTER_NOT 0xa2L /* context specific + constructed */
#define LDAP_FILTER_EQUALITY 0xa3L /* context specific + constructed */
#define LDAP_FILTER_SUBSTRINGS 0xa4L /* context specific + constructed */
#define LDAP_FILTER_GE 0xa5L /* context specific + constructed */
#define LDAP_FILTER_LE 0xa6L /* context specific + constructed */
#define LDAP_FILTER_PRESENT 0x87L /* context specific + primitive */
#define LDAP_FILTER_APPROX 0xa8L /* context specific + constructed */
/* 3.0 compatibility filter types */
#define LDAP_FILTER_PRESENT_30 0xa7L /* context specific + constructed */
/* old broken stuff */
#define OLD_LDAP_FILTER_AND 0x00L
#define OLD_LDAP_FILTER_OR 0x01L
#define OLD_LDAP_FILTER_NOT 0x02L
#define OLD_LDAP_FILTER_EQUALITY 0x03L
#define OLD_LDAP_FILTER_SUBSTRINGS 0x04L
#define OLD_LDAP_FILTER_GE 0x05L
#define OLD_LDAP_FILTER_LE 0x06L
#define OLD_LDAP_FILTER_PRESENT 0x07L
#define OLD_LDAP_FILTER_APPROX 0x08L
/* substring filter component types */
#define LDAP_SUBSTRING_INITIAL 0x80L /* context specific */
#define LDAP_SUBSTRING_ANY 0x81L /* context specific */
#define LDAP_SUBSTRING_FINAL 0x82L /* context specific */
/* 3.0 compatibility substring filter component types */
#define LDAP_SUBSTRING_INITIAL_30 0xa0L /* context specific */
#define LDAP_SUBSTRING_ANY_30 0xa1L /* context specific */
#define LDAP_SUBSTRING_FINAL_30 0xa2L /* context specific */
/* old broken stuff */
#define OLD_LDAP_SUBSTRING_INITIAL 0x00L
#define OLD_LDAP_SUBSTRING_ANY 0x01L
#define OLD_LDAP_SUBSTRING_FINAL 0x02L
/* search scopes */
#define LDAP_SCOPE_BASE 0x00
#define LDAP_SCOPE_ONELEVEL 0x01
#define LDAP_SCOPE_SUBTREE 0x02
/* for modifications */
typedef struct ldapmod {
int mod_op;
#define LDAP_MOD_ADD 0x00
#define LDAP_MOD_DELETE 0x01
#define LDAP_MOD_REPLACE 0x02
#define LDAP_MOD_BVALUES 0x80
char *mod_type;
union {
char **modv_strvals;
struct berval **modv_bvals;
} mod_vals;
#define mod_values mod_vals.modv_strvals
#define mod_bvalues mod_vals.modv_bvals
struct ldapmod *mod_next;
} LDAPMod;
/*
* possible error codes we can return
*/
#define LDAP_SUCCESS 0x00
#define LDAP_OPERATIONS_ERROR 0x01
#define LDAP_PROTOCOL_ERROR 0x02
#define LDAP_TIMELIMIT_EXCEEDED 0x03
#define LDAP_SIZELIMIT_EXCEEDED 0x04
#define LDAP_COMPARE_FALSE 0x05
#define LDAP_COMPARE_TRUE 0x06
#define LDAP_STRONG_AUTH_NOT_SUPPORTED 0x07
#define LDAP_STRONG_AUTH_REQUIRED 0x08
#define LDAP_PARTIAL_RESULTS 0x09
#define LDAP_NO_SUCH_ATTRIBUTE 0x10
#define LDAP_UNDEFINED_TYPE 0x11
#define LDAP_INAPPROPRIATE_MATCHING 0x12
#define LDAP_CONSTRAINT_VIOLATION 0x13
#define LDAP_TYPE_OR_VALUE_EXISTS 0x14
#define LDAP_INVALID_SYNTAX 0x15
#define LDAP_NO_SUCH_OBJECT 0x20
#define LDAP_ALIAS_PROBLEM 0x21
#define LDAP_INVALID_DN_SYNTAX 0x22
#define LDAP_IS_LEAF 0x23
#define LDAP_ALIAS_DEREF_PROBLEM 0x24
#define NAME_ERROR(n) ((n & 0xf0) == 0x20)
#define LDAP_INAPPROPRIATE_AUTH 0x30
#define LDAP_INVALID_CREDENTIALS 0x31
#define LDAP_INSUFFICIENT_ACCESS 0x32
#define LDAP_BUSY 0x33
#define LDAP_UNAVAILABLE 0x34
#define LDAP_UNWILLING_TO_PERFORM 0x35
#define LDAP_LOOP_DETECT 0x36
#define LDAP_NAMING_VIOLATION 0x40
#define LDAP_OBJECT_CLASS_VIOLATION 0x41
#define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
#define LDAP_NOT_ALLOWED_ON_RDN 0x43
#define LDAP_ALREADY_EXISTS 0x44
#define LDAP_NO_OBJECT_CLASS_MODS 0x45
#define LDAP_RESULTS_TOO_LARGE 0x46
#define LDAP_OTHER 0x50
#define LDAP_SERVER_DOWN 0x51
#define LDAP_LOCAL_ERROR 0x52
#define LDAP_ENCODING_ERROR 0x53
#define LDAP_DECODING_ERROR 0x54
#define LDAP_TIMEOUT 0x55
#define LDAP_AUTH_UNKNOWN 0x56
#define LDAP_FILTER_ERROR 0x57
#define LDAP_USER_CANCELLED 0x58
#define LDAP_PARAM_ERROR 0x59
#define LDAP_NO_MEMORY 0x5a
/* default limit on nesting of referrals */
#define LDAP_DEFAULT_REFHOPLIMIT 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -