home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / NetworkConfig.ycp < prev    next >
Text File  |  2006-11-29  |  4KB  |  203 lines

  1. /**
  2.  * File:    modules/NetworkConfig.ycp
  3.  * Package:    Network configuration
  4.  * Summary:    Network configuration data
  5.  * Authors:    Michal Svec <msvec@suse.cz>
  6.  *
  7.  * $Id: NetworkConfig.ycp 34105 2006-11-06 17:19:00Z mzugec $
  8.  *
  9.  * Representation of the configuration of network cards.
  10.  * Input and output routines.
  11.  * A simple container for /etc/sysconfig/network/{config,dhcp}
  12.  */
  13.  
  14. {
  15.  
  16. module "NetworkConfig";
  17. import "String";
  18.  
  19.  
  20. /**
  21.  * Basic network settings (/etc/sysconfig/network/config)
  22.  */
  23. global map Config = $[];
  24.  
  25. /**
  26.  * DHCP settings (/etc/sysconfig/network/dhcp)
  27.  */
  28. global map DHCP = $[];
  29.  
  30. /**
  31.  * Basic network settings
  32.  */
  33. map Orig_Config = nil;
  34.  
  35. /**
  36.  * DHCP settings
  37.  */
  38. map Orig_DHCP = nil;
  39.  
  40. /*--------------*/
  41. /* PRIVATE DATA */
  42.  
  43. /**
  44.  * True if data are already read
  45.  */
  46. boolean initialized = false;
  47.  
  48. /**
  49.  * Read sysconfig file.
  50.  * Uses metadata to distinguish between booleans, integers, and strings
  51.  * @param config sysconfig file SCR path
  52.  * @return sysconfig file contents
  53.  */
  54. define map ReadConfig (path config) {
  55.  
  56.     y2debug("config=%1", config);
  57.     if(config == nil) return $[];
  58.     map ret = $[];
  59.  
  60.     list<string> vars = SCR::Dir(config);
  61.     if(vars == nil) vars = [];
  62.     maplist(string var, vars, {
  63.     path varpath = add(config, var);
  64.     string comment = (string)SCR::Read(add(varpath, "comment"));
  65.     if(regexpmatch(comment, "^.*## Type:[ \t]*([" + String::CLower() + "]*).*$"))
  66.         comment = regexpsub(comment, "^.*## Type:[ \t]*([" + String::CLower() + "]*).*$", "\\1");
  67.  
  68.     string val = (string)SCR::Read(varpath);
  69.     y2debug("%1[%2]=%3", var, comment, val);
  70.  
  71.     if(val != nil) {
  72.         if(comment == "yesno" || ( val=="yes"||val=="no" )) {
  73.         ret[var] = ( val == "yes" );
  74.         }
  75.         else if(comment == "integer") {
  76.         if(val != "") ret[var] = tointeger(val);
  77.         }
  78.         else
  79.         ret[var] = val;
  80.     }
  81.     });
  82.     if(ret == nil) ret = $[];
  83.     y2debug("ret=%1", ret);
  84.     return ret;
  85. }
  86.  
  87. /**
  88.  * Write sysconfig file
  89.  * @param config sysconfig file SCR path
  90.  * @param data sysconfig file contents
  91.  * @return true if success
  92.  */
  93. define boolean WriteConfig (path config, map data) {
  94.  
  95.     y2debug("config=%1", config);
  96.     y2debug("data=%1", data);
  97.  
  98.     if(config == nil || data == nil) return false;
  99.  
  100.     list<string> vars = SCR::Dir(config);
  101.     if(vars == nil) vars = [];
  102.  
  103.     boolean changed = false;
  104.     maplist(string var, any val, (map<string,any>) data, {
  105.     string oldval = (string) SCR::Read(add(config, var));
  106.  
  107.     string newval = "";
  108.     if(is(val, boolean)) newval = ((boolean)val) ? "yes" : "no";
  109.     else newval = sformat("%1", val);
  110.  
  111.     if(oldval == nil || oldval != newval) {
  112.         SCR::Write(add(config, var), newval);
  113.         changed = true;
  114.     }
  115.     });
  116.     if(changed == true)
  117.     SCR::Write(config, nil);
  118.  
  119.     y2debug("changed=%1", changed);
  120.     return true;
  121. }
  122.  
  123. /*------------------*/
  124. /* GLOBAL FUNCTIONS */
  125.  
  126. /**
  127.  * Data was modified?
  128.  * @return true if modified
  129.  */
  130. global define boolean Modified() {
  131.     boolean ret = (DHCP != Orig_DHCP || Config != Orig_Config);
  132.     y2debug("ret=%1", ret);
  133.     return ret;
  134. }
  135.  
  136. /**
  137.  * Read all network settings from the SCR
  138.  * @return true on success
  139.  */
  140. global define boolean Read() {
  141.  
  142.     if(initialized == true) return true;
  143.  
  144.     Config = ReadConfig(.sysconfig.network.config);
  145.     DHCP = ReadConfig(.sysconfig.network.dhcp);
  146.  
  147.     Orig_Config = (map) eval(Config);
  148.     Orig_DHCP = (map) eval(DHCP);
  149.  
  150.     initialized = true;
  151.     return true;
  152. }
  153.  
  154. /**
  155.  * Update the SCR according to network settings
  156.  * @return true on success
  157.  */
  158. global define boolean Write() {
  159.  
  160.     y2milestone("Writing configuration");
  161.     if(!Modified()) {
  162.     y2milestone("No changes to NetworkConfig -> nothing to write");
  163.     return true;
  164.     }
  165.  
  166.     WriteConfig(.sysconfig.network.dhcp, DHCP);
  167.     WriteConfig(.sysconfig.network.config, Config);
  168.  
  169.     return true;
  170. }
  171.  
  172. /**
  173.  * Import data
  174.  * @param settings settings to be imported
  175.  * @return true on success
  176.  */
  177. global define boolean Import(map settings) {
  178.  
  179.     Config = (map) eval(settings["config"]:$[]);
  180.     DHCP = (map) eval(settings["dhcp"]:$[]);
  181.  
  182.     Orig_Config = nil;
  183.     Orig_DHCP = nil;
  184.  
  185.     return true;
  186. }
  187.  
  188. /**
  189.  * Export data
  190.  * @return dumped settings (later acceptable by Import())
  191.  */
  192. global define map Export() {
  193.  
  194.     return (map) eval($[
  195.     "config"    : Config,
  196.     "dhcp"        : DHCP,
  197.     ]);
  198.  
  199. }
  200.  
  201. /* EOF */
  202. }
  203.