diff options
author | Jean-François Micouleau <jfm@samba.org> | 2000-03-29 14:49:05 +0000 |
---|---|---|
committer | Jean-François Micouleau <jfm@samba.org> | 2000-03-29 14:49:05 +0000 |
commit | c475ab51d99ee3aa33f9d2c6eaa2811f2f8ea931 (patch) | |
tree | 0d5d77585aaa3721ecea14bfaf1967498d00aa91 /source3/rpc_server/srv_spoolss_nt.c | |
parent | 6ca0ed9baa7d2a4b4d46ca730d4984f80965d849 (diff) | |
download | samba-c475ab51d99ee3aa33f9d2c6eaa2811f2f8ea931.tar.gz samba-c475ab51d99ee3aa33f9d2c6eaa2811f2f8ea931.tar.bz2 samba-c475ab51d99ee3aa33f9d2c6eaa2811f2f8ea931.zip |
split addprinterex in preparation for level 1 support and to stop it
coredump.
J.F.
(This used to be commit aea47dee7d85310f35309ecfa91d0b87e632a33f)
Diffstat (limited to 'source3/rpc_server/srv_spoolss_nt.c')
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index d08571b80b..e55f1fb305 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -3587,7 +3587,7 @@ uint32 _spoolss_enumports( UNISTR2 *name, uint32 level, /**************************************************************************** ****************************************************************************/ -uint32 _spoolss_addprinterex( const UNISTR2 *uni_srv_name, uint32 level, +static uint32 spoolss_addprinterex_level_2( const UNISTR2 *uni_srv_name, const SPOOL_PRINTER_INFO_LEVEL *info, uint32 unk0, uint32 unk1, uint32 unk2, uint32 unk3, uint32 user_switch, const SPOOL_USER_CTR *user, @@ -3599,24 +3599,19 @@ uint32 _spoolss_addprinterex( const UNISTR2 *uni_srv_name, uint32 level, clear_handle(handle); -/* - * FIX: JFM: we need to check the user here !!!! - * - * as the code is running as root, anybody can add printers to the server - */ /* NULLify info_2 here */ /* don't put it in convert_printer_info as it's used also with non-NULL values */ printer.info_2=NULL; /* convert from UNICODE to ASCII */ - convert_printer_info(info, &printer, level); + convert_printer_info(info, &printer, 2); unistr2_to_ascii(share_name, &((info->info_2)->printername), sizeof(share_name)-1); slprintf(name, sizeof(name)-1, "\\\\%s\\%s", global_myname, share_name); /* write the ASCII on disk */ - if (add_a_printer(printer, level) != 0x0) + if (add_a_printer(printer, 2) != 0x0) return ERROR_ACCESS_DENIED; create_printer_hnd(handle); @@ -3638,6 +3633,31 @@ uint32 _spoolss_addprinterex( const UNISTR2 *uni_srv_name, uint32 level, /**************************************************************************** ****************************************************************************/ +uint32 _spoolss_addprinterex( const UNISTR2 *uni_srv_name, uint32 level, + const SPOOL_PRINTER_INFO_LEVEL *info, + uint32 unk0, uint32 unk1, uint32 unk2, uint32 unk3, + uint32 user_switch, const SPOOL_USER_CTR *user, + POLICY_HND *handle) +{ + switch (level) { + case 1: + /* we don't handle yet */ + /* but I know what to do ... */ + break; + case 2: + return spoolss_addprinterex_level_2(uni_srv_name, info, + unk0, unk1, unk2, unk3, + user_switch, user, handle); + break; + default: + return ERROR_INVALID_LEVEL; + break; + } +} + + +/**************************************************************************** +****************************************************************************/ uint32 _spoolss_addprinterdriver( const UNISTR2 *server_name, uint32 level, const SPOOL_PRINTER_DRIVER_INFO_LEVEL *info) |