patches/system-tools-backends-05-services.diff
changeset 7099 96d4c17d4d4b
parent 7085 677b18c80bd7
--- a/patches/system-tools-backends-05-services.diff	Wed Apr 19 12:32:00 2006 +0000
+++ b/patches/system-tools-backends-05-services.diff	Wed Apr 19 14:44:04 2006 +0000
@@ -32,431 +32,3 @@
    &gst_xml_print_line ("<runlevels>");
    &gst_xml_enter ();
  
-diff -ru /var/tmp/clean/system-tools-backends-1.4.2/share.pl.in system-tools-backends-1.4.2/share.pl.in
---- /var/tmp/clean/system-tools-backends-1.4.2/share.pl.in	2005-02-25 14:15:34.000000000 +0000
-+++ system-tools-backends-1.4.2/share.pl.in	2006-03-13 10:14:56.155671000 +0000
-@@ -202,6 +202,16 @@
-   }
- }
- 
-+sub gst_share_nfs_info_get_name
-+{
-+  return $_[0]->{'name'};
-+}
-+
-+sub gst_share_nfs_info_set_name
-+{
-+  &gst_share_nfs_info_set ($_[0], 'name', $_[1]);
-+}
-+
- sub gst_share_nfs_info_get_point
- {
-   return $_[0]->{'point'};
-@@ -397,6 +407,52 @@
-   return $table;
- }
- 
-+sub gst_share_dfstab_list
-+{
-+  my ($file) = @_;
-+  my $lnum = 0;
-+  my @rv;
-+
-+  # dfstab example:
-+  #
-+  #       share [-F fstype] [-o fs_options ] [-d description] [pathname [resourcename]]
-+  #       .e.g,
-+  #       share  -F nfs  -o rw=engineering  -d "home dirs"  /export/home2
-+  my $fd = &gst_file_open_read_from_names ($file);
-+  return @rv if !$fd;
-+
-+  while (<$fd>) {
-+    s/\r|\n//g; s/#.*$//;
-+    if (/^\s*\S*share\s+(.*)/) {
-+      # Found a share line
-+      my $share = { 'line' => $lnum,
-+                    'index' => scalar(@rv) };
-+      my $line = $1;
-+      while($line =~ /\\$/) {
-+        $_ = <$fd>;
-+        s/\r|\n//g; s/#.*$//;
-+        $line =~ s/\\$//;
-+        $line .= $_;
-+        $lnum++;
-+      }
-+      $share->{'eline'} = $lnum;
-+      if ($line =~ /\s+(\/\S+)/ || $line =~ /\s+(\/)/ || $line eq "/") { $share->{'dir'} = $1; }
-+      if ($line =~ /-d\s+"([^"]+)"/) { $share->{'desc'} = $1; }
-+      elsif ($line =~ /-d\s+(\S+)/) { $share->{'desc'} = $1; }
-+      if ($line =~ /-o\s+"([^"]+)"/) { $share->{'opts'} = $1; }
-+      elsif ($line =~ /-o\s+(\S+)/) { $share->{'opts'} = $1; }
-+      if ($line =~ /\s-F\s+(\S+)/) { $share->{'type'} = $1; }
-+      else { $share->{'type'} = "nfs"; }
-+      $share->{'desc'} =~ s/"//g; $share->{'desc'} =~ s/'//g;
-+      push(@rv, $share);
-+    }
-+    $lnum++;
-+  }
-+  &gst_file_close ($fd);
-+
-+  return @rv;
-+}
-+
- sub gst_share_parse_nfs_exports
- {
-   my ($nfs_exports_name) = @_;
-@@ -405,43 +461,82 @@
- 
-   $table = &gst_share_nfs_table_new ();
- 
--  $entries = &gst_parse_split_hash_with_continuation ($nfs_exports_name, "[ \t]+", "[ \t]+");
-+  if ($$tool{"system"} eq "SunOS") {
-+    foreach $share (&gst_share_dfstab_list($file)) {
-+      if ($share->{'type'} eq "nfs") {
-+        my $info = &gst_share_nfs_info_new ();
-+        my $client_table = &gst_share_nfs_client_table_new ();
-+
-+        &gst_share_nfs_info_set_point ($info, $share->{'dir'});
-+        &gst_share_nfs_info_set_name ($info, $share->{'desc'});
-+
-+        # Parse a mount options string like rw=foo,nosuid,...
-+        # Parts with no value are given an empty string as the value
-+        foreach my $opt (split(/,/, $share->{'opts'})) {
-+          if ($opt =~ /^([^=]+)=(.*)$/) {
-+            my $cinfo = &gst_share_nfs_client_info_new ();
-+            my $pattern;
-+            my $access = $1;
-+            my $client = $2;
-+
-+            $client =~ /^([a-zA-Z0-9.-_*?@\/]+)/;
-+            $pattern = $1;
-+            $pattern = "0.0.0.0/0" if $pattern eq "";
-+            &gst_share_nfs_client_info_set_pattern ($cinfo, $pattern);
-+
-+            if ($access eq "rw" || $access eq "root") {
-+              &gst_share_nfs_client_info_set_write ($cinfo, 1);
-+            }
-+
-+            &gst_share_nfs_client_table_add ($client_table, $cinfo);
-+          } else {
-+            $clients{$opt} = "";
-+          }
-+        }
- 
--  foreach $point (keys %$entries)
--  {
--    my $clients = $$entries{$point};
--    my $info = &gst_share_nfs_info_new ();
--    my $client_table = &gst_share_nfs_client_table_new ();
--
--    &gst_share_nfs_info_set_point ($info, $point);
--
--    foreach $client (@$clients)
-+        &gst_share_nfs_info_set_client_table ($info, $client_table);
-+        &gst_share_nfs_table_add ($table, $info);
-+      }
-+    }
-+  } else {
-+    $entries = &gst_parse_split_hash_with_continuation ($nfs_exports_name, "[ \t]+", "[ \t]+");
-+  
-+    foreach $point (keys %$entries)
-     {
--      my $cinfo = &gst_share_nfs_client_info_new ();
--      my $pattern;
--
--      $client =~ /^([a-zA-Z0-9.-_*?@\/]+)/;
--      $pattern = $1;
--      $pattern = "0.0.0.0/0" if $pattern eq "";
--      &gst_share_nfs_client_info_set_pattern ($cinfo, $pattern);
--
--      my $option_str = "";
--      my @options;
--
--      if ($client =~ /\((.+)\)/) { $option_str = $1; }
--      @options = ($option_str =~ /([a-zA-Z0-9_=-]+),?/mg);
--
--      for $option (@options)
-+      my $clients = $$entries{$point};
-+      my $info = &gst_share_nfs_info_new ();
-+      my $client_table = &gst_share_nfs_client_table_new ();
-+  
-+      &gst_share_nfs_info_set_point ($info, $point);
-+  
-+      foreach $client (@$clients)
-       {
--        if ($option eq "rw") { &gst_share_nfs_client_info_set_write ($cinfo, 1); }
--        # Add supported NFS export options here. Some might have to be split on '='.
-+        my $cinfo = &gst_share_nfs_client_info_new ();
-+        my $pattern;
-+  
-+        $client =~ /^([a-zA-Z0-9.-_*?@\/]+)/;
-+        $pattern = $1;
-+        $pattern = "0.0.0.0/0" if $pattern eq "";
-+        &gst_share_nfs_client_info_set_pattern ($cinfo, $pattern);
-+  
-+        my $option_str = "";
-+        my @options;
-+  
-+        if ($client =~ /\((.+)\)/) { $option_str = $1; }
-+        @options = ($option_str =~ /([a-zA-Z0-9_=-]+),?/mg);
-+  
-+        for $option (@options)
-+        {
-+          if ($option eq "rw") { &gst_share_nfs_client_info_set_write ($cinfo, 1); }
-+          # Add supported NFS export options here. Some might have to be split on '='.
-+        }
-+  
-+        &gst_share_nfs_client_table_add ($client_table, $cinfo);
-       }
--
--      &gst_share_nfs_client_table_add ($client_table, $cinfo);
-+  
-+      &gst_share_nfs_info_set_client_table ($info, $client_table);
-+      &gst_share_nfs_table_add ($table, $info);
-     }
--
--    &gst_share_nfs_info_set_client_table ($info, $client_table);
--    &gst_share_nfs_table_add ($table, $info);
-   }
- 
-   return $table;
-@@ -495,11 +590,27 @@
-   {
-     # Each line is in the following format:
-     # <point> <clients>
--    my @line = split /[ \t]+/, $_;
--    if ($line[0] eq "") { shift @line; }
--    if (@line < 1 || &gst_ignore_line (@line)) { print $outfd $_; next; }
--
--    return $_;
-+    if ($$tool{"system"} eq "SunOS") {
-+      if (&gst_ignore_line($_)) { print $outfd $_; next; }
-+      if (/^\s*\S*share\s+(.*)/) {
-+	my $point, $type;
-+        my $line = $1;
-+        while($line =~ /\\$/) {
-+          $_ = <$infd>;
-+          s/\r|\n//g; s/#.*$//;
-+          $line =~ s/\\$//;
-+          $line .= $_;
-+        }
-+        if ($line =~ /\s-F\s+(\S+)/) { $type = $1; }
-+        else { $type = "nfs"; }
-+	return "share $line\n" if ($type eq "nfs");
-+      }
-+    } else {
-+      my @line = split /[ \t]+/, $_;
-+      if ($line[0] eq "") { shift @line; }
-+      if (@line < 1 || &gst_ignore_line (@line)) { print $outfd $_; next; }
-+      return $_;
-+    }
-   }
- 
-   return undef;
-@@ -528,9 +639,20 @@
- 
-   for $client (@$clients)
-   {
--    $line .= &gst_share_nfs_client_info_get_pattern ($client);
--    $line .= "(rw)" if (&gst_share_nfs_client_info_get_write ($client));
--    $line .= " ";
-+    if ($$tool{"system"} eq "SunOS") {
-+      if (&gst_share_nfs_client_info_get_pattern ($client) ne "") {
-+        $line .= "," if (!$first);
-+        if (&gst_share_nfs_client_info_get_write ($client)) { $line .= "rw="; 
-+      }
-+      else { $line .= "ro="; }
-+        $line .= &gst_share_nfs_client_info_get_pattern ($client);
-+      }
-+      $first = 0;
-+    } else {
-+      $line .= &gst_share_nfs_client_info_get_pattern ($client);
-+      $line .= "(rw)" if (&gst_share_nfs_client_info_get_write ($client));
-+      $line .= " ";
-+    }
-   }
- 
-   return $line;
-@@ -541,13 +663,19 @@
-   my ($info) = @_;
-   my $line;
- 
--  # <point>
--
--  $line = sprintf ("%-15s ", &gst_share_nfs_info_get_point ($info));
--
--  # <clients>
--
--  $line .= &gst_share_nfs_info_print_clients ($info);
-+  if ($$tool{"system"} eq "SunOS") {
-+    $line = "share -F nfs ";
-+    $line .= sprintf ("-o %s ", &gst_share_nfs_info_print_clients ($info))
-+            if (&gst_share_nfs_info_print_clients ($info));
-+    $line .= sprintf ("-d %s ", &gst_share_nfs_info_get_name ($info))
-+	    if (&gst_share_nfs_info_get_name ($info));
-+    $line .= sprintf ("%-15s ", &gst_share_nfs_info_get_point ($info));
-+  } else {
-+    # <point>
-+    $line = sprintf ("%-15s ", &gst_share_nfs_info_get_point ($info));
-+    # <clients>
-+    $line .= &gst_share_nfs_info_print_clients ($info);
-+  }
- 
-   return $line;
- }
-@@ -583,66 +711,75 @@
-   my $outline;
-   my $ctable = &gst_share_nfs_info_get_client_table ($info);
- 
--  # <point>
--
--  $outline = sprintf ("%-15s", &gst_share_nfs_info_get_point ($info));
--
--  # <clients>
--
--  chomp $line;
--  my @clients = split /[ \t]+/, $line;
--  shift @clients;
--
--  # Make client hash based on line.
--
--  my $chash = { };
--
--  for $client (@clients)
--  {
--    my $opthash = { };
--
--    $client =~ /^([a-zA-Z0-9.-_*?@\/]+)/;
--    my $pattern = $1;
--    $$chash{$pattern} = $opthash;
--
--    my $option_str = "";
--    if ($client =~ /\((.+)\)/) { $option_str = $1; }
--    @options = ($option_str =~ /([a-zA-Z0-9_=-]+),?/mg);
--
--    for $option (@options)
--    {
--      my ($key, $value) = split /[=]/, $option;
--      next if ($key eq "");
--
--      if ($value eq "" && $option =~ /=/) { $value = " "; }
--      $$opthash{$key} = $value;
--    }
--  }
--
--  # @clients contains client(options) entries.
--
--  for $cinfo (@$ctable)
--  {
--    my $pattern = &gst_share_nfs_client_info_get_pattern ($cinfo);
--    my $opthash = $$chash{$pattern};
--
--    if (&gst_share_nfs_client_info_get_write ($cinfo))
--    {
--      $$opthash{'rw'} = "";
--    }
--    else
-+  if ($$tool{"system"} eq "SunOS") {
-+    my $desc = "unknown";
-+    if ($line =~ /-d\s+"([^"]+)"/) { $desc = $1; }
-+    elsif ($line =~ /-d\s+(\S+)/) { $desc = $1; }
-+    $desc =~ s/"//g; $desc =~ s/'//g;
-+    &gst_share_nfs_info_set_name ($info, $desc);
-+    $outline = &gst_share_nfs_info_print_entry ($info);
-+  } else {
-+    # <point>
-+  
-+    $outline = sprintf ("%-15s", &gst_share_nfs_info_get_point ($info));
-+  
-+    # <clients>
-+  
-+    chomp $line;
-+    my @clients = split /[ \t]+/, $line;
-+    shift @clients;
-+  
-+    # Make client hash based on line.
-+  
-+    my $chash = { };
-+  
-+    for $client (@clients)
-     {
--      delete $$opthash{'rw'};
-+      my $opthash = { };
-+  
-+      $client =~ /^([a-zA-Z0-9.-_*?@\/]+)/;
-+      my $pattern = $1;
-+      $$chash{$pattern} = $opthash;
-+  
-+      my $option_str = "";
-+      if ($client =~ /\((.+)\)/) { $option_str = $1; }
-+      @options = ($option_str =~ /([a-zA-Z0-9_=-]+),?/mg);
-+  
-+      for $option (@options)
-+      {
-+        my ($key, $value) = split /[=]/, $option;
-+        next if ($key eq "");
-+  
-+        if ($value eq "" && $option =~ /=/) { $value = " "; }
-+        $$opthash{$key} = $value;
-+      }
-     }
--
--    $outline .= " " . &gst_share_nfs_client_info_get_pattern ($cinfo);
--    my $client_string = &gst_share_nfs_client_print_option_hash ($opthash);
--    if ($client_string ne "")
-+  
-+    # @clients contains client(options) entries.
-+  
-+    for $cinfo (@$ctable)
-     {
--      $outline .= "(" . $client_string . ")";
-+      my $pattern = &gst_share_nfs_client_info_get_pattern ($cinfo);
-+      my $opthash = $$chash{$pattern};
-+  
-+      if (&gst_share_nfs_client_info_get_write ($cinfo))
-+      {
-+        $$opthash{'rw'} = "";
-+      }
-+      else
-+      {
-+        delete $$opthash{'rw'};
-+      }
-+  
-+      $outline .= " " . &gst_share_nfs_client_info_get_pattern ($cinfo);
-+      my $client_string = &gst_share_nfs_client_print_option_hash ($opthash);
-+      if ($client_string ne "")
-+      {
-+        $outline .= "(" . $client_string . ")";
-+      }
-     }
-   }
--
-+  
-   return $outline;
- }
- 
-@@ -719,7 +856,11 @@
-   my ($line) = @_;
-   my $point;
- 
--  ($point) = split /[ \t]+/, $line;
-+  if ($$tool{"system"} eq "SunOS") {
-+    if ($line =~ /\s+(\/\S+)/ || $line =~ /\s+(\/)/ || $line eq "/") { $point = $1; }
-+  } else {
-+    ($point) = split /[ \t]+/, $line;
-+  }
-   return $point;
- }
- 
-@@ -752,6 +893,11 @@
-       &gst_share_nfs_exports_remove_entry ($file, $old_info);
-     }
-   } 
-+
-+  if ($$tool{"system"} eq "SunOS") {
-+    &gst_file_run ("unshareall");
-+    &gst_file_run ("/bin/sh $file");
-+  }
- }
- 
-