s4:libcli/smb2: setup a smbXcli_tcon for each smb2_tree
[Samba/gebeck_regimport.git] / source3 / include / ads.h
blob91a0f8162f90b302ddfe48517520235902ec5353
1 #ifndef _INCLUDE_ADS_H_
2 #define _INCLUDE_ADS_H_
3 /*
4 header for ads (active directory) library routines
6 basically this is a wrapper around ldap
7 */
9 #include "libads/ads_status.h"
10 #include "smb_ldap.h"
12 struct ads_struct;
14 struct ads_saslwrap_ops {
15 const char *name;
16 ADS_STATUS (*wrap)(struct ads_struct *, uint8 *buf, uint32 len);
17 ADS_STATUS (*unwrap)(struct ads_struct *);
18 void (*disconnect)(struct ads_struct *);
21 enum ads_saslwrap_type {
22 ADS_SASLWRAP_TYPE_PLAIN = 1,
23 ADS_SASLWRAP_TYPE_SIGN = 2,
24 ADS_SASLWRAP_TYPE_SEAL = 4
27 typedef struct ads_struct {
28 int is_mine; /* do I own this structure's memory? */
30 /* info needed to find the server */
31 struct {
32 char *realm;
33 char *workgroup;
34 char *ldap_server;
35 int foreign; /* set to 1 if connecting to a foreign
36 * realm */
37 bool gc; /* Is this a global catalog server? */
38 } server;
40 /* info needed to authenticate */
41 struct {
42 char *realm;
43 char *password;
44 char *user_name;
45 char *kdc_server;
46 unsigned flags;
47 int time_offset;
48 time_t tgt_expire;
49 time_t tgs_expire;
50 time_t renewable;
51 } auth;
53 /* info derived from the servers config */
54 struct {
55 uint32 flags; /* cldap flags identifying the services. */
56 char *realm;
57 char *bind_path;
58 char *ldap_server_name;
59 char *server_site_name;
60 char *client_site_name;
61 time_t current_time;
62 char *schema_path;
63 char *config_path;
64 int ldap_page_size;
65 } config;
67 /* info about the current LDAP connection */
68 #ifdef HAVE_LDAP
69 struct {
70 LDAP *ld;
71 struct sockaddr_storage ss; /* the ip of the active connection, if any */
72 time_t last_attempt; /* last attempt to reconnect, monotonic clock */
73 int port;
75 enum ads_saslwrap_type wrap_type;
77 #ifdef HAVE_LDAP_SASL_WRAPPING
78 Sockbuf_IO_Desc *sbiod; /* lowlevel state for LDAP wrapping */
79 #endif /* HAVE_LDAP_SASL_WRAPPING */
80 TALLOC_CTX *mem_ctx;
81 const struct ads_saslwrap_ops *wrap_ops;
82 void *wrap_private_data;
83 struct {
84 uint32 ofs;
85 uint32 needed;
86 uint32 left;
87 #define ADS_SASL_WRAPPING_IN_MAX_WRAPPED 0x0FFFFFFF
88 uint32 max_wrapped;
89 uint32 min_wrapped;
90 uint32 size;
91 uint8 *buf;
92 } in;
93 struct {
94 uint32 ofs;
95 uint32 left;
96 #define ADS_SASL_WRAPPING_OUT_MAX_WRAPPED 0x00A00000
97 uint32 max_unwrapped;
98 uint32 sig_size;
99 uint32 size;
100 uint8 *buf;
101 } out;
102 } ldap;
103 #endif /* HAVE_LDAP */
104 } ADS_STRUCT;
106 #ifdef HAVE_ADS
107 typedef LDAPMod **ADS_MODLIST;
108 #else
109 typedef void **ADS_MODLIST;
110 #endif
112 /* time between reconnect attempts */
113 #define ADS_RECONNECT_TIME 5
115 /* ldap control oids */
116 #define ADS_PAGE_CTL_OID "1.2.840.113556.1.4.319"
117 #define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339"
118 #define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473"
119 #define ADS_PERMIT_MODIFY_OID "1.2.840.113556.1.4.1413"
120 #define ADS_ASQ_OID "1.2.840.113556.1.4.1504"
121 #define ADS_EXTENDED_DN_OID "1.2.840.113556.1.4.529"
122 #define ADS_SD_FLAGS_OID "1.2.840.113556.1.4.801"
124 /* ldap bitwise searches */
125 #define ADS_LDAP_MATCHING_RULE_BIT_AND "1.2.840.113556.1.4.803"
126 #define ADS_LDAP_MATCHING_RULE_BIT_OR "1.2.840.113556.1.4.804"
128 #define ADS_PINGS 0x0000FFFF /* Ping response */
130 enum ads_extended_dn_flags {
131 ADS_EXTENDED_DN_HEX_STRING = 0,
132 ADS_EXTENDED_DN_STRING = 1 /* not supported on win2k */
135 /* this is probably not very well suited to pass other controls generically but
136 * is good enough for the extended dn control where it is only used for atm */
138 typedef struct {
139 const char *control;
140 int val;
141 int critical;
142 } ads_control;
144 #include "libads/ads_proto.h"
146 #ifdef HAVE_LDAP
147 #include "libads/ads_ldap_protos.h"
148 #endif
150 #include "libads/kerberos_proto.h"
152 #endif /* _INCLUDE_ADS_H_ */