2006-08-31 16:26:32 +00:00
# ifndef _INCLUDE_ADS_H_
# define _INCLUDE_ADS_H_
2001-11-20 11:32:16 +00:00
/*
header for ads ( active directory ) library routines
basically this is a wrapper around ldap
*/
2011-05-06 12:54:59 +02:00
# include "libads/ads_status.h"
2011-02-24 11:56:08 +01:00
# include "smb_ldap.h"
2007-07-17 10:13:53 +00:00
struct ads_struct ;
struct ads_saslwrap_ops {
const char * name ;
2007-07-17 11:14:42 +00:00
ADS_STATUS ( * wrap ) ( struct ads_struct * , uint8 * buf , uint32 len ) ;
2007-07-17 10:13:53 +00:00
ADS_STATUS ( * unwrap ) ( struct ads_struct * ) ;
2007-07-18 08:15:42 +00:00
void ( * disconnect ) ( struct ads_struct * ) ;
2007-07-17 10:13:53 +00:00
} ;
2007-07-18 07:45:16 +00:00
enum ads_saslwrap_type {
ADS_SASLWRAP_TYPE_PLAIN = 1 ,
ADS_SASLWRAP_TYPE_SIGN = 2 ,
ADS_SASLWRAP_TYPE_SEAL = 4
2007-07-25 08:09:34 +00:00
} ;
2007-07-18 07:45:16 +00:00
2007-07-17 10:13:53 +00:00
typedef struct ads_struct {
2004-03-22 22:49:40 +00:00
int is_mine ; /* do I own this structure's memory? */
2011-09-12 17:19:27 +02:00
2002-08-17 17:00:51 +00:00
/* info needed to find the server */
struct {
char * realm ;
char * workgroup ;
char * ldap_server ;
2008-06-27 10: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 17:00:51 +00:00
} server ;
/* info needed to authenticate */
struct {
char * realm ;
char * password ;
char * user_name ;
char * kdc_server ;
2002-09-25 15:19:00 +00:00
unsigned flags ;
int time_offset ;
2007-02-08 17:02:39 +00:00
time_t tgt_expire ;
time_t tgs_expire ;
2006-02-03 22:19:41 +00:00
time_t renewable ;
2002-08-17 17:00:51 +00:00
} auth ;
/* info derived from the servers config */
struct {
2006-08-31 01:20:21 +00:00
uint32 flags ; /* cldap flags identifying the services. */
2002-08-17 17:00:51 +00:00
char * realm ;
char * bind_path ;
char * ldap_server_name ;
2006-08-31 04:14:08 +00:00
char * server_site_name ;
char * client_site_name ;
2002-09-25 15:19:00 +00:00
time_t current_time ;
2007-07-11 13:32:57 +00:00
char * schema_path ;
char * config_path ;
2002-08-17 17:00:51 +00:00
} config ;
2007-07-16 11:08:00 +00:00
/* info about the current LDAP connection */
2007-07-16 15:31:01 +00:00
# ifdef HAVE_LDAP
2007-07-16 11:08:00 +00:00
struct {
LDAP * ld ;
2007-10-24 14:16:54 -07:00
struct sockaddr_storage ss ; /* the ip of the active connection, if any */
2010-09-07 02:15:09 +02:00
time_t last_attempt ; /* last attempt to reconnect, monotonic clock */
2007-07-16 11:08:00 +00:00
int port ;
2007-07-16 14:35:33 +00:00
2007-07-18 07:45:16 +00:00
enum ads_saslwrap_type wrap_type ;
2007-07-16 16:08:24 +00:00
# ifdef HAVE_LDAP_SASL_WRAPPING
2007-07-16 14:35:33 +00:00
Sockbuf_IO_Desc * sbiod ; /* lowlevel state for LDAP wrapping */
2007-07-18 07:45:16 +00:00
# endif /* HAVE_LDAP_SASL_WRAPPING */
2007-07-17 10:13:53 +00: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 17:41:47 +00:00
# define ADS_SASL_WRAPPING_IN_MAX_WRAPPED 0x0FFFFFFF
uint32 max_wrapped ;
uint32 min_wrapped ;
2007-07-17 10:13:53 +00:00
uint32 size ;
uint8 * buf ;
} in ;
struct {
uint32 ofs ;
uint32 left ;
2007-08-02 17:41:47 +00:00
# define ADS_SASL_WRAPPING_OUT_MAX_WRAPPED 0x00A00000
uint32 max_unwrapped ;
2007-07-17 11:14:42 +00:00
uint32 sig_size ;
2007-07-17 10:13:53 +00:00
uint32 size ;
uint8 * buf ;
} out ;
2007-07-16 11:08:00 +00:00
} ldap ;
2007-07-16 16:08:24 +00:00
# endif /* HAVE_LDAP */
2007-01-24 01:48:08 +00:00
} ADS_STRUCT ;
2005-06-29 14:03:53 +00:00
2002-02-11 15:48:34 +00:00
# ifdef HAVE_ADS
typedef LDAPMod * * ADS_MODLIST ;
# else
typedef void * * ADS_MODLIST ;
# endif
2001-12-05 09:19:25 +00:00
/* time between reconnect attempts */
# define ADS_RECONNECT_TIME 5
2002-04-10 13:25:40 +00:00
/* ldap control oids */
2005-06-29 14:03:53 +00: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-03 22:19:41 +00:00
# define ADS_ASQ_OID "1.2.840.113556.1.4.1504"
2006-05-18 19:34:25 +00:00
# define ADS_EXTENDED_DN_OID "1.2.840.113556.1.4.529"
2007-06-26 09:15:37 +00:00
# define ADS_SD_FLAGS_OID "1.2.840.113556.1.4.801"
2005-06-29 14:03:53 +00:00
2005-10-21 12:50:39 +00: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 17:00:51 +00:00
# define ADS_PINGS 0x0000FFFF /* Ping response */
2002-09-25 15:19:00 +00:00
/* ads auth control flags */
2008-06-24 12:11:06 +02: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 02:55:00 +00:00
2006-05-18 19:34:25 +00: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 09:39:08 +00:00
2010-07-02 00:32:52 +02:00
# include "libads/ads_proto.h"
# ifdef HAVE_LDAP
# include "libads/ads_ldap_protos.h"
# endif
# include "libads/kerberos_proto.h"
2007-08-30 15:39:51 +00:00
2007-05-14 09:50:39 +00:00
# endif /* _INCLUDE_ADS_H_ */