Ensure convert_string_XXX is always called with a valid converted_size pointer.
authorJeremy Allison <jra@samba.org>
Tue, 29 Mar 2011 18:16:26 +0000 (11:16 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 29 Mar 2011 19:01:49 +0000 (21:01 +0200)
Preparation for cleaning up this API.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Tue Mar 29 21:01:49 CEST 2011 on sn-devel-104

libcli/auth/ntlm_check.c
librpc/ndr/ndr_drsuapi.c
source4/dsdb/schema/schema_syntax.c
source4/lib/registry/patchfile_dotreg.c
source4/lib/registry/util.c
source4/libcli/raw/rawfileinfo.c
source4/libcli/smb2/request.c
source4/libnet/libnet_samdump.c
source4/rpc_server/samr/samr_password.c
source4/smb_server/smb/request.c
source4/torture/rpc/samlogon.c

index 9cbd49595f4527086477777e6ae04a4d976f1c7e..9520d32a1e8afa5930aac90c512d52dc628245d4 100644 (file)
@@ -314,6 +314,7 @@ NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx,
                struct samr_Password client_lm;
                char *unix_pw = NULL;
                bool lm_ok;
+               size_t converted_size = 0;
 
                DEBUG(4,("ntlm_password_check: checking plaintext passwords for user %s\n",
                         username));
@@ -322,7 +323,7 @@ NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx,
                if (lm_response->length && 
                    (convert_string_talloc(mem_ctx, CH_DOS, CH_UNIX, 
                                          lm_response->data, lm_response->length, 
-                                          (void *)&unix_pw, NULL))) {
+                                          (void *)&unix_pw, &converted_size))) {
                        if (E_deshash(unix_pw, client_lm.hash)) {
                                lm_ok = true;
                        } else {
index 35216ff19dd1d0c3b4966582dc4aa47316721256..852153a7e6c2b9d09a8908a4ded1a098af7b470d 100644 (file)
@@ -102,6 +102,7 @@ static void _print_drsuapi_DsAttributeValue_str(struct ndr_print *ndr, const cha
                                                const struct drsuapi_DsAttributeValue *r)
 {
        char *str;
+       size_t converted_size = 0;
 
        ndr_print_struct(ndr, name, "drsuapi_DsAttributeValue");
        ndr->depth++;
@@ -109,7 +110,7 @@ static void _print_drsuapi_DsAttributeValue_str(struct ndr_print *ndr, const cha
                                   CH_UTF16, CH_UNIX,
                                   r->blob->data,
                                   r->blob->length,
-                                  (void **)&str, NULL)) {
+                                  (void **)&str, &converted_size)) {
                ndr_print_string(ndr, "string", "INVALID CONVERSION");
        } else {
                ndr_print_string(ndr, "string", str);
index 88badc71364996d08d1d2fa61a0acbfc55eed0c7..8be87df82739ccb6ceef8e0106130f8072287532 100644 (file)
@@ -1470,6 +1470,7 @@ static WERROR dsdb_syntax_UNICODE_drsuapi_to_ldb(const struct dsdb_syntax_ctx *c
        W_ERROR_HAVE_NO_MEMORY(out->values);
 
        for (i=0; i < out->num_values; i++) {
+               size_t converted_size = 0;
                char *str;
 
                if (in->value_ctr.values[i].blob == NULL) {
@@ -1484,7 +1485,7 @@ static WERROR dsdb_syntax_UNICODE_drsuapi_to_ldb(const struct dsdb_syntax_ctx *c
                                           CH_UTF16, CH_UNIX,
                                           in->value_ctr.values[i].blob->data,
                                           in->value_ctr.values[i].blob->length,
-                                          (void **)&str, NULL)) {
+                                          (void **)&str, &converted_size)) {
                        return WERR_FOOBAR;
                }
 
@@ -2227,6 +2228,7 @@ static WERROR dsdb_syntax_PRESENTATION_ADDRESS_drsuapi_to_ldb(const struct dsdb_
 
        for (i=0; i < out->num_values; i++) {
                size_t len;
+               size_t converted_size = 0;
                char *str;
 
                if (in->value_ctr.values[i].blob == NULL) {
@@ -2246,7 +2248,7 @@ static WERROR dsdb_syntax_PRESENTATION_ADDRESS_drsuapi_to_ldb(const struct dsdb_
                if (!convert_string_talloc(out->values, CH_UTF16, CH_UNIX,
                                           in->value_ctr.values[i].blob->data+4,
                                           in->value_ctr.values[i].blob->length-4,
-                                          (void **)&str, NULL)) {
+                                          (void **)&str, &converted_size)) {
                        return WERR_FOOBAR;
                }
 
index 073c12e345493bd529773d6aab26aab7defc3f95..c4409dcf9c16bdf56f0781c55301a0b7b2b5a7db 100644 (file)
@@ -70,6 +70,7 @@ static char *dotreg_data_blob_hex_string(TALLOC_CTX *mem_ctx, const DATA_BLOB *b
 static char *reg_val_dotreg_string(TALLOC_CTX *mem_ctx, uint32_t type,
                                   const DATA_BLOB data)
 {
+       size_t converted_size = 0;
        char *ret = NULL;
 
        if (data.length == 0)
@@ -80,7 +81,7 @@ static char *reg_val_dotreg_string(TALLOC_CTX *mem_ctx, uint32_t type,
                case REG_SZ:
                        convert_string_talloc(mem_ctx,
                                              CH_UTF16, CH_UNIX, data.data, data.length,
-                                             (void **)&ret, NULL);
+                                             (void **)&ret, &converted_size);
                        break;
                case REG_DWORD:
                case REG_DWORD_BIG_ENDIAN:
index 3bbfaf24544bd5e3602dbab07013f49a95b2fa0f..1197adba7f15fdad160d2e4669419063f48cd99a 100644 (file)
@@ -26,6 +26,7 @@
 _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx, uint32_t type,
                                   const DATA_BLOB data)
 {
+       size_t converted_size = 0;
        char *ret = NULL;
 
        if (data.length == 0)
@@ -37,7 +38,7 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx, uint32_t type,
                        convert_string_talloc(mem_ctx,
                                              CH_UTF16, CH_UNIX,
                                              data.data, data.length,
-                                             (void **)&ret, NULL);
+                                             (void **)&ret, &converted_size);
                        break;
                case REG_DWORD:
                case REG_DWORD_BIG_ENDIAN:
index 5efa4dd3379693636a188f0c7327c933d2cbd4ed..50a6731ba4158d883e40256dac8247885ff08084 100644 (file)
@@ -51,6 +51,8 @@ NTSTATUS smbcli_parse_stream_info(DATA_BLOB blob, TALLOC_CTX *mem_ctx,
                uint32_t nlen, len;
                bool ret;
                void *vstr;
+               size_t converted_size = 0;
+
                io->streams = 
                        talloc_realloc(mem_ctx, io->streams, struct stream_struct, n+1);
                if (!io->streams) {
@@ -64,7 +66,7 @@ NTSTATUS smbcli_parse_stream_info(DATA_BLOB blob, TALLOC_CTX *mem_ctx,
                }
                ret = convert_string_talloc(io->streams, 
                                             CH_UTF16, CH_UNIX,
-                                            blob.data+ofs+24, nlen, &vstr, NULL);
+                                            blob.data+ofs+24, nlen, &vstr, &converted_size);
                if (!ret) {
                        return NT_STATUS_ILLEGAL_CHARACTER;
                }
index bf96d05bea05284edac6ffd71094e60addd135ff..729b003aed743bcabeafe15995ce4ee0c6c26b52 100644 (file)
@@ -686,6 +686,7 @@ NTSTATUS smb2_pull_o16s16_string(struct smb2_request_buffer *buf, TALLOC_CTX *me
        DATA_BLOB blob;
        NTSTATUS status;
        void *vstr;
+       size_t converted_size = 0;
        bool ret;
 
        status = smb2_pull_o16s16_blob(buf, mem_ctx, ptr, &blob);
@@ -705,7 +706,7 @@ NTSTATUS smb2_pull_o16s16_string(struct smb2_request_buffer *buf, TALLOC_CTX *me
        }
 
        ret = convert_string_talloc(mem_ctx, CH_UTF16, CH_UNIX, 
-                                    blob.data, blob.length, &vstr, NULL);
+                                    blob.data, blob.length, &vstr, &converted_size);
        data_blob_free(&blob);
        (*str) = (char *)vstr;
        if (!ret) {
index 90ec8d6f4264ef6fe37c7ba8cc729d965ad48f0c..326d8041b26d1b17befcaa261ccfb513aae2d5a3 100644 (file)
@@ -181,13 +181,14 @@ NTSTATUS libnet_SamDump(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
        for (t=samdump_state->trusted_domains; t; t=t->next) {
                char *secret_name = talloc_asprintf(mem_ctx, "G$$%s", t->name);
                for (s=samdump_state->secrets; s; s=s->next) {
+                       size_t converted_size = 0;
                        char *secret_string;
                        if (strcasecmp_m(s->name, secret_name) != 0) {
                                continue;
                        }
                        if (!convert_string_talloc_handle(mem_ctx, lpcfg_iconv_handle(ctx->lp_ctx), CH_UTF16, CH_UNIX,
                                                  s->secret.data, s->secret.length, 
-                                                 (void **)&secret_string, NULL)) {
+                                                 (void **)&secret_string, &converted_size)) {
                                r->out.error_string = talloc_asprintf(mem_ctx, 
                                                                      "Could not convert secret for domain %s to a string",
                                                                      t->name);
index 873c0d856178ff774819954950193686c2d360c2..8963b0436eb484bb4edeb00838a9c6dce897163d 100644 (file)
@@ -181,6 +181,7 @@ NTSTATUS dcesrv_samr_OemChangePasswordUser2(struct dcesrv_call_state *dce_call,
        uint8_t new_lm_hash[16];
        struct samr_Password lm_verifier;
        size_t unicode_pw_len;
+       size_t converted_size = 0;
 
        if (pwbuf == NULL) {
                return NT_STATUS_INVALID_PARAMETER;
@@ -238,7 +239,7 @@ NTSTATUS dcesrv_samr_OemChangePasswordUser2(struct dcesrv_call_state *dce_call,
                                  CH_DOS, CH_UNIX,
                                  (const char *)new_password.data,
                                  new_password.length,
-                                 (void **)&new_pass, NULL)) {
+                                 (void **)&new_pass, &converted_size)) {
                DEBUG(3,("samr: failed to convert incoming password buffer to unix charset\n"));
                return NT_STATUS_WRONG_PASSWORD;
        }
@@ -397,11 +398,13 @@ NTSTATUS dcesrv_samr_ChangePasswordUser3(struct dcesrv_call_state *dce_call,
         * this) */
        if (lm_pwd && r->in.lm_verifier != NULL) {
                char *new_pass;
+               size_t converted_size = 0;
+
                if (!convert_string_talloc_handle(mem_ctx, lpcfg_iconv_handle(dce_call->conn->dce_ctx->lp_ctx),
                                          CH_UTF16, CH_UNIX,
                                          (const char *)new_password.data,
                                          new_password.length,
-                                         (void **)&new_pass, NULL)) {
+                                         (void **)&new_pass, &converted_size)) {
                        E_deshash(new_pass, new_lm_hash);
                        E_old_pw_hash(new_nt_hash, lm_pwd->hash, lm_verifier.hash);
                        if (memcmp(lm_verifier.hash, r->in.lm_verifier->hash, 16) != 0) {
index 59a34a0b136c91bc0af49c8a464056b88ea17015..d478963c90c4f65c94f33342cbfa90e2e764ac3a 100644 (file)
@@ -483,6 +483,7 @@ static size_t req_pull_ucs2(struct request_bufinfo *bufinfo, const char **dest,
        int src_len, src_len2, alignment=0;
        bool ret;
        char *dest2;
+       size_t converted_size = 0;
 
        if (!(flags & STR_NOALIGN) && ucs2_align(bufinfo->align_base, src, flags)) {
                src++;
@@ -512,7 +513,7 @@ static size_t req_pull_ucs2(struct request_bufinfo *bufinfo, const char **dest,
                return src_len2 + alignment;
        }
 
-       ret = convert_string_talloc(bufinfo->mem_ctx, CH_UTF16, CH_UNIX, src, src_len2, (void **)&dest2, NULL);
+       ret = convert_string_talloc(bufinfo->mem_ctx, CH_UTF16, CH_UNIX, src, src_len2, (void **)&dest2, &converted_size);
 
        if (!ret) {
                *dest = NULL;
@@ -541,6 +542,7 @@ static size_t req_pull_ascii(struct request_bufinfo *bufinfo, const char **dest,
        int src_len, src_len2;
        bool ret;
        char *dest2;
+       size_t converted_size = 0;
 
        if (flags & STR_NO_RANGE_CHECK) {
                src_len = byte_len;
@@ -561,7 +563,7 @@ static size_t req_pull_ascii(struct request_bufinfo *bufinfo, const char **dest,
                src_len2++;
        }
 
-       ret = convert_string_talloc(bufinfo->mem_ctx, CH_DOS, CH_UNIX, src, src_len2, (void **)&dest2, NULL);
+       ret = convert_string_talloc(bufinfo->mem_ctx, CH_DOS, CH_UNIX, src, src_len2, (void **)&dest2, &converted_size);
 
        if (!ret) {
                *dest = NULL;
index e624f000f6aec0cc66f7338624751690bec70487..5650d2048566cb7f0824fc5ae8247973ff5cf2f2 100644 (file)
@@ -1169,7 +1169,7 @@ static bool test_plaintext(struct samlogon_state *samlogon_state, enum ntlm_brea
        char *password;
        char *dospw;
        smb_ucs2_t *unicodepw;
-
+       size_t converted_size = 0;
        uint8_t user_session_key[16];
        uint8_t lm_key[16];
        uint8_t lm_hash[16];
@@ -1192,7 +1192,7 @@ static bool test_plaintext(struct samlogon_state *samlogon_state, enum ntlm_brea
        if (!convert_string_talloc(samlogon_state->mem_ctx,
                                   CH_UNIX, CH_DOS,
                                   password, strlen(password)+1,
-                                  (void**)&dospw, NULL)) {
+                                  (void**)&dospw, &converted_size)) {
                DEBUG(0, ("convert_string_talloc failed!\n"));
                exit(1);
        }