diff options
Diffstat (limited to 'source3/passdb')
-rw-r--r-- | source3/passdb/pdb_ldap.c | 78 | ||||
-rw-r--r-- | source3/passdb/secrets.c | 9 |
2 files changed, 59 insertions, 28 deletions
diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index cf5b72bc7c..9ce659e818 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -1699,6 +1699,7 @@ static NTSTATUS ldapsam_modify_entry(struct pdb_methods *my_methods, struct berval *retdata = NULL; char *utf8_password; char *utf8_dn; + size_t converted_size; if (!ldap_state->is_nds_ldap) { @@ -1710,11 +1711,14 @@ static NTSTATUS ldapsam_modify_entry(struct pdb_methods *my_methods, } } - if (push_utf8_allocate(&utf8_password, pdb_get_plaintext_passwd(newpwd)) == (size_t)-1) { + if (!push_utf8_allocate(&utf8_password, + pdb_get_plaintext_passwd(newpwd), + &converted_size)) + { return NT_STATUS_NO_MEMORY; } - if (push_utf8_allocate(&utf8_dn, dn) == (size_t)-1) { + if (!push_utf8_allocate(&utf8_dn, dn, &converted_size)) { SAFE_FREE(utf8_password); return NT_STATUS_NO_MEMORY; } @@ -4404,6 +4408,7 @@ static bool ldapuser2displayentry(struct ldap_search_state *state, struct samr_displayentry *result) { char **vals; + size_t converted_size; DOM_SID sid; uint32 acct_flags; @@ -4429,27 +4434,40 @@ static bool ldapuser2displayentry(struct ldap_search_state *state, DEBUG(5, ("\"uid\" not found\n")); return False; } - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->account_name), - vals[0]); + if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, &result->account_name), + vals[0], &converted_size)) + { + DEBUG(0,("ldapuser2displayentry: pull_utf8_talloc failed: %s", + strerror(errno))); + } + ldap_value_free(vals); vals = ldap_get_values(ld, entry, "displayName"); if ((vals == NULL) || (vals[0] == NULL)) DEBUG(8, ("\"displayName\" not found\n")); - else - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->fullname), - vals[0]); + else if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, &result->fullname), + vals[0], &converted_size)) + { + DEBUG(0,("ldapuser2displayentry: pull_utf8_talloc failed: %s", + strerror(errno))); + } + ldap_value_free(vals); vals = ldap_get_values(ld, entry, "description"); if ((vals == NULL) || (vals[0] == NULL)) DEBUG(8, ("\"description\" not found\n")); - else - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->description), - vals[0]); + else if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, &result->description), + vals[0], &converted_size)) + { + DEBUG(0,("ldapuser2displayentry: pull_utf8_talloc failed: %s", + strerror(errno))); + } + ldap_value_free(vals); if ((result->account_name == NULL) || @@ -4536,6 +4554,7 @@ static bool ldapgroup2displayentry(struct ldap_search_state *state, struct samr_displayentry *result) { char **vals; + size_t converted_size; DOM_SID sid; uint16 group_type; @@ -4575,14 +4594,22 @@ static bool ldapgroup2displayentry(struct ldap_search_state *state, DEBUG(5, ("\"cn\" not found\n")); return False; } - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->account_name), - vals[0]); + if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, + &result->account_name), + vals[0], &converted_size)) + { + DEBUG(0,("ldapgroup2displayentry: pull_utf8_talloc " + "failed: %s", strerror(errno))); + } } - else { - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->account_name), - vals[0]); + else if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, + &result->account_name), + vals[0], &converted_size)) + { + DEBUG(0,("ldapgroup2displayentry: pull_utf8_talloc failed: %s", + strerror(errno))); } ldap_value_free(vals); @@ -4590,10 +4617,13 @@ static bool ldapgroup2displayentry(struct ldap_search_state *state, vals = ldap_get_values(ld, entry, "description"); if ((vals == NULL) || (vals[0] == NULL)) DEBUG(8, ("\"description\" not found\n")); - else - pull_utf8_talloc(mem_ctx, - CONST_DISCARD(char **, &result->description), - vals[0]); + else if (!pull_utf8_talloc(mem_ctx, + CONST_DISCARD(char **, &result->description), + vals[0], &converted_size)) + { + DEBUG(0,("ldapgroup2displayentry: pull_utf8_talloc failed: %s", + strerror(errno))); + } ldap_value_free(vals); if ((result->account_name == NULL) || diff --git a/source3/passdb/secrets.c b/source3/passdb/secrets.c index 34a87bd0d0..a7223b7e9f 100644 --- a/source3/passdb/secrets.c +++ b/source3/passdb/secrets.c @@ -685,6 +685,7 @@ bool secrets_store_trusted_domain_password(const char* domain, const char* pwd, { smb_ucs2_t *uni_dom_name; bool ret; + size_t converted_size; /* packing structures */ uint8 *pass_buf = NULL; @@ -693,7 +694,7 @@ bool secrets_store_trusted_domain_password(const char* domain, const char* pwd, struct trusted_dom_pass pass; ZERO_STRUCT(pass); - if (push_ucs2_allocate(&uni_dom_name, domain) == (size_t)-1) { + if (!push_ucs2_allocate(&uni_dom_name, domain, &converted_size)) { DEBUG(0, ("Could not convert domain name %s to unicode\n", domain)); return False; @@ -926,7 +927,7 @@ struct list_trusted_domains_state { static int list_trusted_domain(struct db_record *rec, void *private_data) { const size_t prefix_len = strlen(SECRETS_DOMTRUST_ACCT_PASS); - size_t packed_size = 0; + size_t converted_size, packed_size = 0; struct trusted_dom_pass pass; struct trustdom_info *dom_info; @@ -960,8 +961,8 @@ static int list_trusted_domain(struct db_record *rec, void *private_data) return 0; } - if (pull_ucs2_talloc(dom_info, &dom_info->name, - pass.uni_name) == (size_t)-1) { + if (!pull_ucs2_talloc(dom_info, &dom_info->name, pass.uni_name, + &converted_size)) { DEBUG(2, ("pull_ucs2_talloc failed\n")); TALLOC_FREE(dom_info); return 0; |