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
28 connect to a share - used when a tree_connect operation comes
29 in. For printing shares this should check that the spool directory
32 static NTSTATUS print_connect(struct request_context *req, const char *sharename)
38 disconnect from a share
40 static NTSTATUS print_disconnect(struct tcon_context *conn)
46 lots of operations are not allowed on printing shares - mostly return NT_STATUS_ACCESS_DENIED
48 static NTSTATUS print_unlink(struct request_context *req, struct smb_unlink *unl)
50 return NT_STATUS_ACCESS_DENIED;
55 ioctl - used for job query
57 static NTSTATUS print_ioctl(struct request_context *req, union smb_ioctl *io)
61 if (io->generic.level != RAW_IOCTL_IOCTL) {
62 return NT_STATUS_NOT_IMPLEMENTED;
65 if (io->ioctl.in.request == IOCTL_QUERY_JOB_INFO) {
66 /* a request for the print job id of an open print job */
67 io->ioctl.out.blob = data_blob_talloc(req->mem_ctx, NULL, 32);
69 data_blob_clear(&io->ioctl.out.blob);
71 p = io->ioctl.out.blob.data;
72 SSVAL(p,0, 1 /* REWRITE: fsp->rap_print_jobid */);
73 push_string(NULL, p+2, lp_netbios_name(), 15, STR_TERMINATE|STR_ASCII);
74 push_string(NULL, p+18, lp_servicename(req->conn->service), 13, STR_TERMINATE|STR_ASCII);
78 return NT_STATUS_INVALID_PARAMETER;
83 initialialise the print backend, registering ourselves with the ntvfs subsystem
85 NTSTATUS ntvfs_print_init(void)
93 ops.type = NTVFS_PRINT;
95 /* fill in all the operations */
96 ops.connect = print_connect;
97 ops.disconnect = print_disconnect;
98 ops.unlink = print_unlink;
99 ops.ioctl = print_ioctl;
101 /* register ourselves with the NTVFS subsystem. We register under the name 'default'
102 as we wish to be the default backend */
103 ret = register_backend("ntvfs", &ops);
105 if (!NT_STATUS_IS_OK(ret)) {
106 DEBUG(0,("Failed to register PRINT backend!\n"));