diff options
| -rw-r--r-- | source3/include/proto.h | 1 | ||||
| -rw-r--r-- | source3/printing/lpq_parse.c | 21 | ||||
| -rw-r--r-- | source3/printing/print_cups.c | 11 | ||||
| -rw-r--r-- | source3/printing/printing.c | 19 | 
4 files changed, 32 insertions, 20 deletions
| diff --git a/source3/include/proto.h b/source3/include/proto.h index dca58cc733..c211501ac5 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4772,6 +4772,7 @@ void load_printers(void);  bool parse_lpq_entry(enum printing_types printing_type,char *line,  		     print_queue_struct *buf,  		     print_status_struct *status,bool first); +uint32_t print_parse_jobid(const char *fname);  /* The following definitions come from printing/notify.c  */ 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; +} diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c index fc1f52a8ef..5c023edf49 100644 --- a/source3/printing/print_cups.c +++ b/source3/printing/print_cups.c @@ -918,6 +918,7 @@ static int cups_job_submit(int snum, struct printjob *pjob)  	char *cupsoptions = NULL;  	char *filename = NULL;  	size_t size; +	uint32_t jobid = (uint32_t)-1;  	char addr[INET6_ADDRSTRLEN];  	DEBUG(5,("cups_job_submit(%d, %p)\n", snum, pjob)); @@ -984,12 +985,20 @@ static int cups_job_submit(int snum, struct printjob *pjob)  	             "job-originating-host-name", NULL,  		      clientname); +	/* Get the jobid from the filename. */ +	jobid = print_parse_jobid(pjob->filename); +	if (jobid == (uint32_t)-1) { +		DEBUG(0,("cups_job_submit: failed to parse jobid from name %s\n", +				pjob->filename )); +		jobid = 0; +	} +  	if (!push_utf8_talloc(frame, &jobname, pjob->jobname, &size)) {  		goto out;  	}  	new_jobname = talloc_asprintf(frame,  			"%s%.8u %s", PRINT_SPOOL_PREFIX, -			(unsigned int)pjob->smbjob, +			(unsigned int)jobid,  			jobname);  	if (new_jobname == NULL) {  		goto out; diff --git a/source3/printing/printing.c b/source3/printing/printing.c index e48a2d173c..7804997dfa 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -644,25 +644,6 @@ void pjob_delete(const char* sharename, uint32 jobid)  }  /**************************************************************************** - Parse a file name from the system spooler to generate a jobid. -****************************************************************************/ - -static uint32 print_parse_jobid(char *fname) -{ -	int jobid; - -	if (strncmp(fname,PRINT_SPOOL_PREFIX,strlen(PRINT_SPOOL_PREFIX)) != 0) -		return (uint32)-1; -	fname += strlen(PRINT_SPOOL_PREFIX); - -	jobid = atoi(fname); -	if (jobid <= 0) -		return (uint32)-1; - -	return (uint32)jobid; -} - -/****************************************************************************   List a unix job in the print database.  ****************************************************************************/ | 
