diff options
author | Jeremy Allison <jra@samba.org> | 2000-08-23 23:05:49 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2000-08-23 23:05:49 +0000 |
commit | f03879e0b3db1871d003bfb5713a88928f032260 (patch) | |
tree | f3a6efbb4ef8e10aa9953ca58e74e00a3a6f9510 | |
parent | b3addf7ebe319826eb0926cc84bcfb729e725916 (diff) | |
download | samba-f03879e0b3db1871d003bfb5713a88928f032260.tar.gz samba-f03879e0b3db1871d003bfb5713a88928f032260.tar.bz2 samba-f03879e0b3db1871d003bfb5713a88928f032260.zip |
Tidied up some error returns from printing calls. Still need to map UNIX
errors to NT error for print job failure returns. Patch from John Reilly at HP.
Jeremy.
(This used to be commit 3514b5bb8fffd78e3647425d93b74e2e6291bafc)
-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; } |