CVE-2016-2115: s3:winbindd: use lp_client_ipc_{min,max}_protocol()
[samba.git] / source4 / ntptr / ntptr.h
1 /* 
2    Unix SMB/CIFS implementation.
3
4    NTPTR structures and defines
5
6    Copyright (C) Stefan (metze) Metzmacher 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 /* modules can use the following to determine if the interface has changed */
23 #define NTPTR_INTERFACE_VERSION 0
24
25 struct ntptr_context;
26
27 enum ntptr_HandleType {
28         NTPTR_HANDLE_SERVER,
29         NTPTR_HANDLE_PRINTER,
30         NTPTR_HANDLE_PORT,
31         NTPTR_HANDLE_MONITOR
32 };
33
34 struct ntptr_GenericHandle {
35         enum ntptr_HandleType type;
36         struct ntptr_context *ntptr;
37         const char *object_name;
38         uint32_t access_mask;
39         void *private_data;
40 };
41
42 struct spoolss_OpenPrinterEx;
43 struct spoolss_EnumPrinterData;
44 struct spoolss_DeletePrinterData;
45 struct spoolss_AddForm;
46 struct spoolss_GetForm;
47 struct spoolss_SetForm;
48 struct spoolss_DeleteForm;
49 struct spoolss_AddPrinterDriver;
50 struct spoolss_DeletePrinterDriver;
51 struct spoolss_GetPrinterDriverDirectory;
52 struct spoolss_AddPrinter;
53 struct spoolss_GetPrinter;
54 struct spoolss_SetPrinter;
55 struct spoolss_DeletePrinter;
56 struct spoolss_GetPrinterDriver;
57 struct spoolss_AddJob;
58 struct spoolss_EnumJobs;
59 struct spoolss_SetJob;
60 struct spoolss_GetJob;
61 struct spoolss_ScheduleJob;
62 struct spoolss_ReadPrinter;
63 struct spoolss_WritePrinter;
64 struct spoolss_StartDocPrinter;
65 struct spoolss_EndDocPrinter;
66 struct spoolss_StartPagePrinter;
67 struct spoolss_EndPagePrinter;
68 struct spoolss_GetPrinterData;
69 struct spoolss_SetPrinterData;
70 struct spoolss_EnumPrinterDrivers;
71 struct spoolss_EnumMonitors;
72 struct spoolss_EnumPrinters;
73 struct spoolss_EnumForms;
74 struct spoolss_EnumPorts;
75 struct spoolss_EnumPrintProcessors;
76 struct spoolss_XcvData;
77 struct spoolss_GetPrintProcessorDirectory;
78
79 /* the ntptr operations structure - contains function pointers to 
80    the backend implementations of each operation */
81 struct ntptr_ops {
82         const char *name;
83
84         /* initial setup */
85         NTSTATUS (*init_context)(struct ntptr_context *ntptr);
86
87         /* PrintServer functions */
88         WERROR (*OpenPrintServer)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
89                                   struct spoolss_OpenPrinterEx *r,
90                                   const char *printer_name,
91                                   struct ntptr_GenericHandle **server);
92         WERROR (*XcvDataPrintServer)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
93                                      struct spoolss_XcvData *r);
94
95         /* PrintServer PrinterData functions */
96         WERROR (*EnumPrintServerData)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
97                                      struct spoolss_EnumPrinterData *r);
98         WERROR (*GetPrintServerData)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
99                                      struct spoolss_GetPrinterData *r);
100         WERROR (*SetPrintServerData)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
101                                      struct spoolss_SetPrinterData *r);
102         WERROR (*DeletePrintServerData)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
103                                         struct spoolss_DeletePrinterData *r);
104
105         /* PrintServer Form functions */
106         WERROR (*EnumPrintServerForms)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
107                                        struct spoolss_EnumForms *r);
108         WERROR (*AddPrintServerForm)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
109                                      struct spoolss_AddForm *r);
110         WERROR (*SetPrintServerForm)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
111                                      struct spoolss_SetForm *r);
112         WERROR (*DeletePrintServerForm)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
113                                         struct spoolss_DeleteForm *r);
114
115         /* PrintServer Driver functions */
116         WERROR (*EnumPrinterDrivers)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
117                                      struct spoolss_EnumPrinterDrivers *r);
118         WERROR (*AddPrinterDriver)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
119                                    struct spoolss_AddPrinterDriver *r);
120         WERROR (*DeletePrinterDriver)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
121                                       struct spoolss_DeletePrinterDriver *r);
122         WERROR (*GetPrinterDriverDirectory)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
123                                             struct spoolss_GetPrinterDriverDirectory *r);
124
125         /* Port functions */
126         WERROR (*EnumPorts)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
127                             struct spoolss_EnumPorts *r);
128         WERROR (*OpenPort)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
129                            struct spoolss_OpenPrinterEx *r,
130                            const char *port_name,
131                            struct ntptr_GenericHandle **port);
132         WERROR (*XcvDataPort)(struct ntptr_GenericHandle *port, TALLOC_CTX *mem_ctx,
133                               struct spoolss_XcvData *r);
134         
135         /* Monitor functions */
136         WERROR (*EnumMonitors)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
137                                struct spoolss_EnumMonitors *r);
138         WERROR (*OpenMonitor)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
139                               struct spoolss_OpenPrinterEx *r,
140                               const char *monitor_name,
141                               struct ntptr_GenericHandle **monitor);
142         WERROR (*XcvDataMonitor)(struct ntptr_GenericHandle *monitor, TALLOC_CTX *mem_ctx,
143                                  struct spoolss_XcvData *r);
144
145         /* PrintProcessor functions */
146         WERROR (*EnumPrintProcessors)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
147                                       struct spoolss_EnumPrintProcessors *r);
148         WERROR (*GetPrintProcessorDirectory)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
149                                              struct spoolss_GetPrintProcessorDirectory *r);
150
151         /* Printer functions */
152         WERROR (*EnumPrinters)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
153                                struct spoolss_EnumPrinters *r);
154         WERROR (*OpenPrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
155                               struct spoolss_OpenPrinterEx *r,
156                               const char *printer_name,
157                               struct ntptr_GenericHandle **printer);
158         WERROR (*AddPrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
159                              struct spoolss_AddPrinter *r,
160                              struct ntptr_GenericHandle **printer);
161         WERROR (*GetPrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
162                              struct spoolss_GetPrinter *r);
163         WERROR (*SetPrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
164                              struct spoolss_SetPrinter *r);
165         WERROR (*DeletePrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
166                                 struct spoolss_DeletePrinter *r);
167         WERROR (*XcvDataPrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
168                                  struct spoolss_XcvData *r);
169
170         /* Printer Driver functions */
171         WERROR (*GetPrinterDriver)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
172                                    struct spoolss_GetPrinterDriver *r);
173
174         /* Printer PrinterData functions */
175         WERROR (*EnumPrinterData)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
176                                   struct spoolss_EnumPrinterData *r);
177         WERROR (*GetPrinterData)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
178                                  struct spoolss_GetPrinterData *r);
179         WERROR (*SetPrinterData)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
180                                  struct spoolss_SetPrinterData *r);
181         WERROR (*DeletePrinterData)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
182                                     struct spoolss_DeletePrinterData *r);
183
184         /* Printer Form functions */
185         WERROR (*EnumPrinterForms)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
186                                    struct spoolss_EnumForms *r);
187         WERROR (*AddPrinterForm)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
188                                  struct spoolss_AddForm *r);
189         WERROR (*GetPrinterForm)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
190                                  struct spoolss_GetForm *r);
191         WERROR (*SetPrinterForm)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
192                                  struct spoolss_SetForm *r);
193         WERROR (*DeletePrinterForm)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
194                                     struct spoolss_DeleteForm *r);
195
196         /* Printer Job functions */
197         WERROR (*EnumJobs)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
198                            struct spoolss_EnumJobs *r);
199         WERROR (*AddJob)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
200                          struct spoolss_AddJob *r);
201         WERROR (*ScheduleJob)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
202                               struct spoolss_ScheduleJob *r);
203         WERROR (*GetJob)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
204                          struct spoolss_GetJob *r);
205         WERROR (*SetJob)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
206                          struct spoolss_SetJob *r);
207
208         /* Printer Printing functions */
209         WERROR (*StartDocPrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
210                                   struct spoolss_StartDocPrinter *r);
211         WERROR (*EndDocPrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
212                                 struct spoolss_EndDocPrinter *r);
213         WERROR (*StartPagePrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
214                                    struct spoolss_StartPagePrinter *r);
215         WERROR (*EndPagePrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
216                                  struct spoolss_EndPagePrinter *r);
217         WERROR (*WritePrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
218                                struct spoolss_WritePrinter *r);
219         WERROR (*ReadPrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
220                               struct spoolss_ReadPrinter *r);
221 };
222
223 struct ntptr_context {
224         const struct ntptr_ops *ops;
225         void *private_data;
226         struct tevent_context *ev_ctx;
227         struct loadparm_context *lp_ctx;
228 };
229
230 /* this structure is used by backends to determine the size of some critical types */
231 struct ntptr_critical_sizes {
232         int interface_version;
233         int sizeof_ntptr_critical_sizes;
234         int sizeof_ntptr_context;
235         int sizeof_ntptr_ops;
236 };
237
238 struct loadparm_context;
239
240 #include "ntptr/ntptr_proto.h"