~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to source4/libcli/cldap/cldap.h

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   Unix SMB/CIFS implementation.
 
3
 
 
4
   a async CLDAP library
 
5
 
 
6
   Copyright (C) Andrew Tridgell 2005
 
7
 
 
8
   This program is free software; you can redistribute it and/or modify
 
9
   it under the terms of the GNU General Public License as published by
 
10
   the Free Software Foundation; either version 3 of the License, or
 
11
   (at your option) any later version.
 
12
 
 
13
   This program is distributed in the hope that it will be useful,
 
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
   GNU General Public License for more details.
 
17
 
 
18
   You should have received a copy of the GNU General Public License
 
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
20
*/
 
21
 
 
22
#include "../lib/util/asn1.h"
 
23
#include "../libcli/netlogon.h"
 
24
 
 
25
struct ldap_message;
 
26
 
 
27
enum cldap_request_state {CLDAP_REQUEST_SEND, 
 
28
                          CLDAP_REQUEST_WAIT, 
 
29
                          CLDAP_REQUEST_DONE,
 
30
                          CLDAP_REQUEST_ERROR};
 
31
 
 
32
/*
 
33
  a cldap request packet
 
34
*/
 
35
struct cldap_request {
 
36
        struct cldap_request *next, *prev;
 
37
 
 
38
        struct cldap_socket *cldap;
 
39
 
 
40
        enum cldap_request_state state;
 
41
        NTSTATUS status;
 
42
 
 
43
        /* where to send the request */
 
44
        struct socket_address *dest;
 
45
 
 
46
        /* timeout between retries (seconds) */
 
47
        int timeout;
 
48
        int num_retries;
 
49
 
 
50
        bool is_reply;
 
51
 
 
52
        /* the ldap message_id */
 
53
        int message_id;
 
54
 
 
55
        struct tevent_timer *te;
 
56
 
 
57
        /* the encoded request */
 
58
        DATA_BLOB encoded;
 
59
 
 
60
        /* the reply data */
 
61
        struct asn1_data *asn1;
 
62
 
 
63
        /* information on what to do on completion */
 
64
        struct {
 
65
                void (*fn)(struct cldap_request *);
 
66
                void *private_data;
 
67
        } async;
 
68
};
 
69
 
 
70
/*
 
71
  context structure for operations on cldap packets
 
72
*/
 
73
struct cldap_socket {
 
74
        struct socket_context *sock;
 
75
        struct tevent_context *event_ctx;
 
76
        struct smb_iconv_convenience *iconv_convenience;
 
77
 
 
78
        /* the fd event */
 
79
        struct tevent_fd *fde;
 
80
 
 
81
        /* a queue of outgoing requests */
 
82
        struct cldap_request *send_queue;
 
83
 
 
84
        /* mapping from message_id to pending request */
 
85
        struct idr_context *idr;
 
86
 
 
87
        /* what to do with incoming request packets */
 
88
        struct {
 
89
                void (*handler)(struct cldap_socket *, struct ldap_message *, 
 
90
                                struct socket_address *);
 
91
                void *private_data;
 
92
        } incoming;
 
93
};
 
94
 
 
95
 
 
96
/*
 
97
 a general cldap search request  
 
98
*/
 
99
struct cldap_search {
 
100
        struct {
 
101
                const char *dest_address;
 
102
                uint16_t dest_port;
 
103
                const char *filter;
 
104
                const char **attributes;
 
105
                int timeout;
 
106
                int retries;
 
107
        } in;
 
108
        struct {
 
109
                struct ldap_SearchResEntry *response;
 
110
                struct ldap_Result         *result;
 
111
        } out;
 
112
};
 
113
 
 
114
struct cldap_socket *cldap_socket_init(TALLOC_CTX *mem_ctx, 
 
115
                                       struct tevent_context *event_ctx, 
 
116
                                       struct smb_iconv_convenience *iconv_convenience);
 
117
NTSTATUS cldap_set_incoming_handler(struct cldap_socket *cldap,
 
118
                                    void (*handler)(struct cldap_socket *, struct ldap_message *, 
 
119
                                                    struct socket_address *),
 
120
                                    void *private_data);
 
121
struct cldap_request *cldap_search_send(struct cldap_socket *cldap, 
 
122
                                        struct cldap_search *io);
 
123
NTSTATUS cldap_search_recv(struct cldap_request *req, TALLOC_CTX *mem_ctx, 
 
124
                           struct cldap_search *io);
 
125
NTSTATUS cldap_search(struct cldap_socket *cldap, TALLOC_CTX *mem_ctx, 
 
126
                      struct cldap_search *io);
 
127
 
 
128
 
 
129
/*
 
130
  a general cldap reply
 
131
*/
 
132
struct cldap_reply {
 
133
        uint32_t messageid;
 
134
        struct socket_address *dest;
 
135
        struct ldap_SearchResEntry *response;
 
136
        struct ldap_Result         *result;
 
137
};
 
138
 
 
139
NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io);
 
140
 
 
141
NTSTATUS cldap_empty_reply(struct cldap_socket *cldap, 
 
142
                           uint32_t message_id,
 
143
                           struct socket_address *src);
 
144
NTSTATUS cldap_error_reply(struct cldap_socket *cldap, 
 
145
                           uint32_t message_id,
 
146
                           struct socket_address *src,
 
147
                           int resultcode,
 
148
                           const char *errormessage);
 
149
 
 
150
/*
 
151
  a netlogon cldap request  
 
152
*/
 
153
struct cldap_netlogon {
 
154
        struct {
 
155
                const char *dest_address;
 
156
                uint16_t dest_port;
 
157
                const char *realm;
 
158
                const char *host;
 
159
                const char *user;
 
160
                const char *domain_guid;
 
161
                const char *domain_sid;
 
162
                int acct_control;
 
163
                uint32_t version;
 
164
                bool map_response;
 
165
        } in;
 
166
        struct {
 
167
                struct netlogon_samlogon_response netlogon;
 
168
        } out;
 
169
};
 
170
 
 
171
struct cldap_request *cldap_netlogon_send(struct cldap_socket *cldap, 
 
172
                                          struct cldap_netlogon *io);
 
173
NTSTATUS cldap_netlogon_recv(struct cldap_request *req, 
 
174
                             TALLOC_CTX *mem_ctx, 
 
175
                             struct cldap_netlogon *io);
 
176
NTSTATUS cldap_netlogon(struct cldap_socket *cldap, 
 
177
                        TALLOC_CTX *mem_ctx, struct cldap_netlogon *io);
 
178
NTSTATUS cldap_netlogon_reply(struct cldap_socket *cldap, 
 
179
                              uint32_t message_id,
 
180
                              struct socket_address *src,
 
181
                              uint32_t version,
 
182
                              struct netlogon_samlogon_response *netlogon);