5 Unix SMB/CIFS implementation.
7 Copyright (C) Andrew Tridgell 1992-2000
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 This file defines the low-level printing system interfaces used by the
25 SAMBA printing subsystem.
27 #include "tdb_compat.h"
28 #include "lib/param/loadparm.h"
30 /* Extra fields above "LPQ_PRINTING" are used to map extra NT status codes. */
44 LPQ_USER_INTERVENTION
,
46 /* smbd is dooing the file spooling before passing control to spoolss */
50 typedef struct _print_queue_struct
{
51 int sysjob
; /* normally the UNIX jobid -- see note in
52 printing.c:traverse_fn_delete() */
62 enum {LPSTAT_OK
, LPSTAT_STOPPED
, LPSTAT_ERROR
};
68 } print_status_struct
;
70 /* Information for print jobs */
72 pid_t pid
; /* which process launched the job */
73 uint32_t jobid
; /* the spoolss print job identifier */
74 int sysjob
; /* the system (lp) job number */
75 int fd
; /* file descriptor of open file if open */
76 time_t starttime
; /* when the job started spooling */
77 int status
; /* the status of this job */
78 size_t size
; /* the size of the job so far */
79 int page_count
; /* then number of pages so far */
80 bool spooled
; /* has it been sent to the spooler yet? */
81 bool smbjob
; /* set if the job is a SMB job */
82 fstring filename
; /* the filename used to spool the file */
83 fstring jobname
; /* the job name given to us by the client */
84 fstring user
; /* the user who started the job */
85 fstring clientmachine
; /* The client machine which started this job */
86 fstring queuename
; /* service number of printer for this job */
87 struct spoolss_DeviceMode
*devmode
;
90 /* Information for print interfaces */
93 /* value of the 'printing' option for this service */
94 enum printing_types type
;
96 int (*queue_get
)(const char *printer_name
,
97 enum printing_types printing_type
,
99 print_queue_struct
**q
,
100 print_status_struct
*status
);
101 int (*queue_pause
)(int snum
);
102 int (*queue_resume
)(int snum
);
103 int (*job_delete
)(const char *sharename
, const char *lprm_command
, struct printjob
*pjob
);
104 int (*job_pause
)(int snum
, struct printjob
*pjob
);
105 int (*job_resume
)(int snum
, struct printjob
*pjob
);
106 int (*job_submit
)(int snum
, struct printjob
*pjob
,
107 enum printing_types printing_type
,
111 extern struct printif generic_printif
;
114 extern struct printif cups_printif
;
115 #endif /* HAVE_CUPS */
118 extern struct printif iprint_printif
;
119 #endif /* HAVE_IPRINT */
121 /* PRINT_MAX_JOBID is now defined in local.h */
122 #define UNIX_JOB_START PRINT_MAX_JOBID
123 #define NEXT_JOBID(j) ((j+1) % PRINT_MAX_JOBID > 0 ? (j+1) % PRINT_MAX_JOBID : 1)
125 #define MAX_CACHE_VALID_TIME 3600
126 #define CUPS_DEFAULT_CONNECTION_TIMEOUT 30
128 #ifndef PRINT_SPOOL_PREFIX
129 #define PRINT_SPOOL_PREFIX "smbprn."
131 #define PRINT_DATABASE_VERSION 8
134 #define DEFAULT_PRINTING PRINT_AIX
135 #define PRINTCAP_NAME "/etc/qconfig"
139 #define DEFAULT_PRINTING PRINT_HPUX
143 #define DEFAULT_PRINTING PRINT_QNX
146 #ifndef DEFAULT_PRINTING
148 #define DEFAULT_PRINTING PRINT_CUPS
149 #define PRINTCAP_NAME "cups"
151 #define DEFAULT_PRINTING PRINT_SYSV
152 #define PRINTCAP_NAME "lpstat"
154 #define DEFAULT_PRINTING PRINT_BSD
155 #define PRINTCAP_NAME "/etc/printcap"
159 #ifndef PRINTCAP_NAME
160 #define PRINTCAP_NAME "/etc/printcap"
163 /* There can be this many printing tdb's open, plus any locked ones. */
164 #define MAX_PRINT_DBS_OPEN 1
166 struct tdb_print_db
{
167 struct tdb_print_db
*next
, *prev
;
168 struct tdb_context
*tdb
;
170 fstring printer_name
;
174 * Used for print notify
177 #define NOTIFY_PID_LIST_KEY "NOTIFY_PID_LIST"
179 /* The following definitions come from printing/printspoolss.c */
181 NTSTATUS
print_spool_open(files_struct
*fsp
,
183 uint64_t current_vuid
);
185 int print_spool_write(files_struct
*fsp
, const char *data
, uint32_t size
,
186 off_t offset
, uint32_t *written
);
188 void print_spool_end(files_struct
*fsp
, enum file_close_type close_type
);
190 void print_spool_terminate(struct connection_struct
*conn
,
191 struct print_file_data
*print_file
);
192 uint16_t print_spool_rap_jobid(struct print_file_data
*print_file
);
194 /* The following definitions come from printing/printing.c */
196 uint32
sysjob_to_jobid_pdb(struct tdb_print_db
*pdb
, int sysjob
);
197 uint32
sysjob_to_jobid(int unix_jobid
);
198 int jobid_to_sysjob_pdb(struct tdb_print_db
*pdb
, uint32_t jobid
);
199 bool print_notify_register_pid(int snum
);
200 bool print_notify_deregister_pid(int snum
);
201 bool print_job_exists(const char* sharename
, uint32 jobid
);
202 struct spoolss_DeviceMode
*print_job_devmode(TALLOC_CTX
*mem_ctx
,
203 const char *sharename
,
205 bool print_job_set_name(struct tevent_context
*ev
,
206 struct messaging_context
*msg_ctx
,
207 const char *sharename
, uint32 jobid
, const char *name
);
208 bool print_job_get_name(TALLOC_CTX
*mem_ctx
, const char *sharename
, uint32_t jobid
, char **name
);
209 WERROR
print_job_delete(const struct auth_session_info
*server_info
,
210 struct messaging_context
*msg_ctx
,
211 int snum
, uint32_t jobid
);
212 WERROR
print_job_pause(const struct auth_session_info
*server_info
,
213 struct messaging_context
*msg_ctx
,
214 int snum
, uint32 jobid
);
215 WERROR
print_job_resume(const struct auth_session_info
*server_info
,
216 struct messaging_context
*msg_ctx
,
217 int snum
, uint32 jobid
);
218 ssize_t
print_job_write(struct tevent_context
*ev
,
219 struct messaging_context
*msg_ctx
,
220 int snum
, uint32 jobid
, const char *buf
, size_t size
);
221 int print_queue_length(struct messaging_context
*msg_ctx
, int snum
,
222 print_status_struct
*pstatus
);
223 WERROR
print_job_start(const struct auth_session_info
*server_info
,
224 struct messaging_context
*msg_ctx
,
225 const char *clientmachine
,
226 int snum
, const char *docname
, const char *filename
,
227 struct spoolss_DeviceMode
*devmode
, uint32_t *_jobid
);
228 void print_job_endpage(struct messaging_context
*msg_ctx
,
229 int snum
, uint32 jobid
);
230 NTSTATUS
print_job_end(struct messaging_context
*msg_ctx
, int snum
,
231 uint32 jobid
, enum file_close_type close_type
);
232 int print_queue_status(struct messaging_context
*msg_ctx
, int snum
,
233 print_queue_struct
**ppqueue
,
234 print_status_struct
*status
);
235 WERROR
print_queue_pause(const struct auth_session_info
*server_info
,
236 struct messaging_context
*msg_ctx
, int snum
);
237 WERROR
print_queue_resume(const struct auth_session_info
*server_info
,
238 struct messaging_context
*msg_ctx
, int snum
);
239 WERROR
print_queue_purge(const struct auth_session_info
*server_info
,
240 struct messaging_context
*msg_ctx
, int snum
);
241 uint16
pjobid_to_rap(const char* sharename
, uint32 jobid
);
242 bool rap_to_pjobid(uint16 rap_jobid
, fstring sharename
, uint32
*pjobid
);
243 void rap_jobid_delete(const char* sharename
, uint32 jobid
);
244 bool print_backend_init(struct messaging_context
*msg_ctx
);
245 void printing_end(void);
247 /* The following definitions come from printing/lpq_parse.c */
249 bool parse_lpq_entry(enum printing_types printing_type
,char *line
,
250 print_queue_struct
*buf
,
251 print_status_struct
*status
,bool first
);
253 /* The following definitions come from printing/printing_db.c */
255 struct tdb_print_db
*get_print_db_byname(const char *printername
);
256 void release_print_db( struct tdb_print_db
*pdb
);
257 void close_all_print_db(void);
258 TDB_DATA
get_printer_notify_pid_list(struct tdb_context
*tdb
, const char *printer_name
, bool cleanlist
);
260 void print_queue_receive(struct messaging_context
*msg
,
263 struct server_id server_id
,
265 #endif /* PRINTING_H_ */