summaryrefslogtreecommitdiff
path: root/source3/printing/lpq_parse.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2010-03-25 17:36:47 -0700
committerJeremy Allison <jra@samba.org>2010-03-25 17:36:47 -0700
commitc79ca41baf15b4ef7eb287d343b17a53ba41e852 (patch)
treee11b760b6e6ad3532cf2629f85ede748ed40b208 /source3/printing/lpq_parse.c
parent2e00a8a74b7c5c95b61e6c7f365ed852c7d95289 (diff)
downloadsamba-c79ca41baf15b4ef7eb287d343b17a53ba41e852.tar.gz
samba-c79ca41baf15b4ef7eb287d343b17a53ba41e852.tar.bz2
samba-c79ca41baf15b4ef7eb287d343b17a53ba41e852.zip
Fix bug #7288 - SMB job IDs in CUPS job names wrong.
Based on a patch from Michael Karcher <samba@mkarcher.dialup.fu-berlin.de>. I think this is the correct fix. It causes cups_job_submit to use print_parse_jobid(), which I've moved into printing/lpq_parse.c (to allow the link to work). It turns out the old print_parse_jobid() was *broken*, in that the pjob filename was set as an absolute path - not relative to the sharename (due to it not going through the VFS calls). This meant that the original code doing a strncmp on the first part of the filename would always fail - it starts with a "/", not the relative pathname of PRINT_SPOOL_PREFIX ("smbprn."). This fix could fix some other mysterious printing bugs - probably the ones Guenther noticed where job control fails on non-cups backends. Guenther PLEASE CHECK ! Jeremy.
Diffstat (limited to 'source3/printing/lpq_parse.c')
-rw-r--r--source3/printing/lpq_parse.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/source3/printing/lpq_parse.c b/source3/printing/lpq_parse.c
index addf2d14aa..16b9b09fef 100644
--- a/source3/printing/lpq_parse.c
+++ b/source3/printing/lpq_parse.c
@@ -18,6 +18,7 @@
*/
#include "includes.h"
+#include "printing.h"
static const char *Months[13] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Err"};
@@ -1150,3 +1151,23 @@ bool parse_lpq_entry(enum printing_types printing_type,char *line,
return ret;
}
+
+/****************************************************************************
+ Parse a file name from the system spooler to generate a jobid.
+****************************************************************************/
+
+uint32_t print_parse_jobid(const char *fname)
+{
+ int jobid;
+ const char *p = strstr_m(fname,PRINT_SPOOL_PREFIX);
+
+ if (!p) {
+ return (uint32_t)-1;
+ }
+ p += strlen(PRINT_SPOOL_PREFIX);
+ jobid = atoi(p);
+ if (jobid <= 0) {
+ return (uint32_t)-1;
+ }
+ return (uint32_t)jobid;
+}