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:
parent
2b7002f385
commit
1691eb73da
@ -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,
|
||||
|
@ -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.
|
||||
***************************************************************************/
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user