RIP BOOL. Convert BOOL -> bool. I found a few interesting
[kai/samba.git] / source3 / rpc_server / srv_spoolss_nt.c
index f573d3fdc65168d2be492f30c91fb00d1cecc30f..658ed994002134f0c268ae70b3eb6ab1e5a0b263 100644 (file)
@@ -63,7 +63,7 @@ static uint32 smb_connections=0;
 
 /* in printing/nt_printing.c */
 
-extern STANDARD_MAPPING printer_std_mapping, printserver_std_mapping;
+extern struct standard_mapping printer_std_mapping, printserver_std_mapping;
 
 /* API table for Xcv Monitor functions */
 
@@ -267,7 +267,7 @@ static Printer_entry *find_printer_index_by_hnd(pipes_struct *p, POLICY_HND *hnd
  Close printer index by handle.
 ****************************************************************************/
 
-static BOOL close_printer_handle(pipes_struct *p, POLICY_HND *hnd)
+static bool close_printer_handle(pipes_struct *p, POLICY_HND *hnd)
 {
        Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
 
@@ -290,7 +290,7 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
        pstring command;
        int ret;
        SE_PRIV se_printop = SE_PRINT_OPERATOR;
-       BOOL is_print_op = False;
+       bool is_print_op = False;
                
        /* can't fail if we don't try */
        
@@ -328,7 +328,7 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
        /* go ahead and re-read the services immediately */
        reload_services( False );
        
-       if ( share_defined( sharename ) )
+       if ( lp_servicenumber( sharename )  < 0 )
                return WERR_ACCESS_DENIED;
                
        return WERR_OK;
@@ -374,7 +374,7 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd)
  Return the snum of a printer corresponding to an handle.
 ****************************************************************************/
 
-static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
+static bool get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
                             struct share_params **params)
 {
        Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
@@ -388,13 +388,6 @@ static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
                case SPLHND_PRINTER:            
                        DEBUG(4,("short name:%s\n", Printer->sharename));                       
                        *number = print_queue_snum(Printer->sharename);
-                       if ((*number != -1) && (params != NULL)) {
-                               *params = get_share_params(talloc_tos(),
-                                                          Printer->sharename);
-                               if (*params == NULL) {
-                                       return False;
-                               }
-                       }
                        return (*number != -1);
                case SPLHND_SERVER:
                        return False;
@@ -408,7 +401,7 @@ static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
  Check if it's \\server or \\server\printer
 ****************************************************************************/
 
-static BOOL set_printer_hnd_printertype(Printer_entry *Printer, char *handlename)
+static bool set_printer_hnd_printertype(Printer_entry *Printer, char *handlename)
 {
        DEBUG(3,("Setting printer type=%s\n", handlename));
 
@@ -438,14 +431,14 @@ static BOOL set_printer_hnd_printertype(Printer_entry *Printer, char *handlename
  XcvDataPort() interface.
 ****************************************************************************/
 
-static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
+static bool set_printer_hnd_name(Printer_entry *Printer, char *handlename)
 {
        int snum;
        int n_services=lp_numservices();
        char *aprinter, *printername;
        const char *servername;
        fstring sname;
-       BOOL found=False;
+       bool found=False;
        NT_PRINTER_INFO_LEVEL *printer = NULL;
        WERROR result;
        
@@ -565,7 +558,7 @@ static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
  Find first available printer slot. creates a printer handle for you.
  ****************************************************************************/
 
-static BOOL open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint32 access_granted)
+static bool open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint32 access_granted)
 {
        Printer_entry *new_printer;
 
@@ -614,13 +607,13 @@ static BOOL open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint3
  given by (notify_type, notify_field).
  **************************************************************************/
 
-static BOOL is_monitoring_event_flags(uint32 flags, uint16 notify_type,
+static bool is_monitoring_event_flags(uint32 flags, uint16 notify_type,
                                      uint16 notify_field)
 {
        return True;
 }
 
-static BOOL is_monitoring_event(Printer_entry *p, uint16 notify_type,
+static bool is_monitoring_event(Printer_entry *p, uint16 notify_type,
                                uint16 notify_field)
 {
        SPOOL_NOTIFY_OPTION *option = p->notify.option;
@@ -1069,7 +1062,7 @@ done:
 /***********************************************************************
  **********************************************************************/
 
-static BOOL notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, struct timeval *tv, void *buf, size_t len )
+static bool notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, struct timeval *tv, void *buf, size_t len )
 {
 
        uint32 tv_sec, tv_usec;
@@ -1205,7 +1198,7 @@ static void receive_notify2_message_list(struct messaging_context *msg,
  driver
  ********************************************************************/
  
-static BOOL srv_spoolss_drv_upgrade_printer(char* drivername)
+static bool srv_spoolss_drv_upgrade_printer(char* drivername)
 {
        int len = strlen(drivername);
        
@@ -1308,7 +1301,7 @@ void update_monitored_printq_cache( void )
  driver
  ********************************************************************/
  
-static BOOL srv_spoolss_reset_printerdata(char* drivername)
+static bool srv_spoolss_reset_printerdata(char* drivername)
 {
        int len = strlen(drivername);
        
@@ -1748,10 +1741,10 @@ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
 /****************************************************************************
 ****************************************************************************/
 
-static BOOL convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni,
+static bool convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni,
                                NT_PRINTER_INFO_LEVEL *printer, uint32 level)
 {
-       BOOL ret;
+       bool ret;
 
        switch (level) {
                case 2:
@@ -1776,10 +1769,10 @@ static BOOL convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni,
        return False;
 }
 
-static BOOL convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *uni,
+static bool convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *uni,
                                        NT_PRINTER_DRIVER_INFO_LEVEL *printer, uint32 level)
 {
-       BOOL result = True;
+       bool result = True;
 
        switch (level) {
                case 3:
@@ -1799,7 +1792,7 @@ static BOOL convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *u
        return result;
 }
 
-BOOL convert_devicemode(const char *printername, const DEVICEMODE *devmode,
+bool convert_devicemode(const char *printername, const DEVICEMODE *devmode,
                                NT_DEVICEMODE **pp_nt_devmode)
 {
        NT_DEVICEMODE *nt_devmode = *pp_nt_devmode;
@@ -2076,7 +2069,7 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV
        NT_PRINTER_DRIVER_INFO_LEVEL    info_win2k;
        int                             version;
        uint32                          flags = q_u->delete_flags;
-       BOOL                            delete_files;
+       bool                            delete_files;
        WERROR                          status;
        WERROR                          status_win2k = WERR_ACCESS_DENIED;
        SE_PRIV                         se_printop = SE_PRINT_OPERATOR; 
@@ -2534,20 +2527,20 @@ done:
  Connect to the client machine.
 **********************************************************/
 
-static BOOL spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe,
+static bool spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe,
                        struct in_addr *client_ip, const char *remote_machine)
 {
        NTSTATUS ret;
        struct cli_state *the_cli;
        struct in_addr rm_addr;
 
-       if ( is_zero_ip(*client_ip) ) {
+       if ( is_zero_ip_v4(*client_ip) ) {
                if ( !resolve_name( remote_machine, &rm_addr, 0x20) ) {
                        DEBUG(2,("spoolss_connect_to_client: Can't resolve address for %s\n", remote_machine));
                        return False;
                }
 
-               if ( ismyip( rm_addr )) {
+               if ( ismyip_v4( rm_addr )) {
                        DEBUG(0,("spoolss_connect_to_client: Machine %s is one of our addresses. Cannot add to ourselves.\n", remote_machine));
                        return False;
                }
@@ -2601,7 +2594,7 @@ static BOOL spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe,
  Connect to the client.
 ****************************************************************************/
 
-static BOOL srv_spoolss_replyopenprinter(int snum, const char *printer, 
+static bool srv_spoolss_replyopenprinter(int snum, const char *printer, 
                                        uint32 localprinter, uint32 type, 
                                        POLICY_HND *handle, struct in_addr *client_ip)
 {
@@ -3571,7 +3564,7 @@ static uint32 type_of_notify_info_data(uint16 type, uint16 field)
 /****************************************************************************
 ****************************************************************************/
 
-static BOOL search_notify(uint16 type, uint16 field, int *value)
+static bool search_notify(uint16 type, uint16 field, int *value)
 {      
        int i;
 
@@ -3608,7 +3601,7 @@ void construct_info_data(SPOOL_NOTIFY_INFO_DATA *info_data, uint16 type, uint16
  *
  ********************************************************************/
 
-static BOOL construct_notify_printer_info(Printer_entry *print_hnd, SPOOL_NOTIFY_INFO *info, int
+static bool construct_notify_printer_info(Printer_entry *print_hnd, SPOOL_NOTIFY_INFO *info, int
                                          snum, SPOOL_NOTIFY_OPTION_TYPE
                                          *option_type, uint32 id,
                                          TALLOC_CTX *mem_ctx) 
@@ -3667,7 +3660,7 @@ static BOOL construct_notify_printer_info(Printer_entry *print_hnd, SPOOL_NOTIFY
  *
  ********************************************************************/
 
-static BOOL construct_notify_jobs_info(print_queue_struct *queue,
+static bool construct_notify_jobs_info(print_queue_struct *queue,
                                       SPOOL_NOTIFY_INFO *info,
                                       NT_PRINTER_INFO_LEVEL *printer,
                                       int snum, SPOOL_NOTIFY_OPTION_TYPE
@@ -3953,9 +3946,7 @@ done:
  * fill a printer_info_0 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_0(Printer_entry *print_hnd,
-                                    PRINTER_INFO_0 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *printer, int snum)
 {
        pstring chaine;
        int count;
@@ -3966,15 +3957,14 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd,
        time_t setuptime;
        print_status_struct status;
        
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
 
-       count = print_queue_length(params->service, &status);
+       count = print_queue_length(snum, &status);
 
        /* check if we already have a counter for this printer */       
        for(session_counter = counter_list; session_counter; session_counter = session_counter->next) {
-               if (session_counter->snum == params->service)
+               if (session_counter->snum == snum)
                        break;
        }
 
@@ -3985,7 +3975,7 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd,
                        return False;
                }
                ZERO_STRUCTP(session_counter);
-               session_counter->snum=params->service;
+               session_counter->snum=snum;
                session_counter->counter=0;
                DLIST_ADD(counter_list, session_counter);
        }
@@ -4061,25 +4051,21 @@ static BOOL construct_printer_info_0(Printer_entry *print_hnd,
  * construct_printer_info_1
  * fill a printer_info_1 struct
  ********************************************************************/
-static BOOL construct_printer_info_1(Printer_entry *print_hnd, uint32 flags,
-                                    PRINTER_INFO_1 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_1(Printer_entry *print_hnd, uint32 flags, PRINTER_INFO_1 *printer, int snum)
 {
        pstring chaine;
        pstring chaine2;
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
 
        printer->flags=flags;
 
        if (*ntprinter->info_2->comment == '\0') {
-               init_unistr(&printer->comment, lp_comment(params->service));
+               init_unistr(&printer->comment, lp_comment(snum));
                slprintf(chaine,sizeof(chaine)-1,"%s,%s,%s", ntprinter->info_2->printername,
-                       ntprinter->info_2->drivername,
-                        lp_comment(params->service));
+                       ntprinter->info_2->drivername, lp_comment(snum));
        }
        else {
                init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
@@ -4116,7 +4102,7 @@ static void free_dev_mode(DEVICEMODE *dev)
  should be valid upon entry
 ****************************************************************************/
 
-static BOOL convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode )
+static bool convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode )
 {
        if ( !devmode || !ntdevmode )
                return False;
@@ -4170,7 +4156,7 @@ DEVICEMODE *construct_dev_mode(const char *servicename)
        
        DEBUGADD(8,("getting printer characteristics\n"));
 
-       if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, servicename)))
+       if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, servicename))) 
                return NULL;
 
        if ( !printer->info_2->devmode ) {
@@ -4203,29 +4189,26 @@ done:
  * fill a printer_info_2 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_2(Printer_entry *print_hnd,
-                                    PRINTER_INFO_2 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *printer, int snum)
 {
        int count;
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
        print_status_struct status;
 
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
                
-       count = print_queue_length(params->service, &status);
+       count = print_queue_length(snum, &status);
 
        init_unistr(&printer->servername, ntprinter->info_2->servername); /* servername*/
        init_unistr(&printer->printername, ntprinter->info_2->printername);                             /* printername*/
-       init_unistr(&printer->sharename, lp_servicename(params->service));                      /* sharename */
+       init_unistr(&printer->sharename, lp_servicename(snum));                 /* sharename */
        init_unistr(&printer->portname, ntprinter->info_2->portname);                   /* port */      
        init_unistr(&printer->drivername, ntprinter->info_2->drivername);       /* drivername */
 
        if (*ntprinter->info_2->comment == '\0')
-               init_unistr(&printer->comment, lp_comment(params->service));                    /* comment */   
+               init_unistr(&printer->comment, lp_comment(snum));                       /* comment */   
        else
                init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
 
@@ -4246,7 +4229,7 @@ static BOOL construct_printer_info_2(Printer_entry *print_hnd,
        printer->averageppm = ntprinter->info_2->averageppm;                    /* average pages per minute */
                        
        if ( !(printer->devmode = construct_dev_mode(
-                      lp_const_servicename(params->service))) )
+                      lp_const_servicename(snum))) )
                DEBUG(8, ("Returning NULL Devicemode!\n"));
 
        printer->secdesc = NULL;
@@ -4271,15 +4254,12 @@ static BOOL construct_printer_info_2(Printer_entry *print_hnd,
  * fill a printer_info_3 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_3(Printer_entry *print_hnd,
-                                    PRINTER_INFO_3 **pp_printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_3(Printer_entry *print_hnd, PRINTER_INFO_3 **pp_printer, int snum)
 {
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
        PRINTER_INFO_3 *printer = NULL;
 
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
 
        *pp_printer = NULL;
@@ -4312,14 +4292,11 @@ static BOOL construct_printer_info_3(Printer_entry *print_hnd,
  * fill a printer_info_4 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_4(Printer_entry *print_hnd,
-                                    PRINTER_INFO_4 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_4(Printer_entry *print_hnd, PRINTER_INFO_4 *printer, int snum)
 {
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
                
        init_unistr(&printer->printername, ntprinter->info_2->printername);                             /* printername*/
@@ -4335,14 +4312,11 @@ static BOOL construct_printer_info_4(Printer_entry *print_hnd,
  * fill a printer_info_5 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_5(Printer_entry *print_hnd,
-                                    PRINTER_INFO_5 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_5(Printer_entry *print_hnd, PRINTER_INFO_5 *printer, int snum)
 {
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
-       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+       if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
                return False;
                
        init_unistr(&printer->printername, ntprinter->info_2->printername);
@@ -4364,19 +4338,19 @@ static BOOL construct_printer_info_5(Printer_entry *print_hnd,
  * fill a printer_info_6 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_6(Printer_entry *print_hnd,
+static bool construct_printer_info_6(Printer_entry *print_hnd,
                                     PRINTER_INFO_6 *printer,
-                                    const struct share_params *params)
+                                    int snum)
 {
        NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
        int count;
        print_status_struct status;
 
        if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-                                        lp_const_servicename(params->service))))
+                                        lp_const_servicename(snum))))
                return False;
 
-       count = print_queue_length(params->service, &status);
+       count = print_queue_length(snum, &status);
 
        printer->status = nt_printq_status(status.status);
                
@@ -4390,14 +4364,12 @@ static BOOL construct_printer_info_6(Printer_entry *print_hnd,
  * fill a printer_info_7 struct
  ********************************************************************/
 
-static BOOL construct_printer_info_7(Printer_entry *print_hnd,
-                                    PRINTER_INFO_7 *printer,
-                                    const struct share_params *params)
+static bool construct_printer_info_7(Printer_entry *print_hnd, PRINTER_INFO_7 *printer, int snum)
 {
        char *guid_str = NULL;
        struct GUID guid; 
        
-       if (is_printer_published(print_hnd, params->service, &guid)) {
+       if (is_printer_published(print_hnd, snum, &guid)) {
                asprintf(&guid_str, "{%s}", smb_uuid_string_static(guid));
                strupper_m(guid_str);
                init_unistr(&printer->guid, guid_str);
@@ -4416,45 +4388,31 @@ static BOOL construct_printer_info_7(Printer_entry *print_hnd,
 
 static WERROR enum_all_printers_info_1(uint32 flags, RPC_BUFFER *buffer, uint32 offered, uint32 *needed, uint32 *returned)
 {
+       int snum;
        int i;
-       struct share_iterator *shares;
-       struct share_params *printer;
+       int n_services=lp_numservices();
        PRINTER_INFO_1 *printers=NULL;
+       PRINTER_INFO_1 current_prt;
        WERROR result = WERR_OK;
        
        DEBUG(4,("enum_all_printers_info_1\n"));        
 
-       if (!(shares = share_list_all(NULL))) {
-               DEBUG(5, ("Could not list printers\n"));
-               return WERR_ACCESS_DENIED;
-       }
+       for (snum=0; snum<n_services; snum++) {
+               if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
+                       DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
 
-       while ((printer = next_printer(shares)) != NULL) {
-               PRINTER_INFO_1 current_prt;
-
-               DEBUG(4,("Found a printer in smb.conf: %s\n",
-                        lp_servicename(printer->service)));
-
-               if (!construct_printer_info_1(NULL, flags, &current_prt,
-                                             printer)) {
-                       continue;
-               }
+                       if (construct_printer_info_1(NULL, flags, &current_prt, snum)) {
+                               if((printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_1, *returned +1)) == NULL) {
+                                       DEBUG(2,("enum_all_printers_info_1: failed to enlarge printers buffer!\n"));
+                                       *returned=0;
+                                       return WERR_NOMEM;
+                               }
+                               DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_1\n", *returned));             
 
-               if((printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_1,
-                                              *returned +1)) == NULL) {
-                       DEBUG(2,("enum_all_printers_info_1: failed to enlarge "
-                                "printers buffer!\n"));
-                       *returned=0;
-                       TALLOC_FREE(shares);
-                       return WERR_NOMEM;
+                               memcpy(&printers[*returned], &current_prt, sizeof(PRINTER_INFO_1));
+                               (*returned)++;
+                       }
                }
-               DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_1\n",
-                        *returned));
-
-               memcpy(&printers[*returned], &current_prt,
-                      sizeof(PRINTER_INFO_1));
-               (*returned)++;
-               TALLOC_FREE(printer);
        }
                
        /* check the required size. */  
@@ -4479,7 +4437,6 @@ out:
        /* clear memory */
 
        SAFE_FREE(printers);
-       TALLOC_FREE(shares);
 
        if ( !W_ERROR_IS_OK(result) )
                *returned = 0;
@@ -4617,45 +4574,33 @@ static WERROR enum_all_printers_info_1_network(fstring name, RPC_BUFFER *buffer,
 
 static WERROR enum_all_printers_info_2(RPC_BUFFER *buffer, uint32 offered, uint32 *needed, uint32 *returned)
 {
+       int snum;
        int i;
-       struct share_iterator *shares;
-       struct share_params *printer;
+       int n_services=lp_numservices();
        PRINTER_INFO_2 *printers=NULL;
+       PRINTER_INFO_2 current_prt;
        WERROR result = WERR_OK;
 
        *returned = 0;
 
-       if (!(shares = share_list_all(NULL))) {
-               DEBUG(5, ("Could not list printers\n"));
-               return WERR_ACCESS_DENIED;
-       }
+       for (snum=0; snum<n_services; snum++) {
+               if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
+                       DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
+                               
+                       if (construct_printer_info_2(NULL, &current_prt, snum)) {
+                               if ( !(printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_2, *returned +1)) ) {
+                                       DEBUG(2,("enum_all_printers_info_2: failed to enlarge printers buffer!\n"));
+                                       *returned = 0;
+                                       return WERR_NOMEM;
+                               }
 
-       while ((printer = next_printer(shares)) != NULL) {
-               PRINTER_INFO_2 current_prt;
+                               DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_2\n", *returned + 1));         
 
-               DEBUG(4,("Found a printer in smb.conf: %s\n",
-                        lp_servicename(printer->service)));
+                               memcpy(&printers[*returned], &current_prt, sizeof(PRINTER_INFO_2));
 
-               if (!construct_printer_info_2(NULL, &current_prt,
-                                             printer)) {
-                       continue;
-               }
-               if ( !(printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_2,
-                                                 *returned +1)) ) {
-                       DEBUG(2,("enum_all_printers_info_2: failed to enlarge "
-                                "printers buffer!\n"));
-                       *returned = 0;
-                       TALLOC_FREE(shares);
-                       return WERR_NOMEM;
+                               (*returned)++;
+                       }
                }
-
-               DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_2\n",
-                        *returned + 1));
-
-               memcpy(&printers[*returned], &current_prt,
-                      sizeof(PRINTER_INFO_2));
-               (*returned)++;
-               TALLOC_FREE(printer);
        }
        
        /* check the required size. */  
@@ -4683,7 +4628,6 @@ out:
                free_devmode(printers[i].devmode);
 
        SAFE_FREE(printers);
-       TALLOC_FREE(shares);
 
        if ( !W_ERROR_IS_OK(result) )
                *returned = 0;
@@ -4824,10 +4768,7 @@ WERROR _spoolss_enumprinters( pipes_struct *p, SPOOL_Q_ENUMPRINTERS *q_u, SPOOL_
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_0(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_0(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_0 *printer=NULL;
        WERROR result = WERR_OK;
@@ -4835,7 +4776,7 @@ static WERROR getprinter_level_0(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_0)) == NULL)
                return WERR_NOMEM;
 
-       construct_printer_info_0(print_hnd, printer, params);
+       construct_printer_info_0(print_hnd, printer, snum);
        
        /* check the required size. */  
        *needed += spoolss_size_printer_info_0(printer);
@@ -4864,10 +4805,7 @@ out:
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_1(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_1(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_1 *printer=NULL;
        WERROR result = WERR_OK;
@@ -4875,8 +4813,7 @@ static WERROR getprinter_level_1(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_1)) == NULL)
                return WERR_NOMEM;
 
-       construct_printer_info_1(print_hnd, PRINTER_ENUM_ICON8, printer,
-                                params);
+       construct_printer_info_1(print_hnd, PRINTER_ENUM_ICON8, printer, snum);
        
        /* check the required size. */  
        *needed += spoolss_size_printer_info_1(printer);
@@ -4904,10 +4841,7 @@ out:
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_2(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_2(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_2 *printer=NULL;
        WERROR result = WERR_OK;
@@ -4915,7 +4849,7 @@ static WERROR getprinter_level_2(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_2))==NULL)
                return WERR_NOMEM;
        
-       construct_printer_info_2(print_hnd, printer, params);
+       construct_printer_info_2(print_hnd, printer, snum);
        
        /* check the required size. */  
        *needed += spoolss_size_printer_info_2(printer);
@@ -4944,15 +4878,12 @@ out:
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_3(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_3(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_3 *printer=NULL;
        WERROR result = WERR_OK;
 
-       if (!construct_printer_info_3(print_hnd, &printer, params))
+       if (!construct_printer_info_3(print_hnd, &printer, snum))
                return WERR_NOMEM;
        
        /* check the required size. */  
@@ -4981,10 +4912,7 @@ out:
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_4(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_4(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_4 *printer=NULL;
        WERROR result = WERR_OK;
@@ -4992,7 +4920,7 @@ static WERROR getprinter_level_4(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_4))==NULL)
                return WERR_NOMEM;
 
-       if (!construct_printer_info_4(print_hnd, printer, params)) {
+       if (!construct_printer_info_4(print_hnd, printer, snum)) {
                SAFE_FREE(printer);
                return WERR_NOMEM;
        }
@@ -5023,10 +4951,7 @@ out:
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getprinter_level_5(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_5(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_5 *printer=NULL;
        WERROR result = WERR_OK;
@@ -5034,7 +4959,7 @@ static WERROR getprinter_level_5(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_5))==NULL)
                return WERR_NOMEM;
 
-       if (!construct_printer_info_5(print_hnd, printer, params)) {
+       if (!construct_printer_info_5(print_hnd, printer, snum)) {
                free_printer_info_5(printer);
                return WERR_NOMEM;
        }
@@ -5063,7 +4988,7 @@ out:
 }
 
 static WERROR getprinter_level_6(Printer_entry *print_hnd,
-                                const struct share_params *params,
+                                int snum,
                                 RPC_BUFFER *buffer, uint32 offered,
                                 uint32 *needed)
 {
@@ -5074,7 +4999,7 @@ static WERROR getprinter_level_6(Printer_entry *print_hnd,
                return WERR_NOMEM;
        }
 
-       if (!construct_printer_info_6(print_hnd, printer, params)) {
+       if (!construct_printer_info_6(print_hnd, printer, snum)) {
                free_printer_info_6(printer);
                return WERR_NOMEM;
        }
@@ -5102,10 +5027,7 @@ out:
        return result;  
 }
 
-static WERROR getprinter_level_7(Printer_entry *print_hnd,
-                                const struct share_params *params,
-                                RPC_BUFFER *buffer, uint32 offered,
-                                uint32 *needed)
+static WERROR getprinter_level_7(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
        PRINTER_INFO_7 *printer=NULL;
        WERROR result = WERR_OK;
@@ -5113,7 +5035,7 @@ static WERROR getprinter_level_7(Printer_entry *print_hnd,
        if((printer=SMB_MALLOC_P(PRINTER_INFO_7))==NULL)
                return WERR_NOMEM;
 
-       if (!construct_printer_info_7(print_hnd, printer, params))
+       if (!construct_printer_info_7(print_hnd, printer, snum))
                return WERR_NOMEM;
        
        /* check the required size. */  
@@ -5151,7 +5073,6 @@ WERROR _spoolss_getprinter(pipes_struct *p, SPOOL_Q_GETPRINTER *q_u, SPOOL_R_GET
        uint32 offered = q_u->offered;
        uint32 *needed = &r_u->needed;
        Printer_entry *Printer=find_printer_index_by_hnd(p, handle);
-       struct share_params *params;
 
        int snum;
 
@@ -5166,34 +5087,26 @@ WERROR _spoolss_getprinter(pipes_struct *p, SPOOL_Q_GETPRINTER *q_u, SPOOL_R_GET
 
        *needed=0;
 
-       if (!get_printer_snum(p, handle, &snum, &params))
+       if (!get_printer_snum(p, handle, &snum, NULL))
                return WERR_BADFID;
 
        switch (level) {
        case 0:
-               return getprinter_level_0(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_0(Printer, snum, buffer, offered, needed);
        case 1:
-               return getprinter_level_1(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_1(Printer, snum, buffer, offered, needed);
        case 2:         
-               return getprinter_level_2(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_2(Printer, snum, buffer, offered, needed);
        case 3:         
-               return getprinter_level_3(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_3(Printer, snum, buffer, offered, needed);
        case 4:         
-               return getprinter_level_4(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_4(Printer, snum, buffer, offered, needed);
        case 5:         
-               return getprinter_level_5(Printer, params, buffer, offered,
-                                         needed);
-       case 6:
-               return getprinter_level_6(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_5(Printer, snum, buffer, offered, needed);
+       case 6:         
+               return getprinter_level_6(Printer, snum, buffer, offered, needed);
        case 7:
-               return getprinter_level_7(Printer, params, buffer, offered,
-                                         needed);
+               return getprinter_level_7(Printer, snum, buffer, offered, needed);
        }
        return WERR_UNKNOWN_LEVEL;
 }      
@@ -6144,7 +6057,7 @@ static WERROR update_printer_sec(POLICY_HND *handle, uint32 level,
  _spoolss_open_printer_ex().
  ********************************************************************/
 
-static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
+static bool check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
 {
        fstring printername;
        const char *p;
@@ -6196,7 +6109,7 @@ WERROR add_port_hook(NT_USER_TOKEN *token, const char *portname, const char *uri
        int ret;
        int fd;
        SE_PRIV se_printop = SE_PRINT_OPERATOR;
-       BOOL is_print_op = False;
+       bool is_print_op = False;
 
        if ( !*cmd ) {
                return WERR_ACCESS_DENIED;
@@ -6235,7 +6148,7 @@ WERROR add_port_hook(NT_USER_TOKEN *token, const char *portname, const char *uri
 /****************************************************************************
 ****************************************************************************/
 
-BOOL add_printer_hook(NT_USER_TOKEN *token, NT_PRINTER_INFO_LEVEL *printer)
+bool add_printer_hook(NT_USER_TOKEN *token, NT_PRINTER_INFO_LEVEL *printer)
 {
        char *cmd = lp_addprinter_cmd();
        char **qlines;
@@ -6245,7 +6158,7 @@ BOOL add_printer_hook(NT_USER_TOKEN *token, NT_PRINTER_INFO_LEVEL *printer)
        int fd;
        fstring remote_machine = "%m";
        SE_PRIV se_printop = SE_PRINT_OPERATOR;
-       BOOL is_print_op = False;
+       bool is_print_op = False;
 
        standard_sub_basic(current_user_info.smb_name,
                           current_user_info.domain,
@@ -6661,7 +6574,7 @@ static void fill_job_info_1(JOB_INFO_1 *job_info, const print_queue_struct *queu
 /****************************************************************************
 ****************************************************************************/
 
-static BOOL fill_job_info_2(JOB_INFO_2 *job_info, const print_queue_struct *queue,
+static bool fill_job_info_2(JOB_INFO_2 *job_info, const print_queue_struct *queue,
                             int position, int snum, 
                            const NT_PRINTER_INFO_LEVEL *ntprinter,
                            DEVICEMODE *devmode)
@@ -7373,7 +7286,7 @@ WERROR _spoolss_getform(pipes_struct *p, SPOOL_Q_GETFORM *q_u, SPOOL_R_GETFORM *
 
        nt_forms_struct *list=NULL;
        nt_forms_struct builtin_form;
-       BOOL foundBuiltin;
+       bool foundBuiltin;
        FORM_1 form_1;
        fstring form_name;
        int buffer_size=0;
@@ -8930,7 +8843,7 @@ static WERROR getjob_level_1(print_queue_struct **queue, int count, int snum,
                             uint32 *needed)
 {
        int i=0;
-       BOOL found=False;
+       bool found=False;
        JOB_INFO_1 *info_1=NULL;
        WERROR result = WERR_OK;
 
@@ -8982,7 +8895,7 @@ static WERROR getjob_level_2(print_queue_struct **queue, int count, int snum,
                             uint32 *needed)
 {
        int             i = 0;
-       BOOL            found = False;
+       bool            found = False;
        JOB_INFO_2      *info_2;
        WERROR          result;
        DEVICEMODE      *devmode = NULL;