BOOL secrets_store_trusted_domain_password(const char* domain, smb_ucs2_t *uni_dom_name, size_t uni_name_len, const char* pwd, DOM_SID sid) { /* packing structures */ pstring pass_buf; int pass_len = 0; int pass_buf_len = sizeof(pass_buf); struct trusted_dom_pass pass; ZERO_STRUCT(pass); /* unicode domain name and its length */ if (!uni_dom_name) return False; strncpy_w(pass.uni_name, uni_dom_name, sizeof(pass.uni_name) - 1); pass.uni_name_len = uni_name_len; /* last change time */ pass.mod_time = time(NULL); /* password of the trust */ pass.pass_len = strlen(pwd); fstrcpy(pass.pass, pwd); /* domain sid */ sid_copy(&pass.domain_sid, &sid); pass_len = tdb_trusted_dom_pass_pack(pass_buf, pass_buf_len, &pass); return secrets_store(trustdom_keystr(domain), (void *)&pass_buf, pass_len); }
bool secrets_store_trusted_domain_password(const char* domain, const char* pwd, const DOM_SID *sid) { smb_ucs2_t *uni_dom_name; bool ret; /* packing structures */ uint8 *pass_buf = NULL; int pass_len = 0; struct trusted_dom_pass pass; ZERO_STRUCT(pass); if (push_ucs2_allocate(&uni_dom_name, domain) == (size_t)-1) { DEBUG(0, ("Could not convert domain name %s to unicode\n", domain)); return False; } strncpy_w(pass.uni_name, uni_dom_name, sizeof(pass.uni_name) - 1); pass.uni_name_len = strlen_w(uni_dom_name)+1; SAFE_FREE(uni_dom_name); /* last change time */ pass.mod_time = time(NULL); /* password of the trust */ pass.pass_len = strlen(pwd); fstrcpy(pass.pass, pwd); /* domain sid */ sid_copy(&pass.domain_sid, sid); /* Calculate the length. */ pass_len = tdb_trusted_dom_pass_pack(NULL, 0, &pass); pass_buf = SMB_MALLOC_ARRAY(uint8, pass_len); if (!pass_buf) { return false; } pass_len = tdb_trusted_dom_pass_pack(pass_buf, pass_len, &pass); ret = secrets_store(trustdom_keystr(domain), (void *)pass_buf, pass_len); SAFE_FREE(pass_buf); return ret; }