svn commit: samba r1852 - trunk/source/libsmb
mimir at samba.org
mimir at samba.org
Tue Aug 17 10:19:02 GMT 2004
Author: mimir
Date: 2004-08-17 10:19:02 +0000 (Tue, 17 Aug 2004)
New Revision: 1852
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=1852&nolog=1
Log:
Interdomain trust passwords migration to passdb.
Completely untested, though doesn't break the build.
rafal
Modified:
trunk/source/libsmb/trusts_util.c
Changeset:
Modified: trunk/source/libsmb/trusts_util.c
===================================================================
--- trunk/source/libsmb/trusts_util.c 2004-08-17 10:04:25 UTC (rev 1851)
+++ trunk/source/libsmb/trusts_util.c 2004-08-17 10:19:02 UTC (rev 1852)
@@ -199,16 +199,24 @@
int migrate_trust_passwords(struct pdb_context *pdb_ctx)
{
- int migrated = 0;
+ int migrated = 0, i;
NTSTATUS nt_status;
SAM_TRUST_PASSWD trust;
const size_t max_name_len = sizeof(trust.private.uni_name)/2;
+ time_t lct;
/* nt workstation trust */
const char* dom_name = lp_workgroup();
uint8 wks_pass[16];
- time_t lct;
uint32 chan = 0;
DOM_SID dom_sid;
+ /* nt domain trust */
+ TALLOC_CTX *mem_ctx = NULL;
+ const unsigned int max_trusts = 10;
+ int enum_ctx = 0, num_trusts;
+ TRUSTDOM **trusts;
+ char *trust_name = NULL, *pass;
+ size_t trust_name_len = 0;
+ DOM_SID sid;
/* sanity-check */
if (!pdb_ctx) return 0;
@@ -218,6 +226,10 @@
/* NT Workstation trust passwords */
if (secrets_fetch_trust_account_password(dom_name, wks_pass, &lct, &chan)) {
+ memset(&trust, 0, sizeof(trust));
+
+ /* TODO: put a lock on trust wks password */
+
/* flags */
trust.private.flags = PASS_TRUST_NT;
switch (chan) {
@@ -251,8 +263,35 @@
}
/* NT Domain trust passwords */
+ mem_ctx = talloc_init("trust password migration");
+ do {
+ nt_status = secrets_get_trusted_domains(mem_ctx, &enum_ctx, max_trusts,
+ &num_trusts, &trusts);
+ for (i = 0; i < (num_trusts - enum_ctx); i++) {
+ memset(&trust, 0, sizeof(trust));
+ trust.private.flags = PASS_TRUST_NT | PASS_TRUST_DOMAIN;
+ pull_ucs2_allocate(&trust_name, trusts[i]->name);
+ trust_name_len = strlen_w(trusts[i]->name);
+ if (secrets_fetch_trusted_domain_password(trust_name, &pass, &sid, &lct)) {
+ strncpy_w(trust.private.uni_name, trusts[i]->name, trust_name_len);
+ trust.private.uni_name_len = trust_name_len;
+ sid_copy(&trust.private.domain_sid, &sid);
+ trust.private.mod_time = lct;
+ }
+
+ nt_status = pdb_ctx->pdb_add_trust_passwd(pdb_ctx, &trust);
+ migrated++;
+
+ SAFE_FREE(trust_name);
+ }
+
+ } while (NT_STATUS_EQUAL(nt_status, NT_STATUS_NO_MORE_ENTRIES));
+ talloc_destroy(mem_ctx);
+
/* ADS Workstation trust passwords */
+ memset(&trust, 0, sizeof(trust));
+
/* We're done with migration */
secrets_passwords_migrated(True);
More information about the samba-cvs
mailing list