named_pipe_auth: implement tstream_npa_accept_existing_send/recv
[kamenim/samba.git] / libcli / named_pipe_auth / npa_tstream.h
1 /*
2    Unix SMB/CIFS implementation.
3
4    Copyright (C) Stefan Metzmacher 2009
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef NPA_TSTREAM_H
21 #define NPA_TSTREAM_H
22
23 struct tevent_req;
24 struct tevent_context;
25 struct netr_SamInfo3;
26
27 struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
28                                         struct tevent_context *ev,
29                                         const char *directory,
30                                         const char *npipe,
31                                         const struct tsocket_address *client,
32                                         const char *client_name_in,
33                                         const struct tsocket_address *server,
34                                         const char *server_name,
35                                         const struct netr_SamInfo3 *info3,
36                                         DATA_BLOB session_key,
37                                         DATA_BLOB delegated_creds);
38 int _tstream_npa_connect_recv(struct tevent_req *req,
39                               int *perrno,
40                               TALLOC_CTX *mem_ctx,
41                               struct tstream_context **stream,
42                               uint16_t *file_type,
43                               uint16_t *device_state,
44                               uint64_t *allocation_size,
45                               const char *location);
46 #define tstream_npa_connect_recv(req, perrno, mem_ctx, stream, f, d, a) \
47         _tstream_npa_connect_recv(req, perrno, mem_ctx, stream, f, d, a, \
48                                   __location__)
49
50 int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx,
51                                  int fd,
52                                  uint16_t file_type,
53                                  struct tstream_context **_stream,
54                                  const char *location);
55 #define tstream_npa_existing_socket(mem_ctx, fd, ft, stream) \
56         _tstream_npa_existing_socket(mem_ctx, fd, ft, stream, \
57                                      __location__)
58
59
60 /**
61  * @brief Accepts a connection for authenticated named pipes
62  *
63  * @param[in]  mem_ctx          The memory context for the operation
64  * @param[in]  ev               The tevent_context for the operation
65  * @param[in]  plain            The plain tstream_context of the bsd unix
66  *                              domain socket.
67  *                              This must be valid for the whole life of the
68  *                              resulting npa tstream_context!
69  * @param[in]  file_type        The file_type, message mode or byte mode
70  * @param[in]  device_state     The reported device state
71  * @param[in]  allocation_size  The reported allocation size
72  *
73  * @return the tevent_req handle
74  */
75 struct tevent_req *tstream_npa_accept_existing_send(TALLOC_CTX *mem_ctx,
76                                         struct tevent_context *ev,
77                                         struct tstream_context *plain,
78                                         uint16_t file_type,
79                                         uint16_t device_state,
80                                         uint64_t allocation_size);
81
82 /**
83  * @brief The receive end of the previous async function
84  *
85  * @param[in]  req              The tevent_req handle
86  * @param[out] perrno           Pointer to store the errno in case of error
87  * @param[in]  mem_ctx          The memory context for the results
88  * @param[out] stream           The resulting stream
89  * @param[out] client           The resulting client address
90  * @param[out] client_name      The resulting client name
91  * @param[out] server           The resulting server address
92  * @param[out] server_name      The resulting server name
93  * @param[out] info3            The info3 auth for the connecting user.
94  * @param[out] session_key      The resulting session key
95  * @param[out] delegated_creds  Delegated credentials
96  *
97  * @return  0 if successful, -1 on failure with *perror filled.
98  */
99 int _tstream_npa_accept_existing_recv(struct tevent_req *req,
100                                       int *perrno,
101                                       TALLOC_CTX *mem_ctx,
102                                       struct tstream_context **stream,
103                                       struct tsocket_address **client,
104                                       char **client_name,
105                                       struct tsocket_address **server,
106                                       char **server_name,
107                                       struct netr_SamInfo3 **info3,
108                                       DATA_BLOB *session_key,
109                                       DATA_BLOB *delegated_creds,
110                                       const char *location);
111 #define tstream_npa_accept_existing_recv(req, perrno, \
112                                          mem_ctx, stream, \
113                                          client, client_name, \
114                                          server, server_name, \
115                                          info3, session_key, \
116                                          delegated_creds) \
117         _tstream_npa_accept_existing_recv(req, perrno, \
118                                           mem_ctx, stream, \
119                                           client, client_name, \
120                                           server, server_name, \
121                                           info3, session_key, \
122                                           delegated_creds, \
123                                           __location__)
124
125 #endif /* NPA_TSTREAM_H */