summaryrefslogtreecommitdiffstats
path: root/source3/printing/printing.c
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2012-02-08 18:47:11 +0100
committerDavid Disseldorp <ddiss@samba.org>2012-06-26 16:10:39 +0200
commitc29773d89036153a122f577ff9fb2a789e7f156f (patch)
treee4ec146dfa33a1e97d2d1ecebdd5ab30a68cf01e /source3/printing/printing.c
parent91cd9a47974e0099d550c88ee646ee3b1f44df72 (diff)
downloadsamba-c29773d89036153a122f577ff9fb2a789e7f156f.tar.gz
samba-c29773d89036153a122f577ff9fb2a789e7f156f.tar.xz
samba-c29773d89036153a122f577ff9fb2a789e7f156f.zip
s3-printing: pass lpq command to job_submit
Currently the generic print backend does not fill the printing backend job identifier (sysjob) on submission of a new job. The sysjob identifier is required to correctly map jobs in the printer queue to corresponding spoolss print jobs. Passing the lpq command to job_submit allows the generic print backend to check the printer queue for the new job following submission. This behaviour will come in a later commit.
Diffstat (limited to 'source3/printing/printing.c')
-rw-r--r--source3/printing/printing.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index 4d0178f1852..1e0d61df329 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -2903,6 +2903,7 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum,
SMB_STRUCT_STAT sbuf;
struct printif *current_printif = get_printer_fns(snum);
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+ char *lpq_cmd;
TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
if (tmp_ctx == NULL) {
return NT_STATUS_NO_MEMORY;
@@ -2970,8 +2971,31 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum,
return NT_STATUS_OK;
}
- ret = (*(current_printif->job_submit))(snum, pjob);
+ /* don't strip out characters like '$' from the printername */
+ lpq_cmd = talloc_string_sub2(tmp_ctx,
+ lp_lpqcommand(snum),
+ "%p",
+ lp_printername(snum),
+ false, false, false);
+ if (lpq_cmd == NULL) {
+ status = NT_STATUS_PRINT_CANCELLED;
+ goto fail;
+ }
+ lpq_cmd = talloc_sub_advanced(tmp_ctx,
+ lp_servicename(snum),
+ current_user_info.unix_name,
+ "",
+ current_user.ut.gid,
+ get_current_username(),
+ current_user_info.domain,
+ lpq_cmd);
+ if (lpq_cmd == NULL) {
+ status = NT_STATUS_PRINT_CANCELLED;
+ goto fail;
+ }
+ ret = (*(current_printif->job_submit))(snum, pjob,
+ current_printif->type, lpq_cmd);
if (ret) {
status = NT_STATUS_PRINT_CANCELLED;
goto fail;