diff options
-rw-r--r-- | source3/printing/nt_printing.c | 11 | ||||
-rw-r--r-- | source3/printing/printing.c | 4 | ||||
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 11 |
3 files changed, 16 insertions, 10 deletions
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 510432ea74..7fe21dc7e7 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2170,9 +2170,13 @@ BOOL print_access_check(struct current_user *user, int snum, /* Get printer name */ pname = PRINTERNAME(snum); - if (!pname || !*pname) pname = SERVICE(snum); + if (!pname || !*pname) + pname = SERVICE(snum); - if (!pname || !*pname) return False; + if (!pname || !*pname) { + errno = EACCES; + return False; + } /* Get printer security descriptor */ nt_printing_getsec(pname, &secdesc); @@ -2220,6 +2224,9 @@ BOOL print_access_check(struct current_user *user, int snum, /* Free mallocated memory */ free_sec_desc_buf(&secdesc); + if (!result) + errno = EACCES; + return result; } diff --git a/source3/printing/printing.c b/source3/printing/printing.c index a6dc81b172..f5f40d8b9c 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -622,6 +622,8 @@ int print_job_start(struct current_user *user, int snum, char *jobname) int next_jobid; extern struct current_user current_user; + errno = 0; + if (!print_access_check(user, snum, PRINTER_ACE_PRINT)) { DEBUG(3, ("job start denied by security descriptor\n")); return False; @@ -713,7 +715,7 @@ int print_job_start(struct current_user *user, int snum, char *jobname) } tdb_writeunlock(tdb); - return jobid; + return -1; } /**************************************************************************** diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index a8b948db4a..36a8a1697c 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -2919,19 +2919,16 @@ uint32 _spoolss_startdocprinter(POLICY_HND *handle, uint32 level, * server-side code. *nnnnnggggh!* */ - if (info_1->p_datatype != 0) - { - unistr2_to_ascii(datatype, &(info_1->docname), sizeof(datatype)); - if (strcmp(datatype, "RAW") != 0) - { + if (info_1->p_datatype != 0) { + unistr2_to_ascii(datatype, &info_1->docname, sizeof(datatype)); + if (strcmp(datatype, "RAW") != 0) { (*jobid)=0; return ERROR_INVALID_DATATYPE; } } /* get the share number of the printer */ - if (!get_printer_snum(handle, &snum)) - { + if (!get_printer_snum(handle, &snum)) { return ERROR_INVALID_HANDLE; } |