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
*/
2011-05-06 14:54:59 +04:00
# include "libads/ads_status.h"
2011-02-24 13:56:08 +03:00
# include "smb_ldap.h"
2017-05-05 15:37:20 +03:00
struct ads_saslwrap ;
2007-07-17 14:13:53 +04:00
struct ads_saslwrap_ops {
const char * name ;
2017-05-05 15:37:20 +03:00
ADS_STATUS ( * wrap ) ( struct ads_saslwrap * , uint8_t * buf , uint32_t len ) ;
ADS_STATUS ( * unwrap ) ( struct ads_saslwrap * ) ;
void ( * disconnect ) ( struct ads_saslwrap * ) ;
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
2017-05-05 15:37:20 +03:00
struct ads_saslwrap {
/* expected SASL wrapping type */
enum ads_saslwrap_type wrap_type ;
/* SASL wrapping operations */
const struct ads_saslwrap_ops * wrap_ops ;
# ifdef HAVE_LDAP_SASL_WRAPPING
Sockbuf_IO_Desc * sbiod ; /* lowlevel state for LDAP wrapping */
# endif /* HAVE_LDAP_SASL_WRAPPING */
TALLOC_CTX * mem_ctx ;
void * wrap_private_data ;
struct {
uint32_t ofs ;
uint32_t needed ;
uint32_t left ;
# define ADS_SASL_WRAPPING_IN_MAX_WRAPPED 0x0FFFFFFF
uint32_t max_wrapped ;
uint32_t min_wrapped ;
uint32_t size ;
uint8_t * buf ;
} in ;
struct {
uint32_t ofs ;
uint32_t left ;
# define ADS_SASL_WRAPPING_OUT_MAX_WRAPPED 0x00A00000
uint32_t max_unwrapped ;
uint32_t sig_size ;
uint32_t size ;
uint8_t * buf ;
} out ;
} ;
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? */
2011-09-12 19:19:27 +04:00
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
bool gc ; /* Is this a global catalog server? */
2017-04-04 03:42:17 +03:00
bool no_fallback ; /* Bail if the ldap_server is not available */
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 ;
2012-09-07 22:14:08 +04:00
char * ccache_name ;
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 {
2015-04-18 18:40:14 +03:00
uint32_t 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 ;
2012-05-18 16:01:14 +04:00
int ldap_page_size ;
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
2017-05-05 15:37:20 +03:00
struct ads_saslwrap ldap_wrap_data ;
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 */
2010-09-07 04:15:09 +04:00
time_t last_attempt ; /* last attempt to reconnect, monotonic clock */
2007-07-16 15:08:00 +04:00
int port ;
} 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 */
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_ */