summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/printing/nt_printing.c11
-rw-r--r--source3/printing/printing.c4
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c11
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;
}