summaryrefslogtreecommitdiff
path: root/source4/lib/samba3/upgrade.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/samba3/upgrade.c')
-rw-r--r--source4/lib/samba3/upgrade.c105
1 files changed, 102 insertions, 3 deletions
diff --git a/source4/lib/samba3/upgrade.c b/source4/lib/samba3/upgrade.c
index eeb77310ec..00000c68df 100644
--- a/source4/lib/samba3/upgrade.c
+++ b/source4/lib/samba3/upgrade.c
@@ -114,15 +114,114 @@ int samba3_upgrade_sam(struct samba3 *samba3, struct ldb_context *ldb, struct ld
int count = 0;
struct ldb_message *msg;
struct ldb_dn *domaindn = NULL;
+ const char *domainname;
+ struct samba3_domainsecrets *domsec;
+ int i;
*msgs = NULL;
+ domainname = samba3_get_param(samba3, "global", "workgroup");
+
+ if (domainname == NULL) {
+ DEBUG(0, ("No domain name specified in smb.conf!\n"));
+ return -1;
+ }
+
+ domsec = samba3_find_domainsecrets(samba3, domainname);
+
/* Domain */
msg = msg_array_add(ldb, msgs, &count);
-
/* FIXME: Guess domain DN by taking ldap bind dn? */
- /* FIXME */
- return -1;
+ ldb_msg_add_string(ldb, msg, "objectClass", "top");
+ ldb_msg_add_string(ldb, msg, "objectClass", "domain");
+ ldb_msg_add_string(ldb, msg, "objectSid", dom_sid_string(msg, &domsec->sid));
+ ldb_msg_add_string(ldb, msg, "objectGUID", GUID_string(msg, &domsec->guid));
+ ldb_msg_add_string(ldb, msg, "name", domainname);
+ ldb_msg_add_string(ldb, msg, "oEMInformation", "Provisioned by Samba4 (upgraded from Samba3)");
+
+ /* account policy as well */
+
+ ldb_msg_add_fmt(ldb, msg, "minPwdLength", "%d", samba3->policy.min_password_length);
+ ldb_msg_add_fmt(ldb, msg, "pwdHistoryLength", "%d", samba3->policy.password_history);
+ ldb_msg_add_fmt(ldb, msg, "minPwdAge", "%d", samba3->policy.minimum_password_age);
+ ldb_msg_add_fmt(ldb, msg, "maxPwdAge", "%d", samba3->policy.maximum_password_age);
+ ldb_msg_add_fmt(ldb, msg, "lockoutDuration", "%d", samba3->policy.lockout_duration);
+ ldb_msg_add_fmt(ldb, msg, "samba3ResetCountMinutes", "%d", samba3->policy.reset_count_minutes);
+ ldb_msg_add_fmt(ldb, msg, "samba3UserMustLogonToChangePassword", "%d", samba3->policy.user_must_logon_to_change_password);
+ ldb_msg_add_fmt(ldb, msg, "samba3BadLockoutMinutes", "%d", samba3->policy.bad_lockout_minutes);
+ ldb_msg_add_fmt(ldb, msg, "samba3DisconnectTime", "%d", samba3->policy.disconnect_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3RefuseMachinePwdChange", "%d", samba3->policy.refuse_machine_password_change);
+
+ /* Users */
+ for (i = 0; i < samba3->samaccount_count; i++) {
+ struct samba3_samaccount *sam = &samba3->samaccounts[i];
+
+ msg = msg_array_add(ldb, msgs, &count);
+ msg->dn = ldb_dn_build_child(msg, "cn", sam->fullname, domaindn);
+
+ ldb_msg_add_string(ldb, msg, "objectClass", "top");
+ ldb_msg_add_string(ldb, msg, "objectClass", "person");
+ ldb_msg_add_string(ldb, msg, "objectClass", "user");
+ ldb_msg_add_fmt(ldb, msg, "lastLogon", "%d", sam->logon_time);
+ ldb_msg_add_fmt(ldb, msg, "lastLogoff", "%d", sam->logoff_time);
+ ldb_msg_add_string(ldb, msg, "unixName", sam->username);
+ ldb_msg_add_string(ldb, msg, "name", sam->nt_username);
+ ldb_msg_add_string(ldb, msg, "cn", sam->fullname);
+ ldb_msg_add_string(ldb, msg, "description", sam->acct_desc);
+ ldb_msg_add_fmt(ldb, msg, "primaryGroupID", "%d", sam->group_rid);
+ ldb_msg_add_fmt(ldb, msg, "badPwdcount", "%d", sam->bad_password_count);
+ ldb_msg_add_fmt(ldb, msg, "logonCount", "%d", sam->logon_count);
+
+ ldb_msg_add_string(ldb, msg, "samba3Domain", sam->domain);
+ if (sam->dir_drive)
+ ldb_msg_add_string(ldb, msg, "samba3DirDrive", sam->dir_drive);
+
+ if (sam->munged_dial)
+ ldb_msg_add_string(ldb, msg, "samba3MungedDial", sam->munged_dial);
+
+ if (sam->homedir)
+ ldb_msg_add_string(ldb, msg, "samba3Homedir", sam->homedir);
+
+ if (sam->logon_script)
+ ldb_msg_add_string(ldb, msg, "samba3LogonScript", sam->logon_script);
+
+ if (sam->profile_path)
+ ldb_msg_add_string(ldb, msg, "samba3ProfilePath", sam->profile_path);
+
+ if (sam->workstations)
+ ldb_msg_add_string(ldb, msg, "samba3Workstations", sam->workstations);
+
+ ldb_msg_add_fmt(ldb, msg, "samba3KickOffTime", "%d", sam->kickoff_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3BadPwdTime", "%d", sam->bad_password_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3PassLastSetTime", "%d", sam->pass_last_set_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3PassCanChangeTime", "%d", sam->pass_can_change_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3PassMustChangeTime", "%d", sam->pass_must_change_time);
+ ldb_msg_add_fmt(ldb, msg, "samba3Rid", "%d", sam->user_rid);
+
+ /* FIXME: Passwords */
+ }
+
+ /* Groups */
+ for (i = 0; i < samba3->group.groupmap_count; i++) {
+ struct samba3_groupmapping *grp = &samba3->group.groupmappings[i];
+
+ msg = msg_array_add(ldb, msgs, &count);
+
+ if (grp->nt_name != NULL)
+ msg->dn = ldb_dn_build_child(msg, "cn", grp->nt_name, domaindn);
+ else
+ msg->dn = ldb_dn_build_child(msg, "cn", dom_sid_string(msg, grp->sid), domaindn);
+
+ ldb_msg_add_string(ldb, msg, "objectClass", "top");
+ ldb_msg_add_string(ldb, msg, "objectClass", "group");
+ ldb_msg_add_string(ldb, msg, "description", grp->comment);
+ ldb_msg_add_string(ldb, msg, "cn", grp->nt_name);
+ ldb_msg_add_string(ldb, msg, "objectSid", dom_sid_string(msg, grp->sid));
+ ldb_msg_add_string(ldb, msg, "unixName", "FIXME");
+ ldb_msg_add_fmt(ldb, msg, "samba3SidNameUse", "%d", grp->sid_name_use);
+ }
+
+ return count;
}
int samba3_upgrade_winbind(struct samba3 *samba3, struct ldb_context *ldb, struct ldb_message ***msgs)