diff options
Diffstat (limited to 'source4/scripting/libjs')
| -rw-r--r-- | source4/scripting/libjs/upgrade.js | 68 | 
1 files changed, 49 insertions, 19 deletions
diff --git a/source4/scripting/libjs/upgrade.js b/source4/scripting/libjs/upgrade.js index aa94dbbbc4..0e12d7c345 100644 --- a/source4/scripting/libjs/upgrade.js +++ b/source4/scripting/libjs/upgrade.js @@ -274,7 +274,7 @@ function upgrade_provision(samba3)  	return subobj;  } -var keep = new Array( +smbconf_keep = new Array(  	"dos charset",   	"unix charset",  	"display charset", @@ -371,43 +371,70 @@ var keep = new Array(  	"host msdfs",  	"winbind separator"); -function upgrade_smbconf(samba3) +/* +   Remove configuration variables not present in Samba4 +	oldconf: Old configuration structure +	mark: Whether removed configuration variables should be  +		kept in the new configuration as "samba3:<name>" + */ +function upgrade_smbconf(oldconf,mark)  { -	//FIXME -} +	var data = oldconf.data(); +	var newconf = param_init(); + +	for (var s in data) { +		for (var p in data[s]) { +			var keep = false; +			for (var k in smbconf_keep) {  +				if (smbconf_keep[k] == p) { +					keep = true; +					break; +				} +			} -function save_smbconf(path,smbconf) -{ -	var data = " -# Generated by upgrade.js"; - -	for (var i in smbconf.shares) { -		var s = smbconf.shares[i]; -		data = data + "\n[" + s.name + "]\n"; -		for (var j in s.parameters) { -			var p = s.parameters[j]; -			data = data + "\t" + p.name + " = " + p + "\n"; +			if (keep) { +				newconf.set(s, p, oldconf.get(s, p)); +			} else if (mark) { +				newconf.set(s, "samba3:"+p, oldconf.get(s,p)); +			}  		}  	} -	 -	sys.file_save(path,data); + +	return newconf;  }  function upgrade(subobj, samba3, message)  {  	var ret = 0; +	var lp = loadparm_init();  	var samdb = ldb_init();  	var ok = samdb.connect("sam.ldb");  	assert(ok); +	message("Writing configuration\n"); +	var newconf = upgrade_smbconf(samba3.configuration,true); +	newconf.save(lp.get("config file")); +  	message("Importing account policies\n");  	var ldif = upgrade_sam_policy(samba3,subobj.BASEDN);  	ok = samdb.modify(ldif);  	assert(ok); +	// figure out ldapurl, if applicable  	var ldapurl = undefined; +	var pdb = samba3.configuration.get_list("passdb backends"); +	if (pdb != undefined) { +		for (var b in pdb) { +			if (substr(pdb[b], 0, 7) == "ldapsam") { +				ldapurl = substr(pdb[b], 8); +			} +		} +	} -	// FIXME: figure out ldapurl +	// URL was not specified in passdb backend but ldap /is/ used +	if (ldapurl == "") { +		ldapurl = "ldap://" + samba3.configuration.get("ldap server"); +	}  	// Enable samba3sam module if original passdb backend was ldap  	if (ldapurl != undefined) { @@ -417,7 +444,7 @@ dn: @MAP=samba3sam  		samdb.add(ldif);  		samdb.modify("dn: @MODULES -@LIST: samldb,timestamps,objectguid,rdn_name"); +@LIST: samldb,timestamps,objectguid,rdn_name,samba3sam");  	}  	message("Importing users\n"); @@ -473,5 +500,8 @@ dn: @MAP=samba3sam  	ok = winsdb.add(ldif);  	assert(ok); +	message("Reloading smb.conf\n"); +	lp.reload(); +  	return ret;  }  | 
