Hello community, here is the log from the commit of package yast2-ntp-client for openSUSE:Factory checked in at 2012-01-05 13:50:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-ntp-client (Old) and /work/SRC/openSUSE:Factory/.yast2-ntp-client.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-ntp-client", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-ntp-client/yast2-ntp-client.changes 2011-10-04 18:01:53.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-ntp-client.new/yast2-ntp-client.changes 2012-01-05 13:50:34.000000000 +0100 @@ -1,0 +2,10 @@ +Thu Jan 5 07:26:54 UTC 2012 - [email protected] + +- bnc#707408 - Additional NTP server entries for NTP client Configuration + +------------------------------------------------------------------- +Wed Jan 4 12:33:27 UTC 2012 - [email protected] + +- bnc#724762 - bad yast2 timezone NTP config + +------------------------------------------------------------------- Old: ---- yast2-ntp-client-2.21.1.tar.bz2 New: ---- yast2-ntp-client-2.21.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-ntp-client.spec ++++++ --- /var/tmp/diff_new_pack.BeWwy4/_old 2012-01-05 13:50:36.000000000 +0100 +++ /var/tmp/diff_new_pack.BeWwy4/_new 2012-01-05 13:50:36.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package yast2-ntp-client # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -15,22 +15,20 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # -# norootforbuild - Name: yast2-ntp-client -Version: 2.21.1 +Version: 2.21.2 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: yast2-ntp-client-%{version}.tar.bz2 -Prefix: /usr - -Group: System/YaST -License: GPL-2.0+ -BuildRequires: perl-XML-Writer update-desktop-files yast2 yast2-devtools yast2-testsuite +BuildRequires: perl-XML-Writer +BuildRequires: update-desktop-files +BuildRequires: yast2 BuildRequires: yast2-country-data +BuildRequires: yast2-devtools +BuildRequires: yast2-testsuite #SLPAPI.pm # Hostname::CurrentDomain # Wizard::SetDesktopTitleAndIcon @@ -40,6 +38,8 @@ BuildArch: noarch Summary: YaST2 - NTP Client Configuration +License: GPL-2.0+ +Group: System/YaST %description This package contains the YaST2 component for NTP client configuration. @@ -48,23 +48,23 @@ %setup -n yast2-ntp-client-%{version} %build -%{prefix}/bin/y2tool y2autoconf -%{prefix}/bin/y2tool y2automake +%{_prefix}/bin/y2tool y2autoconf +%{_prefix}/bin/y2tool y2automake autoreconf --force --install export CFLAGS="$RPM_OPT_FLAGS -DNDEBUG" export CXXFLAGS="$RPM_OPT_FLAGS -DNDEBUG" %{?suse_update_config:%{suse_update_config -f}} -./configure --libdir=%{_libdir} --prefix=%{prefix} --mandir=%{_mandir} +./configure --libdir=%{_libdir} --prefix=%{_prefix} --mandir=%{_mandir} # V=1: verbose build in case we used AM_SILENT_RULES(yes) # so that RPM_OPT_FLAGS check works make %{?jobs:-j%jobs} V=1 %install make install DESTDIR="$RPM_BUILD_ROOT" -[ -e "%{prefix}/share/YaST2/data/devtools/NO_MAKE_CHECK" ] || Y2DIR="$RPM_BUILD_ROOT/usr/share/YaST2" make check DESTDIR="$RPM_BUILD_ROOT" -for f in `find $RPM_BUILD_ROOT/%{prefix}/share/applications/YaST2/ -name "*.desktop"` ; do +[ -e "%{_prefix}/share/YaST2/data/devtools/NO_MAKE_CHECK" ] || Y2DIR="$RPM_BUILD_ROOT/usr/share/YaST2" make check DESTDIR="$RPM_BUILD_ROOT" +for f in `find $RPM_BUILD_ROOT/%{_prefix}/share/applications/YaST2/ -name "*.desktop"` ; do d=${f##*/} %suse_update_desktop_file -d ycc_${d%.desktop} ${d%.desktop} done @@ -81,9 +81,9 @@ /usr/share/YaST2/scrconf/cfg_ntp.scr /usr/share/YaST2/scrconf/etc_ntp.scr /usr/share/YaST2/modules/*.y* -%{prefix}/share/applications/YaST2/ntp-client.desktop +%{_prefix}/share/applications/YaST2/ntp-client.desktop /usr/share/YaST2/data/ntp_servers.ycp -%doc %{prefix}/share/doc/packages/yast2-ntp-client +%doc %{_prefix}/share/doc/packages/yast2-ntp-client /usr/share/YaST2/schema/autoyast/rnc/ntpclient.rnc %changelog ++++++ yast2-ntp-client-2.21.1.tar.bz2 -> yast2-ntp-client-2.21.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/VERSION new/yast2-ntp-client-2.21.2/VERSION --- old/yast2-ntp-client-2.21.1/VERSION 2011-09-29 13:17:31.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/VERSION 2012-01-04 13:24:37.000000000 +0100 @@ -1 +1 @@ -2.21.1 +2.21.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/configure new/yast2-ntp-client-2.21.2/configure --- old/yast2-ntp-client-2.21.1/configure 2011-09-29 13:17:03.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/configure 2012-01-04 13:24:19.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for yast2-ntp-client 2.21.0. +# Generated by GNU Autoconf 2.68 for yast2-ntp-client 2.21.1. # # Report bugs to <http://bugs.opensuse.org/>. # @@ -559,8 +559,8 @@ # Identity of this package. PACKAGE_NAME='yast2-ntp-client' PACKAGE_TARNAME='yast2-ntp-client' -PACKAGE_VERSION='2.21.0' -PACKAGE_STRING='yast2-ntp-client 2.21.0' +PACKAGE_VERSION='2.21.1' +PACKAGE_STRING='yast2-ntp-client 2.21.1' PACKAGE_BUGREPORT='http://bugs.opensuse.org/' PACKAGE_URL='' @@ -1229,7 +1229,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures yast2-ntp-client 2.21.0 to adapt to many kinds of systems. +\`configure' configures yast2-ntp-client 2.21.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1301,7 +1301,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of yast2-ntp-client 2.21.0:";; + short | recursive ) echo "Configuration of yast2-ntp-client 2.21.1:";; esac cat <<\_ACEOF @@ -1381,7 +1381,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -yast2-ntp-client configure 2.21.0 +yast2-ntp-client configure 2.21.1 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1398,7 +1398,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by yast2-ntp-client $as_me 2.21.0, which was +It was created by yast2-ntp-client $as_me 2.21.1, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2328,7 +2328,7 @@ # Define the identity of the package. PACKAGE='yast2-ntp-client' - VERSION='2.21.0' + VERSION='2.21.1' cat >>confdefs.h <<_ACEOF @@ -2450,7 +2450,7 @@ -VERSION="2.21.0" +VERSION="2.21.1" RPMNAME="yast2-ntp-client" MAINTAINER="Peter Varkoly <[email protected]>" @@ -3380,7 +3380,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by yast2-ntp-client $as_me 2.21.0, which was +This file was extended by yast2-ntp-client $as_me 2.21.1, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3433,7 +3433,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -yast2-ntp-client config.status 2.21.0 +yast2-ntp-client config.status 2.21.1 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/configure.in new/yast2-ntp-client-2.21.2/configure.in --- old/yast2-ntp-client-2.21.1/configure.in 2011-09-29 13:17:01.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/configure.in 2012-01-04 13:24:16.000000000 +0100 @@ -1,9 +1,9 @@ dnl configure.in for yast2-ntp-client dnl -dnl -- This file is generated by y2autoconf 2.21.2 - DO NOT EDIT! -- +dnl -- This file is generated by y2autoconf 2.21.6 - DO NOT EDIT! -- dnl (edit configure.in.in instead) -AC_INIT(yast2-ntp-client, 2.21.0, http://bugs.opensuse.org/, yast2-ntp-client) +AC_INIT(yast2-ntp-client, 2.21.1, http://bugs.opensuse.org/, yast2-ntp-client) dnl Check for presence of file 'RPMNAME' AC_CONFIG_SRCDIR([RPMNAME]) @@ -18,7 +18,7 @@ AM_INIT_AUTOMAKE(tar-ustar -Wno-portability) dnl Important YaST2 variables -VERSION="2.21.0" +VERSION="2.21.1" RPMNAME="yast2-ntp-client" MAINTAINER="Peter Varkoly <[email protected]>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/data/ntp_servers.ycp new/yast2-ntp-client-2.21.2/data/ntp_servers.ycp --- old/yast2-ntp-client-2.21.1/data/ntp_servers.ycp 2011-09-29 13:16:02.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/data/ntp_servers.ycp 2012-01-05 08:25:24.000000000 +0100 @@ -62,6 +62,34 @@ "synchronization" : "NTP V4 secondary (stratum 2),", ], $[ + "address" : "a.ntp.br", + "country" : "BR", + "exact_location" : "Brazilian - NTP.br - A Hora Legal Brasileira, via Internet.", + "stratum" : "2", + "synchronization" : "NTP V4 secondary (stratum 2),", + ], + $[ + "address" : "b.ntp.br", + "country" : "BR", + "exact_location" : "Brazilian - NTP.br - A Hora Legal Brasileira, via Internet.", + "stratum" : "2", + "synchronization" : "NTP V4 secondary (stratum 2),", + ], + $[ + "address" : "c.ntp.br", + "country" : "BR", + "exact_location" : "Brazilian - NTP.br - A Hora Legal Brasileira, via Internet.", + "stratum" : "2", + "synchronization" : "NTP V4 secondary (stratum 2),", + ], + $[ + "address" : "pool.ntp.br", + "country" : "BR", + "exact_location" : "Brazilian - NTP.br - A Hora Legal Brasileira, via Internet.", + "stratum" : "2", + "synchronization" : "NTP V4 secondary (stratum 2),", + ], + $[ "access_policy" : "open access", "address" : "ntp.cpsc.ucalgary.ca", "country" : "CA", @@ -493,6 +521,14 @@ "stratum" : "2", ], $[ + "access_policy" : "Semi-open access. A service intended for use by Virgin Media customers who may use it without asking.", + "address" : "ntp.virginmedia.com", + "country" : "GB", + "exact_location" : "Unknown, UK", + "location" : "Virgin media; UK", + "stratum" : "2", + ], + $[ "access_policy" : "Semi-open access. These are primarily for use by UUNET customers who may use them without asking, but others are welcome to peer if they give notice.", "address" : "ntp0.uk.uu.net", "country" : "GB", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/src/NtpClient.ycp new/yast2-ntp-client-2.21.2/src/NtpClient.ycp --- old/yast2-ntp-client-2.21.1/src/NtpClient.ycp 2011-09-29 13:16:02.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/src/NtpClient.ycp 2011-10-11 16:16:01.000000000 +0200 @@ -4,7 +4,7 @@ * Summary: Data for configuration of ntp-client, input and output functions. * Authors: Jiri Srain <[email protected]> * - * $Id: NtpClient.ycp 64744 2011-07-05 10:17:48Z varkoly $ + * $Id: NtpClient.ycp 66384 2011-10-11 14:16:01Z varkoly $ * * Representation of the configuration of ntp-client. * Input and output routines. @@ -186,10 +186,10 @@ * ... * ] */ -global define map <string, string> GetAllKnownCountries () { +global define map <string, string> GetAllKnownCountries() { //first point of dependence on yast2-country-data if (!countries_already_read) { - known_countries = (map <string, string>) eval (SCR::Read (.target.ycp, Directory::datadir + "/country.ycp")); + known_countries = (map <string, string>) eval (SCR::Read(.target.ycp, Directory::datadir + "/country.ycp")); countries_already_read = true; if (known_countries == nil) known_countries = $[]; } @@ -208,14 +208,14 @@ * Read current language (RC_LANG from sysconfig) * @return two-letter language code (cs_CZ.UTF-8 -> CZ) */ -global define string GetCurrentLanguageCode ( ) { - string lang = (string)SCR::Read (.sysconfig.language.RC_LANG); +global define string GetCurrentLanguageCode( ) { + string lang = (string)SCR::Read(.sysconfig.language.RC_LANG); //second point of dependence on yast2-country-data return Language::GetGivenLanguageCountry( lang ); } -map<string, string> MakePoolRecord (string CC, string location) { +map<string, string> MakePoolRecord(string CC, string location) { string mycc = tolower(CC); //There is no gb.pool.ntp.org only uk.pool.ntp.org if ( mycc == "gb" ) @@ -233,25 +233,25 @@ * Get the list of known NTP servers * @return a list of known NTP servers */ -global map<string, map<string,string> > GetNtpServers () { +global map<string, map<string,string> > GetNtpServers() { if (ntp_servers == nil) { ntp_servers = $[]; - list<map<string,string> > servers = (list<map<string,string> >) - SCR::Read (.target.ycp, Directory::datadir + "/ntp_servers.ycp"); + list<map<string,string> > servers =(list<map<string,string> >) + SCR::Read(.target.ycp, Directory::datadir + "/ntp_servers.ycp"); if (servers == nil) { - y2error ("Failed to read the list of NTP servers"); + y2error("Failed to read the list of NTP servers"); } else { - y2milestone ("%1 known NTP servers read", size (servers)); - ntp_servers = listmap (map<string,string> s, servers, { + y2milestone("%1 known NTP servers read", size(servers)); + ntp_servers = listmap(map<string,string> s, servers, { string server = s["address"]:""; return $[ server : s ]; }); } - foreach (string short_country, string country_name, GetAllKnownCountries(), { + foreach(string short_country, string country_name, GetAllKnownCountries(), { // just refactored existing code map<string, string> p = MakePoolRecord(short_country, country_name); ntp_servers[p["address"]:""] = p; @@ -265,7 +265,7 @@ * Get the mapping between country codea and names ("CZ" -> "Czech Republic") * @return a map the country codes and names mapping */ -global map<string, string> GetCountryNames () { +global map<string, string> GetCountryNames() { if (country_names == nil) { country_names = (map<string,string>) @@ -273,7 +273,7 @@ } if (country_names == nil) { - y2error ("Failed to read country names"); + y2error("Failed to read country names"); country_names = $[]; } return country_names; @@ -285,24 +285,24 @@ * @param terse_output display additional data (location etc.) * @return list of servers (usable as combo-box items) */ -global list GetNtpServersByCountry ( string country, boolean terse_output ) { +global list GetNtpServersByCountry( string country, boolean terse_output ) { map<string,string> country_names = $[]; - map<string,map<string,string> > servers = GetNtpServers (); + map<string,map<string,string> > servers = GetNtpServers(); if (country != "") { - servers = filter (string s, map<string,string> o, servers, { + servers = filter(string s, map<string,string> o, servers, { return o["country"]:"" == country; }); // bnc#458917 add country, in case data/country.ycp does not have it - map<string,string> p = MakePoolRecord (country, ""); + map<string,string> p = MakePoolRecord(country, ""); servers[p["address"]:""] = p; } else { - country_names = GetCountryNames (); + country_names = GetCountryNames(); } - list items = maplist (string s, map<string,string> o, servers, { + list items = maplist(string s, map<string,string> o, servers, { string label = o["location"]:""; string l_country = o["country"]:""; if (country != "") @@ -310,16 +310,16 @@ else l_country = country_names[l_country]:l_country; if (label != "" && l_country != "") - label = sformat ("%1 (%2, %3)", s, label, l_country); + label = sformat("%1 (%2, %3)", s, label, l_country); else if (label == "" && l_country == "") label = s; else - label = sformat ("%1 (%2%3)", s, label, l_country); + label = sformat("%1 (%2%3)", s, label, l_country); if (terse_output) - return `item (`id(s), s); + return `item(`id(s), s); else - return `item (`id (s), label); + return `item(`id(s), label); }); return items; @@ -340,7 +340,7 @@ map conf = nil; if (FileUtils::Exists("/etc/ntp.conf")) - conf = (map)SCR::Read (.etc.ntp_conf.all); + conf = (map)SCR::Read(.etc.ntp_conf.all); if (conf == nil ) { @@ -351,21 +351,21 @@ config_has_been_read = true; list<map<string, any> > value = conf["value"]:[]; integer index = -1; - ntp_records = maplist (map<string, any> m, value, ``{ + ntp_records = maplist(map<string, any> m, value, ``{ index = index + 1; string type = m["name"]:""; string address = m["value"]:""; string options = ""; - if (contains ([ + if (contains([ "server", "peer", "broadcast", "broadcastclient", "manycast", "manycastclient", "fudge", "restrict" ], type)) { - list<string> l = splitstring (address, " \t"); - l = (list<string>)filter (string s, l, ``(s != "")); + list<string> l = splitstring(address, " \t"); + l = (list<string>)filter(string s, l, ``(s != "")); address = l[0]:""; l[0] = ""; - options = mergestring (l, " "); + options = mergestring(l, " "); } map<string,any> entry = $[ "type" : type, @@ -375,20 +375,20 @@ ]; return entry; }); - list<map<string, any> > fudge_records = filter (map<string,any> m, ntp_records, ``( + list<map<string, any> > fudge_records = filter(map<string,any> m, ntp_records, ``( m["type"]:"" == "fudge" )); - map <string, map<string, any> > fudge_map = (map <string, map<string, any> >)listmap (map m, fudge_records, + map <string, map<string, any> > fudge_map = (map <string, map<string, any> >)listmap(map m, fudge_records, ``{ string key = m["address"]:""; return $[key: m]; }); - list<map<string, any> > restrict_records = filter (map<string,any> m, ntp_records, ``( + list<map<string, any> > restrict_records = filter(map<string,any> m, ntp_records, ``( m["type"]:"" == "restrict" )); - restrict_map = (map <string, map <string,any> > )listmap (map m, restrict_records, + restrict_map = (map <string, map <string,any> > )listmap(map m, restrict_records, { string key = m["address"]:""; map value = $[]; @@ -408,16 +408,16 @@ return $[key: value]; }); - ntp_records = filter (map<string,any> m, ntp_records, ``( + ntp_records = filter(map<string,any> m, ntp_records, ``( m["type"]:"" != "fudge" )); - ntp_records = filter (map<string,any> m, ntp_records, ``( + ntp_records = filter(map<string,any> m, ntp_records, ``( m["type"]:"" != "restrict" )); - ntp_records = (list<map<string,any> >)maplist (map m, ntp_records, ``{ - if (haskey (fudge_map, m["address"]:"")) + ntp_records = (list<map<string,any> >)maplist(map m, ntp_records, ``{ + if (haskey(fudge_map, m["address"]:"")) { m["fudge_options"] = fudge_map[m["address"]:"", "options"]:""; m["fudge_comment"] = fudge_map[m["address"]:"", "comment"]:""; @@ -426,9 +426,9 @@ }); // mark local clock to be local clock and not real servers - ntp_records = maplist (map<string,any> p, ntp_records, ``{ + ntp_records = maplist(map<string,any> p, ntp_records, ``{ if (p["type"]:"" == "server" - && regexpmatch (p["address"]:"", "^127\.127\.[0-9]+.[0-9]+$")) + && regexpmatch(p["address"]:"", "^127\.127\.[0-9]+.[0-9]+$")) { p["type"] = "__clock"; } @@ -444,7 +444,7 @@ * synchronize_time and sync_interval variables * Return updated value of synchronize_time */ -global boolean ReadSynchronization () { +global boolean ReadSynchronization() { list crontab = (list)SCR::Read(.cron, cron_file, ""); y2milestone("CRONTAB %1", crontab); @@ -502,32 +502,32 @@ if(Abort()) return false; if (have_progress) Progress::NextStage(); - boolean progress_orig = Progress::set (false); - NetworkInterfaces::Read (); - Progress::set (progress_orig); + boolean progress_orig = Progress::set(false); + NetworkInterfaces::Read(); + Progress::set(progress_orig); //SCR::Read may return nil (no such value in sysconfig, file not there etc. ) - string policy = (string)SCR::Read (.sysconfig.network.config.NETCONFIG_NTP_POLICY); + string policy = (string)SCR::Read(.sysconfig.network.config.NETCONFIG_NTP_POLICY); //set if not nil, otherwise use 'auto' as safe fallback (#449362) if (policy != nil) ntp_policy = policy; - GetNtpServers (); - GetCountryNames (); + GetNtpServers(); + GetCountryNames(); // read current settings if(Abort()) return false; if (have_progress) Progress::NextStage(); boolean failed = false; - if (! Mode::testsuite () && ! Mode::installation () - && ! PackageSystem::CheckAndInstallPackagesInteractive (["ntp"]) + if (! Mode::testsuite() && ! Mode::installation() + && ! PackageSystem::CheckAndInstallPackagesInteractive(["ntp"]) ) { return false; } - run_service = Service::Enabled (service_name); + run_service = Service::Enabled(service_name); //Poke to /var/lib/YaST if there is Active Directory controller address dumped in .ycp file string ad_ntp_file = Directory::vardir + "/ad_ntp_data.ycp"; @@ -543,39 +543,39 @@ // Stay away if the user may have made changes which we cannot parse. // But bnc#456553, no pop-ups for CLI. - if (! Mode::commandline() && ! FileChanges::CheckFiles (["/etc/ntp.conf"])) + if (! Mode::commandline() && ! FileChanges::CheckFiles(["/etc/ntp.conf"])) failed = true; ProcessNtpConf(); - ReadSynchronization (); + ReadSynchronization(); - string run_chroot_s = (string) SCR::Read (.sysconfig.ntp.NTPD_RUN_CHROOTED); + string run_chroot_s = (string) SCR::Read(.sysconfig.ntp.NTPD_RUN_CHROOTED); run_chroot = run_chroot_s == "yes"; if (run_chroot_s == nil) { failed = true; - y2error ("Failed reading .sysconfig.ntp.NTPD_RUN_CHROOTED"); + y2error("Failed reading .sysconfig.ntp.NTPD_RUN_CHROOTED"); } if(failed) { // error report - Report::Error (Message::CannotReadCurrentSettings ()); + Report::Error(Message::CannotReadCurrentSettings()); } - if (! Mode::testsuite ()) + if (! Mode::testsuite()) { - boolean progress_orig = Progress::set (false); - SuSEFirewall::Read (); - Progress::set (progress_orig); + boolean progress_orig = Progress::set(false); + SuSEFirewall::Read(); + Progress::set(progress_orig); } if(Abort()) return false; if (have_progress) { - Progress::NextStage (); - Progress::Title (_("Finished")); + Progress::NextStage(); + Progress::Title(_("Finished")); } sleep(sl); @@ -589,10 +589,10 @@ * * @return list <string> of servers */ -global list <string> GetUsedNtpServers () { +global list <string> GetUsedNtpServers() { list <string> used_servers = []; - foreach (map <string, any> record, ntp_records, { - if (record["type"]:"" == "server") used_servers = add (used_servers, record["address"]:""); + foreach(map <string, any> record, ntp_records, { + if (record["type"]:"" == "server") used_servers = add(used_servers, record["address"]:""); }); return used_servers; @@ -611,14 +611,14 @@ * * @return boolean true if enabled */ -global boolean IsRandomServersServiceEnabled () { +global boolean IsRandomServersServiceEnabled() { // all servers needed by pool.ntp.org service, before checking false == not used map <string, boolean> needed_servers = $[]; - foreach (string server_name, random_pool_servers, { + foreach(string server_name, random_pool_servers, { needed_servers[server_name] = false; }); - foreach (string used_server, GetUsedNtpServers(), { + foreach(string used_server, GetUsedNtpServers(), { // if server is needed by pool.ntp.org and matches if (needed_servers[used_server]:nil != nil) { needed_servers[used_server] = true; @@ -626,7 +626,7 @@ }); boolean ret = true; - foreach (string nserver_name, boolean ns_value, needed_servers, { + foreach(string nserver_name, boolean ns_value, needed_servers, { if (ns_value != true) ret = false; }); return ret; @@ -636,9 +636,9 @@ * Removes all servers contained in the random_pool_servers list * from the current configuration. */ -global define void DeActivateRandomPoolServersFunction () { - foreach (string random_pool_server, random_pool_servers, { - ntp_records = filter (map <string, any> one_record, ntp_records, { +global define void DeActivateRandomPoolServersFunction() { + foreach(string random_pool_server, random_pool_servers, { + ntp_records = filter(map <string, any> one_record, ntp_records, { return ( // do not filter out not-servers one_record["type"]:"" != "server" @@ -653,10 +653,10 @@ * Add servers needed for random_pool_servers function * into the current configuration. */ -global define void ActivateRandomPoolServersFunction () { +global define void ActivateRandomPoolServersFunction() { // leave the current configuration if any map <string, map <string, any> > store_current_options = $[]; - foreach (map <string, any> one_record, ntp_records, { + foreach(map <string, any> one_record, ntp_records, { if (one_record["type"]:"" == "server" && one_record["address"]:"" != "") { string one_address = one_record["address"]:""; store_current_options[one_address] = $[]; @@ -667,23 +667,23 @@ // remove all old ones DeActivateRandomPoolServersFunction(); - ntp_records = filter (map <string, any> one_record, ntp_records, { + ntp_records = filter(map <string, any> one_record, ntp_records, { return ( // filter out all servers one_record["type"]:"" != "server" ); }); - foreach (string one_server, random_pool_servers, { + foreach(string one_server, random_pool_servers, { string one_options = ""; - + if (haskey(store_current_options, one_server)) { one_options = store_current_options[one_server, "options"]:""; y2milestone("Leaving current configuration for server '%1', options '%2'", one_server, one_options); } - - ntp_records = add (ntp_records, $[ + + ntp_records = add(ntp_records, $[ "address":one_server, "comment":"\n# Random pool server, see http://www.pool.ntp.org/ for more information\n", "options":one_options, @@ -735,7 +735,7 @@ if ( have_progress ) Progress::NextStage(); if (true) { - foreach (string key, map <string, any> m, restrict_map, { + foreach(string key, map <string, any> m, restrict_map, { map <string, any> ret = $[ "address" : key, "comment" : m["comment"]:"", @@ -746,9 +746,9 @@ ntp_records = add(ntp_records, ret); }); - y2milestone ("Writing settings %1", ntp_records); + y2milestone("Writing settings %1", ntp_records); - list<map<string, any> > save2 = (list<map<string, any> >)flatten (maplist( + list<map<string, any> > save2 = (list<map<string, any> >)flatten(maplist( map<string, any> r, ntp_records, { map<string,any> s1 = $[ @@ -772,10 +772,10 @@ } return [ s1, s2 ]; })); - save2 = filter (map<string, any> m, save2, ``(m != nil)); + save2 = filter(map<string, any> m, save2, ``(m != nil)); boolean failed = false; - map conf = (map)SCR::Read (.etc.ntp_conf.all); + map conf = (map)SCR::Read(.etc.ntp_conf.all); if (conf == nil) { failed = true; @@ -783,16 +783,16 @@ else { conf["value"] = save2; - if (! SCR::Write (.etc.ntp_conf.all, conf)) + if (! SCR::Write(.etc.ntp_conf.all, conf)) failed = true; - if (! SCR::Write (.etc.ntp_conf, nil)) + if (! SCR::Write(.etc.ntp_conf, nil)) failed = true; } - FileChanges::StoreFileCheckSum ("/etc/ntp.conf"); + FileChanges::StoreFileCheckSum("/etc/ntp.conf"); if (failed) - Report::Error (Message::CannotWriteSettingsTo ("/etc/ntp.conf")); + Report::Error(Message::CannotWriteSettingsTo("/etc/ntp.conf")); } // write policy and run netconfig command SCR::Write(.sysconfig.network.config.NETCONFIG_NTP_POLICY, ntp_policy); @@ -803,42 +803,34 @@ Report::Error(_("Cannot update the dynamic configuration policy.")); } - if (! (SCR::Write (.sysconfig.ntp.NTPD_RUN_CHROOTED, run_chroot - ? "yes" - : "no") - && SCR::Write (.sysconfig.ntp, nil))) - { - // error report - Report::Error (_("Cannot write sysconfig variables.")); - } + SCR::Write(.sysconfig.ntp.NTPD_RUN_CHROOTED, run_chroot ? "yes" : "no"); + SCR::Write(.sysconfig.ntp, nil); sleep(sl); // restart daemon if(Abort()) return false; - if (have_progress) Progress::NextStage (); + if (have_progress) Progress::NextStage(); // SuSEFirewall::Write checks on its own whether there are pending // changes, so call it always. bnc#476951 if (true) { - boolean progress_orig = Progress::set (false); - SuSEFirewall::Write (); - Progress::set (progress_orig); + boolean progress_orig = Progress::set(false); + SuSEFirewall::Write(); + Progress::set(progress_orig); } - if (! Service::Adjust (service_name, - run_service ? "enable" : "disable")) + if (! Service::Adjust(service_name, run_service ? "enable" : "disable")) { // error report - Report::Error (Message::CannotAdjustService ("NTP")); + Report::Error(Message::CannotAdjustService("NTP")); } - if (run_service && (! write_only) - && 0 != Service::RunInitScript(service_name, "restart")) + if (run_service && (! write_only) && 0 != Service::RunInitScript(service_name, "restart")) { // error report - Report::Error (_("Cannot restart the NTP daemon.")); + Report::Error(_("Cannot restart the NTP daemon.")); } if (! run_service) { @@ -846,11 +838,11 @@ } if (synchronize_time) { - SCR::Write (.target.string,cron_file,"-*/"+sync_interval+" * * * * root /etc/init.d/ntp ntptimeset &>/dev/null\n"); + SCR::Write(.target.string,cron_file,"-*/"+sync_interval+" * * * * root /etc/init.d/ntp ntptimeset &>/dev/null\n"); } else { - SCR::Execute (.target.bash,"test -e "+cron_file+" && rm "+cron_file+";"); + SCR::Execute(.target.bash,"test -e "+cron_file+" && rm "+cron_file+";"); } sleep(sl); @@ -858,8 +850,8 @@ if(Abort()) return false; if ( have_progress ) { - Progress::NextStage (); - Progress::Title (_("Finished")); + Progress::NextStage(); + Progress::Title(_("Finished")); } sleep(sl); @@ -873,7 +865,7 @@ * @param settings The YCP structure to be imported. * @return boolean True on success */ -global define boolean Import (map settings) ``{ +global define boolean Import(map settings) ``{ synchronize_time = settings["synchronize_time"]:false; sync_interval = settings["sync_interval"]:5; run_service = settings["start_at_boot"]:false; @@ -883,11 +875,11 @@ ntp_policy = settings["ntp_policy"]:(config_dhcp? "auto": ""); ntp_records = settings["peers"]:[]; ntp_records = maplist(map<string, any> p, ntp_records, ``{ - if (haskey(p, "key") && haskey(p, "value") ) + if(haskey(p, "key") && haskey(p, "value") ) { p["type"] = p["key"]:""; p["address"] = p["value"]:""; - if (haskey (p, "param")) + if(haskey(p, "param")) p["options"] = p["param"]:""; return (p); } else { @@ -903,7 +895,7 @@ * (For use by autoinstallation.) * @return map Dumped settings (later acceptable by Import ()) */ -global define map Export () ``{ +global define map Export() ``{ return $[ "synchronize_time" : synchronize_time, "sync_interval" : sync_interval, @@ -949,10 +941,10 @@ } */ // netconfig policy - if (PolicyIsAuto ()) { + if (PolicyIsAuto()) { // summary string, FIXME summary = Summary::AddLine(summary, _("Combine static and DHCP configuration.")); - } else if (PolicyIsNomodify ()) { + } else if (PolicyIsNomodify()) { // summary string, FIXME summary = Summary::AddLine(summary, _("Static configuration only.")); } @@ -961,18 +953,16 @@ summary = Summary::AddLine(summary, _("Custom configuration policy.")); // FIXME too generic! } - foreach (string t, ["server", "__clock", "peer", "broadcast", "broadcastclient" ], + foreach(string t, ["server", "__clock", "peer", "broadcast", "broadcastclient" ], ``{ list<map<string,any> > l - = filter (map<string,any> p, ntp_records, ``(p["type"]:"" == t)); + = filter(map<string,any> p, ntp_records, ``(p["type"]:"" == t)); list<string> names - = maplist (map<string,any> i, l, ``(i["address"]:"")); - names = filter (string n, names, ``(n != "")); - if (size (names) > 0) + = maplist(map<string,any> i, l, ``(i["address"]:"")); + names = filter(string n, names, ``(n != "")); + if (size(names) > 0) { - summary = Summary::AddLine (summary, sformat ( - types[t]:"", mergestring ((list<string>)names, ", ") - )); + summary = Summary::AddLine(summary, sformat( types[t]:"", mergestring((list<string>)names, ", "))); } }); return summary; @@ -985,27 +975,21 @@ * `result_popup: also final pop up about the result * @return boolean true if NTP server answers properly */ -global boolean TestNtpServer (string server, symbol verbosity) { +global boolean TestNtpServer(string server, symbol verbosity) { if (verbosity != `no_ui) UI::OpenDialog( // An informative popup label diring the NTP server testings `Left(`Label(_("Testing the NTP server..."))) ); - y2milestone ("Testing reachability of server %1", server); + y2milestone("Testing reachability of server %1", server); // testing the server using IPv4 and then using IPv6 protocol // bug #74076, Firewall could have been blocked IPv6 - integer ret_IPv4 = (integer) SCR::Execute (.target.bash, sformat ( - "/usr/sbin/sntp -4 -t 5 %1", - server - )); + integer ret_IPv4 = (integer) SCR::Execute(.target.bash, sformat( "/usr/sbin/sntp -4 -t 5 %1", server)); integer ret_IPv6 = 0; if (ret_IPv4 != 0) - ret_IPv6 = (integer) SCR::Execute (.target.bash, sformat ( - "/usr/sbin/sntp -6 -t 5 %1", - server - )); + ret_IPv6 = (integer) SCR::Execute(.target.bash, sformat( "/usr/sbin/sntp -6 -t 5 %1", server)); if (verbosity != `no_ui) { UI::CloseDialog(); @@ -1017,13 +1001,13 @@ if (ok) { // message report - result of test of connection to NTP server - Popup::Notify (_("Server is reachable and responds properly.")); + Popup::Notify(_("Server is reachable and responds properly.")); } else { // error message - result of test of connection to NTP server // report error instead of simple message (#306018) - Report::Error (_("Server is unreachable or does not respond properly.")); + Report::Error(_("Server is unreachable or does not respond properly.")); } } return ok; @@ -1034,7 +1018,7 @@ * @param method symbol method of the detection (only `slp suported ATM) * @return a list of found NTP servers */ -global list<string> DetectNtpServers (symbol method) { +global list<string> DetectNtpServers(symbol method) { if (method == `slp) { string required_package = "yast2-slp"; @@ -1055,14 +1039,14 @@ } } - list<map> servers = SLPAPI::FindSrvs ("service:ntp", ""); - list<string> server_names = maplist (map m, servers, ``( + list<map> servers = SLPAPI::FindSrvs("service:ntp", ""); + list<string> server_names = maplist(map m, servers, ``( (string)(m["pcHost"]:"") )); - server_names = filter (string s, server_names, ``(s != "")); + server_names = filter(string s, server_names, ``(s != "")); return server_names; } - y2error ("Unknown detection method: %1", method); + y2error("Unknown detection method: %1", method); return []; } @@ -1070,12 +1054,12 @@ * Get the list of synchronization-related records * @return a list of maps with keys type (eg. "server"), address and index. */ -global define list<map<string,any> >getSyncRecords () ``{ +global define list<map<string,any> >getSyncRecords() ``{ integer index = -1; - list<map<string,any> > ret = maplist (map m, ntp_records, ``{ + list<map<string,any> > ret = maplist(map m, ntp_records, ``{ index = index + 1; string type = m["type"]:""; - if (! contains (["server", "peer", "broadcast", + if (! contains(["server", "peer", "broadcast", "broadcastclient", "__clock"], type)) { return nil; @@ -1087,7 +1071,7 @@ "device" : m["device"]:"", ]; }); - ret = filter (map<string,any> m, ret, ``(m != nil)); + ret = filter(map<string,any> m, ret, ``(m != nil)); return ret; } @@ -1096,11 +1080,11 @@ * @param index integer, -1 for creating a new record * @return boolean true on success */ -global define boolean selectSyncRecord (integer index) ``{ +global define boolean selectSyncRecord(integer index) ``{ boolean ret = true; - if (index >= size (ntp_records) || index < -1) + if (index >= size(ntp_records) || index < -1) { - y2error ("Record with index %1 doesn't exist, creating new", index); + y2error("Record with index %1 doesn't exist, creating new", index); index = -1; ret = false; } @@ -1118,10 +1102,10 @@ * @param address string address * @return integer index of the record if found, -1 otherwise */ -global define integer findSyncRecord (string type, string address) ``{ +global define integer findSyncRecord(string type, string address) ``{ integer index = -1; integer ret = -1; - foreach (map<string,any> m, ntp_records, ``{ + foreach(map<string,any> m, ntp_records, ``{ index = index + 1; if (type == m["type"]:"" && address == m["address"]:"") ret = index; @@ -1133,9 +1117,9 @@ * Store currently sellected synchronization record * @return boolean true on success */ -global define boolean storeSyncRecord () ``{ +global define boolean storeSyncRecord() ``{ if (selected_index == -1) - ntp_records = add (ntp_records, selected_record); + ntp_records = add(ntp_records, selected_record); else ntp_records[selected_index] = selected_record; modified = true; @@ -1147,14 +1131,14 @@ * @param index integer index of record to delete * @return boolean true on success */ -global define boolean deleteSyncRecord (integer index) ``{ - if (index >= size (ntp_records) || index <= -1) +global define boolean deleteSyncRecord(integer index) ``{ + if (index >= size(ntp_records) || index <= -1) { - y2error ("Record with index %1 doesn't exist", index); + y2error("Record with index %1 doesn't exist", index); return false; } ntp_records[index] = nil; - ntp_records = filter (map<string,any> r, ntp_records, ``(r != nil)); + ntp_records = filter(map<string,any> r, ntp_records, ``(r != nil)); modified = true; return true; } @@ -1163,14 +1147,14 @@ * Ensure that selected_record["options"] contains the option. * (A set operation in a string) */ -global void enableOptionInSyncRecord (string option) { +global void enableOptionInSyncRecord(string option) { // careful, "burst" != "iburst" string old = selected_record["options"]:""; - list<string> old_l = splitstring (old, " \t"); - if (!contains (old_l, option)) { - old_l = add (old_l, option); + list<string> old_l = splitstring(old, " \t"); + if (!contains(old_l, option)) { + old_l = add(old_l, option); } - selected_record["options"] = mergestring (old_l, " "); + selected_record["options"] = mergestring(old_l, " "); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/src/misc.ycp new/yast2-ntp-client-2.21.2/src/misc.ycp --- old/yast2-ntp-client-2.21.1/src/misc.ycp 2011-09-29 13:16:02.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/src/misc.ycp 2011-10-25 12:59:00.000000000 +0200 @@ -4,7 +4,7 @@ * Summary: Miscelanous functions for configuration of ntp-client. * Authors: Jiri Srain <[email protected]> * - * $Id: misc.ycp 50163 2008-08-18 10:12:07Z mvidner $ + * $Id: misc.ycp 66561 2011-10-25 10:58:59Z varkoly $ */ { @@ -26,7 +26,7 @@ */ define boolean reallyExit () ``{ // yes-no popup - return Popup::YesNo (_("Really exit? + return !NtpClient::modified || Popup::YesNo (_("Really exit? All changes will be lost.")); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/src/ntp-client_proposal.ycp new/yast2-ntp-client-2.21.2/src/ntp-client_proposal.ycp --- old/yast2-ntp-client-2.21.1/src/ntp-client_proposal.ycp 2011-09-29 13:16:02.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/src/ntp-client_proposal.ycp 2012-01-04 13:21:03.000000000 +0100 @@ -79,8 +79,15 @@ boolean GetNTPEnabled () { if (!Stage::initial()) + { + boolean progress_orig = Progress::set (false); + NtpClient::Read(); + Progress::set (progress_orig); NtpClient::ReadSynchronization (); + } +y2milestone("synchronize_time %1",NtpClient::synchronize_time); +y2milestone("run_service %1", NtpClient::run_service); return NtpClient::synchronize_time || Service::Enabled (NtpClient::service_name); } @@ -173,7 +180,7 @@ `HBox ( `HSpacing (0.5), // check box label - `Left (`CheckBox (`id (`run_service), _("&Run NTP as daemon"))) + `Left (`CheckBox (`id (`run_service), _("&Run NTP as daemon"), NtpClient::run_service )) ), `HBox ( `HSpacing (0.5), @@ -244,10 +251,10 @@ { AddSingleServer(ntp_server); } + NtpClient::run_service=run_service; if( ! run_service ) { NtpClient::synchronize_time=true; - NtpClient::run_service=false; NtpClient::sync_interval=15; } @@ -284,9 +291,9 @@ if ( !ValidateSingleServer( ntp_server ) ) return `invalid_hostname; + WriteNtpSettings (ntp_servers,ntp_server,run_service); if (param["write_only"]:false) { - WriteNtpSettings (ntp_servers,ntp_server,run_service); return `success; } @@ -391,6 +398,7 @@ string server = (string) UI::QueryWidget (`id(`ntp_address),`Value); +y2milestone("ui_try_save argmap %1", argmap); if (rv == `invalid_hostname) { handle_invalid_hostname( server ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-ntp-client-2.21.1/src/widgets.ycp new/yast2-ntp-client-2.21.2/src/widgets.ycp --- old/yast2-ntp-client-2.21.1/src/widgets.ycp 2011-09-29 13:16:02.000000000 +0200 +++ new/yast2-ntp-client-2.21.2/src/widgets.ycp 2011-10-25 12:59:00.000000000 +0200 @@ -4,7 +4,7 @@ * Summary: Widgets definitions * Authors: Jiri Srain <[email protected]> * - * $Id: widgets.ycp 61623 2010-04-08 14:56:04Z varkoly $ + * $Id: widgets.ycp 66561 2011-10-25 10:58:59Z varkoly $ */ { @@ -171,7 +171,10 @@ UI::ChangeWidget (`id ("start"), `CurrentButton, "never"); if (start != NtpClient::run_service) + { + y2milestone("set modified from %1 to true 1", NtpClient::modified); NtpClient::modified = true; + } if (start) CWMFirewallInterfaces::EnableOpenFirewallWidget (); @@ -206,7 +209,7 @@ if (regexpmatch(server_2, "(.*)\.$")) { server_2 = regexpsub (server_2, "(.*)\.$", "\\1"); } - + if ( (!Hostname::Check(server_1) && !Hostname::CheckFQ(server_1) && !IP::Check(server_1)) && @@ -316,8 +319,12 @@ * @param event map event that caused storing process */ define void chrootStore (string id, map event) ``{ + boolean tmp = NtpClient::run_chroot; NtpClient::run_chroot = (boolean)(UI::QueryWidget (`id (id), `Value)); - NtpClient::modified = true; + if( tmp != NtpClient::run_chroot ) { + y2milestone("set modified from %1 to true 2", NtpClient::modified); + NtpClient::modified = true; + } } define void secureInit (string id) ``{ @@ -395,6 +402,7 @@ * @param event map event that caused storing process */ void PolicyStore(string id, map event) { + string tmp = NtpClient::ntp_policy; if( UI::QueryWidget (`id ("policy_combo"), `Value) == `nomodify ) { NtpClient::ntp_policy = ""; @@ -407,7 +415,11 @@ { NtpClient::ntp_policy = (string)UI::QueryWidget (`id ("custom_policy"), `Value); } - NtpClient::modified = true; + if( tmp != NtpClient::ntp_policy ) + { + y2milestone("set modified to true 3"); + NtpClient::modified = true; + } } @@ -543,7 +555,6 @@ showLogPopup (); return nil; } - NtpClient::modified = true; any ev_id = event["ID"]:nil; if (ev_id == "boot" || ev_id == "never" || ev_id == "sync" || ev_id == "policy_combo" ) { @@ -568,6 +579,8 @@ UI::ChangeWidget (`id ("custom_policy"), `Enabled, false); UI::ChangeWidget (`id ("custom_policy"), `Value, ""); } + y2milestone("set modified from %1 to true 4.1 id %2 map %3", NtpClient::modified, id, event); + NtpClient::modified = true; return nil; } map<string,symbol> types = $[ @@ -581,6 +594,8 @@ { NtpClient::selectSyncRecord (-1); peer_type_selected = nil; + y2milestone("set modified from %1 to true 4.2 id %2 map %3", NtpClient::modified, id, event); + NtpClient::modified = true; return `add; } else if (event["ID"]:nil == `edit || event["ID"]:nil == `overview) @@ -589,6 +604,8 @@ (integer)(UI::QueryWidget (`id (`overview), `CurrentItem)) ); string type = NtpClient::selected_record["type"]:""; + y2milestone("set modified from %1 to true 4.3 id %2 map %3", NtpClient::modified, id, event); + NtpClient::modified = true; return types[type]:nil; } else if (event["ID"]:nil == `delete) @@ -601,6 +618,8 @@ ); overviewRedraw (); sync_record_modified = true; + y2milestone("set modified from %1 to true 4.4 id %2 map %3", NtpClient::modified, id, event); + NtpClient::modified = true; } } return nil; @@ -611,8 +630,10 @@ * @param id any widget id */ define void overviewInit (string id) ``{ + boolean tmp = NtpClient::modified; overviewRedraw (); overviewHandle (id, $["ID" : "boot"]); + NtpClient::modified = tmp; } /** -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
