s3-registry: use pull_reg_sz() where appropriate.
authorGünther Deschner <gd@samba.org>
Wed, 30 Sep 2009 18:00:52 +0000 (20:00 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 1 Oct 2009 09:40:30 +0000 (11:40 +0200)
(and move away from rpcstr_pull and rpcstr_pull_talloc).

Guenther

source3/include/proto.h
source3/printing/nt_printing.c
source3/registry/reg_objects.c
source3/rpcclient/cmd_spoolss.c
source3/services/services_db.c
source3/utils/net_rpc_printer.c
source3/utils/net_rpc_registry.c

index 25b04fe5101d6d1c0930ad1e5d55eefa2fb166a8..7fff5a6406a1327aa5e782aece789c016a24c1e8 100644 (file)
@@ -5126,7 +5126,7 @@ int regval_ctr_delvalue(struct regval_ctr *ctr, const char *name);
 struct regval_blob* regval_ctr_getvalue(struct regval_ctr *ctr,
                                        const char *name);
 uint32 regval_dword(struct regval_blob *val);
-char *regval_sz(struct regval_blob *val);
+const char *regval_sz(struct regval_blob *val);
 
 /* The following definitions come from registry/reg_perfcount.c  */
 
index 3c7f053ff262645962b05268a620f532f1f0201e..9995dfe4721beda2508217a881e65eba9799cd49 100644 (file)
@@ -3436,6 +3436,7 @@ bool is_printer_published(Printer_entry *print_hnd, int snum,
        WERROR win_rc;
        int i;
        bool ret = False;
+       DATA_BLOB blob;
 
        win_rc = get_a_printer(print_hnd, &printer, 2, lp_servicename(snum));
 
@@ -3452,16 +3453,18 @@ bool is_printer_published(Printer_entry *print_hnd, int snum,
        /* fetching printer guids really ought to be a separate function. */
 
        if ( guid ) {
-               fstring guid_str;
+               char *guid_str;
 
                /* We used to store the guid as REG_BINARY, then swapped
                   to REG_SZ for Vista compatibility so check for both */
 
                switch ( regval_type(guid_val) ){
                case REG_SZ:
-                       rpcstr_pull( guid_str, regval_data_p(guid_val),
-                                    sizeof(guid_str)-1, -1, STR_TERMINATE );
+                       blob = data_blob_const(regval_data_p(guid_val),
+                                              regval_size(guid_val));
+                       pull_reg_sz(talloc_tos(), &blob, (const char **)&guid_str);
                        ret = NT_STATUS_IS_OK(GUID_from_string( guid_str, guid ));
+                       talloc_free(guid_str);
                        break;
                case REG_BINARY:
                        if ( regval_size(guid_val) != sizeof(struct GUID) ) {
index 21ebba65400da62a22d75ddd397ff62d1ffae8e9..b4b8ff26307d79124a6bc0e55af3630bf672f27a 100644 (file)
@@ -602,11 +602,12 @@ uint32 regval_dword(struct regval_blob *val)
  return the data_p as a character string
  **********************************************************************/
 
-char *regval_sz(struct regval_blob *val)
+const char *regval_sz(struct regval_blob *val)
 {
-       char *data = NULL;
+       const char *data = NULL;
+       DATA_BLOB blob = data_blob_const(regval_data_p(val), regval_size(val));
+
+       pull_reg_sz(talloc_tos(), &blob, &data);
 
-       rpcstr_pull_talloc(talloc_tos(), &data,
-                       regval_data_p(val), regval_size(val),0);
        return data;
 }
index 6a525514a467047a93227210803b0424e6ae4050..8b1a6eac03624a7cf9d64ec9716176b497b855c5 100644 (file)
@@ -689,7 +689,8 @@ static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli,
 
 static void display_reg_value(struct regval_blob value)
 {
-       char *text = NULL;
+       const char *text = NULL;
+       DATA_BLOB blob;
 
        switch(value.type) {
        case REG_DWORD:
@@ -697,11 +698,8 @@ static void display_reg_value(struct regval_blob value)
                       *((uint32_t *) value.data_p));
                break;
        case REG_SZ:
-               rpcstr_pull_talloc(talloc_tos(),
-                               &text,
-                               value.data_p,
-                               value.size,
-                               STR_TERMINATE);
+               blob = data_blob_const(value.data_p, value.size);
+               pull_reg_sz(talloc_tos(), &blob, &text);
                printf("%s: REG_SZ: %s\n", value.valuename, text ? text : "");
                break;
        case REG_BINARY: {
@@ -725,7 +723,7 @@ static void display_reg_value(struct regval_blob value)
        case REG_MULTI_SZ: {
                uint32_t i;
                const char **values;
-               DATA_BLOB blob = data_blob_const(value.data_p, value.size);
+               blob = data_blob_const(value.data_p, value.size);
 
                if (!pull_reg_multi_sz(NULL, &blob, &values)) {
                        d_printf("pull_reg_multi_sz failed\n");
index b36774484d6580824c4fe92887072477645f771b..b610c922a9df2d7ed044997d2b835befef1bcfca 100644 (file)
@@ -611,12 +611,13 @@ bool svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc,
 
 const char *svcctl_lookup_dispname(TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
 {
-       char *display_name = NULL;
+       const char *display_name = NULL;
        struct registry_key_handle *key = NULL;
        struct regval_ctr *values = NULL;
        struct regval_blob *val = NULL;
        char *path = NULL;
        WERROR wresult;
+       DATA_BLOB blob;
 
        /* now add the security descriptor */
 
@@ -644,7 +645,8 @@ const char *svcctl_lookup_dispname(TALLOC_CTX *ctx, const char *name, NT_USER_TO
        if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) )
                goto fail;
 
-       rpcstr_pull_talloc(ctx, &display_name, regval_data_p(val), regval_size(val), 0 );
+       blob = data_blob_const(regval_data_p(val), regval_size(val));
+       pull_reg_sz(ctx, &blob, &display_name);
 
        TALLOC_FREE( key );
 
@@ -661,12 +663,13 @@ fail:
 
 const char *svcctl_lookup_description(TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
 {
-       char *description = NULL;
+       const char *description = NULL;
        struct registry_key_handle *key = NULL;
        struct regval_ctr *values = NULL;
        struct regval_blob *val = NULL;
        char *path = NULL;
        WERROR wresult;
+       DATA_BLOB blob;
 
        /* now add the security descriptor */
 
@@ -695,7 +698,10 @@ const char *svcctl_lookup_description(TALLOC_CTX *ctx, const char *name, NT_USER
                TALLOC_FREE( key );
                return "Unix Service";
        }
-       rpcstr_pull_talloc(ctx, &description, regval_data_p(val), regval_size(val), 0 );
+
+       blob = data_blob_const(regval_data_p(val), regval_size(val));
+       pull_reg_sz(ctx, &blob, &description);
+
        TALLOC_FREE(key);
 
        return description;
index 9a8e0a9ba6df3bb89b33c09990416c86894c7ae4..5652caf8341725c85c45c3f99d5b7a43d0e20adc 100644 (file)
@@ -72,7 +72,8 @@ static void display_print_driver3(struct spoolss_DriverInfo3 *r)
 
 static void display_reg_value(const char *subkey, struct regval_blob value)
 {
-       char *text;
+       const char *text;
+       DATA_BLOB blob;
 
        switch(value.type) {
        case REG_DWORD:
@@ -81,11 +82,8 @@ static void display_reg_value(const char *subkey, struct regval_blob value)
                break;
 
        case REG_SZ:
-               rpcstr_pull_talloc(talloc_tos(),
-                               &text,
-                               value.data_p,
-                               value.size,
-                               STR_TERMINATE);
+               blob = data_blob_const(value.data_p, value.size);
+               pull_reg_sz(talloc_tos(), &blob, &text);
                if (!text) {
                        break;
                }
@@ -102,7 +100,7 @@ static void display_reg_value(const char *subkey, struct regval_blob value)
        case REG_MULTI_SZ: {
                uint32_t i;
                const char **values;
-               DATA_BLOB blob = data_blob_const(value.data_p, value.size);
+               blob = data_blob_const(value.data_p, value.size);
 
                if (!pull_reg_multi_sz(NULL, &blob, &values)) {
                        d_printf("pull_reg_multi_sz failed\n");
index 1ad1d74ca0853c7ff70e783853996d5b362ea451..d9eb9b3c0948794c4d1a05f2a75974aea21098a2 100644 (file)
@@ -895,8 +895,9 @@ static int rpc_registry_save(struct net_context *c, int argc, const char **argv
 static void dump_values( REGF_NK_REC *nk )
 {
        int i, j;
-       char *data_str = NULL;
+       const char *data_str = NULL;
        uint32 data_size, data;
+       DATA_BLOB blob;
 
        if ( !nk->values )
                return;
@@ -908,11 +909,8 @@ static void dump_values( REGF_NK_REC *nk )
                data_size = nk->values[i].data_size & ~VK_DATA_IN_OFFSET;
                switch ( nk->values[i].type ) {
                        case REG_SZ:
-                               rpcstr_pull_talloc(talloc_tos(),
-                                               &data_str,
-                                               nk->values[i].data,
-                                               -1,
-                                               STR_TERMINATE);
+                               blob = data_blob_const(nk->values[i].data, data_size);
+                               pull_reg_sz(talloc_tos(), &blob, &data_str);
                                if (!data_str) {
                                        break;
                                }