diff options
author | David Disseldorp <ddiss@samba.org> | 2012-02-08 18:47:11 +0100 |
---|---|---|
committer | David Disseldorp <ddiss@samba.org> | 2012-06-26 16:10:39 +0200 |
commit | c29773d89036153a122f577ff9fb2a789e7f156f (patch) | |
tree | e4ec146dfa33a1e97d2d1ecebdd5ab30a68cf01e /source3/printing/printing.c | |
parent | 91cd9a47974e0099d550c88ee646ee3b1f44df72 (diff) | |
download | samba-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.c | 26 |
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; |