[X2Go-Commits] [x2goserver] 80/99: x2goserver/bin/x2goupdateoptionsstring: actually implement extraction mode.

git-admin at x2go.org git-admin at x2go.org
Mon Dec 28 06:10:52 CET 2020


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goserver.

commit 1eb1ca4ffaeb6becf9c150fada11fb6f191b58b2
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Sun Nov 29 16:03:11 2020 +0100

    x2goserver/bin/x2goupdateoptionsstring: actually implement extraction mode.
---
 debian/changelog                       |  2 +
 x2goserver/bin/x2goupdateoptionsstring | 85 ++++++++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index c2e44815..b8ea67d2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -350,6 +350,8 @@ x2goserver (4.1.0.4-0x2go1.2) UNRELEASED; urgency=medium
       extract key-value pairs. This one will be exportable, too. Documentation
       to be done.
     - x2goserver/bin/x2goupdateoptionsstring: correctly use MIME::Base64.
+    - x2goserver/bin/x2goupdateoptionsstring: actually implement extraction
+      mode.
   * debian/control:
     + Build-depend upon lsb-release for distro version detection.
   * debian/x2goserver.manpages:
diff --git a/x2goserver/bin/x2goupdateoptionsstring b/x2goserver/bin/x2goupdateoptionsstring
index e29e44e7..1c5d6dd0 100755
--- a/x2goserver/bin/x2goupdateoptionsstring
+++ b/x2goserver/bin/x2goupdateoptionsstring
@@ -410,6 +410,91 @@ sub apply_transformation {
   return $ret;
 }
 
+# Helper function extracting a key-value pair from an intermediate options
+# string.
+#
+# Takes an intermediate options string, a key-value pair as a plain string to
+# search for and a boolean value indicating whether debugging is turned on or
+# off as its parameters.
+#
+# The provided key-value pair can actually either be a sole key, which is
+# useful for checking if such a key exists and extracting its value, or a
+# proper key-value pair with both components set, which can be used for
+# checking for exactly this combination.
+#
+# Returns the extracted key-value pair as included in the intermediate options
+# string as a plain string, or alternatively an empty string if the key-value
+# pair was not found.
+#
+# On error, returns undef.
+sub extract_data {
+  my $ret = undef;
+  my $error_detected = 0;
+
+  my $intermediate = shift;
+  my $kv = shift;
+  my $debug = shift;
+
+  if (!(defined ($intermediate))) {
+    print {*STDERR} "Invalid intermediate argument passed to extraction helper, erroring out.\n";
+    $error_detected = 1;
+  }
+
+  if ((!($error_detected)) && (!(defined ($kv)))) {
+    print {*STDERR} "Invalid key-value pair argument passed to extraction helper, erroring out.\n";
+    $error_detected = 1;
+  }
+
+  if ((!($error_detected)) && (!(defined ($debug)))) {
+    print {*STDERR} "Invalid debug argument passed to extraction helper, erroring out.\n";
+    $error_detected = 1;
+  }
+
+  if (!($error_detected)) {
+    if ($debug) {
+      print {*STDERR} 'Processing option to extract \'' . $kv . "'\n";
+    }
+
+    my $result = X2Go::Server::Agent::NX::Options::extract_element ($intermediate, $kv);
+
+    print {*STDERR} 'Dumping returned value, length ' . scalar (@{$result}) . ': ' . Dumper ($result);
+
+    if (!(defined ($result))) {
+      print {*STDERR} "Unable to extract element, erroring out.\n";
+      $error_detected = 1;
+    }
+    elsif (1 < scalar (@{$result})) {
+      print {*STDERR} "More than one element returned during extraction, this is supposed to be impossible due to compaction.\n";
+      $error_detected = 1;
+
+      if ($debug) {
+        print {*STDERR} 'Dumping returned value, length ' . scalar (@{$result}) . ': ' . Dumper ($result);
+      }
+    }
+    elsif (0 == scalar (@{$result})) {
+      # No such combination found, this is fine.
+      # Return empty string.
+      $ret = q{};
+    }
+    else {
+      # Everything went fine, go ahead and create the resulting string.
+      foreach my $entry (@{$result}) {
+        foreach my $key (keys (%{$entry})) {
+          $ret = $key;
+
+          my $value = $entry->{$key};
+
+          if (defined ($value)) {
+            $ret .= '=' . $value;
+          }
+        }
+      }
+    }
+  }
+
+  return $ret;
+}
+
 # Main function, no code outside of it shall be executed.
 #
 # Expects @ARGV to be passed in.

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git


More information about the x2go-commits mailing list