--- /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%" ],
+ ]
+