s3-printing: more use of pull_reg_sz().
authorGünther Deschner <gd@samba.org>
Wed, 30 Sep 2009 18:01:35 +0000 (20:01 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 1 Oct 2009 09:40:31 +0000 (11:40 +0200)
Guenther

source3/registry/reg_backend_printing.c

index cc44f877bba68bfcf4a1cf23cd5dd47aa220048b..453e2b2d0cc729ca65edf33b1cda94f7cd69f1ee 100644 (file)
@@ -575,7 +575,16 @@ static int find_valuename_index( const char *valuename )
 /**********************************************************************
  *********************************************************************/
 
-static void convert_values_to_printer_info_2(NT_PRINTER_INFO_LEVEL_2 *printer2, struct regval_ctr *values)
+static void pull_reg_sz_fstring(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, fstring s)
+{
+       const char *str;
+       pull_reg_sz(mem_ctx, blob, &str);
+       fstrcpy(s, str);
+}
+
+static void convert_values_to_printer_info_2(TALLOC_CTX *mem_ctx,
+                                            NT_PRINTER_INFO_LEVEL_2 *printer2,
+                                            struct regval_ctr *values)
 {
        int num_values = regval_ctr_numvals( values );
        uint32 value_index;
@@ -583,8 +592,11 @@ static void convert_values_to_printer_info_2(NT_PRINTER_INFO_LEVEL_2 *printer2,
        int i;
        
        for ( i=0; i<num_values; i++ ) {
+               DATA_BLOB blob;
                val = regval_ctr_specific_value( values, i );
                value_index = find_valuename_index( regval_name( val ) );
+
+               blob = data_blob_const(regval_data_p(val), regval_size(val));
                
                switch( value_index ) {
                        case REG_IDX_ATTRIBUTES:
@@ -606,34 +618,34 @@ static void convert_values_to_printer_info_2(NT_PRINTER_INFO_LEVEL_2 *printer2,
                                printer2->untiltime = (uint32)(*regval_data_p(val));
                                break;
                        case REG_IDX_NAME:
-                               rpcstr_pull( printer2->printername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->printername);
                                break;
                        case REG_IDX_LOCATION:
-                               rpcstr_pull( printer2->location, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->location);
                                break;
                        case REG_IDX_DESCRIPTION:
-                               rpcstr_pull( printer2->comment, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->comment);
                                break;
                        case REG_IDX_PARAMETERS:
-                               rpcstr_pull( printer2->parameters, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->parameters);
                                break;
                        case REG_IDX_PORT:
-                               rpcstr_pull( printer2->portname, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->portname);
                                break;
                        case REG_IDX_SHARENAME:
-                               rpcstr_pull( printer2->sharename, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->sharename);
                                break;
                        case REG_IDX_DRIVER:
-                               rpcstr_pull( printer2->drivername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->drivername);
                                break;
                        case REG_IDX_SEP_FILE:
-                               rpcstr_pull( printer2->sepfile, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->sepfile);
                                break;
                        case REG_IDX_PRINTPROC:
-                               rpcstr_pull( printer2->printprocessor, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->printprocessor);
                                break;
                        case REG_IDX_DATATYPE:
-                               rpcstr_pull( printer2->datatype, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+                               pull_reg_sz_fstring(mem_ctx, &blob, printer2->datatype);
                                break;
                        case REG_IDX_DEVMODE:
                                break;
@@ -658,6 +670,7 @@ static bool key_printers_store_values(const char *key, struct regval_ctr *values
        char *printername, *keyname;
        NT_PRINTER_INFO_LEVEL   *printer = NULL;
        WERROR result;
+       TALLOC_CTX *mem_ctx = talloc_init("key_printers_store_values");
        
        printers_key = strip_printers_prefix( key );
        
@@ -678,7 +691,7 @@ static bool key_printers_store_values(const char *key, struct regval_ctr *values
        /* deal with setting values directly under the printername */
 
        if ( !keyname ) {
-               convert_values_to_printer_info_2( printer->info_2, values );
+               convert_values_to_printer_info_2(mem_ctx, printer->info_2, values );
        }
        else {
                int num_values = regval_ctr_numvals( values );
@@ -699,6 +712,7 @@ static bool key_printers_store_values(const char *key, struct regval_ctr *values
                                DEBUG(0,("key_printers_store_values: failed to set printer data [%s]!\n",
                                        keyname));
                                free_a_printer( &printer, 2 );
+                               talloc_destroy(mem_ctx);
                                return False;
                        }
                }
@@ -707,6 +721,7 @@ static bool key_printers_store_values(const char *key, struct regval_ctr *values
        result = mod_a_printer( printer, 2 );
 
        free_a_printer( &printer, 2 );
+       talloc_destroy(mem_ctx);
 
        return W_ERROR_IS_OK(result);
 }