Author: mimir
Date: 2004-08-13 17:36:24 +0000 (Fri, 13 Aug 2004)
New Revision: 1806
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=1806&nolog=1
Log:
Begin of trust passwords migration code. Not tested yet, but
it doesn't seem to break the build at least.


rafal


Modified:
   trunk/source/libsmb/trusts_util.c

Changeset:
Modified: trunk/source/libsmb/trusts_util.c
===================================================================
--- trunk/source/libsmb/trusts_util.c   2004-08-13 07:10:46 UTC (rev 1805)
+++ trunk/source/libsmb/trusts_util.c   2004-08-13 17:36:24 UTC (rev 1806)
@@ -188,3 +188,69 @@
        return NT_STATUS_IS_OK(result);
 }
 
+
+/**
+ * Migrates trust passwords from previous location (secrets.tdb) to current pdb 
backend
+ * and puts a marker in secrets.tdb to avoid doing this again. This function should be
+ * called only once.
+ *
+ * @return number of passwords migrated
+ */
+
+int migrate_trust_passwords(void)
+{
+       int migrated = 0;
+       SAM_TRUST_PASSWD trust;
+       const size_t max_name_len = sizeof(trust.private.uni_name)/2;
+       /* nt workstation trust */
+       const char* dom_name = lp_workgroup();
+       uint8 wks_pass[16];
+       time_t lct;
+       uint32 chan = 0;
+       DOM_SID dom_sid;
+
+       /* Checking whether passwords have already been migrated */
+       if (secrets_passwords_migrated(False)) return migrated;
+
+       /* NT Workstation trust passwords */
+       if (secrets_fetch_trust_account_password(dom_name, wks_pass, &lct, &chan)) {
+               /* flags */
+               trust.private.flags = PASS_TRUST_NT;
+               switch (chan) {
+               case SEC_CHAN_WKSTA:
+                       trust.private.flags |= PASS_TRUST_MACHINE;
+                       break;
+               case SEC_CHAN_BDC:
+                       trust.private.flags |= PASS_TRUST_SERVER;
+                       break;
+               default:
+                       return 0;
+               }
+
+               /* unicode name length */
+               trust.private.uni_name_len = strlen(dom_name);
+               /* unicode name */
+               push_ucs2(NULL, &trust.private.uni_name, dom_name, max_name_len, 
STR_UPPER);
+               /* password */
+               strncpy(trust.private.pass, wks_pass, sizeof(trust.private.pass));
+               /* last change time */
+               trust.private.mod_time = lct;
+               
+               /* domain sid */
+               if (secrets_fetch_domain_sid(dom_name, &dom_sid))
+                       sid_copy(&trust.private.domain_sid, &dom_sid);
+               else
+                       return 0;
+               
+               migrated++;
+       }
+
+       /* NT Domain trust passwords */
+
+       /* ADS Workstation trust passwords */
+
+       /* We're done with migration */
+       secrets_passwords_migrated(True);
+
+       return migrated;
+}

Reply via email to