diff options
author | Gerald Carter <jerry@samba.org> | 2002-09-10 21:37:53 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2002-09-10 21:37:53 +0000 |
commit | 5d390fc5c7b1ac4374ee65b546f9e80b9ee0eee1 (patch) | |
tree | dd189d7f9ab1c336a51a9e161a365cc738a3bf1b /source3 | |
parent | 96cf2abf9dfd72d5a2c8565d9894f9072f1ce04e (diff) | |
download | samba-5d390fc5c7b1ac4374ee65b546f9e80b9ee0eee1.tar.gz samba-5d390fc5c7b1ac4374ee65b546f9e80b9ee0eee1.tar.bz2 samba-5d390fc5c7b1ac4374ee65b546f9e80b9ee0eee1.zip |
AbortPrinter() fix merged from APP_HEAD.
(This used to be commit 97ede49e1271fa00c6ffdf9e6e3c2330ea935461)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/printing/printing.c | 34 | ||||
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 24 |
2 files changed, 52 insertions, 6 deletions
diff --git a/source3/printing/printing.c b/source3/printing/printing.c index df971a78c5..035d4d383a 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -1048,8 +1048,11 @@ static BOOL is_owner(struct current_user *user, int snum, uint32 jobid) BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode) { - BOOL owner; + BOOL owner, deleted; + char *fname; + *errcode = WERR_OK; + owner = is_owner(user, snum, jobid); /* Check access against security descriptor or whether the user @@ -1062,15 +1065,40 @@ BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR return False; } - if (!print_job_delete1(snum, jobid)) + /* + * get the spooled filename of the print job + * if this works, then the file has not been spooled + * to the underlying print system. Just delete the + * spool file & return. + */ + + if ( (fname = print_job_fname( snum, jobid )) != NULL ) + { + /* remove the spool file */ + DEBUG(10,("print_job_delete: Removing spool file [%s]\n", fname )); + if ( unlink( fname ) == -1 ) { + *errcode = map_werror_from_unix(errno); + return False; + } + + return True; + } + + if (!print_job_delete1(snum, jobid)) { + *errcode = WERR_ACCESS_DENIED; return False; + } /* force update the database and say the delete failed if the job still exists */ print_queue_update(snum); + + deleted = !print_job_exists(snum, jobid); + if ( !deleted ) + *errcode = WERR_ACCESS_DENIED; - return !print_job_exists(snum, jobid); + return deleted; } /**************************************************************************** diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index ff9ac2ce50..07c22b063a 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -5417,13 +5417,31 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command, /******************************************************************** * api_spoolss_abortprinter + * From MSDN: "Deletes printer's spool file if printer is configured + * for spooling" ********************************************************************/ WERROR _spoolss_abortprinter(pipes_struct *p, SPOOL_Q_ABORTPRINTER *q_u, SPOOL_R_ABORTPRINTER *r_u) { - POLICY_HND *handle = &q_u->handle; - - return control_printer(handle, PRINTER_CONTROL_PURGE, p); + POLICY_HND *handle = &q_u->handle; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + int snum; + struct current_user user; + WERROR errcode = WERR_OK; + + if (!Printer) { + DEBUG(2,("_spoolss_abortprinter: Invalid handle (%s:%u:%u)\n",OUR_HANDLE(handle))); + return WERR_BADFID; + } + + if (!get_printer_snum(p, handle, &snum)) + return WERR_BADFID; + + get_current_user( &user, p ); + + print_job_delete( &user, snum, Printer->jobid, &errcode ); + + return errcode; } /******************************************************************** |