using System; namespace zero { namespace netboot { public class ConfigManager { private string config_file; private string version_file; private string distroVersion="marty"; private string distroVersionNum="11.09"; private uint agrp; public bool debug; public System.Collections.Generic.Dictionary options; public System.Collections.Generic.Dictionary config_vars; public ConfigManager () { debug=zero.netboot.Core.getCore().debug; config_file="/etc/zero-net-boot/conf.cfg"; version_file="/etc/zero-net-boot/version.cfg"; options=new System.Collections.Generic.Dictionary(); config_vars = new System.Collections.Generic.Dictionary(); config_vars["default_save_path"]="/net/isos/"; config_vars["ftp_daily"]="ftp://arxiu.lliurex.net/pub/isos/" + distroVersionNum + "/daily/"; config_vars["ftp_stable"]="ftp://arxiu.lliurex.net/pub/isos/" + distroVersionNum + "/releases/"; config_vars["lliurex_net"]="http://lliurex.net/home/descargas"; config_vars["default_iso"]="tcos"; config_vars["installation_enabled"]="true"; config_vars["language_enabled"]="qcv_ES"; config_vars["liveuser"]=""; config_vars["livepasswd"]=""; config_vars["isos-sources-list"]="local"; config_vars["pxepassword"]=""; try { fix_perms(); readFile(); check_options(); printValues(); } catch(Exception e) { Console.WriteLine (e); Console.WriteLine("[ConfigManager] Failed to read configuration file"); writeFile(); readFile(); check_options(); } } public void fix_perms() { Mono.Unix.Native.Syscall.chmod(config_file, Mono.Unix.Native.FilePermissions.S_IRUSR | Mono.Unix.Native.FilePermissions.S_IRGRP | Mono.Unix.Native.FilePermissions.S_IWUSR | Mono.Unix.Native.FilePermissions.S_IWGRP); try { agrp=Mono.Unix.Native.Syscall.getgrnam("admins").gr_gid; } catch { agrp=0; } Mono.Unix.Native.Syscall.chown(config_file, 0, agrp); } public void check_options() { foreach(System.Collections.Generic.KeyValuePair pair in config_vars) { if (!options.ContainsKey(pair.Key)) { options[pair.Key]=pair.Value; writeFile(); } } } public void readFile() { System.IO.StreamReader sr=new System.IO.StreamReader(config_file); string std_out=sr.ReadToEnd(); string[] list_values=std_out.Split('\n'); foreach(string line in list_values ) { if (line.Contains("=")) { // Console.WriteLine(line); string[] tmp=line.Split('='); options[tmp[0]]=tmp[1]; } } try { System.IO.StreamReader ver=new System.IO.StreamReader(version_file); string ver_out=ver.ReadToEnd(); string[] ver_values=ver_out.Split('\n'); foreach(string line in ver_values ) { if (line.Contains("=")) { // Console.WriteLine(line); string[] tmp=line.Split('='); options[tmp[0]]=tmp[1]; } } } catch { Console.WriteLine("[ConfigManager] " + version_file + " is missing"); } } public void writeFile() { try { System.IO.File.Delete(config_file); } catch { } System.IO.StreamWriter sw=new System.IO.StreamWriter(config_file); foreach(System.Collections.Generic.KeyValuePair pair in options) { if (pair.Key.ToString().Equals("version")) continue; sw.WriteLine(pair.Key + "=" + pair.Value); } sw.Close(); fix_perms(); } public void printValues() { foreach(System.Collections.Generic.KeyValuePair pair in options) { dprint("[ConfigManager] " + pair.Key + " = " + pair.Value); } } public void dprint(string txt) { if (debug) { Console.WriteLine("[ConfigManager] {0}",txt); } } } } }