mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
30191d1a57
bugs in various places whilst doing this (places that assumed
BOOL == int). I also need to fix the Samba4 pidl generation
(next checkin).
Jeremy.
(This used to be commit f35a266b3c
)
256 lines
5.4 KiB
C
256 lines
5.4 KiB
C
/*
|
|
Unix SMB/CIFS Implementation.
|
|
LDAP protocol helper functions for SAMBA
|
|
Copyright (C) Volker Lendecke 2004
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program 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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#ifndef _SMB_LDAP_H
|
|
#define _SMB_LDAP_H
|
|
|
|
enum ldap_request_tag {
|
|
LDAP_TAG_BindRequest = 0,
|
|
LDAP_TAG_BindResponse = 1,
|
|
LDAP_TAG_UnbindRequest = 2,
|
|
LDAP_TAG_SearchRequest = 3,
|
|
LDAP_TAG_SearchResultEntry = 4,
|
|
LDAP_TAG_SearchResultDone = 5,
|
|
LDAP_TAG_ModifyRequest = 6,
|
|
LDAP_TAG_ModifyResponse = 7,
|
|
LDAP_TAG_AddRequest = 8,
|
|
LDAP_TAG_AddResponse = 9,
|
|
LDAP_TAG_DelRequest = 10,
|
|
LDAP_TAG_DelResponse = 11,
|
|
LDAP_TAG_ModifyDNRequest = 12,
|
|
LDAP_TAG_ModifyDNResponse = 13,
|
|
LDAP_TAG_CompareRequest = 14,
|
|
LDAP_TAG_CompareResponse = 15,
|
|
LDAP_TAG_AbandonRequest = 16,
|
|
LDAP_TAG_SearchResultReference = 19,
|
|
LDAP_TAG_ExtendedRequest = 23,
|
|
LDAP_TAG_ExtendedResponse = 24
|
|
};
|
|
|
|
enum ldap_auth_mechanism {
|
|
LDAP_AUTH_MECH_SIMPLE = 0,
|
|
LDAP_AUTH_MECH_SASL = 3
|
|
};
|
|
|
|
#ifndef LDAP_SUCCESS
|
|
enum ldap_result_code {
|
|
LDAP_SUCCESS = 0,
|
|
LDAP_SASL_BIND_IN_PROGRESS = 0x0e,
|
|
LDAP_INVALID_CREDENTIALS = 0x31,
|
|
LDAP_OTHER = 0x50
|
|
};
|
|
#endif /* LDAP_SUCCESS */
|
|
|
|
struct ldap_Result {
|
|
int resultcode;
|
|
const char *dn;
|
|
const char *errormessage;
|
|
const char *referral;
|
|
};
|
|
|
|
struct ldap_attribute {
|
|
const char *name;
|
|
int num_values;
|
|
DATA_BLOB *values;
|
|
};
|
|
|
|
struct ldap_BindRequest {
|
|
int version;
|
|
const char *dn;
|
|
enum ldap_auth_mechanism mechanism;
|
|
union {
|
|
const char *password;
|
|
struct {
|
|
const char *mechanism;
|
|
DATA_BLOB secblob;
|
|
} SASL;
|
|
} creds;
|
|
};
|
|
|
|
struct ldap_BindResponse {
|
|
struct ldap_Result response;
|
|
union {
|
|
DATA_BLOB secblob;
|
|
} SASL;
|
|
};
|
|
|
|
struct ldap_UnbindRequest {
|
|
uint8 __dummy;
|
|
};
|
|
|
|
enum ldap_scope {
|
|
LDAP_SEARCH_SCOPE_BASE = 0,
|
|
LDAP_SEARCH_SCOPE_SINGLE = 1,
|
|
LDAP_SEARCH_SCOPE_SUB = 2
|
|
};
|
|
|
|
enum ldap_deref {
|
|
LDAP_DEREFERENCE_NEVER = 0,
|
|
LDAP_DEREFERENCE_IN_SEARCHING = 1,
|
|
LDAP_DEREFERENCE_FINDING_BASE = 2,
|
|
LDAP_DEREFERENCE_ALWAYS
|
|
};
|
|
|
|
struct ldap_SearchRequest {
|
|
const char *basedn;
|
|
enum ldap_scope scope;
|
|
enum ldap_deref deref;
|
|
uint32 timelimit;
|
|
uint32 sizelimit;
|
|
bool attributesonly;
|
|
char *filter;
|
|
int num_attributes;
|
|
const char **attributes;
|
|
};
|
|
|
|
struct ldap_SearchResEntry {
|
|
const char *dn;
|
|
int num_attributes;
|
|
struct ldap_attribute *attributes;
|
|
};
|
|
|
|
struct ldap_SearchResRef {
|
|
int num_referrals;
|
|
const char **referrals;
|
|
};
|
|
|
|
enum ldap_modify_type {
|
|
LDAP_MODIFY_NONE = -1,
|
|
LDAP_MODIFY_ADD = 0,
|
|
LDAP_MODIFY_DELETE = 1,
|
|
LDAP_MODIFY_REPLACE = 2
|
|
};
|
|
|
|
struct ldap_mod {
|
|
enum ldap_modify_type type;
|
|
struct ldap_attribute attrib;
|
|
};
|
|
|
|
struct ldap_ModifyRequest {
|
|
const char *dn;
|
|
int num_mods;
|
|
struct ldap_mod *mods;
|
|
};
|
|
|
|
struct ldap_AddRequest {
|
|
const char *dn;
|
|
int num_attributes;
|
|
struct ldap_attribute *attributes;
|
|
};
|
|
|
|
struct ldap_DelRequest {
|
|
const char *dn;
|
|
};
|
|
|
|
struct ldap_ModifyDNRequest {
|
|
const char *dn;
|
|
const char *newrdn;
|
|
bool deleteolddn;
|
|
const char *newsuperior;
|
|
};
|
|
|
|
struct ldap_CompareRequest {
|
|
const char *dn;
|
|
const char *attribute;
|
|
const char *value;
|
|
};
|
|
|
|
struct ldap_AbandonRequest {
|
|
uint32 messageid;
|
|
};
|
|
|
|
struct ldap_ExtendedRequest {
|
|
const char *oid;
|
|
DATA_BLOB value;
|
|
};
|
|
|
|
struct ldap_ExtendedResponse {
|
|
struct ldap_Result response;
|
|
const char *name;
|
|
DATA_BLOB value;
|
|
};
|
|
|
|
union ldap_Request {
|
|
struct ldap_BindRequest BindRequest;
|
|
struct ldap_BindResponse BindResponse;
|
|
struct ldap_UnbindRequest UnbindRequest;
|
|
struct ldap_SearchRequest SearchRequest;
|
|
struct ldap_SearchResEntry SearchResultEntry;
|
|
struct ldap_Result SearchResultDone;
|
|
struct ldap_SearchResRef SearchResultReference;
|
|
struct ldap_ModifyRequest ModifyRequest;
|
|
struct ldap_Result ModifyResponse;
|
|
struct ldap_AddRequest AddRequest;
|
|
struct ldap_Result AddResponse;
|
|
struct ldap_DelRequest DelRequest;
|
|
struct ldap_Result DelResponse;
|
|
struct ldap_ModifyDNRequest ModifyDNRequest;
|
|
struct ldap_Result ModifyDNResponse;
|
|
struct ldap_CompareRequest CompareRequest;
|
|
struct ldap_Result CompareResponse;
|
|
struct ldap_AbandonRequest AbandonRequest;
|
|
struct ldap_ExtendedRequest ExtendedRequest;
|
|
struct ldap_ExtendedResponse ExtendedResponse;
|
|
};
|
|
|
|
struct ldap_Control {
|
|
const char *oid;
|
|
bool critical;
|
|
DATA_BLOB value;
|
|
};
|
|
|
|
struct ldap_message {
|
|
TALLOC_CTX *mem_ctx;
|
|
uint32 messageid;
|
|
uint8 type;
|
|
union ldap_Request r;
|
|
int num_controls;
|
|
struct ldap_Control *controls;
|
|
};
|
|
|
|
struct ldap_queue_entry {
|
|
struct ldap_queue_entry *next, *prev;
|
|
int msgid;
|
|
struct ldap_message *msg;
|
|
};
|
|
|
|
struct ldap_connection {
|
|
TALLOC_CTX *mem_ctx;
|
|
int sock;
|
|
int next_msgid;
|
|
char *host;
|
|
uint16 port;
|
|
bool ldaps;
|
|
|
|
const char *auth_dn;
|
|
const char *simple_pw;
|
|
|
|
/* Current outstanding search entry */
|
|
int searchid;
|
|
|
|
/* List for incoming search entries */
|
|
struct ldap_queue_entry *search_entries;
|
|
|
|
/* Outstanding LDAP requests that have not yet been replied to */
|
|
struct ldap_queue_entry *outstanding;
|
|
};
|
|
|
|
#endif
|