diff -u system-tools-backends-1.4.2/services-conf.in-orig system-tools-backends-1.4.2/services-conf.in
--- system-tools-backends-1.4.2/services-conf.in-orig 2006-01-02 23:32:34.000000000 +0800
+++ system-tools-backends-1.4.2/services-conf.in 2007-11-14 16:37:05.174308000 +0800
@@ -35,7 +35,6 @@
require "$SCRIPTSDIR/general.pl$DOTIN";
require "$SCRIPTSDIR/platform.pl$DOTIN";
require "$SCRIPTSDIR/service.pl$DOTIN";
- require "$SCRIPTSDIR/print.pl$DOTIN";
}
# --- Tool information --- #
@@ -51,6 +50,7 @@
"debian-2.2", "debian-3.0", "debian-sarge",
+ "nexenta-1.0", "solaris-2.11",
"suse-7.0", "turbolinux-7.0", "fedora-1", "fedora-2", "fedora-3", "rpath",
"pld-1.0", "pld-1.1", "pld-1.99",
"slackware-9.1.0", "slackware-10.0.0", "slackware-10.1.0", "slackware-10.2.0",
@@ -91,6 +91,7 @@
{
if ($elem eq "runlevels") { $runlevel = &xml_parse_runlevel_list (shift @$tree)}
elsif ($elem eq "services") { push @$services, &xml_parse_service_list (shift @$tree); }
+ elsif ($elem eq "longname") { shift @$tree; }
else { &gst_report ("xml_unexp_tag", $elem); shift @$tree; }
}
@@ -173,6 +174,7 @@
elsif ($elem eq "role") { shift @$tree }
elsif ($elem eq "runlevels") { push @$runlevels, &xml_parse_runlevels (shift @$tree); }
elsif ($elem eq "script") { $$hash{"script"} = &gst_xml_get_pcdata (shift @$tree); }
+ elsif ($elem eq "longname") { shift @$tree; }
else { &gst_report ("xml_unexp_tag", $elem); shift @$tree; }
}
@@ -260,6 +262,7 @@
sub xml_print_runlevels
{
my ($h, $default) = @_;
+ &gst_xml_print_pcdata ("longname", $i);
&gst_xml_print_line ("<runlevels>");
&gst_xml_enter ();
diff -up system-tools-backends-1.4.2/service.pl.in-clean system-tools-backends-1.4.2/service.pl.in
--- system-tools-backends-1.4.2/service.pl.in-clean 2006-01-02 15:42:19.000000000 +0000
+++ system-tools-backends-1.4.2/service.pl.in 2008-03-05 14:00:46.119320000 +0000
@@ -85,6 +85,9 @@ sub gst_service_sysv_get_paths
"ubuntu-5.10" => ["$gst_prefix/etc", "$gst_prefix/etc/init.d", "../init.d"],
"ubuntu-6.04" => ["$gst_prefix/etc", "$gst_prefix/etc/init.d", "../init.d"],
+ "nexenta-1.0" => ["$gst_prefix/etc", "$gst_prefix/etc/init.d", "../init.d"],
+ "solaris-2.11" => ["$gst_prefix/etc", "$gst_prefix/etc/init.d", "../init.d"],
+
"suse-7.0" => ["$gst_prefix/etc/rc.d", "$gst_prefix/etc/rc.d", "../"],
"suse-9.0" => ["$gst_prefix/etc/init.d", "$gst_prefix/etc/init.d", "../"],
"suse-9.1" => ["$gst_prefix/etc/init.d", "$gst_prefix/etc/init.d", "../"],
@@ -154,6 +157,9 @@ sub gst_service_sysv_get_runlevels
"ubuntu-5.04" => [2, 3],
"ubuntu-5.10" => [2, 3],
"ubuntu-6.04" => [2, 3],
+
+ "nexenta-1.0" => [2, 3],
+ "solaris-2.11" => [2, 3],
"suse-7.0" => [3, 5],
"suse-9.0" => [3, 5],
@@ -223,6 +229,10 @@ sub gst_service_get_runlevel_roles
"ubuntu-5.04" => "debian-2.2",
"ubuntu-5.10" => "debian-2.2",
"ubuntu-6.04" => "debian-2.2",
+
+ "nexenta-1.0" => "nexenta",
+
+ "solaris-2.11" => "solaris",
"suse-7.0" => "redhat-5.2",
"suse-9.0" => "redhat-5.2",
@@ -277,6 +287,14 @@ sub gst_service_get_runlevel_roles
"default" => "GRAPHICAL",
"nonetwork" => "RECOVER"
},
+ "nexenta" => {"single-user" => "TEXT",
+ "multi-user" => "GRAPHICAL",
+ "none" => "RECOVER"
+ },
+ "solaris" => {"single-user" => "TEXT",
+ "multi-user" => "GRAPHICAL",
+ "none" => "RECOVER"
+ },
"freebsd-5" => {"rc" => "GRAPHICAL" },
"slackware-9.1.0" => {"4" => "GRAPHICAL" }
);
@@ -797,6 +815,159 @@ sub gst_service_bsd_get_services
return \%ret;
}
+sub gst_service_smf_service_exist
+{
+ my($service) = @_;
+ my($services) = &gst_service_smf_get_services_list();
+
+ foreach $i (@$services)
+ {
+ return 1 if ($i =~ /$service/);
+ }
+
+ return 0;
+}
+
+sub gst_service_smf_run_svcadm
+{
+ my ($service, $arg) = @_;
+ my ($option);
+
+ my %map =
+ ("stop" => "stopped",
+ "start" => "started"
+ );
+
+ my %op =
+ ("stop" => "disable",
+ "start" => "enable"
+ );
+
+ &gst_report_enter ();
+
+ if (!exists $map{$arg})
+ {
+ &gst_report ("service_sysv_op_unk", $arg);
+ &gst_report_leave ();
+ return -1;
+ }
+
+ if (&gst_service_smf_service_exist ($service))
+ {
+ if (!&gst_file_run ("svcadm $op{$arg} $service"))
+ {
+ &gst_report ("service_sysv_op_success", $service, $str);
+ &gst_report_leave ();
+ return 0;
+ }
+ }
+
+ &gst_report ("service_sysv_op_failed", $service, $str);
+ &gst_report_leave ();
+ return -1;
+}
+
+sub gst_service_smf_runlevel_status_by_service
+{
+ my ($service, $status) = @_;
+ my (@arr, @ret);
+ my (@runlevels) = split(" ","single-user multi-user");
+
+ foreach $runlevel (@runlevels)
+ {
+ if ($status)
+ {
+ push @arr, { "name" => $runlevel,
+ "action" => "start" };
+ }
+ else
+ {
+ push @arr, { "name" => $runlevel,
+ "action" => "stop" };
+ }
+ }
+
+ push @ret, { "runlevel" => \@arr };
+ return @ret;
+}
+
+sub gst_service_smf_get_service_info
+{
+ my ($service) = @_;
+ my ($script, @actions, @runlevels);
+ my %hash;
+ my $role;
+ my $status = 0;
+ my $longname = "";
+
+
+ return undef if (&gst_service_list_service_is_forbidden ($service));
+
+ my $fd = &gst_file_run_pipe_read ("svcs -l $service");
+ while (<$fd>) {
+ $status = 1 if (/^state.*online/);
+ $longname = $1 if (/^name\s*(.*)/);
+ }
+ gst_file_close ($fd);
+
+ my($runlevels) = &gst_service_smf_runlevel_status_by_service ($service, $status);
+
+ $hash{"script"} = $service;
+ $hash{"longname"} = $longname if ($longname);
+ $hash{"runlevels"} = $runlevels unless ($runlevels eq undef);
+ $role = &gst_service_get_role ($service);
+
+ if ($role eq "UNKNOWN") {
+ $role = "SYSTEM" if ($service =~ /^system\// || $service =~ /^platform\//);
+ $role = "NETWORK" if ($service =~ /^network\//);
+ $role = "NTP_SERVER" if ($service =~ /^network\/ntp/);
+ $role = "FILE_SERVER" if ($service =~ /^network\/nfs/);
+ $role = "DYNAMIC_DNS" if ($service =~ /^network\/dns/);
+ $role = "SYSTEM_LOGGER" if ($service =~ /^system\/system-log/);
+ $role = "MTA" if ($service =~ /^network\/smtp/);
+ $role = "PRINTER_SERVICE" if ($service =~ /^application\/print\/server/);
+ }
+
+ $hash{"role"} = $role;
+
+ return \%hash;
+}
+
+sub gst_service_smf_get_services_list
+{
+ my @list;
+ local *SVCS=gst_file_run_pipe_read("svcs -H -a");
+ while (<SVCS>) {
+ next if (/svc:\/milestone/);
+ if (/^.*\s*.*\s*svc:\/(.*):(.*)/) {
+ my $svcname = $1;
+ $svcname .= ":$2" if ( $2 ne "default" );
+
+ push(@list,$svcname);
+ }
+ }
+ close (SVCS);
+
+ return \@list;
+}
+
+sub gst_service_smf_get_services
+{
+ my ($service);
+ my (%ret);
+ my ($service_list) = &gst_service_smf_get_services_list ();
+
+ foreach $service (@$service_list)
+ {
+ my (%hash);
+ $hash = &gst_service_smf_get_service_info ($service);
+
+ $ret{$service} = $hash if ($hash ne undef);
+ }
+
+ return \%ret;
+}
+
# these functions get a list of the services that run on a gentoo init
sub gst_service_gentoo_get_service_status
{
@@ -1163,6 +1334,10 @@ sub gst_get_init_type
{
return "suse";
}
+ elsif ($gst_dist =~ /nexenta/ || $gst_dist =~ /solaris-2.11/)
+ {
+ return "smf";
+ }
else
{
return "sysv";
@@ -1180,6 +1355,8 @@ sub gst_service_get_services
return &gst_service_rcng_get_services () if ($type eq "rcng");
return &gst_service_suse_get_services () if ($type eq "suse");
return &gst_service_archlinux_get_services() if ($type eq "archlinux");
+ return &gst_service_smf_get_services () if ($type eq "smf");
+
return undef;
}
@@ -1199,7 +1376,7 @@ sub gst_service_get_default_runlevel
{
my ($type) = &gst_get_init_type ();
- return "default" if ($type eq "gentoo");
+ return "default" if ($type eq "gentoo" || $type eq "smf");
return "rc" if ($type eq "rcng");
return "rc" if ($type eq "archlinux");
return &gst_service_sysv_get_default_runlevel ();
@@ -1585,6 +1762,7 @@ sub gst_service_set_services
&gst_service_rcng_set_services ($services, $runlevel) if ($type eq "rcng");
&gst_service_suse_set_services ($services, $runlevel) if ($type eq "suse");
&gst_service_archlinux_set_services ($services, $runlevel) if ($type eq "archlinux");
+ &gst_service_smf_set_services ($services, $runlevel) if ($type eq "smf");
}
sub gst_service_set_conf
@@ -1632,6 +1810,47 @@ sub gst_service_debian_get_status
return undef;
}
+sub gst_service_smf_set_services
+{
+ my ($services, $runlevel) = @_;
+ my ($action);
+
+ foreach $service (@$services)
+ {
+ $script = $$service{"script"};
+ $arr = $$service{"runlevels"}[0]{"runlevel"};
+
+ foreach $i (@$arr)
+ {
+ $action = $$i{"action"};
+ $rl = $$i{"name"};
+
+ if ( $action eq "start")
+ {
+ &gst_file_run ("rc-update add $script $rl");
+ }
+ elsif ($action eq "stop")
+ {
+ &gst_file_run ("rc-update del $script $rl");
+ }
+ }
+ }
+}
+
+sub gst_service_smf_get_status
+{
+ my ($service) = @_;
+ my $ret = 0;
+ my $fd = &gst_file_run_pipe_read ("svcs -H -ostate $service");
+
+ while (<$fd>) {
+ if (/^online/) { $ret = 1; last; }
+ }
+ gst_file_close ($fd);
+
+ return $ret;
+}
+
sub gst_service_redhat_get_status
{
my ($service) = @_;
@@ -1697,6 +1916,9 @@ sub gst_service_get_status
"ubuntu-5.04" => \&gst_service_debian_get_status,
"ubuntu-5.10" => \&gst_service_debian_get_status,
"ubuntu-6.04" => \&gst_service_debian_get_status,
+
+ "nexenta-1.0" => \&gst_service_smf_get_status,
+ "solaris-2.11" => \&gst_service_smf_get_status,
"redhat-5.2" => \&gst_service_redhat_get_status,
"redhat-6.0" => \&gst_service_redhat_get_status,
@@ -1909,6 +2131,7 @@ sub gst_service_run_script
"rcng" => \&gst_service_rcng_run_script,
"suse" => \&gst_service_sysv_run_initd_script,
"archlinux" => \&gst_service_archlinux_run_script,
+ "smf" => \&gst_service_smf_run_svcadm,
);
$type = &gst_get_init_type ();
@@ -1964,6 +2187,14 @@ sub gst_service_rcng_installed
return 0;
}
+sub gst_service_smf_installed
+{
+ my ($service) = @_;
+
+ return 1 if (! &gst_file_run("svcs -H -ostate $service"));
+ return 0;
+}
+
sub gst_service_installed
{
my ($service) = @_;
@@ -1975,6 +2206,8 @@ sub gst_service_installed
return &gst_service_gentoo_installed ($service) if ($type eq "gentoo");
return &gst_service_rcng_installed ($service) if ($type eq "rcng");
return &gst_service_rcng_installed ($service) if ($type eq "archlinux");
+ return &gst_service_smf_installed ($service) if ($type eq "smf");
+
return 0;
}
@@ -2013,6 +2246,21 @@ sub gst_service_bsd_set_status
}
}
+sub gst_service_smf_set_status
+{
+ my ($service, $active) = @_;
+ my (@arr);
+
+ if ($active)
+ {
+ &gst_file_run ("svcadm enable $service");
+ }
+ else
+ {
+ &gst_file_run ("svcadm disable $service");
+ }
+}
+
sub gst_service_gentoo_set_status
{
my ($script, $force_now, $active) = @_;
diff -up system-tools-backends-1.4.2/service-list.pl.in-clean system-tools-backends-1.4.2/service-list.pl.in
--- system-tools-backends-1.4.2/service-list.pl.in-clean 2006-01-02 15:39:39.000000000 +0000
+++ system-tools-backends-1.4.2/service-list.pl.in 2008-03-05 14:00:30.285948000 +0000
@@ -82,7 +82,7 @@ sub gst_service_list_service_is_forbidde
"hostname",
"keymaps",
"localmount",
- "net\..*",
+ "net\\..*",
"numlock",
"depscan\.sh",
"functions\.sh",
@@ -145,6 +145,8 @@ sub gst_service_list_service_is_forbidde
"rc[sS0-9]\.d",
"boot",
"boot\..*",
+ # These are the services found in Solaris
+ "application\/graphical-login\/gdm",
];
foreach $i (@$service_forbidden_list)
@@ -328,10 +330,24 @@ sub gst_service_get_role
"zmailer" => "MTA",
);
- my ($role) = $service_roles{$script};
+ if ($gst_dist =~ /nexenta/ || $gst_dist =~ /solaris-2.11/) {
+ my $role;
- return $role if ($role);
- return "UNKNOWN";
+ foreach $key (keys %service_roles) {
+ if ( $script =~ /.*\b$key\b.*/ ) {
+ $role = $service_roles{$key};
+ last;
+ }
+ }
+ return $role if ($role);
+ return "UNKNOWN";
+ }
+ else {
+ my ($role) = $service_roles{$script};
+
+ return $role if ($role);
+ return "UNKNOWN";
+ }
}
1;