import libguestfs-1.40.2-24.module+el8.3.0+7176+57f10f42

This commit is contained in:
CentOS Sources 2020-07-10 01:13:00 +00:00 committed by Andrew Lukoshko
parent 215d58342a
commit d78cb0ccaa
85 changed files with 1164 additions and 112 deletions

2
.gitignore vendored
View File

@ -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

View File

@ -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

View File

@ -122,5 +122,5 @@ index 346019c40..3e5981107 100644
assert (replace ~global:true re0 "dd" "abcabcaabccca" = "ddcddcddccca");
--
2.24.1
2.25.4

View File

@ -411,5 +411,5 @@ index 000000000..35b628369
+ ignore (run_test_tt_main suite);
+ Printf.fprintf stderr "\n"
--
2.24.1
2.25.4

View File

@ -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

View File

@ -28,5 +28,5 @@ index 623591aa6..19f3f87af 100644
return get_png (g, shadowman, size_r, 102400);
}
--
2.24.1
2.25.4

View File

@ -44,5 +44,5 @@ index d5d78d367..b9970cee8 100644
s_hypervisor = hypervisor;
s_name = name; s_orig_name = name;
--
2.24.1
2.25.4

View File

@ -51,5 +51,5 @@ index 2b6dbaeec..b3ebda182 100644
=item 3.
--
2.24.1
2.25.4

View File

@ -53,5 +53,5 @@ index 3d61400b5..b4b2f24c4 100644
) inspect.i_apps;
let libraries = !libraries in
--
2.24.1
2.25.4

View File

@ -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

View File

@ -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

View File

@ -59,5 +59,5 @@ index 77c39107e..c2a5c72c7 100644
args in
--
2.24.1
2.25.4

View File

@ -41,5 +41,5 @@ index b9970cee8..14cd82afd 100644
s_video = video;
s_sound = sound;
--
2.24.1
2.25.4

View File

@ -92,5 +92,5 @@ index 24641369e..5a35708cd 100644
getopt : Getopt.t;
ks : key_store;
--
2.24.1
2.25.4

View File

@ -30,5 +30,5 @@ index 5a35708cd..ade4cb37f 100644
Some { pr }
--
2.24.1
2.25.4

View File

@ -83,5 +83,5 @@ index 53cece2da..f11028466 100644
The output goes to the specified F<filename>.
--
2.24.1
2.25.4

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -45,5 +45,5 @@ index b169b2537..e3469308d 100644
| None -> ""
| Some port -> sprintf " -P %d" port)
--
2.24.1
2.25.4

View File

@ -24,5 +24,5 @@ index 92bf3ec60..a6dc29f2c 100644
try
--
2.24.1
2.25.4

View File

@ -42,5 +42,5 @@ index 91ff5198d..9aad5dd15 100644
bpf "LEGALITY=LEGAL\n";
bpf "POOL_UUID=\n";
--
2.24.1
2.25.4

View File

@ -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

View File

@ -57,5 +57,5 @@ index 8d1058d67..cc4224ccd 100644
def list(self, search=None, case_sensitive=False):
return []
--
2.24.1
2.25.4

View File

@ -260,5 +260,5 @@ index 000000000..fbb884b94
+
+# Otherwise everything is OK, exit with no error.
--
2.24.1
2.25.4

View File

@ -49,5 +49,5 @@ index d6a58f0fc..de8a66c05 100644
+
+json.dump(results, sys.stdout)
--
2.24.1
2.25.4

View File

@ -165,5 +165,5 @@ index de8a66c05..725a8dc9e 100644
json.dump(results, sys.stdout)
--
2.24.1
2.25.4

View File

@ -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

View File

@ -72,5 +72,5 @@ index 277d8f2c7..63e809030 100644
(* Update the target_actual_size field in the target structure. *)
--
2.24.1
2.25.4

View File

@ -80,5 +80,5 @@ index 19bdfcf05..382ad0d93 100644
let ovf = DOM.doc_to_string ovf in
--
2.24.1
2.25.4

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -419,5 +419,5 @@ index 9a555c3be..0642d158f 100644
=item B<--machine-readable>=format
--
2.24.1
2.25.4

View File

@ -83,5 +83,5 @@ index 80e3e6eab..055b6671a 100644
-506
+507
--
2.24.1
2.25.4

View File

@ -43,5 +43,5 @@ index 7f689866b..f783066ff 100644
error (EXIT_FAILURE, errno, "realloc");
--
2.24.1
2.25.4

View File

@ -81,5 +81,5 @@ index f783066ff..74b549731 100644
error (EXIT_FAILURE, errno, "strdup");
break;
--
2.24.1
2.25.4

View File

@ -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

View File

@ -433,5 +433,5 @@ index 0642d158f..8c2867814 100644
Read the passphrase from F<FILENAME>.
--
2.24.1
2.25.4

View File

@ -309,5 +309,5 @@ index 8c2867814..25041d0ec 100644
=over 4
--
2.24.1
2.25.4

View File

@ -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

View File

@ -25,5 +25,5 @@ index c278347c1..0b256e2d2 100644
fun line ->
String.length line > 0 && line.[0] <> '#'
--
2.24.1
2.25.4

View File

@ -39,5 +39,5 @@ index d187f1d5d..bebf9af18 100644
attach_timeout
(fun () ->
--
2.24.1
2.25.4

View File

@ -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

View File

@ -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

View File

@ -27,5 +27,5 @@ index f13405df1..9b83d1cfa 100644
# Now we have permission to start the transfer.
--
2.24.1
2.25.4

View File

@ -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

View File

@ -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

View File

@ -45,5 +45,5 @@ index 04a894268..4520c9184 100644
=item I<-oo rhv-cluster=>C<CLUSTERNAME>
--
2.24.1
2.25.4

View File

@ -29,5 +29,5 @@ index 4bb5d2dc2..9fd5065f1 100644
=head2 Test libvirt connection to remote Xen host
--
2.24.1
2.25.4

View File

@ -31,5 +31,5 @@ index a6dc29f2c..7be63a316 100644
| "sles" | "suse-based" | "opensuse" -> Some "lp151"
| _ -> None in
--
2.24.1
2.25.4

View File

@ -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

View File

@ -115,5 +115,5 @@ index ae3b7e865..731dbd6f0 100644
(* The following function is only exported for unit tests. *)
--
2.24.1
2.25.4

View File

@ -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

View File

@ -39,5 +39,5 @@ index ea7e5c02d..9a7297344 100644
(* The following function is only exported for unit tests. *)
--
2.24.1
2.25.4

View File

@ -63,5 +63,5 @@ index 43c1f85de..088cd33d9 100644
("install " ^ msi_path) fb_script;
) files
--
2.24.1
2.25.4

View File

@ -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

View 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

View File

@ -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

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)