1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

s3-spoolss: add support for SetJobInfo level 1 (for jobfile rename).

Guenther
This commit is contained in:
Günther Deschner 2010-04-27 19:57:47 +02:00
parent 2b7002f385
commit 1691eb73da
3 changed files with 74 additions and 2 deletions

View File

@ -4976,7 +4976,8 @@ bool print_job_exists(const char* sharename, uint32 jobid);
int print_job_fd(const char* sharename, uint32 jobid);
char *print_job_fname(const char* sharename, uint32 jobid);
NT_DEVICEMODE *print_job_devmode(const char* sharename, uint32 jobid);
bool print_job_set_name(const char *sharename, uint32 jobid, char *name);
bool print_job_set_name(const char *sharename, uint32 jobid, const char *name);
bool print_job_get_name(TALLOC_CTX *mem_ctx, const char *sharename, uint32_t jobid, char **name);
bool print_job_delete(struct auth_serversupplied_info *server_info, int snum,
uint32 jobid, WERROR *errcode);
bool print_job_pause(struct auth_serversupplied_info *server_info, int snum,

View File

@ -1857,7 +1857,7 @@ NT_DEVICEMODE *print_job_devmode(const char* sharename, uint32 jobid)
Set the name of a job. Only possible for owner.
****************************************************************************/
bool print_job_set_name(const char *sharename, uint32 jobid, char *name)
bool print_job_set_name(const char *sharename, uint32 jobid, const char *name)
{
struct printjob *pjob;
@ -1869,6 +1869,28 @@ bool print_job_set_name(const char *sharename, uint32 jobid, char *name)
return pjob_store(sharename, jobid, pjob);
}
/****************************************************************************
Get the name of a job. Only possible for owner.
****************************************************************************/
bool print_job_get_name(TALLOC_CTX *mem_ctx, const char *sharename, uint32_t jobid, char **name)
{
struct printjob *pjob;
pjob = print_job_find(sharename, jobid);
if (!pjob || pjob->pid != sys_getpid()) {
return false;
}
*name = talloc_strdup(mem_ctx, pjob->jobname);
if (!*name) {
return false;
}
return true;
}
/***************************************************************************
Remove a jobid from the 'jobs changed' list.
***************************************************************************/

View File

@ -6426,6 +6426,31 @@ WERROR _spoolss_ScheduleJob(pipes_struct *p,
return WERR_OK;
}
/****************************************************************
****************************************************************/
static WERROR spoolss_setjob_1(TALLOC_CTX *mem_ctx,
const char *printer_name,
uint32_t job_id,
struct spoolss_SetJobInfo1 *r)
{
char *old_doc_name;
if (!print_job_get_name(mem_ctx, printer_name, job_id, &old_doc_name)) {
return WERR_BADFID;
}
if (strequal(old_doc_name, r->document_name)) {
return WERR_OK;
}
if (!print_job_set_name(printer_name, job_id, r->document_name)) {
return WERR_BADFID;
}
return WERR_OK;
}
/****************************************************************
_spoolss_SetJob
****************************************************************/
@ -6462,6 +6487,30 @@ WERROR _spoolss_SetJob(pipes_struct *p,
errcode = WERR_OK;
}
break;
case 0:
errcode = WERR_OK;
break;
default:
return WERR_UNKNOWN_LEVEL;
}
if (!W_ERROR_IS_OK(errcode)) {
return errcode;
}
if (r->in.ctr == NULL) {
return errcode;
}
switch (r->in.ctr->level) {
case 1:
errcode = spoolss_setjob_1(p->mem_ctx, lp_const_servicename(snum),
r->in.job_id,
r->in.ctr->info.info1);
break;
case 2:
case 3:
case 4:
default:
return WERR_UNKNOWN_LEVEL;
}