2 Unix SMB/CIFS implementation.
3 default print NTVFS backend
4 Copyright (C) Andrew Tridgell 2003
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 2 of the License, or
9 (at your option) any later version.
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.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 this implements the print backend, called by the NTVFS subsystem to
22 handle requests on printing shares
26 #include "libcli/raw/ioctl.h"
27 #include "smb_server/smb_server.h"
28 #include "ntvfs/ntvfs.h"
31 connect to a share - used when a tree_connect operation comes
32 in. For printing shares this should check that the spool directory
35 static NTSTATUS print_connect(struct ntvfs_module_context *ntvfs,
36 struct smbsrv_request *req, const char *sharename)
38 struct smbsrv_tcon *tcon = req->tcon;
40 tcon->fs_type = talloc_strdup(tcon, "NTFS");
41 NT_STATUS_HAVE_NO_MEMORY(tcon->fs_type);
43 tcon->dev_type = talloc_strdup(tcon, "LPT1:");
44 NT_STATUS_HAVE_NO_MEMORY(tcon->dev_type);
50 disconnect from a share
52 static NTSTATUS print_disconnect(struct ntvfs_module_context *ntvfs,
53 struct smbsrv_tcon *tcon)
59 lots of operations are not allowed on printing shares - mostly return NT_STATUS_ACCESS_DENIED
61 static NTSTATUS print_unlink(struct ntvfs_module_context *ntvfs,
62 struct smbsrv_request *req, struct smb_unlink *unl)
64 return NT_STATUS_ACCESS_DENIED;
69 ioctl - used for job query
71 static NTSTATUS print_ioctl(struct ntvfs_module_context *ntvfs,
72 struct smbsrv_request *req, union smb_ioctl *io)
76 if (io->generic.level != RAW_IOCTL_IOCTL) {
77 return NT_STATUS_NOT_IMPLEMENTED;
80 if (io->ioctl.in.request == IOCTL_QUERY_JOB_INFO) {
81 /* a request for the print job id of an open print job */
82 io->ioctl.out.blob = data_blob_talloc(req, NULL, 32);
84 data_blob_clear(&io->ioctl.out.blob);
86 p = (char *)io->ioctl.out.blob.data;
87 SSVAL(p,0, 1 /* REWRITE: fsp->rap_print_jobid */);
88 push_string(p+2, lp_netbios_name(), 15, STR_TERMINATE|STR_ASCII);
89 push_string(p+18, lp_servicename(req->tcon->service), 13, STR_TERMINATE|STR_ASCII);
93 return NT_STATUS_INVALID_PARAMETER;
98 initialialise the print backend, registering ourselves with the ntvfs subsystem
100 NTSTATUS ntvfs_print_init(void)
103 struct ntvfs_ops ops;
107 /* fill in the name and type */
108 ops.name = "default";
109 ops.type = NTVFS_PRINT;
111 /* fill in all the operations */
112 ops.connect = print_connect;
113 ops.disconnect = print_disconnect;
114 ops.unlink = print_unlink;
115 ops.ioctl = print_ioctl;
117 /* register ourselves with the NTVFS subsystem. We register under the name 'default'
118 as we wish to be the default backend */
119 ret = ntvfs_register(&ops);
121 if (!NT_STATUS_IS_OK(ret)) {
122 DEBUG(0,("Failed to register PRINT backend!\n"));