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 25struct ntptr_context; 26 27enum ntptr_HandleType { 28 NTPTR_HANDLE_SERVER, 29 NTPTR_HANDLE_PRINTER, 30 NTPTR_HANDLE_PORT, 31 NTPTR_HANDLE_MONITOR 32}; 33 34struct 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 42struct spoolss_OpenPrinterEx; 43struct spoolss_EnumPrinterData; 44struct spoolss_DeletePrinterData; 45struct spoolss_AddForm; 46struct spoolss_GetForm; 47struct spoolss_SetForm; 48struct spoolss_DeleteForm; 49struct spoolss_AddPrinterDriver; 50struct spoolss_DeletePrinterDriver; 51struct spoolss_GetPrinterDriverDirectory; 52struct spoolss_AddPrinter; 53struct spoolss_GetPrinter; 54struct spoolss_SetPrinter; 55struct spoolss_DeletePrinter; 56struct spoolss_GetPrinterDriver; 57struct spoolss_AddJob; 58struct spoolss_EnumJobs; 59struct spoolss_SetJob; 60struct spoolss_GetJob; 61struct spoolss_ScheduleJob; 62struct spoolss_ReadPrinter; 63struct spoolss_WritePrinter; 64struct spoolss_StartDocPrinter; 65struct spoolss_EndDocPrinter; 66struct spoolss_StartPagePrinter; 67struct spoolss_EndPagePrinter; 68struct spoolss_GetPrinterData; 69struct spoolss_SetPrinterData; 70struct spoolss_EnumPrinterDrivers; 71struct spoolss_EnumMonitors; 72struct spoolss_EnumPrinters; 73struct spoolss_EnumForms; 74struct spoolss_EnumPorts; 75struct spoolss_EnumPrintProcessors; 76struct spoolss_XcvData; 77struct spoolss_GetPrintProcessorDirectory; 78 79/* the ntptr operations structure - contains function pointers to 80 the backend implementations of each operation */ 81struct 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 223struct 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 */ 231struct 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 238struct loadparm_context; 239 240#include "ntptr/ntptr_proto.h" 241