The branch, v3-2-test has been updated
       via  b5a2a1e3f82a0d319fc9a1d76f5166150680f4d4 (commit)
      from  6a556fd73ac8c247c15df664f7910f8688abfdbc (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit b5a2a1e3f82a0d319fc9a1d76f5166150680f4d4
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Tue Nov 27 19:05:08 2007 -0800

    Remove pstring from srv_spoolss_nt.c. All gone from rpc_server/*.c
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/include/nt_printing.h       |    2 +-
 source/printing/print_cups.c       |    4 +-
 source/registry/reg_printing.c     |    2 +-
 source/rpc_server/srv_spoolss_nt.c |  538 ++++++++++++++++++++----------------
 4 files changed, 311 insertions(+), 235 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/nt_printing.h b/source/include/nt_printing.h
index 8e8d87b..479404d 100644
--- a/source/include/nt_printing.h
+++ b/source/include/nt_printing.h
@@ -312,7 +312,7 @@ typedef struct nt_printer_info_level_2
        fstring sharename;
        fstring portname;
        fstring drivername;
-       pstring comment;
+       char comment[1024];
        fstring location;
        NT_DEVICEMODE *devmode;
        fstring sepfile;
diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c
index 6e62306..593c5c7 100644
--- a/source/printing/print_cups.c
+++ b/source/printing/print_cups.c
@@ -1298,7 +1298,9 @@ bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 
*printer)
                        {
                                DEBUG(5,("cups_pull_comment_location: Using 
cups comment: %s\n",
                                         attr->values[0].string.text));         
                
-                               
pstrcpy(printer->comment,attr->values[0].string.text);
+                               strlcpy(printer->comment,
+                                               attr->values[0].string.text,
+                                               sizeof(printer->comment));
                        }
 
                        /* Grab the location if we don't have one */ 
diff --git a/source/registry/reg_printing.c b/source/registry/reg_printing.c
index 8c1de76..2ca74f7 100644
--- a/source/registry/reg_printing.c
+++ b/source/registry/reg_printing.c
@@ -296,7 +296,7 @@ static bool add_printers_by_registry( REGSUBKEY_CTR 
*subkeys )
                if ( snum == -1 ) {
                        fstrcpy( info2.printername, printername );
                        fstrcpy( info2.sharename, printername );
-                       if ( !add_printer_hook( NULL, &printer ) ) {
+                       if ( !add_printer_hook(talloc_tos(), NULL, &printer ) ) 
{
                                DEBUG(0,("add_printers_by_registry: Failed to 
add printer [%s]\n",
                                        printername));
                        }       
diff --git a/source/rpc_server/srv_spoolss_nt.c 
b/source/rpc_server/srv_spoolss_nt.c
index a6f3bfb..b01f10b 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -284,10 +284,11 @@ static bool close_printer_handle(pipes_struct *p, 
POLICY_HND *hnd)
 /****************************************************************************
  Delete a printer given a handle.
 ****************************************************************************/
-WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
+
+WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, const char 
*sharename )
 {
        char *cmd = lp_deleteprinter_cmd();
-       pstring command;
+       char *command = NULL;
        int ret;
        SE_PRIV se_printop = SE_PRINT_OPERATOR;
        bool is_print_op = False;
@@ -297,8 +298,12 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const 
char *sharename )
        if ( !*cmd )
                return WERR_OK;
 
-       pstr_sprintf(command, "%s \"%s\"", cmd, sharename);
-
+       command = talloc_asprintf(ctx,
+                       "%s \"%s\"",
+                       cmd, sharename);
+       if (!command) {
+               return WERR_NOMEM;
+       }
        if ( token )
                is_print_op = user_has_privileges( token, &se_printop );
 
@@ -322,6 +327,8 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const 
char *sharename )
 
        DEBUGADD(10,("returned [%d]\n", ret));
 
+       TALLOC_FREE(command);
+
        if (ret != 0)
                return WERR_BADFID; /* What to return here? */
 
@@ -367,7 +374,7 @@ static WERROR delete_printer_handle(pipes_struct *p, 
POLICY_HND *hnd)
                return WERR_BADFID;
        }
 
-       return delete_printer_hook( p->pipe_user.nt_user_token, 
Printer->sharename );
+       return delete_printer_hook(p->mem_ctx, p->pipe_user.nt_user_token, 
Printer->sharename );
 }
 
 /****************************************************************************
@@ -2719,20 +2726,17 @@ void spoolss_notify_server_name(int snum,
                                       NT_PRINTER_INFO_LEVEL *printer,
                                       TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, printer->info_2->servername, sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->servername);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2748,7 +2752,7 @@ void spoolss_notify_printer_name(int snum,
                                        NT_PRINTER_INFO_LEVEL *printer,
                                        TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
        /* the notify name should not contain the \\server\ part */
