summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/printing/nt_printing.c12
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c3
3 files changed, 10 insertions, 7 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index c5294fd1ea..9b851f901d 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1727,7 +1727,7 @@ BOOL delete_a_form(nt_forms_struct **list, UNISTR2 *del_name, int *count, uint32
void update_a_form(nt_forms_struct **list, const FORM *form, int count);
int get_ntdrivers(fstring **list, char *architecture, uint32 version);
BOOL get_short_archi(char *short_archi, char *long_archi);
-void clean_up_driver_struct(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, uint32 level);
+uint32 clean_up_driver_struct(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, uint32 level);
BOOL move_driver_to_download_area(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, uint32 level, struct current_user *user, uint32 *perr);
uint32 get_a_printer_driver_9x_compatible(pstring line, fstring model);
uint32 del_a_printer(char *sharename);
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index 9d4a7f2030..48b61ca781 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -513,7 +513,7 @@ static uint32 clean_up_driver_struct_level_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 *dri
*/
if ((driver->cversion = get_correct_cversion(architecture,
driver->driverpath)) == -1)
- return ERROR_INVALID_PARAMETER; /* Not the best error. Fix JRR */
+ return NT_STATUS_FILE_INVALID; /* Not the best error. Fix JRR */
return NT_STATUS_NO_PROBLEMO;
}
@@ -576,30 +576,32 @@ static uint32 clean_up_driver_struct_level_6(NT_PRINTER_DRIVER_INFO_LEVEL_6 *dri
*/
if ((driver->version = get_correct_cversion(architecture,
driver->driverpath)) == -1)
- return ERROR_INVALID_PARAMETER; /* Not the best error. Fix JRR */
+ return NT_STATUS_FILE_INVALID; /* Not the best error. Fix JRR */
return NT_STATUS_NO_PROBLEMO;
}
/****************************************************************************
****************************************************************************/
-void clean_up_driver_struct(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, uint32 level)
+uint32 clean_up_driver_struct(NT_PRINTER_DRIVER_INFO_LEVEL driver_abstract, uint32 level)
{
switch (level) {
case 3:
{
NT_PRINTER_DRIVER_INFO_LEVEL_3 *driver;
driver=driver_abstract.info_3;
- clean_up_driver_struct_level_3(driver);
+ return clean_up_driver_struct_level_3(driver);
break;
}
case 6:
{
NT_PRINTER_DRIVER_INFO_LEVEL_6 *driver;
driver=driver_abstract.info_6;
- clean_up_driver_struct_level_6(driver);
+ return clean_up_driver_struct_level_6(driver);
break;
}
+ default:
+ return ERROR_INVALID_PARAMETER;
}
}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 0eb75a7480..ebcccc8cf4 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -4722,7 +4722,8 @@ uint32 _spoolss_addprinterdriver(pipes_struct *p, const UNISTR2 *server_name,
convert_printer_driver_info(info, &driver, level);
DEBUG(5,("Cleaning driver's information\n"));
- clean_up_driver_struct(driver, level);
+ if ((err = clean_up_driver_struct(driver, level)) != NT_STATUS_NO_PROBLEMO )
+ goto done;
DEBUG(5,("Moving driver to final destination\n"));
if(!move_driver_to_download_area(driver, level, &user, &err)) {