patches/system-tools-backends-07-time.diff
changeset 7860 25fd327818d6
child 8436 2435bf67bb52
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/system-tools-backends-07-time.diff	Fri Aug 04 09:54:14 2006 +0000
@@ -0,0 +1,363 @@
+diff -u ./time-conf.in-orig ./time-conf.in
+--- ./time-conf.in-orig	Thu Jun  8 15:43:36 2006
++++ ./time-conf.in	Thu Jun  8 15:38:09 2006
+@@ -67,6 +67,7 @@
+               "mandrake-7.1", "mandrake-7.2", "mandrake-9.0", "mandrake-9.1", "mandrake-9.2",
+               "mandrake-10.0", "mandrake-10.1",
+               "debian-2.2", "debian-3.0", "debian-sarge",
++              "nexenta-1.0", "solaris-2.11",
+               "suse-7.0", "suse-9.0", "suse-9.1", "turbolinux-7.0",
+               "slackware-8.0.0", "slackware-8.1", "slackware-9.0.0", "slackware-9.1.0", "slackware-10.0.0", "slackware-10.1.0", "slackware-10.2.0",
+               "gentoo", "vlos-1.2", "pld-1.0", "pld-1.1", "pld-1.99", "fedora-1", "fedora-2", "fedora-3", "rpath",
+@@ -123,6 +124,7 @@
+     if    ($$tree[0] eq "local_time"){ $$hash{"local_time"} = &xml_parse_local_time ($$tree[1]); }
+     elsif ($$tree[0] eq "timezone") { $$hash{"timezone"} = &gst_xml_get_word ($$tree[1]); }
+     elsif ($$tree[0] eq "sync")     { $$hash{"sync"} = &xml_parse_sync ($$tree[1], $hash); }
++    elsif ($$tree[0] eq "sync_now")     { $$hash{"sync_now"} = &xml_parse_sync ($$tree[1], $hash); }
+ 
+     shift @$tree;
+     shift @$tree;
+@@ -150,7 +152,24 @@
+   return \@sync;
+ }
+ 
++sub xml_parse_sync_now
++{
++  my $tree = $_[0];
++  my $hash = $_[1];
++  my @sync_now;
+ 
++  while (@$tree)
++  {
++    if ($$tree[0] eq "server")  { push (@sync_now, &gst_xml_get_word($$tree[1])); }
++    
++    shift @$tree;
++    shift @$tree;
++  }
++
++  return \@sync_now;
++}
++
++
+ sub xml_parse_local_time
+ {
+   my $tree = $_[0];
+@@ -277,6 +296,28 @@
+   return \%h;
+ }
+ 
++sub time_get_sunos_zone
++{
++  my $zone;
++  local *INFILE;
++
++  *INFILE = &gst_file_open_read_from_names("/etc/default/init");
++  if (not *INFILE) { return; }
++
++  &gst_report ("time_timezone_scan");
++
++  while (<INFILE>)
++  {
++    if (/^TZ\s*=\s*(.*)/)
++    {
++      ($d, $zone) = split /\=/, $_;
++      last;
++    }
++  }
++  close (INFILE);
++  return $zone;
++}
++
+ sub time_get_rh62_zone
+ {
+   my ($local_time_file, $zoneinfo_dir) = @_;
+@@ -318,8 +359,8 @@
+     $zone = "";
+   }
+   
+-  return $zone;
+   close (TZLIST);
++  return $zone;
+ }
+ 
+ sub conf_get
+@@ -342,7 +383,13 @@
+   my ($plat) = $$tool {"system"};
+   my ($command);
+ 
++  my $sunos_table = {
++    "nexenta-1.0"   => "date %02d%02d%02d%02d%04d.%02d",
++    "solaris-2.11"   => "date %02d%02d%02d%02d%04d.%02d"
++  };
++
+   my $plat_table = {
++    "SunOS"   => $$sunos_table {$$tool {"platform"}},
+     "Linux"   => "date %02d%02d%02d%02d%04d.%02d",
+     "FreeBSD" => "date -f %%m%%d%%H%%M%%Y.%%S  %02d%02d%02d%02d%04d.%02d"
+   };
+@@ -356,7 +403,34 @@
+ 
+   return &gst_file_run ($command);
+ }
++# Synchronise time now - moved to backend since it needs root privs.
++sub time_set_sync_now 
++{
++  my ($sync_servers) = @_;
++  my ($plat) = $$tool{"system"};
+ 
++  &gst_report_enter();
++
++  if ( $plat eq "SunOS" ) {
++    if ( $#$sync_servers ) 
++    {
++        $ntp_service_was_active = &gst_service_smf_get_status( "network/ntp" );
++        &gst_service_smf_set_status( "network/ntp", 0 ) if ($ntp_service_was_active);
++        $command = "ntpdate -s ";
++        foreach $server (@$sync_servers)
++        {
++          $command .= "$server ";
++        }
++        &gst_file_run( $command );
++        &gst_service_smf_set_status( "network/ntp", 1 ) if ($ntp_service_was_active);
++    }
++  }
++  else {
++    &gst_file_run("/etc/init.d/ntpdate restart");
++  }
++  &gst_report_leave();
++}
++
+ sub time_set_local_time
+ {
+   my ($time) = @_;
+@@ -378,6 +452,49 @@
+   return 0;
+ }
+ 
++sub time_set_sunos_zone
++{
++  my ($localtime, $zonebase, $timezone) = @_;
++  my ($ifh, $ofh);
++  local (*INFILE, *OUTFILE);
++
++  ($ifh, $ofh) = &gst_file_open_filter_write_from_names("/etc/default/init");
++  if (not $ofh) { return; }  # No point if we can't write.
++  *INFILE = $ifh; *OUTFILE = $ofh;
++
++  &gst_report_enter ();
++  &gst_report ("time_timezone_set", $timezone);
++
++  &gst_file_run ("rtc -z $timezone");
++
++  while (<INFILE>)
++  {
++    if (/^TZ\s*=\s*(.*)/) {
++      print OUTFILE "TZ=$timezone\n";
++      next;
++    }
++    print OUTFILE $_;
++  }
++  close OUTFILE;
++  close INFILE;
++
++  # update /etc/localtime too, so unported GNU software will not complain
++  my $tz = "$zonebase/$timezone";
++  if (stat($tz) ne "")
++  {
++    unlink $localtime;  # Important, since it might be a symlink.
++    
++    &gst_report_enter ();
++    $res = copy ($tz, $localtime);
++    &gst_report_leave ();
++    return -1 unless $res;
++    return 0;
++  }
++
++  &gst_report_leave ();
++  return -1;
++}
++
+ sub time_set_archlinux_zone
+ {
+ 	my ($localtime, $zonebase, $timezone) =@_;
+@@ -442,7 +559,10 @@
+ 
+ sub time_sync_hw_from_sys
+ {
+-  &gst_file_run ("hwclock --systohc");
++  if ( $$tool{"system"} ne "SunOS" ) 
++  {
++      &gst_file_run ("hwclock --systohc");
++  }
+   return 0;
+ }
+ 
+@@ -560,6 +680,10 @@
+    "debian-3.0"      => "debian-3.0",
+    "debian-sarge"    => "debian-3.0",
+ 
++   "nexenta-1.0"     => "nexenta",
++
++   "solaris-2.11"     => "solaris",
++
+    "suse-7.0"        => "suse-7.0",
+    "suse-9.0"        => "suse-9.0",
+    "suse-9.1"        => "suse-9.0",
+@@ -758,7 +882,23 @@
+           [ "ntpinstalled", \&gst_service_rcng_installed, [ "ntpd", "openntpd" ]],
+           ]
+         },
+-	
++
++       "solaris" =>
++       {
++         fn =>
++         {
++           NTP_CONF     => "/etc/inet/ntp.conf"
++         },
++         table =>
++         [
++          [ "local_time",   \&time_get_local_time ],
++          [ "timezone",     \&time_get_sunos_zone ],
++          [ "sync",         \&gst_parse_split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ],
++          [ "sync_active",  \&gst_service_smf_get_status, "network/ntp" ],
++          [ "ntpinstalled", \&gst_service_installed, "network/ntp" ],
++          ]
++        },
++
+        "freebsd-5" =>
+        {
+          fn =>
+@@ -813,6 +953,10 @@
+    "debian-3.0"      => "debian-3.0",
+    "debian-sarge"    => "debian-3.0",
+ 
++   "nexenta-1.0"     => "nexenta",
++
++   "solaris-2.11"     => "solaris",
++
+    "suse-7.0"        => "suse-7.0",
+    "suse-9.0"        => "suse-9.0",
+    "suse-9.1"        => "suse-9.0",
+@@ -859,6 +1003,7 @@
+              [
+               [ "timezone",    \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "local_time",  \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync",        \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+               [ "sync_active", \&gst_service_sysv_set_status, 90, "xntpd", "%sync_active%" ],
+               ]
+@@ -876,6 +1021,7 @@
+              [
+               [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "local_time",   \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+               [ "sync_active",  \&gst_service_sysv_set_status, 90, "ntpd", "%sync_active%" ],
+               ]
+@@ -893,6 +1039,7 @@
+              [
+               [ "timezone",    \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "local_time",  \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync",        \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+               [ "sync_active", \&gst_service_sysv_set_status, 23, "ntp", "%sync_active%" ],
+               ]
+@@ -912,6 +1059,7 @@
+               [ "timezone",    \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "timezone",    \&gst_replace_line_first, TIMEZONE ],
+               [ "local_time",  \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync",        \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+               [ "sync_active", \&gst_service_sysv_set_status, 23, "ntp-server", "%sync_active%" ],
+               ]
+@@ -929,6 +1077,7 @@
+              [
+               [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "local_time",   \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+               [ "sync_active",  \&gst_service_sysv_set_status, 90, "xntpd", "%sync_active%" ],
+               ]
+@@ -946,6 +1095,7 @@
+          [
+           [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+           [ "local_time",   \&time_set_local_time ],
++              [ "sync_now",     \&time_set_sync_now ],
+           [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+           [ "sync_active",  \&gst_service_suse_set_status, "xntpd" ],
+          ]
+@@ -963,6 +1113,7 @@
+              [
+               [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+               [ "local_time",   \&gst_replace_join_all, NTP_CONF, "server", "[ \t]+" ],
++              [ "sync_now",     \&time_set_sync_now ],
+               [ "sync_active",  \&gst_service_sysv_set_status, 90, "ntpd", "%sync_active%" ],
+               ]
+         },
+@@ -979,6 +1130,7 @@
+          [
+           [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+           [ "local_time",   \&time_set_local_time ],
++          [ "sync_now",     \&time_set_sync_now ],
+           [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+           [ "sync_active",  \&gst_service_gentoo_set_status, "ntpd", 1, "%sync_active%" ],
+           ]
+@@ -996,10 +1148,48 @@
+          [
+           [ "timezone",     \&time_set_archlinux_zone, [LOCAL_TIME, ZONEINFO] ],
+           [ "local_time",   \&time_set_local_time ],
++          [ "sync_now",     \&time_set_sync_now ],
+           [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+           [ "sync_active",  \&gst_service_archlinux_set_status, "ntpd", "%sync_active%" ],
+          ]
+        },
++
++       "nexenta" =>
++       {
++         fn =>
++         {
++           NTP_CONF     => "/etc/inet/ntp.conf",
++           ZONEINFO     => "/usr/share/lib/zoneinfo",
++           LOCAL_TIME    => "/etc/localtime"
++         },
++         table =>
++         [
++          [ "timezone",     \&time_set_sunos_zone, [LOCAL_TIME, ZONEINFO] ],
++          [ "local_time",   \&time_set_local_time ],
++          [ "sync_now",     \&time_set_sync_now ],
++          [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
++          [ "sync_active",  \&gst_service_smf_set_status, "network/ntp", "%sync_active%" ],
++          ]
++        },
++
++       "solaris" =>
++       {
++         fn =>
++         {
++           NTP_CONF     => "/etc/inet/ntp.conf",
++           ZONEINFO     => "/usr/share/lib/zoneinfo",
++           LOCAL_TIME    => "/etc/localtime"
++         },
++         table =>
++         [
++          [ "timezone",     \&time_set_sunos_zone, [LOCAL_TIME, ZONEINFO] ],
++          [ "local_time",   \&time_set_local_time ],
++          [ "sync_now",     \&time_set_sync_now ],
++          [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
++          [ "sync_active",  \&gst_service_smf_set_status, "network/ntp", "%sync_active%" ],
++          ]
++        },
++
+        
+        "freebsd-5" =>
+        {
+@@ -1013,6 +1203,7 @@
+          [
+           [ "timezone",     \&time_set_rh62_zone, [LOCAL_TIME, ZONEINFO] ],
+           [ "local_time",   \&time_set_local_time ],
++          [ "sync_now",     \&time_set_sync_now ],
+           [ "sync",         \&time_replace_ntp_servers, NTP_CONF, "server", "[ \t]+" ],
+           [ "sync_active",  \&gst_service_rcng_set_status, "ntpd", "%sync_active%" ],
+           ]
+