2006-08-31 20:26:32 +04:00
# ifndef _INCLUDE_ADS_H_
# define _INCLUDE_ADS_H_
2001-11-20 14:32:16 +03:00
/*
header for ads ( active directory ) library routines
basically this is a wrapper around ldap
*/
2007-07-17 14:13:53 +04:00
struct ads_struct ;
struct ads_saslwrap_ops {
const char * name ;
2007-07-17 15:14:42 +04:00
ADS_STATUS ( * wrap ) ( struct ads_struct * , uint8 * buf , uint32 len ) ;
2007-07-17 14:13:53 +04:00
ADS_STATUS ( * unwrap ) ( struct ads_struct * ) ;
2007-07-18 12:15:42 +04:00
void ( * disconnect ) ( struct ads_struct * ) ;
2007-07-17 14:13:53 +04:00
} ;
2007-07-18 11:45:16 +04:00
enum ads_saslwrap_type {
ADS_SASLWRAP_TYPE_PLAIN = 1 ,
ADS_SASLWRAP_TYPE_SIGN = 2 ,
ADS_SASLWRAP_TYPE_SEAL = 4
2007-07-25 12:09:34 +04:00
} ;
2007-07-18 11:45:16 +04:00
2007-07-17 14:13:53 +04:00
typedef struct ads_struct {
2004-03-23 01:49:40 +03:00
int is_mine ; /* do I own this structure's memory? */
2002-08-17 21:00:51 +04:00
/* info needed to find the server */
struct {
char * realm ;
char * workgroup ;
char * ldap_server ;
2008-06-27 18:22:39 +04:00
int foreign ; /* set to 1 if connecting to a foreign
* realm */
bool gc ; /* Is this a global catalog server? */
2002-08-17 21:00:51 +04:00
} server ;
/* info needed to authenticate */
struct {
char * realm ;
char * password ;
char * user_name ;
char * kdc_server ;
2002-09-25 19:19:00 +04:00
unsigned flags ;
int time_offset ;
2007-02-08 20:02:39 +03:00
time_t tgt_expire ;
time_t tgs_expire ;
2006-02-04 01:19:41 +03:00
time_t renewable ;
2002-08-17 21:00:51 +04:00
} auth ;
/* info derived from the servers config */
struct {
2006-08-31 05:20:21 +04:00
uint32 flags ; /* cldap flags identifying the services. */
2002-08-17 21:00:51 +04:00
char * realm ;
char * bind_path ;
char * ldap_server_name ;
2006-08-31 08:14:08 +04:00
char * server_site_name ;
char * client_site_name ;
2002-09-25 19:19:00 +04:00
time_t current_time ;
2007-07-11 17:32:57 +04:00
char * schema_path ;
char * config_path ;
2002-08-17 21:00:51 +04:00
} config ;
2007-07-16 15:08:00 +04:00
/* info about the current LDAP connection */
2007-07-16 19:31:01 +04:00
# ifdef HAVE_LDAP
2007-07-16 15:08:00 +04:00
struct {
LDAP * ld ;
2007-10-25 01:16:54 +04:00
struct sockaddr_storage ss ; /* the ip of the active connection, if any */
2007-07-16 15:08:00 +04:00
time_t last_attempt ; /* last attempt to reconnect */
int port ;
2007-07-16 18:35:33 +04:00
2007-07-18 11:45:16 +04:00
enum ads_saslwrap_type wrap_type ;
2007-07-16 20:08:24 +04:00
# ifdef HAVE_LDAP_SASL_WRAPPING
2007-07-16 18:35:33 +04:00
Sockbuf_IO_Desc * sbiod ; /* lowlevel state for LDAP wrapping */
2007-07-18 11:45:16 +04:00
# endif /* HAVE_LDAP_SASL_WRAPPING */
2007-07-17 14:13:53 +04:00
TALLOC_CTX * mem_ctx ;
const struct ads_saslwrap_ops * wrap_ops ;
void * wrap_private_data ;
struct {
uint32 ofs ;
uint32 needed ;
uint32 left ;
2007-08-02 21:41:47 +04:00
# define ADS_SASL_WRAPPING_IN_MAX_WRAPPED 0x0FFFFFFF
uint32 max_wrapped ;
uint32 min_wrapped ;
2007-07-17 14:13:53 +04:00
uint32 size ;
uint8 * buf ;
} in ;
struct {
uint32 ofs ;
uint32 left ;
2007-08-02 21:41:47 +04:00
# define ADS_SASL_WRAPPING_OUT_MAX_WRAPPED 0x00A00000
uint32 max_unwrapped ;
2007-07-17 15:14:42 +04:00
uint32 sig_size ;
2007-07-17 14:13:53 +04:00
uint32 size ;
uint8 * buf ;
} out ;
2007-07-16 15:08:00 +04:00
} ldap ;
2007-07-16 20:08:24 +04:00
# endif /* HAVE_LDAP */
2007-01-24 04:48:08 +03:00
} ADS_STRUCT ;
2005-06-29 18:03:53 +04:00
2002-02-11 18:48:34 +03:00
# ifdef HAVE_ADS
typedef LDAPMod * * ADS_MODLIST ;
# else
typedef void * * ADS_MODLIST ;
# endif
2001-12-05 12:19:25 +03:00
/* time between reconnect attempts */
# define ADS_RECONNECT_TIME 5
2002-04-10 17:25:40 +04:00
/* ldap control oids */
2005-06-29 18:03:53 +04:00
# define ADS_PAGE_CTL_OID "1.2.840.113556.1.4.319"
# define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339"
# define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473"
# define ADS_PERMIT_MODIFY_OID "1.2.840.113556.1.4.1413"
2006-02-04 01:19:41 +03:00
# define ADS_ASQ_OID "1.2.840.113556.1.4.1504"
2006-05-18 23:34:25 +04:00
# define ADS_EXTENDED_DN_OID "1.2.840.113556.1.4.529"
2007-06-26 13:15:37 +04:00
# define ADS_SD_FLAGS_OID "1.2.840.113556.1.4.801"
2005-06-29 18:03:53 +04:00
2005-10-21 16:50:39 +04:00
/* ldap bitwise searches */
# define ADS_LDAP_MATCHING_RULE_BIT_AND "1.2.840.113556.1.4.803"
# define ADS_LDAP_MATCHING_RULE_BIT_OR "1.2.840.113556.1.4.804"
2002-08-17 21:00:51 +04:00
# define ADS_PINGS 0x0000FFFF /* Ping response */
2002-09-25 19:19:00 +04:00
/* ads auth control flags */
2008-06-24 14:11:06 +04:00
# define ADS_AUTH_DISABLE_KERBEROS 0x0001
# define ADS_AUTH_NO_BIND 0x0002
# define ADS_AUTH_ANON_BIND 0x0004
# define ADS_AUTH_SIMPLE_BIND 0x0008
# define ADS_AUTH_ALLOW_NTLMSSP 0x0010
# define ADS_AUTH_SASL_SIGN 0x0020
# define ADS_AUTH_SASL_SEAL 0x0040
# define ADS_AUTH_SASL_FORCE 0x0080
# define ADS_AUTH_USER_CREDS 0x0100
2003-02-24 05:55:00 +03:00
2006-05-18 23:34:25 +04:00
enum ads_extended_dn_flags {
ADS_EXTENDED_DN_HEX_STRING = 0 ,
ADS_EXTENDED_DN_STRING = 1 /* not supported on win2k */
} ;
/* this is probably not very well suited to pass other controls generically but
* is good enough for the extended dn control where it is only used for atm */
typedef struct {
const char * control ;
int val ;
int critical ;
} ads_control ;
2007-07-11 13:39:08 +04:00
2010-07-02 02:32:52 +04:00
# include "libads/ads_proto.h"
# ifdef HAVE_LDAP
# include "libads/ads_ldap_protos.h"
# endif
# include "libads/kerberos_proto.h"
2007-08-30 19:39:51 +04:00
2007-05-14 13:50:39 +04:00
# endif /* _INCLUDE_ADS_H_ */