import libguestfs-1.40.2-24.module+el8.3.0+7176+57f10f42
This commit is contained in:
parent
215d58342a
commit
d78cb0ccaa
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
||||
SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-3
|
||||
SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-5
|
||||
SOURCES/libguestfs-1.40.2.tar.gz
|
||||
SOURCES/libguestfs.keyring
|
||||
SOURCES/rhsrvany.exe
|
||||
|
@ -1,4 +1,4 @@
|
||||
ac8722917cc31c36836e241bd7a4beb5f8a8b0c8 SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-3
|
||||
130adbc011dc0af736465b813c2b22a600c128c1 SOURCES/RHEV-Application-Provisioning-Tool.exe_4.43-5
|
||||
45755f0f73b503790974484053ff482f32665b13 SOURCES/libguestfs-1.40.2.tar.gz
|
||||
1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring
|
||||
2bd96e478fc004cd323b5bd754c856641877dac6 SOURCES/rhsrvany.exe
|
||||
|
@ -122,5 +122,5 @@ index 346019c40..3e5981107 100644
|
||||
assert (replace ~global:true re0 "dd" "abcabcaabccca" = "ddcddcddccca");
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -411,5 +411,5 @@ index 000000000..35b628369
|
||||
+ ignore (run_test_tt_main suite);
|
||||
+ Printf.fprintf stderr "\n"
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -781,5 +781,5 @@ index cf9464834..9a555c3be 100644
|
||||
For I<-o rhv-upload>, this is the name of the destination Storage
|
||||
Domain.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -28,5 +28,5 @@ index 623591aa6..19f3f87af 100644
|
||||
return get_png (g, shadowman, size_r, 102400);
|
||||
}
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -44,5 +44,5 @@ index d5d78d367..b9970cee8 100644
|
||||
s_hypervisor = hypervisor;
|
||||
s_name = name; s_orig_name = name;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -51,5 +51,5 @@ index 2b6dbaeec..b3ebda182 100644
|
||||
=item 3.
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -53,5 +53,5 @@ index 3d61400b5..b4b2f24c4 100644
|
||||
) inspect.i_apps;
|
||||
let libraries = !libraries in
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -32,5 +32,5 @@ index 3313aabc7..889ec2f2a 100644
|
||||
(* Just return the module names, without path or extension. *)
|
||||
let modules = List.filter_map (
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -57,5 +57,5 @@ index 889ec2f2a..30160f0da 100644
|
||||
(* Just return the module names, without path or extension. *)
|
||||
let modules = List.filter_map (
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -59,5 +59,5 @@ index 77c39107e..c2a5c72c7 100644
|
||||
args in
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -41,5 +41,5 @@ index b9970cee8..14cd82afd 100644
|
||||
s_video = video;
|
||||
s_sound = sound;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -92,5 +92,5 @@ index 24641369e..5a35708cd 100644
|
||||
getopt : Getopt.t;
|
||||
ks : key_store;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -30,5 +30,5 @@ index 5a35708cd..ade4cb37f 100644
|
||||
Some { pr }
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -83,5 +83,5 @@ index 53cece2da..f11028466 100644
|
||||
|
||||
The output goes to the specified F<filename>.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -510,5 +510,5 @@ index f11028466..3c1d635c5 100644
|
||||
passed to the I<--machine-readable> option: this string specifies
|
||||
where the machine-readable output will go.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -73,5 +73,5 @@ index 3c1d635c5..af944ddb7 100644
|
||||
|
||||
In addition to that, a subset of these tools support an extra string
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -27,5 +27,5 @@ index b3ebda182..3acdd773e 100644
|
||||
-ic 'vpx://root@vcenter.example.com/Datacenter/esxi?no_verify=1' \
|
||||
-it vddk \
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -45,5 +45,5 @@ index b169b2537..e3469308d 100644
|
||||
| None -> ""
|
||||
| Some port -> sprintf " -P %d" port)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -24,5 +24,5 @@ index 92bf3ec60..a6dc29f2c 100644
|
||||
|
||||
try
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -42,5 +42,5 @@ index 91ff5198d..9aad5dd15 100644
|
||||
bpf "LEGALITY=LEGAL\n";
|
||||
bpf "POOL_UUID=\n";
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -51,5 +51,5 @@ index 2a950c5ed..4d61a089b 100644
|
||||
# Write the disk ID file. Only do this on successful completion.
|
||||
with builtins.open(params['diskid_file'], 'w') as fp:
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -57,5 +57,5 @@ index 8d1058d67..cc4224ccd 100644
|
||||
def list(self, search=None, case_sensitive=False):
|
||||
return []
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -260,5 +260,5 @@ index 000000000..fbb884b94
|
||||
+
|
||||
+# Otherwise everything is OK, exit with no error.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -49,5 +49,5 @@ index d6a58f0fc..de8a66c05 100644
|
||||
+
|
||||
+json.dump(results, sys.stdout)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -165,5 +165,5 @@ index de8a66c05..725a8dc9e 100644
|
||||
|
||||
json.dump(results, sys.stdout)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -32,5 +32,5 @@ index 725a8dc9e..1b344ba27 100644
|
||||
# (shouldn't happen, would fail on disk creation).
|
||||
raise RuntimeError("The storage domain ‘%s’ is not attached to a DC" %
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -72,5 +72,5 @@ index 277d8f2c7..63e809030 100644
|
||||
|
||||
(* Update the target_actual_size field in the target structure. *)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -80,5 +80,5 @@ index 19bdfcf05..382ad0d93 100644
|
||||
let ovf = DOM.doc_to_string ovf in
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -197,5 +197,5 @@ index 651f61dae..e840ca78d 100644
|
||||
|
||||
If this option is given then virt-v2v will attempt to directly upload
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -83,5 +83,5 @@ index e840ca78d..04a894268 100644
|
||||
|
||||
Set the RHV Cluster Name. If not given it uses C<Default>.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -36,5 +36,5 @@ index b4b2f24c4..f9e811c8d 100644
|
||||
let video_driver = match video with QXL -> "qxl" | Cirrus -> "cirrus" in
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -69,5 +69,5 @@ index 016ef2a78..6db7874b0 100644
|
||||
+ Powershell script (the lines of code) as a firstboot script in
|
||||
+ the Windows VM. *)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -419,5 +419,5 @@ index 9a555c3be..0642d158f 100644
|
||||
|
||||
=item B<--machine-readable>=format
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -83,5 +83,5 @@ index 80e3e6eab..055b6671a 100644
|
||||
-506
|
||||
+507
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -43,5 +43,5 @@ index 7f689866b..f783066ff 100644
|
||||
error (EXIT_FAILURE, errno, "realloc");
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -81,5 +81,5 @@ index f783066ff..74b549731 100644
|
||||
error (EXIT_FAILURE, errno, "strdup");
|
||||
break;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -177,5 +177,5 @@ index 6fadf1e76..510e8a8a9 100644
|
||||
extern struct key_store *key_store_import_key (struct key_store *ks, const struct key_store_key *key);
|
||||
extern void free_key_store (struct key_store *ks);
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -433,5 +433,5 @@ index 0642d158f..8c2867814 100644
|
||||
Read the passphrase from F<FILENAME>.
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -309,5 +309,5 @@ index 8c2867814..25041d0ec 100644
|
||||
=over 4
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -78,5 +78,5 @@ index 3acdd773e..16ddb045f 100644
|
||||
|
||||
The libvirt URI of a vCenter server looks something like this:
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -25,5 +25,5 @@ index c278347c1..0b256e2d2 100644
|
||||
fun line ->
|
||||
String.length line > 0 && line.[0] <> '#'
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -39,5 +39,5 @@ index d187f1d5d..bebf9af18 100644
|
||||
attach_timeout
|
||||
(fun () ->
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -31,5 +31,5 @@ index 6ec74a5d4..7f62b4e3b 100644
|
||||
# Now we have permission to start the transfer.
|
||||
if params['rhv_direct']:
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -45,5 +45,5 @@ index 7f62b4e3b..f13405df1 100644
|
||||
# Now we have permission to start the transfer.
|
||||
if params['rhv_direct']:
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -27,5 +27,5 @@ index f13405df1..9b83d1cfa 100644
|
||||
|
||||
# Now we have permission to start the transfer.
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -85,5 +85,5 @@ index 9b83d1cfa..14d4e37fb 100644
|
||||
# Now we have permission to start the transfer.
|
||||
if params['rhv_direct']:
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -80,5 +80,5 @@ index d7a868659..a81a2320a 100644
|
||||
let start_time = gettimeofday () in
|
||||
if run_command cmd <> 0 then
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -45,5 +45,5 @@ index 04a894268..4520c9184 100644
|
||||
=item I<-oo rhv-cluster=>C<CLUSTERNAME>
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -29,5 +29,5 @@ index 4bb5d2dc2..9fd5065f1 100644
|
||||
=head2 Test libvirt connection to remote Xen host
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -31,5 +31,5 @@ index a6dc29f2c..7be63a316 100644
|
||||
| "sles" | "suse-based" | "opensuse" -> Some "lp151"
|
||||
| _ -> None in
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -37,5 +37,5 @@ index 7be63a316..70f0bf09d 100644
|
||||
let cmd = sprintf "cd %s && find -L -type f" (quote dir) in
|
||||
let paths = external_command cmd in
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -115,5 +115,5 @@ index ae3b7e865..731dbd6f0 100644
|
||||
|
||||
(* The following function is only exported for unit tests. *)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -38,5 +38,5 @@ index bdb0092c3..43c1f85de 100644
|
||||
Firstboot.add_firstboot_script g inspect.i_root
|
||||
("install " ^ msi_path) fb_script;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -39,5 +39,5 @@ index ea7e5c02d..9a7297344 100644
|
||||
|
||||
(* The following function is only exported for unit tests. *)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -63,5 +63,5 @@ index 43c1f85de..088cd33d9 100644
|
||||
("install " ^ msi_path) fb_script;
|
||||
) files
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
||||
|
@ -0,0 +1,283 @@
|
||||
From 052549a055bbedc402418bc52bcbfa3bfcb97952 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 12 Mar 2020 13:57:06 +0000
|
||||
Subject: [PATCH] daemon: xattr: Refactor code which splits attr names from the
|
||||
kernel.
|
||||
|
||||
The kernel returns xattr names in a slightly peculiar format. We
|
||||
parsed this format several times in the code. Refactor this parsing
|
||||
so we only do it in one place.
|
||||
|
||||
(cherry picked from commit 5c175fe73264bbf1d3ef79bb066dfb6aff902ad1)
|
||||
---
|
||||
daemon/xattr.c | 127 ++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 79 insertions(+), 48 deletions(-)
|
||||
|
||||
diff --git a/daemon/xattr.c b/daemon/xattr.c
|
||||
index bc5c2df97..3e1144963 100644
|
||||
--- a/daemon/xattr.c
|
||||
+++ b/daemon/xattr.c
|
||||
@@ -89,6 +89,36 @@ do_lremovexattr (const char *xattr, const char *path)
|
||||
return _removexattr (xattr, path, lremovexattr);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * L<listxattr(2)> returns the string C<"foo\0bar\0baz"> of length
|
||||
+ * C<len>. (The last string in the list is \0-terminated but the \0
|
||||
+ * is not included in C<len>).
|
||||
+ *
|
||||
+ * This function splits it into a regular list of strings.
|
||||
+ *
|
||||
+ * B<Note> that the returned list contains pointers to the original
|
||||
+ * strings in C<buf> so be careful that you do not double-free them.
|
||||
+ */
|
||||
+static char **
|
||||
+split_attr_names (char *buf, size_t len)
|
||||
+{
|
||||
+ size_t i;
|
||||
+ DECLARE_STRINGSBUF (ret);
|
||||
+
|
||||
+ for (i = 0; i < len; i += strlen (&buf[i]) + 1) {
|
||||
+ if (add_string_nodup (&ret, &buf[i]) == -1) {
|
||||
+ free (ret.argv);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ if (end_stringsbuf (&ret) == -1) {
|
||||
+ free (ret.argv);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return take_stringsbuf (&ret);
|
||||
+}
|
||||
+
|
||||
static int
|
||||
compare_xattrs (const void *vxa1, const void *vxa2)
|
||||
{
|
||||
@@ -106,7 +136,8 @@ getxattrs (const char *path,
|
||||
{
|
||||
ssize_t len, vlen;
|
||||
CLEANUP_FREE char *buf = NULL;
|
||||
- size_t i, j;
|
||||
+ CLEANUP_FREE /* not string list */ char **names = NULL;
|
||||
+ size_t i;
|
||||
guestfs_int_xattr_list *r = NULL;
|
||||
|
||||
buf = _listxattrs (path, listxattr, &len);
|
||||
@@ -114,18 +145,17 @@ getxattrs (const char *path,
|
||||
/* _listxattrs issues reply_with_perror already. */
|
||||
goto error;
|
||||
|
||||
+ names = split_attr_names (buf, len);
|
||||
+ if (names == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
r = calloc (1, sizeof (*r));
|
||||
if (r == NULL) {
|
||||
reply_with_perror ("calloc");
|
||||
goto error;
|
||||
}
|
||||
|
||||
- /* What we get from the kernel is a string "foo\0bar\0baz" of length
|
||||
- * len. First count the strings.
|
||||
- */
|
||||
- r->guestfs_int_xattr_list_len = 0;
|
||||
- for (i = 0; i < (size_t) len; i += strlen (&buf[i]) + 1)
|
||||
- r->guestfs_int_xattr_list_len++;
|
||||
+ r->guestfs_int_xattr_list_len = guestfs_int_count_strings (names);
|
||||
|
||||
r->guestfs_int_xattr_list_val =
|
||||
calloc (r->guestfs_int_xattr_list_len, sizeof (guestfs_int_xattr));
|
||||
@@ -134,34 +164,34 @@ getxattrs (const char *path,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- for (i = 0, j = 0; i < (size_t) len; i += strlen (&buf[i]) + 1, ++j) {
|
||||
+ for (i = 0; names[i] != NULL; ++i) {
|
||||
CHROOT_IN;
|
||||
- vlen = getxattr (path, &buf[i], NULL, 0);
|
||||
+ vlen = getxattr (path, names[i], NULL, 0);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
- reply_with_perror ("getxattr");
|
||||
+ reply_with_perror ("getxattr: %s", names[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (vlen > XATTR_SIZE_MAX) {
|
||||
/* The next call to getxattr will fail anyway, so ... */
|
||||
- reply_with_error ("extended attribute is too large");
|
||||
+ reply_with_error ("%s: extended attribute is too large", names[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
- r->guestfs_int_xattr_list_val[j].attrname = strdup (&buf[i]);
|
||||
- r->guestfs_int_xattr_list_val[j].attrval.attrval_val = malloc (vlen);
|
||||
- r->guestfs_int_xattr_list_val[j].attrval.attrval_len = vlen;
|
||||
+ r->guestfs_int_xattr_list_val[i].attrname = strdup (names[i]);
|
||||
+ r->guestfs_int_xattr_list_val[i].attrval.attrval_val = malloc (vlen);
|
||||
+ r->guestfs_int_xattr_list_val[i].attrval.attrval_len = vlen;
|
||||
|
||||
- if (r->guestfs_int_xattr_list_val[j].attrname == NULL ||
|
||||
- r->guestfs_int_xattr_list_val[j].attrval.attrval_val == NULL) {
|
||||
+ if (r->guestfs_int_xattr_list_val[i].attrname == NULL ||
|
||||
+ r->guestfs_int_xattr_list_val[i].attrval.attrval_val == NULL) {
|
||||
reply_with_perror ("malloc");
|
||||
goto error;
|
||||
}
|
||||
|
||||
CHROOT_IN;
|
||||
- vlen = getxattr (path, &buf[i],
|
||||
- r->guestfs_int_xattr_list_val[j].attrval.attrval_val,
|
||||
+ vlen = getxattr (path, names[i],
|
||||
+ r->guestfs_int_xattr_list_val[i].attrval.attrval_val,
|
||||
vlen);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
@@ -276,7 +306,7 @@ guestfs_int_xattr_list *
|
||||
do_internal_lxattrlist (const char *path, char *const *names)
|
||||
{
|
||||
guestfs_int_xattr_list *ret = NULL;
|
||||
- size_t i, j;
|
||||
+ size_t i;
|
||||
size_t k, m, nr_attrs;
|
||||
ssize_t len, vlen;
|
||||
|
||||
@@ -293,6 +323,7 @@ do_internal_lxattrlist (const char *path, char *const *names)
|
||||
void *newptr;
|
||||
CLEANUP_FREE char *pathname = NULL;
|
||||
CLEANUP_FREE char *buf = NULL;
|
||||
+ CLEANUP_FREE /* not string list */ char **attrnames = NULL;
|
||||
|
||||
/* Be careful in this loop about which errors cause the whole call
|
||||
* to abort, and which errors allow us to continue processing
|
||||
@@ -350,12 +381,10 @@ do_internal_lxattrlist (const char *path, char *const *names)
|
||||
if (len == -1)
|
||||
continue; /* not fatal */
|
||||
|
||||
- /* What we get from the kernel is a string "foo\0bar\0baz" of length
|
||||
- * len. First count the strings.
|
||||
- */
|
||||
- nr_attrs = 0;
|
||||
- for (i = 0; i < (size_t) len; i += strlen (&buf[i]) + 1)
|
||||
- nr_attrs++;
|
||||
+ attrnames = split_attr_names (buf, len);
|
||||
+ if (attrnames == NULL)
|
||||
+ goto error;
|
||||
+ nr_attrs = guestfs_int_count_strings (attrnames);
|
||||
|
||||
newptr =
|
||||
realloc (ret->guestfs_int_xattr_list_val,
|
||||
@@ -378,36 +407,36 @@ do_internal_lxattrlist (const char *path, char *const *names)
|
||||
entry[m].attrval.attrval_val = NULL;
|
||||
}
|
||||
|
||||
- for (i = 0, j = 0; i < (size_t) len; i += strlen (&buf[i]) + 1, ++j) {
|
||||
+ for (i = 0; attrnames[i] != NULL; ++i) {
|
||||
CHROOT_IN;
|
||||
- vlen = lgetxattr (pathname, &buf[i], NULL, 0);
|
||||
+ vlen = lgetxattr (pathname, attrnames[i], NULL, 0);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
- reply_with_perror ("getxattr");
|
||||
+ reply_with_perror ("getxattr: %s", attrnames[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (vlen > XATTR_SIZE_MAX) {
|
||||
- reply_with_error ("extended attribute is too large");
|
||||
+ reply_with_error ("%s: extended attribute is too large", attrnames[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
- entry[j+1].attrname = strdup (&buf[i]);
|
||||
- entry[j+1].attrval.attrval_val = malloc (vlen);
|
||||
- entry[j+1].attrval.attrval_len = vlen;
|
||||
+ entry[i+1].attrname = strdup (attrnames[i]);
|
||||
+ entry[i+1].attrval.attrval_val = malloc (vlen);
|
||||
+ entry[i+1].attrval.attrval_len = vlen;
|
||||
|
||||
- if (entry[j+1].attrname == NULL ||
|
||||
- entry[j+1].attrval.attrval_val == NULL) {
|
||||
+ if (entry[i+1].attrname == NULL ||
|
||||
+ entry[i+1].attrval.attrval_val == NULL) {
|
||||
reply_with_perror ("malloc");
|
||||
goto error;
|
||||
}
|
||||
|
||||
CHROOT_IN;
|
||||
- vlen = lgetxattr (pathname, &buf[i],
|
||||
- entry[j+1].attrval.attrval_val, vlen);
|
||||
+ vlen = lgetxattr (pathname, attrnames[i],
|
||||
+ entry[i+1].attrval.attrval_val, vlen);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
- reply_with_perror ("getxattr");
|
||||
+ reply_with_perror ("getxattr: %s", attrnames[i]);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@@ -510,6 +539,7 @@ copy_xattrs (const char *src, const char *dest)
|
||||
{
|
||||
ssize_t len, vlen, ret, attrval_len = 0;
|
||||
CLEANUP_FREE char *buf = NULL, *attrval = NULL;
|
||||
+ CLEANUP_FREE /* not string list */ char **names = NULL;
|
||||
size_t i;
|
||||
|
||||
buf = _listxattrs (src, listxattr, &len);
|
||||
@@ -517,21 +547,22 @@ copy_xattrs (const char *src, const char *dest)
|
||||
/* _listxattrs issues reply_with_perror already. */
|
||||
goto error;
|
||||
|
||||
- /* What we get from the kernel is a string "foo\0bar\0baz" of length
|
||||
- * len.
|
||||
- */
|
||||
- for (i = 0; i < (size_t) len; i += strlen (&buf[i]) + 1) {
|
||||
+ names = split_attr_names (buf, len);
|
||||
+ if (names == NULL)
|
||||
+ goto error;
|
||||
+
|
||||
+ for (i = 0; names[i] != NULL; ++i) {
|
||||
CHROOT_IN;
|
||||
- vlen = getxattr (src, &buf[i], NULL, 0);
|
||||
+ vlen = getxattr (src, names[i], NULL, 0);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
- reply_with_perror ("getxattr: %s, %s", src, &buf[i]);
|
||||
+ reply_with_perror ("getxattr: %s, %s", src, names[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (vlen > XATTR_SIZE_MAX) {
|
||||
/* The next call to getxattr will fail anyway, so ... */
|
||||
- reply_with_error ("extended attribute is too large");
|
||||
+ reply_with_error ("%s: extended attribute is too large", names[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -546,18 +577,18 @@ copy_xattrs (const char *src, const char *dest)
|
||||
}
|
||||
|
||||
CHROOT_IN;
|
||||
- vlen = getxattr (src, &buf[i], attrval, vlen);
|
||||
+ vlen = getxattr (src, names[i], attrval, vlen);
|
||||
CHROOT_OUT;
|
||||
if (vlen == -1) {
|
||||
- reply_with_perror ("getxattr: %s, %s", src, &buf[i]);
|
||||
+ reply_with_perror ("getxattr: %s, %s", src, names[i]);
|
||||
goto error;
|
||||
}
|
||||
|
||||
CHROOT_IN;
|
||||
- ret = setxattr (dest, &buf[i], attrval, vlen, 0);
|
||||
+ ret = setxattr (dest, names[i], attrval, vlen, 0);
|
||||
CHROOT_OUT;
|
||||
if (ret == -1) {
|
||||
- reply_with_perror ("setxattr: %s, %s", dest, &buf[i]);
|
||||
+ reply_with_perror ("setxattr: %s, %s", dest, names[i]);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
--
|
||||
2.25.4
|
||||
|
84
SOURCES/0057-daemon-Add-filter_list-utility-function.patch
Normal file
84
SOURCES/0057-daemon-Add-filter_list-utility-function.patch
Normal file
@ -0,0 +1,84 @@
|
||||
From 1c976cc5d1add98eee09c38ac8e01634c94f3778 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 12 Mar 2020 13:59:05 +0000
|
||||
Subject: [PATCH] daemon: Add filter_list utility function.
|
||||
|
||||
For filtering lists of strings based on a predicate.
|
||||
|
||||
(cherry picked from commit af8ed266a282bb20882a9ffb611bd64243d19218)
|
||||
---
|
||||
daemon/daemon.h | 2 ++
|
||||
daemon/utils.c | 30 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 32 insertions(+)
|
||||
|
||||
diff --git a/daemon/daemon.h b/daemon/daemon.h
|
||||
index 66bfdc49e..115591728 100644
|
||||
--- a/daemon/daemon.h
|
||||
+++ b/daemon/daemon.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
+#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -74,6 +75,7 @@ extern void free_stringsbuf (struct stringsbuf *sb);
|
||||
extern struct stringsbuf split_lines_sb (char *str);
|
||||
extern char **split_lines (char *str);
|
||||
extern char **empty_list (void);
|
||||
+extern char **filter_list (bool (*p) (const char *), char **strs);
|
||||
extern int is_power_of_2 (unsigned long v);
|
||||
extern void trim (char *str);
|
||||
extern int parse_btrfsvol (const char *desc, mountable_t *mountable);
|
||||
diff --git a/daemon/utils.c b/daemon/utils.c
|
||||
index c3f88bcab..e87233d0f 100644
|
||||
--- a/daemon/utils.c
|
||||
+++ b/daemon/utils.c
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
+#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <rpc/types.h>
|
||||
@@ -482,6 +483,35 @@ empty_list (void)
|
||||
return ret.argv;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Filter a list of strings. Returns a newly allocated list of only
|
||||
+ * the strings where C<p (str) == true>.
|
||||
+ *
|
||||
+ * B<Note> it does not copy the strings, be careful not to double-free
|
||||
+ * them.
|
||||
+ */
|
||||
+char **
|
||||
+filter_list (bool (*p) (const char *str), char **strs)
|
||||
+{
|
||||
+ DECLARE_STRINGSBUF (ret);
|
||||
+ size_t i;
|
||||
+
|
||||
+ for (i = 0; strs[i] != NULL; ++i) {
|
||||
+ if (p (strs[i])) {
|
||||
+ if (add_string_nodup (&ret, strs[i]) == -1) {
|
||||
+ free (ret.argv);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (end_stringsbuf (&ret) == -1) {
|
||||
+ free (ret.argv);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return take_stringsbuf (&ret);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* Skip leading and trailing whitespace, updating the original string
|
||||
* in-place.
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,120 @@
|
||||
From fabaf7328a449344028903811674787dc685084b Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 12 Mar 2020 14:40:05 +0000
|
||||
Subject: [PATCH] daemon: xattr: Filter out user.WofCompressedData from xattrs
|
||||
(RHBZ#1811539).
|
||||
|
||||
See comment in code for justification.
|
||||
|
||||
Thanks: Yongkui Guo for finding the bug.
|
||||
(cherry picked from commit c2c11382bbeb4500f3388a31ffd08cfc18b0de40)
|
||||
---
|
||||
daemon/xattr.c | 43 ++++++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 40 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/daemon/xattr.c b/daemon/xattr.c
|
||||
index 3e1144963..43e49384f 100644
|
||||
--- a/daemon/xattr.c
|
||||
+++ b/daemon/xattr.c
|
||||
@@ -19,6 +19,8 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <stdbool.h>
|
||||
#include <limits.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -119,6 +121,29 @@ split_attr_names (char *buf, size_t len)
|
||||
return take_stringsbuf (&ret);
|
||||
}
|
||||
|
||||
+/* We hide one extended attribute automatically. This is used by NTFS
|
||||
+ * to store the compressed contents of a file when using "CompactOS"
|
||||
+ * (per-file compression). I justify this by:
|
||||
+ *
|
||||
+ * (1) The attribute is only used internally by NTFS. The actual file
|
||||
+ * contents are still available.
|
||||
+ *
|
||||
+ * (2) It's probably not valid to copy this attribute when copying the
|
||||
+ * other attributes of a file. ntfs-3g-system-compression doesn't
|
||||
+ * support writing compressed files.
|
||||
+ *
|
||||
+ * (3) This file isn't readable by the Linux kernel. Reading it will
|
||||
+ * always return -E2BIG (RHBZ#1811539). So we can't read it even if
|
||||
+ * we wanted to.
|
||||
+ *
|
||||
+ * (4) The Linux kernel itself hides other attributes.
|
||||
+ */
|
||||
+static bool
|
||||
+not_hidden_xattr (const char *attrname)
|
||||
+{
|
||||
+ return STRNEQ (attrname, "user.WofCompressedData");
|
||||
+}
|
||||
+
|
||||
static int
|
||||
compare_xattrs (const void *vxa1, const void *vxa2)
|
||||
{
|
||||
@@ -136,6 +161,7 @@ getxattrs (const char *path,
|
||||
{
|
||||
ssize_t len, vlen;
|
||||
CLEANUP_FREE char *buf = NULL;
|
||||
+ CLEANUP_FREE /* not string list */ char **names_unfiltered = NULL;
|
||||
CLEANUP_FREE /* not string list */ char **names = NULL;
|
||||
size_t i;
|
||||
guestfs_int_xattr_list *r = NULL;
|
||||
@@ -145,7 +171,10 @@ getxattrs (const char *path,
|
||||
/* _listxattrs issues reply_with_perror already. */
|
||||
goto error;
|
||||
|
||||
- names = split_attr_names (buf, len);
|
||||
+ names_unfiltered = split_attr_names (buf, len);
|
||||
+ if (names_unfiltered == NULL)
|
||||
+ goto error;
|
||||
+ names = filter_list (not_hidden_xattr, names_unfiltered);
|
||||
if (names == NULL)
|
||||
goto error;
|
||||
|
||||
@@ -323,6 +352,7 @@ do_internal_lxattrlist (const char *path, char *const *names)
|
||||
void *newptr;
|
||||
CLEANUP_FREE char *pathname = NULL;
|
||||
CLEANUP_FREE char *buf = NULL;
|
||||
+ CLEANUP_FREE /* not string list */ char **attrnames_unfiltered = NULL;
|
||||
CLEANUP_FREE /* not string list */ char **attrnames = NULL;
|
||||
|
||||
/* Be careful in this loop about which errors cause the whole call
|
||||
@@ -381,7 +411,10 @@ do_internal_lxattrlist (const char *path, char *const *names)
|
||||
if (len == -1)
|
||||
continue; /* not fatal */
|
||||
|
||||
- attrnames = split_attr_names (buf, len);
|
||||
+ attrnames_unfiltered = split_attr_names (buf, len);
|
||||
+ if (attrnames_unfiltered == NULL)
|
||||
+ goto error;
|
||||
+ attrnames = filter_list (not_hidden_xattr, attrnames_unfiltered);
|
||||
if (attrnames == NULL)
|
||||
goto error;
|
||||
nr_attrs = guestfs_int_count_strings (attrnames);
|
||||
@@ -539,6 +572,7 @@ copy_xattrs (const char *src, const char *dest)
|
||||
{
|
||||
ssize_t len, vlen, ret, attrval_len = 0;
|
||||
CLEANUP_FREE char *buf = NULL, *attrval = NULL;
|
||||
+ CLEANUP_FREE /* not string list */ char **names_unfiltered = NULL;
|
||||
CLEANUP_FREE /* not string list */ char **names = NULL;
|
||||
size_t i;
|
||||
|
||||
@@ -547,7 +581,10 @@ copy_xattrs (const char *src, const char *dest)
|
||||
/* _listxattrs issues reply_with_perror already. */
|
||||
goto error;
|
||||
|
||||
- names = split_attr_names (buf, len);
|
||||
+ names_unfiltered = split_attr_names (buf, len);
|
||||
+ if (names_unfiltered == NULL)
|
||||
+ goto error;
|
||||
+ names = filter_list (not_hidden_xattr, names_unfiltered);
|
||||
if (names == NULL)
|
||||
goto error;
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
95
SOURCES/0059-mltools-add-run_in_guest_command-helper.patch
Normal file
95
SOURCES/0059-mltools-add-run_in_guest_command-helper.patch
Normal file
@ -0,0 +1,95 @@
|
||||
From 1519dfe45d35dbc1f273d468fca3ea77d6cfdfad Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 4 May 2020 15:14:46 +0200
|
||||
Subject: [PATCH] mltools: add run_in_guest_command helper
|
||||
|
||||
Add an helper function to run a command in the guest, checking for the
|
||||
host/guest compatibility. This is mostly extracted from the internal
|
||||
do_run helper currently in the Customize_run module of virt-customize.
|
||||
|
||||
(cherry picked from commit e73eca3b73f7d0a54615c5dc55eadd09dc170035
|
||||
in libguestfs-common)
|
||||
---
|
||||
common/mltools/tools_utils.ml | 50 ++++++++++++++++++++++++++++++++++
|
||||
common/mltools/tools_utils.mli | 10 +++++++
|
||||
2 files changed, 60 insertions(+)
|
||||
|
||||
diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml
|
||||
index 127180225..d54ec581e 100644
|
||||
--- a/common/mltools/tools_utils.ml
|
||||
+++ b/common/mltools/tools_utils.ml
|
||||
@@ -679,3 +679,53 @@ let with_timeout op timeout ?(sleep = 2) fn =
|
||||
loop ()
|
||||
in
|
||||
loop ()
|
||||
+
|
||||
+let run_in_guest_command g root ?logfile ?incompatible_fn cmd =
|
||||
+ (* Is the host_cpu compatible with the guest arch? ie. Can we
|
||||
+ * run commands in this guest?
|
||||
+ *)
|
||||
+ let guest_arch = g#inspect_get_arch root in
|
||||
+ let guest_arch_compatible = guest_arch_compatible guest_arch in
|
||||
+ if not guest_arch_compatible then (
|
||||
+ match incompatible_fn with
|
||||
+ | None -> ()
|
||||
+ | Some fn -> fn ()
|
||||
+ )
|
||||
+ else (
|
||||
+ (* Add a prologue to the scripts:
|
||||
+ * - Pass environment variables through from the host.
|
||||
+ * - Optionally send stdout and stderr to a log file so we capture
|
||||
+ * all output in error messages.
|
||||
+ * - Use setarch when running x86_64 host + i686 guest.
|
||||
+ *)
|
||||
+ let env_vars =
|
||||
+ List.filter_map (
|
||||
+ fun name ->
|
||||
+ try Some (sprintf "export %s=%s" name (quote (Sys.getenv name)))
|
||||
+ with Not_found -> None
|
||||
+ ) [ "http_proxy"; "https_proxy"; "ftp_proxy"; "no_proxy" ] in
|
||||
+ let env_vars = String.concat "\n" env_vars ^ "\n" in
|
||||
+
|
||||
+ let cmd =
|
||||
+ match Guestfs_config.host_cpu, guest_arch with
|
||||
+ | "x86_64", ("i386"|"i486"|"i586"|"i686") ->
|
||||
+ sprintf "setarch i686 <<\"__EOCMD\"
|
||||
+%s
|
||||
+__EOCMD
|
||||
+" cmd
|
||||
+ | _ -> cmd in
|
||||
+
|
||||
+ let logfile_redirect =
|
||||
+ match logfile with
|
||||
+ | None -> ""
|
||||
+ | Some logfile -> sprintf "exec >>%s 2>&1" (quote logfile) in
|
||||
+
|
||||
+ let cmd = sprintf "\
|
||||
+%s
|
||||
+%s
|
||||
+%s
|
||||
+" (logfile_redirect) env_vars cmd in
|
||||
+
|
||||
+ debug "running command:\n%s" cmd;
|
||||
+ ignore (g#sh cmd)
|
||||
+ )
|
||||
diff --git a/common/mltools/tools_utils.mli b/common/mltools/tools_utils.mli
|
||||
index ab70f583e..102abff4d 100644
|
||||
--- a/common/mltools/tools_utils.mli
|
||||
+++ b/common/mltools/tools_utils.mli
|
||||
@@ -212,3 +212,13 @@ val with_timeout : string -> int -> ?sleep:int -> (unit -> 'a option) -> 'a
|
||||
calls {!error} and the program exits. The error message will
|
||||
contain the diagnostic string [op] to identify the operation
|
||||
which timed out. *)
|
||||
+
|
||||
+val run_in_guest_command : Guestfs.guestfs -> string -> ?logfile:string -> ?incompatible_fn:(unit -> unit) -> string -> unit
|
||||
+(** [run_in_guest_command g root ?incompatible_archs_fn cmd]
|
||||
+ runs a command in the guest, which is already mounted for the
|
||||
+ specified [root]. The command is run directly in case the
|
||||
+ architecture of the host and the guest are compatible, optionally
|
||||
+ calling [?incompatible_fn] in case they are not.
|
||||
+
|
||||
+ [?logfile] is an optional file in the guest to where redirect
|
||||
+ stdout and stderr of the command. *)
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,83 @@
|
||||
From 63d711246f7e86c838c4471bec538a40abffbfb8 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 4 May 2020 11:55:41 +0200
|
||||
Subject: [PATCH] customize: port do_run to run_in_guest_command
|
||||
|
||||
Make use of the new helper function in Tools_utils to run commands in
|
||||
the guest.
|
||||
|
||||
(cherry picked from commit b25e3495f522378f59d201526d7d2d02c2bf6f3f)
|
||||
---
|
||||
customize/customize_run.ml | 48 ++++++--------------------------------
|
||||
1 file changed, 7 insertions(+), 41 deletions(-)
|
||||
|
||||
diff --git a/customize/customize_run.ml b/customize/customize_run.ml
|
||||
index 3eacdaca0..f2ee20413 100644
|
||||
--- a/customize/customize_run.ml
|
||||
+++ b/customize/customize_run.ml
|
||||
@@ -30,12 +30,6 @@ open Append_line
|
||||
module G = Guestfs
|
||||
|
||||
let run (g : G.guestfs) root (ops : ops) =
|
||||
- (* Is the host_cpu compatible with the guest arch? ie. Can we
|
||||
- * run commands in this guest?
|
||||
- *)
|
||||
- let guest_arch = g#inspect_get_arch root in
|
||||
- let guest_arch_compatible = guest_arch_compatible guest_arch in
|
||||
-
|
||||
(* Based on the guest type, choose a log file location. *)
|
||||
let logfile =
|
||||
match g#inspect_get_type root with
|
||||
@@ -54,42 +48,14 @@ let run (g : G.guestfs) root (ops : ops) =
|
||||
|
||||
(* Useful wrapper for scripts. *)
|
||||
let do_run ~display ?(warn_failed_no_network = false) cmd =
|
||||
- if not guest_arch_compatible then
|
||||
+ let incompatible_fn () =
|
||||
+ let guest_arch = g#inspect_get_arch root in
|
||||
error (f_"host cpu (%s) and guest arch (%s) are not compatible, so you cannot use command line options that involve running commands in the guest. Use --firstboot scripts instead.")
|
||||
- Guestfs_config.host_cpu guest_arch;
|
||||
-
|
||||
- (* Add a prologue to the scripts:
|
||||
- * - Pass environment variables through from the host.
|
||||
- * - Send stdout and stderr to a log file so we capture all output
|
||||
- * in error messages.
|
||||
- * - Use setarch when running x86_64 host + i686 guest.
|
||||
- * Also catch errors and dump the log file completely on error.
|
||||
- *)
|
||||
- let env_vars =
|
||||
- List.filter_map (
|
||||
- fun name ->
|
||||
- try Some (sprintf "export %s=%s" name (quote (Sys.getenv name)))
|
||||
- with Not_found -> None
|
||||
- ) [ "http_proxy"; "https_proxy"; "ftp_proxy"; "no_proxy" ] in
|
||||
- let env_vars = String.concat "\n" env_vars ^ "\n" in
|
||||
-
|
||||
- let cmd =
|
||||
- match Guestfs_config.host_cpu, guest_arch with
|
||||
- | "x86_64", ("i386"|"i486"|"i586"|"i686") ->
|
||||
- sprintf "setarch i686 <<\"__EOCMD\"
|
||||
-%s
|
||||
-__EOCMD
|
||||
-" cmd
|
||||
- | _ -> cmd in
|
||||
-
|
||||
- let cmd = sprintf "\
|
||||
-exec >>%s 2>&1
|
||||
-%s
|
||||
-%s
|
||||
-" (quote logfile) env_vars cmd in
|
||||
-
|
||||
- debug "running command:\n%s" cmd;
|
||||
- try ignore (g#sh cmd)
|
||||
+ Guestfs_config.host_cpu guest_arch
|
||||
+ in
|
||||
+
|
||||
+ try
|
||||
+ run_in_guest_command g root ~logfile ~incompatible_fn cmd
|
||||
with
|
||||
G.Error msg ->
|
||||
debug_logfile ();
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,138 @@
|
||||
From f3fa23fd9db0723bbeccffc79ce12a707d284643 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 4 May 2020 12:05:18 +0200
|
||||
Subject: [PATCH] sysprep: add a update_system_ca_store side effect
|
||||
|
||||
Add a simple side effect to make operation flag that a regeneration of
|
||||
the system CA store is needed. In case it is flagged, regenerate the
|
||||
system CA store directly, or using a firstboot script in case of
|
||||
incompatible architectures.
|
||||
|
||||
This change is almost a no-op, since no operation requires the
|
||||
regeneration of the system CA store yet.
|
||||
|
||||
(cherry picked from commit bb7fc6d0a1ed670d16a92d2afd9ff2f876edc595)
|
||||
---
|
||||
sysprep/main.ml | 5 +++++
|
||||
sysprep/sysprep_operation.ml | 3 +++
|
||||
sysprep/sysprep_operation.mli | 2 ++
|
||||
sysprep/utils.ml | 32 ++++++++++++++++++++++++++++++++
|
||||
sysprep/utils.mli | 4 ++++
|
||||
5 files changed, 46 insertions(+)
|
||||
|
||||
diff --git a/sysprep/main.ml b/sysprep/main.ml
|
||||
index 04fd7b23c..4b03d5b48 100644
|
||||
--- a/sysprep/main.ml
|
||||
+++ b/sysprep/main.ml
|
||||
@@ -25,6 +25,7 @@ open Common_gettext.Gettext
|
||||
open Getopt.OptionName
|
||||
|
||||
open Sysprep_operation
|
||||
+open Utils
|
||||
|
||||
module G = Guestfs
|
||||
|
||||
@@ -236,6 +237,10 @@ read the man page virt-sysprep(1).
|
||||
Sysprep_operation.perform_operations_on_filesystems
|
||||
?operations g root side_effects;
|
||||
|
||||
+ (* Do we need to update the system CA store? *)
|
||||
+ if side_effects#get_update_system_ca_store then
|
||||
+ update_system_ca_store g root;
|
||||
+
|
||||
(* Unmount everything in this guest. *)
|
||||
g#umount_all ();
|
||||
|
||||
diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml
|
||||
index 0013ff504..53f042402 100644
|
||||
--- a/sysprep/sysprep_operation.ml
|
||||
+++ b/sysprep/sysprep_operation.ml
|
||||
@@ -27,10 +27,13 @@ class filesystem_side_effects =
|
||||
object
|
||||
val mutable m_created_file = false
|
||||
val mutable m_changed_file = false
|
||||
+ val mutable m_update_system_ca_store = false
|
||||
method created_file () = m_created_file <- true
|
||||
method get_created_file = m_created_file
|
||||
method changed_file () = m_changed_file <- true
|
||||
method get_changed_file = m_changed_file
|
||||
+ method update_system_ca_store () = m_update_system_ca_store <- true
|
||||
+ method get_update_system_ca_store = m_update_system_ca_store
|
||||
end
|
||||
|
||||
class device_side_effects = object end
|
||||
diff --git a/sysprep/sysprep_operation.mli b/sysprep/sysprep_operation.mli
|
||||
index 3d9f12550..2a02d5e79 100644
|
||||
--- a/sysprep/sysprep_operation.mli
|
||||
+++ b/sysprep/sysprep_operation.mli
|
||||
@@ -23,6 +23,8 @@ class filesystem_side_effects : object
|
||||
method get_created_file : bool
|
||||
method changed_file : unit -> unit
|
||||
method get_changed_file : bool
|
||||
+ method update_system_ca_store : unit -> unit
|
||||
+ method get_update_system_ca_store : bool
|
||||
end
|
||||
(** The callback should indicate if it has side effects by calling
|
||||
methods in this class. *)
|
||||
diff --git a/sysprep/utils.ml b/sysprep/utils.ml
|
||||
index 4c45d42de..29460b3c0 100644
|
||||
--- a/sysprep/utils.ml
|
||||
+++ b/sysprep/utils.ml
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
open Printf
|
||||
|
||||
+open Tools_utils
|
||||
+open Common_gettext.Gettext
|
||||
+
|
||||
let rec pod_of_list ?(style = `Dot) xs =
|
||||
match style with
|
||||
| `Verbatim -> String.concat "\n" (List.map ((^) " ") xs)
|
||||
@@ -31,3 +34,32 @@ and _pod_of_list delim xs =
|
||||
"=over 4\n\n" ^
|
||||
String.concat "" (List.map (sprintf "=item %s\n\n%s\n\n" delim) xs) ^
|
||||
"=back"
|
||||
+
|
||||
+let rec update_system_ca_store g root =
|
||||
+ let cmd = update_system_ca_store_command g root in
|
||||
+ match cmd with
|
||||
+ | None -> ()
|
||||
+ | Some cmd ->
|
||||
+ (* Try to run the command directly if possible, adding it as
|
||||
+ * firstboot script in case of incompatible architectures.
|
||||
+ *)
|
||||
+ let cmd = String.concat " " cmd in
|
||||
+ let incompatible_fn () =
|
||||
+ Firstboot.add_firstboot_script g root cmd cmd
|
||||
+ in
|
||||
+
|
||||
+ run_in_guest_command g root ~incompatible_fn cmd
|
||||
+
|
||||
+and update_system_ca_store_command g root =
|
||||
+ let typ = g#inspect_get_type root in
|
||||
+ let distro = g#inspect_get_distro root in
|
||||
+ match typ, distro with
|
||||
+ | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
|
||||
+ Some [ "update-ca-trust"; "extract" ]
|
||||
+
|
||||
+ | "linux", ("debian"|"ubuntu"|"kalilinux") ->
|
||||
+ Some [ "update-ca-certificates" ]
|
||||
+
|
||||
+ | _, _ ->
|
||||
+ warning (f_"updating the system CA store on this guest %s/%s is not supported") typ distro;
|
||||
+ None
|
||||
diff --git a/sysprep/utils.mli b/sysprep/utils.mli
|
||||
index a57a0d876..82779620e 100644
|
||||
--- a/sysprep/utils.mli
|
||||
+++ b/sysprep/utils.mli
|
||||
@@ -26,3 +26,7 @@ val pod_of_list : ?style:[`Verbatim|`Star|`Dash|`Dot] -> string list -> string
|
||||
use a space-indented (verbatim) block. [`Star], [`Dash] or [`Dot]
|
||||
meaning use a real list with [*], [-] or [·]. The default
|
||||
style is [·] ([`Dot]). *)
|
||||
+
|
||||
+val update_system_ca_store : Guestfs.guestfs -> string -> unit
|
||||
+(** Update the system CA store on the guest for the specified root
|
||||
+ (which is fully mounted). *)
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,42 @@
|
||||
From d78ec54de6b5ba915445d668ebf292bc9ff38a9a Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Mon, 4 May 2020 12:15:43 +0200
|
||||
Subject: [PATCH] sysprep: ca-certificates: request system CA store update
|
||||
|
||||
In case any certificate is removed from the guest, regenerate the system
|
||||
CA store.
|
||||
|
||||
(cherry picked from commit b9065fa7adc93123c53f4827e11dad6b210b7d4b)
|
||||
---
|
||||
sysprep/sysprep_operation_ca_certificates.ml | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sysprep/sysprep_operation_ca_certificates.ml b/sysprep/sysprep_operation_ca_certificates.ml
|
||||
index e481cebf8..a2b7986c1 100644
|
||||
--- a/sysprep/sysprep_operation_ca_certificates.ml
|
||||
+++ b/sysprep/sysprep_operation_ca_certificates.ml
|
||||
@@ -39,7 +39,11 @@ let ca_certificates_perform (g : Guestfs.guestfs) root side_effects =
|
||||
let set = StringSet.diff set excepts in
|
||||
StringSet.iter (
|
||||
fun filename ->
|
||||
- try g#rm filename with G.Error _ -> ()
|
||||
+ try
|
||||
+ g#rm filename;
|
||||
+ side_effects#update_system_ca_store ()
|
||||
+ with
|
||||
+ G.Error _ -> ()
|
||||
) set
|
||||
)
|
||||
|
||||
@@ -48,6 +52,8 @@ let op = {
|
||||
name = "ca-certificates";
|
||||
enabled_by_default = false;
|
||||
heading = s_"Remove CA certificates in the guest";
|
||||
+ pod_description = Some (s_"\
|
||||
+In case any certificate is removed, the system CA store is updated.");
|
||||
perform_on_filesystems = Some ca_certificates_perform;
|
||||
}
|
||||
|
||||
--
|
||||
2.25.4
|
||||
|
@ -0,0 +1,107 @@
|
||||
From fa3ff43b763d191ae542594f75987a3686c847b2 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Thu, 7 May 2020 13:53:21 +0200
|
||||
Subject: [PATCH] sysprep: add IPA offline unenrollment (RHBZ#1789592)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This new operation unenrolls the guest from a IPA server offline, by
|
||||
removing the configuration files and certificates.
|
||||
|
||||
Thanks to Christian Heimes and François Cami for the hints.
|
||||
|
||||
(cherry picked from commit 0a53e2c7fc4fe2aa69052134230db0804849b470)
|
||||
---
|
||||
sysprep/Makefile.am | 1 +
|
||||
sysprep/sysprep_operation_ipa_client.ml | 66 +++++++++++++++++++++++++
|
||||
2 files changed, 67 insertions(+)
|
||||
create mode 100644 sysprep/sysprep_operation_ipa_client.ml
|
||||
|
||||
diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am
|
||||
index e6269c3f7..79266314b 100644
|
||||
--- a/sysprep/Makefile.am
|
||||
+++ b/sysprep/Makefile.am
|
||||
@@ -43,6 +43,7 @@ operations = \
|
||||
flag_reconfiguration \
|
||||
firewall_rules \
|
||||
fs_uuids \
|
||||
+ ipa_client \
|
||||
kerberos_data \
|
||||
lvm_uuids \
|
||||
logfiles \
|
||||
diff --git a/sysprep/sysprep_operation_ipa_client.ml b/sysprep/sysprep_operation_ipa_client.ml
|
||||
new file mode 100644
|
||||
index 000000000..6e64a754a
|
||||
--- /dev/null
|
||||
+++ b/sysprep/sysprep_operation_ipa_client.ml
|
||||
@@ -0,0 +1,66 @@
|
||||
+(* virt-sysprep
|
||||
+ * Copyright (C) 2020 Red Hat Inc.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ *)
|
||||
+
|
||||
+open Sysprep_operation
|
||||
+open Common_gettext.Gettext
|
||||
+
|
||||
+module G = Guestfs
|
||||
+
|
||||
+let ipa_client_perform (g : Guestfs.guestfs) root side_effects =
|
||||
+ let typ = g#inspect_get_type root in
|
||||
+ if typ = "linux" then (
|
||||
+ (* Simple paths with no side effects. *)
|
||||
+ let paths = [ "/etc/ipa/ca.crt";
|
||||
+ "/etc/ipa/default.conf";
|
||||
+ "/var/lib/ipa-client/sysrestore/*";
|
||||
+ "/var/lib/ipa-client/pki/*" ] in
|
||||
+ let paths = List.concat (List.map Array.to_list (List.map g#glob_expand paths)) in
|
||||
+ List.iter (
|
||||
+ fun filename ->
|
||||
+ try g#rm filename with G.Error _ -> ()
|
||||
+ ) paths;
|
||||
+
|
||||
+ (* Certificates in the system CA store. *)
|
||||
+ let certs = [ "/etc/pki/ca-trust/source/anchors/ipa-ca.crt";
|
||||
+ "/usr/local/share/ca-certificates/ipa-ca.crt";
|
||||
+ "/etc/pki/ca-trust/source/ipa.p11-kit" ] in
|
||||
+ List.iter (
|
||||
+ fun filename ->
|
||||
+ try
|
||||
+ g#rm filename;
|
||||
+ side_effects#update_system_ca_store ()
|
||||
+ with
|
||||
+ G.Error _ -> ()
|
||||
+ ) certs
|
||||
+ )
|
||||
+
|
||||
+let op = {
|
||||
+ defaults with
|
||||
+ name = "ipa-client";
|
||||
+ enabled_by_default = true;
|
||||
+ heading = s_"Remove the IPA files";
|
||||
+ pod_description = Some (s_"\
|
||||
+Remove all the files related to an IPA (Identity, Policy, Audit) system.
|
||||
+This effectively unenrolls the guest from an IPA server without interacting
|
||||
+with it.
|
||||
+
|
||||
+This operation does not run C<ipa-client>.");
|
||||
+ perform_on_filesystems = Some ipa_client_perform;
|
||||
+}
|
||||
+
|
||||
+let () = register_operation op
|
||||
--
|
||||
2.25.4
|
||||
|
81
SOURCES/0064-sysprep-add-Kerberos-keytab-file-removal.patch
Normal file
81
SOURCES/0064-sysprep-add-Kerberos-keytab-file-removal.patch
Normal file
@ -0,0 +1,81 @@
|
||||
From 7700915a65bfed5f6a9b80d63daf572bff33e154 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Thu, 7 May 2020 14:02:30 +0200
|
||||
Subject: [PATCH] sysprep: add Kerberos keytab file removal
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This new operation removes the Kerberos /etc/krb5.keytab file from the
|
||||
guest.
|
||||
|
||||
Thanks to Christian Heimes and François Cami for the hints.
|
||||
|
||||
Related to RHBZ#1789592.
|
||||
|
||||
(cherry picked from commit faa5d8507f552e05435312f16d9e50f613a13615)
|
||||
---
|
||||
sysprep/Makefile.am | 1 +
|
||||
.../sysprep_operation_kerberos_hostkeytab.ml | 38 +++++++++++++++++++
|
||||
2 files changed, 39 insertions(+)
|
||||
create mode 100644 sysprep/sysprep_operation_kerberos_hostkeytab.ml
|
||||
|
||||
diff --git a/sysprep/Makefile.am b/sysprep/Makefile.am
|
||||
index 79266314b..a99957306 100644
|
||||
--- a/sysprep/Makefile.am
|
||||
+++ b/sysprep/Makefile.am
|
||||
@@ -45,6 +45,7 @@ operations = \
|
||||
fs_uuids \
|
||||
ipa_client \
|
||||
kerberos_data \
|
||||
+ kerberos_hostkeytab \
|
||||
lvm_uuids \
|
||||
logfiles \
|
||||
machine_id \
|
||||
diff --git a/sysprep/sysprep_operation_kerberos_hostkeytab.ml b/sysprep/sysprep_operation_kerberos_hostkeytab.ml
|
||||
new file mode 100644
|
||||
index 000000000..cb3023353
|
||||
--- /dev/null
|
||||
+++ b/sysprep/sysprep_operation_kerberos_hostkeytab.ml
|
||||
@@ -0,0 +1,38 @@
|
||||
+(* virt-sysprep
|
||||
+ * Copyright (C) 2020 Red Hat Inc.
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along
|
||||
+ * with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
+ *)
|
||||
+
|
||||
+open Sysprep_operation
|
||||
+open Common_gettext.Gettext
|
||||
+
|
||||
+module G = Guestfs
|
||||
+
|
||||
+let kerberos_hostkeytab_perform (g : Guestfs.guestfs) root side_effects =
|
||||
+ let typ = g#inspect_get_type root in
|
||||
+ if typ <> "windows" then (
|
||||
+ (try g#rm "/etc/krb5.keytab" with G.Error _ -> ())
|
||||
+ )
|
||||
+
|
||||
+let op = {
|
||||
+ defaults with
|
||||
+ name = "kerberos-hostkeytab";
|
||||
+ enabled_by_default = true;
|
||||
+ heading = s_"Remove the Kerberos host keytab file in the guest";
|
||||
+ perform_on_filesystems = Some kerberos_hostkeytab_perform;
|
||||
+}
|
||||
+
|
||||
+let () = register_operation op
|
||||
--
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From f9ceb4fd65f882c9e6aad6310567ce40d19c4070 Mon Sep 17 00:00:00 2001
|
||||
From 0647a3a475c647d363205bdbdaca8a79614460c3 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 21 Dec 2012 15:50:11 +0000
|
||||
Subject: [PATCH] RHEL 8: Remove libguestfs live (RHBZ#798980).
|
||||
@ -34,5 +34,5 @@ index 4794a7b13..993b83601 100644
|
||||
|
||||
static int
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 468bfa7cb5db1294310c0193e51bc5a20092f4ce Mon Sep 17 00:00:00 2001
|
||||
From 3341114876c1a2df330b68d15026ba266d557d6e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 18 Jul 2013 18:31:53 +0100
|
||||
Subject: [PATCH] RHEL 8: Remove 9p APIs from RHEL (RHBZ#921710).
|
||||
@ -368,5 +368,5 @@ index 79f4b8c56..b99333d0d 100644
|
||||
gobject/src/optargs-ntfsclone_out.c
|
||||
gobject/src/optargs-ntfsfix.c
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d20dddb121c5f367cbec71639a64c4fca6737bf2 Mon Sep 17 00:00:00 2001
|
||||
From 717d8b6a2d0bb559684a436b4f1bc115ac36d3dd Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 29 Jul 2013 14:47:56 +0100
|
||||
Subject: [PATCH] RHEL 8: Disable unsupported remote drive protocols
|
||||
@ -605,5 +605,5 @@ index 19dd60a2f..583e031bd 100755
|
||||
-grep -sq -- '-drive file=ssh://rich@example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail
|
||||
-rm "$DEBUG_QEMU_FILE"
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 6bf62d3c79aab0dd01ad5ab9cfc9a12b119976f6 Mon Sep 17 00:00:00 2001
|
||||
From 3d30c10f351b61c9c9aae54fd8a250af5cd8a61a Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 19 Sep 2014 13:38:20 +0100
|
||||
Subject: [PATCH] RHEL 8: Remove User-Mode Linux (RHBZ#1144197).
|
||||
@ -68,5 +68,5 @@ index da20c17d9..a5e0e8179 100644
|
||||
static int
|
||||
shutdown_uml (guestfs_h *g, void *datav, int check_for_errors)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 699137c5c84439597757f8c00373ebb53544223b Mon Sep 17 00:00:00 2001
|
||||
From fbc5eea00f9f9cd27a1c53913e58f8a4937fd067 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sun, 28 Sep 2014 19:14:43 +0100
|
||||
Subject: [PATCH] RHEL 8: v2v: Select correct qemu binary for -o qemu mode
|
||||
@ -29,5 +29,5 @@ index 1f6798aaf..8665d7b5c 100644
|
||||
let flag = Qemuopts.flag cmd
|
||||
and arg = Qemuopts.arg cmd
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 839672ac70f58af6ab4a7ff31335efc28b49df57 Mon Sep 17 00:00:00 2001
|
||||
From ec11bac4af65a54400739e476bf90fe815073619 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 30 Sep 2014 10:50:27 +0100
|
||||
Subject: [PATCH] RHEL 8: v2v: Disable the --qemu-boot option (RHBZ#1147313).
|
||||
@ -101,5 +101,5 @@ index 25041d0ec..bd606592b 100644
|
||||
|
||||
=item B<--quiet>
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From e91337be55a8728125de3457dca8f1a998ad18c5 Mon Sep 17 00:00:00 2001
|
||||
From 0abf9c24495d577d20fe0d972212dec4eb2b2e73 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Fri, 24 Oct 2014 16:33:50 +0100
|
||||
Subject: [PATCH] RHEL 8: Disable alternate Augeas lenses.
|
||||
@ -56,5 +56,5 @@ index 453251337..5bbfffa2d 100644
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2736193735e3e84d81993ac8464c64381119c679 Mon Sep 17 00:00:00 2001
|
||||
From c5db36832644bb6330f90670e799d59cef3d6771 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Fri, 24 Apr 2015 09:45:41 -0400
|
||||
Subject: [PATCH] RHEL 8: Fix list of supported sound cards to match RHEL qemu
|
||||
@ -30,5 +30,5 @@ index 74b501f81..21e9c9c15 100644
|
||||
(* Find the UEFI firmware. *)
|
||||
let find_uefi_firmware guest_arch =
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 9f85ee42bc679642ead93582e3d44e5cf3c30503 Mon Sep 17 00:00:00 2001
|
||||
From dcd37841d19c43f5874b11a1f81e578df49d58e6 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 7 Jul 2015 09:28:03 -0400
|
||||
Subject: [PATCH] RHEL 8: Reject use of libguestfs-winsupport features except
|
||||
@ -36,5 +36,5 @@ index 86f7d89a3..b5bb99f53 100644
|
||||
* as a progress bar hint.
|
||||
*)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From a08c766a556bc6f258dc498b0a1a3b17f251ed66 Mon Sep 17 00:00:00 2001
|
||||
From e17bc8207168c45b2e887decc0a19b5689798b0b Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Sun, 30 Aug 2015 03:21:57 -0400
|
||||
Subject: [PATCH] RHEL 8: Fix tests for libguestfs-winsupport.
|
||||
@ -89,5 +89,5 @@ index f1da222a9..ff94fe39b 100755
|
||||
|
||||
# We also update the Registry several times, for firstboot, and (ONLY
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 101d4d7718eb5a53e44de72bc1337c6d3882f314 Mon Sep 17 00:00:00 2001
|
||||
From fbda37c7b2819300b6b09d2b0b84cec547fdd00e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 21 Sep 2015 13:12:43 -0400
|
||||
Subject: [PATCH] RHEL 8: tests: Disable daemon tests that require the 'unix'
|
||||
@ -24,5 +24,5 @@ index 053cad3e1..0d723fee4 100644
|
||||
TESTS_ENVIRONMENT = $(top_builddir)/run --test
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From cff6b6531fe7e2bcb9ae8f022bb38a0cabd218f4 Mon Sep 17 00:00:00 2001
|
||||
From d6e49b3cd141cdf573e1e4f59d248007f3658435 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 14 Jan 2016 11:53:42 -0500
|
||||
Subject: [PATCH] RHEL 8: v2v: Disable the virt-v2v --in-place option.
|
||||
@ -282,5 +282,5 @@ index bd606592b..092d88635 100644
|
||||
|
||||
The I<--machine-readable> option can be used to make the output more
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 6ae622c541bdc1128a0a8a6d0cfe7cae29186556 Mon Sep 17 00:00:00 2001
|
||||
From ce7a5cc371d6f6e0f96c2cd897245a2e83839c20 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 2 Mar 2017 14:21:37 +0100
|
||||
Subject: [PATCH] RHEL 8: v2v: -i disk: force VNC as display (RHBZ#1372671)
|
||||
@ -22,5 +22,5 @@ index 8321a2a8c..6bd9f43f8 100644
|
||||
s_video = None;
|
||||
s_sound = None;
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From b60599b78bdf31c289767b01c235580534f52f77 Mon Sep 17 00:00:00 2001
|
||||
From 0cf211cc08f0f0b886021dc10b52a03aa2d22b1f Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Wed, 8 Mar 2017 11:03:40 +0100
|
||||
Subject: [PATCH] RHEL 8: v2v: do not mention SUSE Xen hosts (RHBZ#1430203)
|
||||
@ -22,5 +22,5 @@ index 9fd5065f1..c3c20a6b6 100644
|
||||
=head1 INPUT FROM XEN
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From a233d0f924d7c052bbd663a8e1d47fe363de120c Mon Sep 17 00:00:00 2001
|
||||
From 2009eb2439c8112789728856f08a9f92c6883ad8 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Mon, 14 May 2018 10:16:58 +0100
|
||||
Subject: [PATCH] RHEL 8: v2v: rhv-upload: Remove restriction on -oa sparse.
|
||||
@ -87,5 +87,5 @@ index 4520c9184..f6579a48e 100644
|
||||
|
||||
A file containing a password to be used when connecting to the oVirt
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From c5212d2acda7eb21923e376f7c7b0d8ce8a108d1 Mon Sep 17 00:00:00 2001
|
||||
From 58a4b8f9a1a8590728dd169f8c481171ab859b7d Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Sun, 16 Dec 2018 16:42:46 +0100
|
||||
Subject: [PATCH] RHEL 8: use platform-python
|
||||
@ -23,5 +23,5 @@ index 3159373a1..f2c00c40f 100644
|
||||
type script = {
|
||||
tmpdir : string; (* Temporary directory. *)
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
From b70c61045e659720ee8f7dbd8eff643a877e8e2f Mon Sep 17 00:00:00 2001
|
||||
From a53675a2b1142654fa3cacc775e44692419d10e0 Mon Sep 17 00:00:00 2001
|
||||
From: Pino Toscano <ptoscano@redhat.com>
|
||||
Date: Tue, 26 Mar 2019 09:42:25 +0100
|
||||
Subject: [PATCH] RHEL 8: point to KB for supported v2v hypervisors/guests
|
||||
@ -121,5 +121,5 @@ index a22506068..4ec1a07c1 100644
|
||||
=head2 Guest firmware
|
||||
|
||||
--
|
||||
2.24.1
|
||||
2.25.4
|
||||
|
@ -6,7 +6,7 @@ set -e
|
||||
# directory. Use it like this:
|
||||
# ./copy-patches.sh
|
||||
|
||||
rhel_version=8.0
|
||||
rhel_version=8.3.0
|
||||
|
||||
# Check we're in the right directory.
|
||||
if [ ! -f libguestfs.spec ]; then
|
||||
|
@ -36,7 +36,7 @@ Summary: Access and modify virtual machine disk images
|
||||
Name: libguestfs
|
||||
Epoch: 1
|
||||
Version: 1.40.2
|
||||
Release: 22%{?dist}
|
||||
Release: 24%{?dist}
|
||||
License: LGPLv2+
|
||||
|
||||
# Source and patches.
|
||||
@ -49,7 +49,7 @@ Source1: http://libguestfs.org/download/1.40-stable/%{name}-%{version}.tar
|
||||
ExclusiveArch: x86_64 %{power64} aarch64 s390x
|
||||
|
||||
# RHEL 8 git repository is:
|
||||
# https://github.com/libguestfs/libguestfs/tree/rhel-8.0
|
||||
# https://github.com/libguestfs/libguestfs/tree/rhel-8.3.0
|
||||
# Use 'copy-patches.sh' to copy the patches from the git repo
|
||||
# to the current directory.
|
||||
|
||||
@ -109,23 +109,32 @@ Patch0052: 0052-v2v-windows-install-QEMU-Guest-Agent-MSI.patch
|
||||
Patch0053: 0053-windows-small-tweaks-of-qemu-ga-firstboot-script.patch
|
||||
Patch0054: 0054-windows-fix-detection-of-qemu-ga-installer-on-RHV.patch
|
||||
Patch0055: 0055-windows-delay-installation-of-qemu-ga-MSI.patch
|
||||
Patch0056: 0056-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
|
||||
Patch0057: 0057-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch
|
||||
Patch0058: 0058-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
|
||||
Patch0059: 0059-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch
|
||||
Patch0060: 0060-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
|
||||
Patch0061: 0061-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
|
||||
Patch0062: 0062-RHEL-8-Disable-alternate-Augeas-lenses.patch
|
||||
Patch0063: 0063-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
|
||||
Patch0064: 0064-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
|
||||
Patch0065: 0065-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
|
||||
Patch0066: 0066-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
|
||||
Patch0067: 0067-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
|
||||
Patch0068: 0068-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0069: 0069-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
|
||||
Patch0070: 0070-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch
|
||||
Patch0071: 0071-RHEL-8-use-platform-python.patch
|
||||
Patch0072: 0072-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch
|
||||
Patch0056: 0056-daemon-xattr-Refactor-code-which-splits-attr-names-f.patch
|
||||
Patch0057: 0057-daemon-Add-filter_list-utility-function.patch
|
||||
Patch0058: 0058-daemon-xattr-Filter-out-user.WofCompressedData-from-.patch
|
||||
Patch0059: 0059-mltools-add-run_in_guest_command-helper.patch
|
||||
Patch0060: 0060-customize-port-do_run-to-run_in_guest_command.patch
|
||||
Patch0061: 0061-sysprep-add-a-update_system_ca_store-side-effect.patch
|
||||
Patch0062: 0062-sysprep-ca-certificates-request-system-CA-store-upda.patch
|
||||
Patch0063: 0063-sysprep-add-IPA-offline-unenrollment-RHBZ-1789592.patch
|
||||
Patch0064: 0064-sysprep-add-Kerberos-keytab-file-removal.patch
|
||||
Patch0065: 0065-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch
|
||||
Patch0066: 0066-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch
|
||||
Patch0067: 0067-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch
|
||||
Patch0068: 0068-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch
|
||||
Patch0069: 0069-RHEL-8-v2v-Select-correct-qemu-binary-for-o-qemu-mod.patch
|
||||
Patch0070: 0070-RHEL-8-v2v-Disable-the-qemu-boot-option-RHBZ-1147313.patch
|
||||
Patch0071: 0071-RHEL-8-Disable-alternate-Augeas-lenses.patch
|
||||
Patch0072: 0072-RHEL-8-Fix-list-of-supported-sound-cards-to-match-RH.patch
|
||||
Patch0073: 0073-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch
|
||||
Patch0074: 0074-RHEL-8-Fix-tests-for-libguestfs-winsupport.patch
|
||||
Patch0075: 0075-RHEL-8-tests-Disable-daemon-tests-that-require-the-u.patch
|
||||
Patch0076: 0076-RHEL-8-v2v-Disable-the-virt-v2v-in-place-option.patch
|
||||
Patch0077: 0077-RHEL-8-v2v-i-disk-force-VNC-as-display-RHBZ-1372671.patch
|
||||
Patch0078: 0078-RHEL-8-v2v-do-not-mention-SUSE-Xen-hosts-RHBZ-143020.patch
|
||||
Patch0079: 0079-RHEL-8-v2v-rhv-upload-Remove-restriction-on-oa-spars.patch
|
||||
Patch0080: 0080-RHEL-8-use-platform-python.patch
|
||||
Patch0081: 0081-RHEL-8-point-to-KB-for-supported-v2v-hypervisors-gue.patch
|
||||
|
||||
# Use git for patch management.
|
||||
BuildRequires: git
|
||||
@ -153,7 +162,7 @@ Source7: libguestfs.keyring
|
||||
# RHEV-APT is taken from the RHEV Tools CD
|
||||
# See https://bugzilla.redhat.com/show_bug.cgi?id=1186850
|
||||
Source96: rhsrvany.exe
|
||||
Source97: RHEV-Application-Provisioning-Tool.exe_4.43-3
|
||||
Source97: RHEV-Application-Provisioning-Tool.exe_4.43-5
|
||||
|
||||
Source98: brew-overrides.sh
|
||||
Source99: copy-patches.sh
|
||||
@ -1256,6 +1265,16 @@ install -m 0644 utils/boot-benchmark/boot-benchmark.1 $RPM_BUILD_ROOT%{_mandir}/
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed Jun 24 2020 Pino Toscano <ptoscano@redhat.com> - 1:1.40.2-24
|
||||
- v2v: ship a newer version of rhev-apt.exe
|
||||
resolves: rhbz#1849997
|
||||
|
||||
* Tue May 26 2020 Pino Toscano <ptoscano@redhat.com> - 1:1.40.2-23
|
||||
- Ignore the user.WofCompressedData xattr
|
||||
resolves: rhbz#1811539
|
||||
- sysprep: new ipa-client and kerberos-hostkeytab operations
|
||||
resolves: rhbz#1789592
|
||||
|
||||
* Mon Apr 27 2020 Danilo C. L. de Paula <ddepaula@redhat.com> - 1.40.2
|
||||
- Resolves: bz#1810193
|
||||
(Upgrade components in virt:rhel module:stream for RHEL-8.3 release)
|
||||
|
Loading…
Reference in New Issue
Block a user