@@ -2760,16 +2764,14 @@ void spoolss_notify_printer_name(int snum,
                p++;
        }
 
-       len = rpcstr_push(temp, p, sizeof(temp)-2, STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, p);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2785,19 +2787,17 @@ void spoolss_notify_share_name(int snum,
                                      NT_PRINTER_INFO_LEVEL *printer,
                                      TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, lp_servicename(snum), sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, lp_servicename(snum));
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2814,23 +2814,19 @@ void spoolss_notify_port_name(int snum,
                                     NT_PRINTER_INFO_LEVEL *printer,
                                     TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
        /* even if it's strange, that's consistant in all the code */
 
-       len = rpcstr_push(temp, printer->info_2->portname, sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->portname);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2847,21 +2843,17 @@ void spoolss_notify_driver_name(int snum,
                                       NT_PRINTER_INFO_LEVEL *printer,
                                       TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, printer->info_2->drivername, sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->drivername);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2877,24 +2869,20 @@ void spoolss_notify_comment(int snum,
                                   NT_PRINTER_INFO_LEVEL *printer,
                                   TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
        if (*printer->info_2->comment == '\0')
-               len = rpcstr_push(temp, lp_comment(snum), sizeof(temp)-2, 
STR_TERMINATE);
+               len = rpcstr_push_talloc(mem_ctx, &temp, lp_comment(snum));
        else
-               len = rpcstr_push(temp, printer->info_2->comment, 
sizeof(temp)-2, STR_TERMINATE);
+               len = rpcstr_push_talloc(mem_ctx, &temp, 
printer->info_2->comment);
 
+       if (len == (uint32)-1) {
+               len = 0;
+       }
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2911,21 +2899,17 @@ void spoolss_notify_location(int snum,
                                    NT_PRINTER_INFO_LEVEL *printer,
                                    TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, printer->info_2->location,sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->location);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2957,21 +2941,17 @@ void spoolss_notify_sepfile(int snum,
                                   NT_PRINTER_INFO_LEVEL *printer,
                                   TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, printer->info_2->sepfile, sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->sepfile);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -2988,21 +2968,17 @@ void spoolss_notify_print_processor(int snum,
                                           NT_PRINTER_INFO_LEVEL *printer,
                                           TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp,  printer->info_2->printprocessor, 
sizeof(temp)-2, STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, 
printer->info_2->printprocessor);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3019,21 +2995,17 @@ void spoolss_notify_parameters(int snum,
                                      NT_PRINTER_INFO_LEVEL *printer,
                                      TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp,  printer->info_2->parameters, sizeof(temp)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->parameters);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3050,21 +3022,17 @@ void spoolss_notify_datatype(int snum,
                                    NT_PRINTER_INFO_LEVEL *printer,
                                    TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, printer->info_2->datatype, sizeof(pstring)-2, 
STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->datatype);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3214,21 +3182,17 @@ static void spoolss_notify_username(int snum,
                                    NT_PRINTER_INFO_LEVEL *printer,
                                    TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, queue->fs_user, sizeof(temp)-2, STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_user);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3258,21 +3222,17 @@ static void spoolss_notify_job_name(int snum,
                                    NT_PRINTER_INFO_LEVEL *printer,
                                    TALLOC_CTX *mem_ctx)
 {
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
-       len = rpcstr_push(temp, queue->fs_file, sizeof(temp)-2, STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_file);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3293,7 +3253,7 @@ static void spoolss_notify_job_status_string(int snum,
         */
 
        const char *p = "";
-       pstring temp;
+       smb_ucs2_t *temp = NULL;
        uint32 len;
 
 #if 0 /* NO LONGER NEEDED - JRA. 02/22/2001 */
@@ -3315,18 +3275,14 @@ static void spoolss_notify_job_status_string(int snum,
        }
 #endif /* NO LONGER NEEDED. */
 
-       len = rpcstr_push(temp, p, sizeof(temp) - 2, STR_TERMINATE);
+       len = rpcstr_push_talloc(mem_ctx, &temp, p);
+       if (len == (uint32)-1) {
+               len = 0;
+       }
 
        data->notify_data.data.length = len;
        if (len) {
-               data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-               if (!data->notify_data.data.string) {
-                       data->notify_data.data.length = 0;
-                       return;
-               }
-
-               memcpy(data->notify_data.data.string, temp, len);
+               data->notify_data.data.string = (uint16 *)temp;
        } else {
                data->notify_data.data.string = NULL;
        }
@@ -3954,7 +3910,7 @@ done:
 
 static bool construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 
*printer, int snum)
 {
-       pstring chaine;


-- 
Samba Shared Repository

Reply via email to