summaryrefslogtreecommitdiff
path: root/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
diff options
context:
space:
mode:
Diffstat (limited to '0027-generator-customize-Add-new-StringTriplet-for-use-by.patch')
-rw-r--r--0027-generator-customize-Add-new-StringTriplet-for-use-by.patch241
1 files changed, 241 insertions, 0 deletions
diff --git a/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch b/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
new file mode 100644
index 0000000..9389253
--- /dev/null
+++ b/0027-generator-customize-Add-new-StringTriplet-for-use-by.patch
@@ -0,0 +1,241 @@
+From 6e3d91681c7dffdfdf291a809d6773691a2a7bda Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Sat, 15 Jul 2023 16:33:18 +0100
+Subject: [PATCH] generator: customize: Add new StringTriplet for use by
+ --chown
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The just added --chown option previously used StringPair, splitting
+the argument as ‘UID.GID:FILENAME’. However this will not work if we
+ever extend this with the ability to use user or group names, since
+they may contain dot (but not colon). Add a new StringTriplet type
+and split the argument string three ways. The new option becomes:
+
+ virt-customize ... --chown UID:GID:FILENAME
+
+Include the following commit from the common submodule:
+
+ commit e70d89a58dae068be2e19c7c21558707261af96a
+ Author: Richard W.M. Jones <rjones@redhat.com>
+ Date: Sat Jul 15 16:42:06 2023 +0100
+
+ customize: Update generated files for --chown with StringTriplet
+
+Updates: commit d8e48bff212f9b0558480ffedf8158157360d0d5
+(cherry picked from commit c08032ebe2763f5e9ce5b14e003721475219d390)
+---
+ common | 2 +-
+ generator/customize.ml | 44 ++++++++++++++++++++++++++++++++----------
+ 2 files changed, 35 insertions(+), 11 deletions(-)
+
+Submodule common bbb54714..e70d89a5:
+diff --git a/common/mlcustomize/customize-options.pod b/common/mlcustomize/customize-options.pod
+index 22724600..e658a447 100644
+--- a/common/mlcustomize/customize-options.pod
++++ b/common/mlcustomize/customize-options.pod
+@@ -63,7 +63,7 @@ Change the permissions of C<FILE> to C<PERMISSIONS>.
+ I<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix
+ it with C<0> to get octal, ie. use C<0700> not C<700>.
+
+-=item B<--chown> UID.GID:PATH
++=item B<--chown> UID:GID:PATH
+
+ Change the owner user and group ID of a file or directory in the guest.
+ Note:
+@@ -83,7 +83,7 @@ This will not work with Windows guests.
+
+ For example:
+
+- virt-customize --chown '0.0:/var/log/audit.log'
++ virt-customize --chown '0:0:/var/log/audit.log'
+
+ See also: I<--upload>.
+
+diff --git a/common/mlcustomize/customize-synopsis.pod b/common/mlcustomize/customize-synopsis.pod
+index e20b12d4..5031b015 100644
+--- a/common/mlcustomize/customize-synopsis.pod
++++ b/common/mlcustomize/customize-synopsis.pod
+@@ -1,5 +1,5 @@
+ [--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
+- [--chown UID.GID:PATH] [--commands-from-file FILENAME]
++ [--chown UID:GID:PATH] [--commands-from-file FILENAME]
+ [--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
+ [--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
+ [--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
+diff --git a/common/mlcustomize/customize_cmdline.ml b/common/mlcustomize/customize_cmdline.ml
+index fd3074ad..3ce901db 100644
+--- a/common/mlcustomize/customize_cmdline.ml
++++ b/common/mlcustomize/customize_cmdline.ml
+@@ -41,8 +41,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
+- | `Chown of string * string
+- (* --chown UID.GID:PATH *)
++ | `Chown of string * string * string
++ (* --chown UID:GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+@@ -154,8 +154,13 @@ let rec argspec () =
+ option_name in
+ let len = String.length arg in
+ String.sub arg 0 i, String.sub arg (i+1) (len-(i+1))
+- in
+- let split_string_list arg =
++ and split_string_triplet option_name arg =
++ match String.nsplit ~max:3 "," arg with
++ | [a; b; c] -> a, b, c
++ | _ ->
++ error (f_"invalid format for '--%s' parameter, see the man page")
++ option_name
++ and split_string_list arg =
+ String.nsplit "," arg
+ in
+ let split_links_list option_name arg =
+@@ -192,14 +197,14 @@ let rec argspec () =
+ (
+ [ L"chown" ],
+ Getopt.String (
+- s_"UID.GID:PATH",
++ s_"UID:GID:PATH",
+ fun s ->
+- let p = split_string_pair "chown" s in
++ let p = split_string_triplet "chown" s in
+ List.push_front (`Chown p) ops
+ ),
+ s_"Change the owner user and group ID of a file or directory"
+ ),
+- Some "UID.GID:PATH", "Change the owner user and group ID of a file or directory in the guest.\nNote:\n\n=over 4\n\n=item *\n\nOnly numeric UIDs and GIDs will work, and these may not be the same\ninside the guest as on the host.\n\n=item *\n\nThis will not work with Windows guests.\n\n=back\n\nFor example:\n\n virt-customize --chown '0.0:/var/log/audit.log'\n\nSee also: I<--upload>.";
++ Some "UID:GID:PATH", "Change the owner user and group ID of a file or directory in the guest.\nNote:\n\n=over 4\n\n=item *\n\nOnly numeric UIDs and GIDs will work, and these may not be the same\ninside the guest as on the host.\n\n=item *\n\nThis will not work with Windows guests.\n\n=back\n\nFor example:\n\n virt-customize --chown '0:0:/var/log/audit.log'\n\nSee also: I<--upload>.";
+ (
+ [ L"commands-from-file" ],
+ Getopt.String (
+diff --git a/common/mlcustomize/customize_cmdline.mli b/common/mlcustomize/customize_cmdline.mli
+index 5883bbe0..112b74dc 100644
+--- a/common/mlcustomize/customize_cmdline.mli
++++ b/common/mlcustomize/customize_cmdline.mli
+@@ -33,8 +33,8 @@ and op = [
+ (* --append-line FILE:LINE *)
+ | `Chmod of string * string
+ (* --chmod PERMISSIONS:FILE *)
+- | `Chown of string * string
+- (* --chown UID.GID:PATH *)
++ | `Chown of string * string * string
++ (* --chown UID:GID:PATH *)
+ | `CommandsFromFile of string
+ (* --commands-from-file FILENAME *)
+ | `Copy of string * string
+diff --git a/generator/customize.ml b/generator/customize.ml
+index 8d3dec3e..fe87ef5e 100644
+--- a/generator/customize.ml
++++ b/generator/customize.ml
+@@ -41,6 +41,7 @@ and op_type =
+ | Unit (* no argument *)
+ | String of string (* string *)
+ | StringPair of string (* string:string *)
++| StringTriplet of string (* string:string:string *)
+ | StringList of string (* string,string,... *)
+ | TargetLinks of string (* target:link[:link...] *)
+ | PasswordSelector of string (* password selector *)
+@@ -96,7 +97,7 @@ it with C<0> to get octal, ie. use C<0700> not C<700>.";
+ };
+
+ { op_name = "chown";
+- op_type = StringPair "UID.GID:PATH";
++ op_type = StringTriplet "UID:GID:PATH";
+ op_discrim = "`Chown";
+ op_shortdesc = "Change the owner user and group ID of a file or directory";
+ op_pod_longdesc = "\
+@@ -118,7 +119,7 @@ This will not work with Windows guests.
+
+ For example:
+
+- virt-customize --chown '0.0:/var/log/audit.log'
++ virt-customize --chown '0:0:/var/log/audit.log'
+
+ See also: I<--upload>.";
+ };
+@@ -761,8 +762,13 @@ let rec argspec () =
+ option_name in
+ let len = String.length arg in
+ String.sub arg 0 i, String.sub arg (i+1) (len-(i+1))
+- in
+- let split_string_list arg =
++ and split_string_triplet option_name arg =
++ match String.nsplit ~max:3 \",\" arg with
++ | [a; b; c] -> a, b, c
++ | _ ->
++ error (f_\"invalid format for '--%%s' parameter, see the man page\")
++ option_name
++ and split_string_list arg =
+ String.nsplit \",\" arg
+ in
+ let split_links_list option_name arg =
+@@ -807,6 +813,19 @@ let rec argspec () =
+ pr " s_\"%s\"\n" shortdesc;
+ pr " ),\n";
+ pr " Some %S, %S;\n" v longdesc
++ | { op_type = StringTriplet v; op_name = name; op_discrim = discrim;
++ op_shortdesc = shortdesc; op_pod_longdesc = longdesc } ->
++ pr " (\n";
++ pr " [ L\"%s\" ],\n" name;
++ pr " Getopt.String (\n";
++ pr " s_\"%s\",\n" v;
++ pr " fun s ->\n";
++ pr " let p = split_string_triplet \"%s\" s in\n" name;
++ pr " List.push_front (%s p) ops\n" discrim;
++ pr " ),\n";
++ pr " s_\"%s\"\n" shortdesc;
++ pr " ),\n";
++ pr " Some %S, %S;\n" v longdesc
+ | { op_type = StringList v; op_name = name; op_discrim = discrim;
+ op_shortdesc = shortdesc; op_pod_longdesc = longdesc } ->
+ pr " (\n";
+@@ -956,6 +975,7 @@ let rec argspec () =
+ | { op_type = Unit; }
+ | { op_type = String _; }
+ | { op_type = StringPair _; }
++ | { op_type = StringTriplet _; }
+ | { op_type = StringList _; }
+ | { op_type = TargetLinks _; }
+ | { op_type = PasswordSelector _; }
+@@ -1021,6 +1041,10 @@ type ops = {
+ | { op_type = StringPair v; op_discrim = discrim;
+ op_name = name } ->
+ pr " | %s of string * string\n (* --%s %s *)\n" discrim name v
++ | { op_type = StringTriplet v; op_discrim = discrim;
++ op_name = name } ->
++ pr " | %s of string * string * string\n (* --%s %s *)\n"
++ discrim name v
+ | { op_type = StringList v; op_discrim = discrim;
+ op_name = name } ->
+ pr " | %s of string list\n (* --%s %s *)\n" discrim name v
+@@ -1073,9 +1097,9 @@ let generate_customize_synopsis_pod () =
+ function
+ | { op_type = Unit; op_name = n } ->
+ n, sprintf "[--%s]" n
+- | { op_type = String v | StringPair v | StringList v | TargetLinks v
+- | PasswordSelector v | UserPasswordSelector v | SSHKeySelector v
+- | StringFn (v, _) | SMPoolSelector v;
++ | { op_type = String v | StringPair v | StringTriplet v | StringList v
++ | TargetLinks v | PasswordSelector v | UserPasswordSelector v
++ | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v;
+ op_name = n } ->
+ n, sprintf "[--%s %s]" n v
+ ) ops @
+@@ -1116,9 +1140,9 @@ let generate_customize_options_pod () =
+ function
+ | { op_type = Unit; op_name = n; op_pod_longdesc = ld } ->
+ n, sprintf "B<--%s>" n, ld
+- | { op_type = String v | StringPair v | StringList v | TargetLinks v
+- | PasswordSelector v | UserPasswordSelector v | SSHKeySelector v
+- | StringFn (v, _) | SMPoolSelector v;
++ | { op_type = String v | StringPair v | StringTriplet v | StringList v
++ | TargetLinks v | PasswordSelector v | UserPasswordSelector v
++ | SSHKeySelector v | StringFn (v, _) | SMPoolSelector v;
+ op_name = n; op_pod_longdesc = ld } ->
+ n, sprintf "B<--%s> %s" n v, ld
+ ) ops @