From 82a6c2ce20892ce1d74d68420b035b06fff2e7b1 Mon Sep 17 00:00:00 2001 From: carlosg Date: Fri, 21 Oct 2005 21:35:21 +0000 Subject: 2005-10-21 Carlos Garnacho Parro * HostsConfig.pm, Network/Hosts.pm: Implemented set() methods * NTPConfig.pm, Time/NTP.pm: ditto * TimeConfig.pm, Time/TimeDate.pm: ditto * SMBConfig.pm: monitor SMB config files * ServicesConfig.pm, Init/Services.pm: added runlevel roles, plus default runlevel * TODO: updated --- ChangeLog | 10 ++ HostsConfig.pm | 9 ++ Init/Services.pm | 120 +++++++++++++++++- NTPConfig.pm | 10 +- Network/Hosts.pm | 28 ++++ SMBConfig.pm | 4 +- ServicesConfig.pm | 12 +- TODO | 4 +- Time/NTP.pm | 80 ++++++++++++ Time/TimeDate.pm | 372 +++++++++++++++++++++++++++++++----------------------- TimeConfig.pm | 8 ++ 11 files changed, 490 insertions(+), 167 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f831d2..7ddbf94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-10-21 Carlos Garnacho Parro + + * HostsConfig.pm, Network/Hosts.pm: Implemented set() methods + * NTPConfig.pm, Time/NTP.pm: ditto + * TimeConfig.pm, Time/TimeDate.pm: ditto + * SMBConfig.pm: monitor SMB config files + * ServicesConfig.pm, Init/Services.pm: added runlevel roles, plus + default runlevel + * TODO: updated + 2005-10-13 Carlos Garnacho Parro * SMBConfig.pm, Shares/SMB.pm: include share name in the provided diff --git a/HostsConfig.pm b/HostsConfig.pm index 6fa8a6d..05f38d9 100644 --- a/HostsConfig.pm +++ b/HostsConfig.pm @@ -59,4 +59,13 @@ sub get Network::Hosts::get_search_domains ()); } +sub set +{ + my ($self, @config) = @_; + + Network::Hosts::set ($config[0]); + Network::Hosts::set_dns ($config[1]); + Network::Hosts::set_search_domains ($config[2]); +} + 1; diff --git a/Init/Services.pm b/Init/Services.pm index 043a618..119cc8f 100644 --- a/Init/Services.pm +++ b/Init/Services.pm @@ -26,6 +26,122 @@ package Init::Services; use Init::ServicesList; +sub get_runlevel_roles +{ + my (%dist_map, %runlevels); + my ($desc, $distro); + + %dist_map = + ( + "redhat-5.2" => "redhat-5.2", + "redhat-6.0" => "redhat-5.2", + "redhat-6.1" => "redhat-5.2", + "redhat-6.2" => "redhat-5.2", + "redhat-7.0" => "redhat-5.2", + "redhat-7.1" => "redhat-5.2", + "redhat-7.2" => "redhat-5.2", + "redhat-7.3" => "redhat-5.2", + "redhat-8.0" => "redhat-5.2", + "redhat-9" => "redhat-5.2", + "openna-1.0" => "redhat-5.2", + + "mandrake-7.1" => "redhat-5.2", + "mandrake-7.2" => "redhat-5.2", + "mandrake-9.0" => "redhat-5.2", + "mandrake-9.1" => "redhat-5.2", + "mandrake-9.2" => "redhat-5.2", + "mandrake-10.0" => "redhat-5.2", + "mandrake-10.1" => "redhat-5.2", + + "blackpanther-4.0" => "redhat-5.2", + + "conectiva-9" => "redhat-5.2", + "conectiva-10" => "redhat-5.2", + + "debian-2.2" => "debian-2.2", + "debian-3.0" => "debian-2.2", + "debian-sarge" => "debian-2.2", + "ubuntu-5.04" => "debian-2.2", + + "suse-7.0" => "redhat-5.2", + "suse-9.0" => "redhat-5.2", + "suse-9.1" => "redhat-5.2", + + "turbolinux-7.0" => "redhat-5.2", + "pld-1.0" => "redhat-5.2", + "pld-1.1" => "redhat-5.2", + "pld-1.99" => "redhat-5.2", + "fedora-1" => "redhat-5.2", + "fedora-2" => "redhat-5.2", + "fedora-3" => "redhat-5.2", + + "specifix" => "redhat-5.2", + + "vine-3.0" => "redhat-5.2", + "vine-3.1" => "redhat-5.2", + + "slackware-9.1.0" => "slackware-9.1.0", + "slackware-10.0.0" => "slackware-9.1.0", + "slackware-10.1.0" => "slackware-9.1.0", + + "gentoo" => "gentoo", + "vlos-1.2" => "gentoo", + + "freebsd-5" => "freebsd-5", + "freebsd-6" => "freebsd-5", + ); + + %runlevels= + ( + "redhat-5.2" => [["0", "HALT" ], + ["1", "RECOVER" ], + ["2", "NONE" ], + ["3", "TEXT" ], + ["4", "NONE" ], + ["5", "GRAPHICAL" ], + ["6", "REBOOT" ]], + + "debian-2.2" => [["0", "HALT" ], + ["1", "RECOVER" ], + ["2", "NONE" ], + ["3", "NONE" ], + ["4", "NONE" ], + ["5", "NONE" ], + ["6", "REBOOT" ]], + + "gentoo" => [["boot", "BOOT" ], + ["default", "GRAPHICAL" ], + ["nonetwork", "RECOVER" ]], + + "freebsd-5" => [["default", "GRAPHICAL" ]], + + "slackware-9.1.0" => [["default", "GRAPHICAL" ]] + ); + + $distro = $dist_map{$Utils::Backend::tool{"platform"}}; + $desc = $runlevels{$distro}; + + return $desc; +} + +# This function gets the runlevel that is in use +sub get_sysv_default_runlevel +{ + my (@arr); + @arr = split / /, `/sbin/runlevel` ; + chomp $arr[1]; + + return $arr[1]; +} + +sub get_default_runlevel +{ + my $type = &get_init_type (); + + return "default" if ($type eq "gentoo" || $type eq "rcng" || $type eq "bsd"); + return &get_sysv_default_runlevel (); +} + sub get_sysv_paths { my %dist_map = @@ -543,12 +659,12 @@ sub get_rcng_service_info if (gst_service_rcng_status_by_service ($service)) { - push @arr, { "name" => "rc", + push @arr, { "name" => "default", "action" => "start" }; } else { - push @arr, { "name" => "rc", + push @arr, { "name" => "default", "action" => "stop" }; } diff --git a/NTPConfig.pm b/NTPConfig.pm index d5b4e4f..ba9ec57 100644 --- a/NTPConfig.pm +++ b/NTPConfig.pm @@ -45,13 +45,21 @@ sub new } dbus_method ("get", [], [[ "array", "string" ]]); +dbus_method ("set", [[ "array", "string" ]], []); dbus_signal ("changed", []); sub get { my ($self) = @_; - return Time::NTP::get (); + return &Time::NTP::get (); +} + +sub set +{ + my ($self, @config) = @_; + + &Time::NTP::set (@config); } 1; diff --git a/Network/Hosts.pm b/Network/Hosts.pm index 41babc9..9525e09 100644 --- a/Network/Hosts.pm +++ b/Network/Hosts.pm @@ -55,4 +55,32 @@ sub get_search_domains return @search_domains; } +sub set +{ + my (@config) = @_; + my ($i, %hash); + + foreach $i (@config) + { + $hash{$i[0]} = $i[1]; + } + + return &Utils::Parse::split_hash ("/etc/hosts", "[ \t]+", "[ \t]+", %hash); +} + +sub set_dns +{ + my (@dns) = @_; + + return &Utils::Parse::split_all_unique_hash_comment ("/etc/resolv.conf", "nameserver", "[ \t]+", @dns); +} + +sub set_search_domains +{ + my (@search_domains) = @_; + + return &Utils::Parse::split_first_array_unique ("/etc/resolv.conf", "search", + "[ \t]+", "[ \t]+", @search_domains); +} + 1; diff --git a/SMBConfig.pm b/SMBConfig.pm index 3f375cf..fe0c3ee 100644 --- a/SMBConfig.pm +++ b/SMBConfig.pm @@ -37,8 +37,8 @@ sub new bless $self, $class; -# Utils::Monitor::monitor_files (&Shares::SMB::get_distro_smb_file (), -# $self, $OBJECT_NAME, "changed"); + Utils::Monitor::monitor_files (&Shares::SMB::get_distro_smb_file (), + $self, $OBJECT_NAME, "changed"); return $self; } diff --git a/ServicesConfig.pm b/ServicesConfig.pm index 51b50e5..ba1ce69 100644 --- a/ServicesConfig.pm +++ b/ServicesConfig.pm @@ -43,17 +43,19 @@ sub new return $self; } -dbus_method ("get", [], [[ "array", [ "struct", "string", "string", [ "array", [ "struct", "string", "string", "int32" ]]]]]); +dbus_method ("get", [], + [[ "array", [ "struct", "string", "string" ]], + "string", + [ "array", [ "struct", "string", "string", [ "array", [ "struct", "string", "string", "int32" ]]]]]); dbus_signal ("changed", []); sub get { my ($self) = @_; - my ($config); - $config = &Init::Services::get (); - - return $config; + return (&Init::Services::get_runlevel_roles (), + &Init::Services::get_default_runlevel (), + &Init::Services::get ()); } 1; diff --git a/TODO b/TODO index 7a565fa..0b430af 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,6 @@ - Replace $$tool with $Utils::Backend::tool everywhere -- Add NFS to the SharesList object - keep refactoring the code (move *pl.in to *pm) -- add DBus objects for all the things that the backends manage - Handle supported platform validation +- Finish Internet::Iface +- Finish _set() in all objects diff --git a/Time/NTP.pm b/Time/NTP.pm index c58ef67..6907e2d 100644 --- a/Time/NTP.pm +++ b/Time/NTP.pm @@ -102,9 +102,89 @@ sub get_ntp_servers return &Utils::Parse::split_all_array_with_pos ($ntp_conf, "server", 0, "[ \t]+", "[ \t]+"); } +sub ntp_conf_replace +{ + my ($file, $key, $re, $value) = @_; + my ($fd, @line, @res); + my ($buff, $i); + my ($pre_space, $post_comment); + my ($line_key, $val, $rest); + my ($n, $ret); + + &Utils::Report::enter (); + &Utils::Report::do_report ("replace_split", $key, $file); + + $buff = &Utils::File::load_buffer ($file); + + foreach $i (@$buff) + { + $pre_space = $post_comment = ""; + + chomp $i; + + $pre_space = $1 if $i =~ s/^([ \t]+)//; + $post_comment = $1 if $i =~ s/([ \t]*\#.*)//; + + if ($i ne "") + { + @line = split ($re, $i, 3); + $line_key = shift (@line); + $val = shift (@line); + $rest = shift (@line); + + # found the key? + if ($line_key eq $key) + { + $n = 0; + + while (@$value[$n] && (@$value[$n] ne $val)) + { + $n++; + } + + if (@$value[$n] ne $val) + { + $i = ""; + next; + } + + delete @$value[$n]; + chomp $val; + $i = &Utils::Replace::set_value ($key, $val, $re) . " " . $rest; + } + } + + $i = $pre_space . $i . $post_comment . "\n"; + } + + foreach $i (@$value) + { + push (@$buff, &Utils::Replace::set_value ($key, $i, $re) . "\n") if ($i ne ""); + } + + &Utils::File::clean_buffer ($buff); + $ret = &Utils::File::save_buffer ($buff, $file); + &Utils::Report::leave (); + return $ret; +} + +sub set_ntp_servers +{ + my (@config) = @_; + my ($ntp_conf); + + $ntp_conf = &get_config_file (); + return &ntp_conf_replace ($ntp_conf, "server", "[ \t]+", @config); +} + sub get { return &get_ntp_servers (); } +sub set +{ + return &set_ntp_servers (@_); +} + 1; diff --git a/Time/TimeDate.pm b/Time/TimeDate.pm index c7d5f6a..439a6c8 100644 --- a/Time/TimeDate.pm +++ b/Time/TimeDate.pm @@ -25,6 +25,8 @@ package Time::TimeDate; +use File::Copy; + sub get_local_time { my (%h, $trash); @@ -38,6 +40,55 @@ sub get_local_time return \%h; } +# This function will force date format when setting time +sub change_timedate +{ + my ($time) = @_; + my ($command); + + my $system_table = { + "Linux" => "date %02d%02d%02d%02d%04d.%02d", + "FreeBSD" => "date -f %%m%%d%%H%%M%%Y.%%S %02d%02d%02d%02d%04d.%02d" + }; + + $command = sprintf ($$system_table {$Utils::Backend::tool{"system"}}, + $$time{"month"}, $$time{"monthday"}, + $$time{"hour"}, $$time{"minute"}, + $$time{"year"}, $$time{"second"}); + + &Utils::Report::do_report ("time_localtime_set", $command); + + return &Utils::File::run ($command); +} + +sub set_local_time +{ + my ($time) = @_; + my ($res, $xscreensaver_owners); + + &Utils::Report::enter (); + + # FIXME: restore this, take into account other screensavers + # Kill screensaver, so it doesn't confuse the users. +# $xscreensaver_owners = &gst_service_proc_get_owners ("xscreensaver"); +# &gst_service_proc_stop_all ("xscreensaver"); + + $res = &change_timedate ($time); + + # Restart screensaver. +# &gst_service_proc_start_all ("xscreensaver -no-splash", $xscreensaver_owners); + + &Utils::Report::leave (); + return -1 if $res; + return 0; +} + +sub time_sync_hw_from_sys +{ + &Utils::File::run ("hwclock --systohc"); + return 0; +} + sub get_timezone { my ($local_time_file, $zoneinfo_dir) = @_; @@ -82,6 +133,30 @@ sub get_timezone close (TZLIST); } +sub set_timezone +{ + my ($localtime, $zonebase, $timezone) = @_; + + &Utils::Report::enter (); + &Utils::Report::do_report ("time_timezone_set", $timezone); + + $tz = "$zonebase/$timezone"; + + if (stat($tz) ne "") + { + unlink $localtime; # Important, since it might be a symlink. + + &Utils::Report::enter (); + $res = copy ($tz, $localtime); + &Utils::Report::leave (); + return -1 unless $res; + return 0; + } + + &Utils::Report::leave (); + return -1; +} + sub conf_get_parse_table { my %dist_map = @@ -90,55 +165,55 @@ sub conf_get_parse_table "redhat-6.1" => "redhat-6.2", "redhat-6.2" => "redhat-6.2", - "redhat-7.0" => "redhat-7.0", - "redhat-7.1" => "redhat-7.0", - "redhat-7.2" => "redhat-7.0", - "redhat-7.3" => "redhat-7.0", - "redhat-8.0" => "redhat-7.0", - "redhat-9" => "redhat-7.0", - "openna-1.0" => "redhat-7.0", - - "mandrake-7.1" => "redhat-7.0", - "mandrake-7.2" => "redhat-7.0", - "mandrake-9.0" => "redhat-7.0", - "mandrake-9.1" => "redhat-7.0", - "mandrake-9.2" => "redhat-7.0", - "mandrake-10.0" => "redhat-7.0", - "mandrake-10.1" => "redhat-7.0", - - "debian-2.2" => "debian-2.2", + "redhat-7.0" => "redhat-6.2", + "redhat-7.1" => "redhat-6.2", + "redhat-7.2" => "redhat-6.2", + "redhat-7.3" => "redhat-6.2", + "redhat-8.0" => "redhat-6.2", + "redhat-9" => "redhat-6.2", + "openna-1.0" => "redhat-6.2", + + "mandrake-7.1" => "redhat-6.2", + "mandrake-7.2" => "redhat-6.2", + "mandrake-9.0" => "redhat-6.2", + "mandrake-9.1" => "redhat-6.2", + "mandrake-9.2" => "redhat-6.2", + "mandrake-10.0" => "redhat-6.2", + "mandrake-10.1" => "redhat-6.2", + + "debian-2.2" => "redhat-6.2", "debian-3.0" => "debian-3.0", "debian-sarge" => "debian-3.0", - "suse-7.0" => "suse-7.0", - "suse-9.0" => "suse-9.0", - "suse-9.1" => "suse-9.0", + "suse-7.0" => "redhat-6.2", + "suse-9.0" => "redhat-6.2", + "suse-9.1" => "redhat-6.2", - "turbolinux-7.0" => "redhat-7.0", + "turbolinux-7.0" => "redhat-6.2", - "slackware-8.0.0" => "debian-2.2", - "slackware-8.1" => "debian-2.2", - "slackware-9.0.0" => "debian-2.2", - "slackware-9.1.0" => "debian-2.2", - "slackware-10.0.0" => "debian-2.2", - "slackware-10.1.0" => "debian-2.2", - - "gentoo" => "gentoo", - - "pld-1.0" => "pld-1.0", - "pld-1.1" => "pld-1.0", - "pld-1.99" => "pld-1.0", - "fedora-1" => "redhat-7.0", - "fedora-2" => "redhat-7.0", - "fedora-3" => "redhat-7.0", + "slackware-8.0.0" => "redhat-6.2", + "slackware-8.1" => "redhat-6.2", + "slackware-9.0.0" => "redhat-6.2", + "slackware-9.1.0" => "redhat-6.2", + "slackware-10.0.0" => "redhat-6.2", + "slackware-10.1.0" => "redhat-6.2", + + "gentoo" => "redhat-6.2", + + "pld-1.0" => "redhat-6.2", + "pld-1.1" => "redhat-6.2", + "pld-1.99" => "redhat-6.2", + "fedora-1" => "redhat-6.2", + "fedora-2" => "redhat-6.2", + "fedora-3" => "redhat-6.2", - "specifix" => "redhat-7.0", + "specifix" => "redhat-6.2", - "vine-3.0" => "redhat-7.0", - "vine-3.1" => "redhat-7.0", + "vine-3.0" => "redhat-6.2", + "vine-3.1" => "redhat-6.2", - "freebsd-5" => "freebsd-5", - "freebsd-6" => "freebsd-5", + "freebsd-5" => "redhat-6.2", + "freebsd-6" => "redhat-6.2", ); my %dist_tables = @@ -147,162 +222,124 @@ sub conf_get_parse_table { fn => { - NTP_CONF => "/etc/ntp.conf", - STEP_TICKERS => "/etc/ntp/step-tickers", ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" + LOCAL_TIME => "/etc/localtime" }, table => [ [ "local_time", \&get_local_time ], [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "xntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "xntpd" ], ] }, - "redhat-7.0" => + "debian-3.0" => { fn => { - NTP_CONF => "/etc/ntp.conf", ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" + LOCAL_TIME => "/etc/localtime" }, table => [ [ "local_time", \&get_local_time ], [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "ntpd" ], ] }, + ); - "debian-2.2" => - { - fn => - { - NTP_CONF => "/etc/ntp.conf", - ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" - }, - table => - [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_first_array_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "ntp" ], - ] - }, + my $dist = $dist_map {$Utils::Backend::tool{"platform"}}; + return %{$dist_tables{$dist}} if $dist; - "debian-3.0" => - { - fn => - { - NTP_CONF => "/etc/ntp.conf", - ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" - }, - table => - [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "ntp-server" ], - ] - }, + &Utils::Report::do_report ("platform_no_table", $$tool{"platform"}); + return undef; +} - "suse-7.0" => - { - fn => - { - NTP_CONF => "/etc/ntp.conf", - ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" - }, - table => - [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "xntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "xntpd" ], - ] - }, +sub conf_get_replace_table +{ + my %dist_map = + ( + "redhat-6.0" => "redhat-6.2", + "redhat-6.1" => "redhat-6.2", + "redhat-6.2" => "redhat-6.2", + + "redhat-7.0" => "redhat-6.2", + "redhat-7.1" => "redhat-6.2", + "redhat-7.2" => "redhat-6.2", + "redhat-7.3" => "redhat-6.2", + "redhat-8.0" => "redhat-6.2", + "redhat-9" => "redhat-6.2", + "openna-1.0" => "redhat-6.2", + + "mandrake-7.1" => "redhat-6.2", + "mandrake-7.2" => "redhat-6.2", + "mandrake-9.0" => "redhat-6.2", + "mandrake-9.1" => "redhat-6.2", + "mandrake-9.2" => "redhat-6.2", + "mandrake-10.0" => "redhat-6.2", + "mandrake-10.1" => "redhat-6.2", + + "debian-2.2" => "redhat-6.2", + "debian-3.0" => "debian-3.0", + "debian-sarge" => "debian-3.0", - "suse-9.0" => - { - fn => - { - NTP_CONF => "/etc/ntp.conf", - ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" - }, - table => - [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_get_status, "xntpd" ], -# [ "ntpinstalled", \&gst_service_installed, "xntpd" ], - ] - }, + "suse-7.0" => "redhat-6.2", + "suse-9.0" => "redhat-6.2", + "suse-9.1" => "redhat-6.2", - "pld-1.0" => - { - fn => - { - NTP_CONF => "/etc/ntp/ntp.conf", - ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" - }, - table => - [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_sysv_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_sysv_installed, "ntpd" ], - ] - }, + "turbolinux-7.0" => "redhat-6.2", + + "slackware-8.0.0" => "redhat-6.2", + "slackware-9.0.0" => "redhat-6.2", + "slackware-9.1.0" => "redhat-6.2", + "slackware-10.0.0" => "redhat-6.2", + "slackware-10.1.0" => "redhat-6.2", + + "gentoo" => "redhat-6.2", + + "pld-1.0" => "redhat-6.2", + "pld-1.1" => "redhat-6.2", + "pld-1.99" => "redhat-6.2", + "fedora-1" => "redhat-6.2", + "fedora-2" => "redhat-6.2", + "fedora-3" => "redhat-6.2", + "specifix" => "redhat-6.2", + + "vine-3.0" => "redhat-6.2", + "vine-3.1" => "redhat-6.2", + + "freebsd-5" => "redhat-6.2", + "freebsd-6" => "redhat-6.2", + ); - "gentoo" => + my %dist_tables = + ( + "redhat-6.2" => { fn => { - NTP_CONF => "/etc/ntp.conf", ZONEINFO => "/usr/share/zoneinfo", LOCAL_TIME => "/etc/localtime" }, table => [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_gentoo_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_list_any_installed, [ "ntpd", "openntpd" ]], + [ "timezone", \&set_timezone, [LOCAL_TIME, ZONEINFO] ], + [ "local_time", \&set_local_time ], ] }, - - "freebsd-5" => + + "debian-3.0" => { fn => { - NTP_CONF => "/etc/ntp.conf", ZONEINFO => "/usr/share/zoneinfo", - LOCAL_TIME => "/etc/localtime" + LOCAL_TIME => "/etc/localtime", + TIMEZONE => "/etc/timezone" }, table => [ - [ "local_time", \&get_local_time ], - [ "timezone", \&get_timezone, [LOCAL_TIME, ZONEINFO] ], -# [ "sync", \&Utils::Parse::split_all_array_with_pos, NTP_CONF, "server", 0, "[ \t]+", "[ \t]+" ], -# [ "sync_active", \&gst_service_rcng_get_status, "ntpd" ], -# [ "ntpinstalled", \&gst_service_installed, "ntpd" ], + [ "timezone", \&set_timezone, [LOCAL_TIME, ZONEINFO] ], + [ "timezone", \&Utils::Replace::set_first_line, TIMEZONE ], + [ "local_time", \&set_local_time ], ] }, ); @@ -322,7 +359,7 @@ sub get %dist_attrib = &conf_get_parse_table (); $hash = &Utils::Parse::get_from_table ($dist_attrib{"fn"}, - $dist_attrib{"table"}); + $dist_attrib{"table"}); $h = $$hash {"local_time"}; return ($$h {"year"}, $$h {"month"}, $$h {"monthday"}, @@ -330,4 +367,29 @@ sub get $$hash{"timezone"}); } +sub set +{ + my (@config) = @_; + my ($hash, %localtime); + + %localtime = ( + "year" => $config[0], + "month" => $config[1], + "monthday" => $config[2], + "hour" => $config[3], + "minute" => $config[4], + "second" => $config[5] + ); + + $$hash{"local_time"} = \%localtime; + $$hash{"timezone"} = $config[6]; + + %dist_attrib = &conf_get_replace_table (); + + $res = &Utils::Replace::set_from_table ($dist_attrib{"fn"}, $dist_attrib{"table"}, $hash); + &time_sync_hw_from_sys (); + + return $res; +} + 1; diff --git a/TimeConfig.pm b/TimeConfig.pm index 53e074b..05d06e2 100644 --- a/TimeConfig.pm +++ b/TimeConfig.pm @@ -45,6 +45,7 @@ sub new } dbus_method ("get", [], [ "int32", "int32", "int32", "int32", "int32", "int32", "string" ]); +dbus_method ("set", [ "int32", "int32", "int32", "int32", "int32", "int32", "string" ], []); dbus_signal ("changed", []); sub get @@ -55,4 +56,11 @@ sub get return Time::TimeDate::get (); } +sub set +{ + my ($self, @config) = @_; + + Time::TimeDate::set (@config); +} + 1; -- cgit v1.2.3