commit f8aac11becc7fb6ff2ca23443db1082326c769fd
Author: MSVSphere Packaging Team <packager@msvsphere-os.ru>
Date:   Tue Nov 26 17:08:26 2024 +0300

    import libnbd-1.20.2-2.el10

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..058e3c1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/libguestfs.keyring
+SOURCES/libnbd-1.20.2.tar.gz
diff --git a/.libnbd.metadata b/.libnbd.metadata
new file mode 100644
index 0000000..323911f
--- /dev/null
+++ b/.libnbd.metadata
@@ -0,0 +1,2 @@
+cc1b37b9cfafa515aab3eefd345ecc59aac2ce7b SOURCES/libguestfs.keyring
+d3abc6e794dd4b99640328bfd395a8913288e859 SOURCES/libnbd-1.20.2.tar.gz
diff --git a/SOURCES/0001-generator-Print-full-error-in-handle_reply_error.patch b/SOURCES/0001-generator-Print-full-error-in-handle_reply_error.patch
new file mode 100644
index 0000000..460a9e3
--- /dev/null
+++ b/SOURCES/0001-generator-Print-full-error-in-handle_reply_error.patch
@@ -0,0 +1,191 @@
+From 9e51ca3dc11b4abe2e5145837ae80863fc300646 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 23 Jul 2024 17:22:12 +0100
+Subject: [PATCH] generator: Print full error in handle_reply_error
+
+Print the full error from the server during handshaking.  This
+modifies the contract of handle_reply_error so it calls set_error,
+which can be overridden by callers or ignored completely.
+
+(cherry picked from commit cf49a49adc8abc8c917437db7461ed9956583877)
+---
+ generator/states-newstyle-opt-go.c           | 32 +--------
+ generator/states-newstyle-opt-list.c         |  5 +-
+ generator/states-newstyle-opt-meta-context.c |  8 +--
+ generator/states-newstyle.c                  | 68 ++++++++++++++++++--
+ 4 files changed, 69 insertions(+), 44 deletions(-)
+
+diff --git a/generator/states-newstyle-opt-go.c b/generator/states-newstyle-opt-go.c
+index 5bc9a9ae..f6eb8afc 100644
+--- a/generator/states-newstyle-opt-go.c
++++ b/generator/states-newstyle-opt-go.c
+@@ -247,37 +247,9 @@ STATE_MACHINE {
+       SET_NEXT_STATE (%.DEAD);
+       return 0;
+     }
+-    /* Decode expected known errors into a nicer string */
+-    switch (reply) {
+-    case NBD_REP_ERR_UNSUP:
++    if (reply == NBD_REP_ERR_UNSUP)
+       assert (h->opt_current == NBD_OPT_INFO);
+-      set_error (ENOTSUP, "handshake: server lacks NBD_OPT_INFO support");
+-      break;
+-    case NBD_REP_ERR_POLICY:
+-    case NBD_REP_ERR_PLATFORM:
+-      set_error (0, "handshake: server policy prevents NBD_OPT_GO");
+-      break;
+-    case NBD_REP_ERR_INVALID:
+-    case NBD_REP_ERR_TOO_BIG:
+-      set_error (EINVAL, "handshake: server rejected NBD_OPT_GO as invalid");
+-      break;
+-    case NBD_REP_ERR_TLS_REQD:
+-      set_error (ENOTSUP, "handshake: server requires TLS encryption first");
+-      break;
+-    case NBD_REP_ERR_UNKNOWN:
+-      set_error (ENOENT, "handshake: server has no export named '%s'",
+-                 h->export_name);
+-      break;
+-    case NBD_REP_ERR_SHUTDOWN:
+-      set_error (ESHUTDOWN, "handshake: server is shutting down");
+-      break;
+-    case NBD_REP_ERR_BLOCK_SIZE_REQD:
+-      set_error (EINVAL, "handshake: server requires specific block sizes");
+-      break;
+-    default:
+-      set_error (0, "handshake: unknown reply from NBD_OPT_GO: 0x%" PRIx32,
+-                 reply);
+-    }
++
+     nbd_internal_reset_size_and_flags (h);
+     h->meta_valid = false;
+     err = nbd_get_errno () ? : ENOTSUP;
+diff --git a/generator/states-newstyle-opt-list.c b/generator/states-newstyle-opt-list.c
+index cdd4676e..6605ee0a 100644
+--- a/generator/states-newstyle-opt-list.c
++++ b/generator/states-newstyle-opt-list.c
+@@ -127,9 +127,8 @@ STATE_MACHINE {
+       SET_NEXT_STATE (%.DEAD);
+       return 0;
+     }
+-    err = ENOTSUP;
+-    set_error (err, "unexpected response, possibly the server does not "
+-               "support listing exports");
++    debug (h, "unexpected response, possibly the server does not "
++           "support listing exports");
+     break;
+   }
+ 
+diff --git a/generator/states-newstyle-opt-meta-context.c b/generator/states-newstyle-opt-meta-context.c
+index 6f016e66..3945411e 100644
+--- a/generator/states-newstyle-opt-meta-context.c
++++ b/generator/states-newstyle-opt-meta-context.c
+@@ -270,12 +270,8 @@ STATE_MACHINE {
+     }
+ 
+     if (opt == h->opt_current) {
+-      /* XXX Should we decode specific expected errors, like
+-       * REP_ERR_UNKNOWN to ENOENT or REP_ERR_TOO_BIG to ERANGE?
+-       */
+-      err = ENOTSUP;
+-      set_error (err, "unexpected response, possibly the server does not "
+-                 "support meta contexts");
++      debug (h, "unexpected response, possibly the server does not "
++             "support meta contexts");
+       CALL_CALLBACK (h->opt_cb.completion, &err);
+       nbd_internal_free_option (h);
+       SET_NEXT_STATE (%.NEGOTIATING);
+diff --git a/generator/states-newstyle.c b/generator/states-newstyle.c
+index 45893a8b..6c7cc45c 100644
+--- a/generator/states-newstyle.c
++++ b/generator/states-newstyle.c
+@@ -79,14 +79,18 @@ prepare_for_reply_payload (struct nbd_handle *h, uint32_t opt)
+   return 0;
+ }
+ 
+-/* Check an unexpected server reply. If it is an error, log any
+- * message from the server and return 0; otherwise, return -1.
++/* Check an unexpected server reply error.
++ *
++ * This calls set_error with a descriptive error message and returns
++ * 0.  Unless there is a further unexpected error while processing
++ * this error, in which case it calls set_error and returns -1.
+  */
+ static int
+ handle_reply_error (struct nbd_handle *h)
+ {
+   uint32_t len;
+   uint32_t reply;
++  char *msg = NULL;
+ 
+   len = be32toh (h->sbuf.or.option_reply.replylen);
+   reply = be32toh (h->sbuf.or.option_reply.reply);
+@@ -101,9 +105,63 @@ handle_reply_error (struct nbd_handle *h)
+     return -1;
+   }
+ 
+-  if (len > 0)
+-    debug (h, "handshake: server error message: %.*s", (int)len,
+-           h->sbuf.or.payload.err_msg);
++  /* Decode expected errors into a nicer string.
++   *
++   * XXX Note this string comes directly from the server, and most
++   * libnbd users simply print the error using 'fprintf'.  We really
++   * ought to quote this string somehow, but we don't have a useful
++   * function for that.
++   */
++  if (len > 0) {
++    if (asprintf (&msg, ": %.*s",
++                  (int)len, h->sbuf.or.payload.err_msg) == -1) {
++      set_error (errno, "asprintf");
++      return -1;
++    }
++  }
++
++  switch (reply) {
++  case NBD_REP_ERR_UNSUP:
++    set_error (ENOTSUP, "the operation is not supported by the server%s",
++               msg ? : "");
++      break;
++    case NBD_REP_ERR_POLICY:
++      set_error (0, "server policy prevents the operation%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_PLATFORM:
++      set_error (0, "the operation is not supported by the server platform%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_INVALID:
++      set_error (EINVAL, "the server rejected this operation as invalid%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_TOO_BIG:
++      set_error (EINVAL, "the operation is too large to process%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_TLS_REQD:
++      set_error (ENOTSUP, "the server requires TLS encryption first%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_UNKNOWN:
++      set_error (ENOENT, "the server has no export named '%s'%s",
++                 h->export_name, msg ? : "");
++      break;
++    case NBD_REP_ERR_SHUTDOWN:
++      set_error (ESHUTDOWN, "the server is shutting down%s",
++                 msg ? : "");
++      break;
++    case NBD_REP_ERR_BLOCK_SIZE_REQD:
++      set_error (EINVAL, "the server requires specific block sizes%s",
++                 msg ? : "");
++      break;
++    default:
++      set_error (0, "handshake: unknown reply from the server: 0x%" PRIx32 "%s",
++                 reply, msg ? : "");
++    }
++  free (msg);
+ 
+   return 0;
+ }
+-- 
+2.43.0
+
diff --git a/SOURCES/0002-lib-Don-t-overwrite-error-in-nbd_opt_-go-info.patch b/SOURCES/0002-lib-Don-t-overwrite-error-in-nbd_opt_-go-info.patch
new file mode 100644
index 0000000..8b6dd8b
--- /dev/null
+++ b/SOURCES/0002-lib-Don-t-overwrite-error-in-nbd_opt_-go-info.patch
@@ -0,0 +1,38 @@
+From 6ef03cf2a1fe9f88c07c6f2d97afe9f82bfe03a8 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 23 Jul 2024 17:26:39 +0100
+Subject: [PATCH] lib: Don't overwrite error in nbd_opt_{go,info}
+
+We already set the error in handle_reply_error, so don't overwrite
+that here.
+
+(cherry picked from commit 474a4ae6c8d11212a4a8c06ea3e8b3fd97a7e97d)
+---
+ lib/opt.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/opt.c b/lib/opt.c
+index 600265a0..5872dd54 100644
+--- a/lib/opt.c
++++ b/lib/opt.c
+@@ -99,7 +99,7 @@ nbd_unlocked_opt_go (struct nbd_handle *h)
+   if (r == 0 && err) {
+     assert (nbd_internal_is_state_negotiating (get_next_state (h)) ||
+             nbd_internal_is_state_dead (get_next_state (h)));
+-    set_error (err, "server replied with error to opt_go request");
++    /* handle_reply_error already called set_error */
+     return -1;
+   }
+   if (r == 0)
+@@ -122,7 +122,7 @@ nbd_unlocked_opt_info (struct nbd_handle *h)
+   if (r == 0 && err) {
+     assert (nbd_internal_is_state_negotiating (get_next_state (h)) ||
+             nbd_internal_is_state_dead (get_next_state (h)));
+-    set_error (err, "server replied with error to opt_info request");
++    /* handle_reply_error already called set_error */
+     return -1;
+   }
+   return r;
+-- 
+2.43.0
+
diff --git a/SOURCES/0003-generator-Restore-assignment-to-local-err.patch b/SOURCES/0003-generator-Restore-assignment-to-local-err.patch
new file mode 100644
index 0000000..290b8c1
--- /dev/null
+++ b/SOURCES/0003-generator-Restore-assignment-to-local-err.patch
@@ -0,0 +1,43 @@
+From 1357302046b5eaae09a8817ff050790b0285183d Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 25 Jul 2024 13:39:28 +0100
+Subject: [PATCH] generator: Restore assignment to local 'err'
+
+I accidentally removed the assignment of local variable 'err' along
+these paths in commit cf49a49adc ("generator: Print full error in
+handle_reply_error").
+
+Fixes: commit cf49a49adc8abc8c917437db7461ed9956583877
+(cherry picked from commit e75d20b9e19143b1bd0d232fc49cb2e0287f824a)
+---
+ generator/states-newstyle-opt-list.c         | 1 +
+ generator/states-newstyle-opt-meta-context.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/generator/states-newstyle-opt-list.c b/generator/states-newstyle-opt-list.c
+index 6605ee0a..48559574 100644
+--- a/generator/states-newstyle-opt-list.c
++++ b/generator/states-newstyle-opt-list.c
+@@ -129,6 +129,7 @@ STATE_MACHINE {
+     }
+     debug (h, "unexpected response, possibly the server does not "
+            "support listing exports");
++    err = ENOTSUP;
+     break;
+   }
+ 
+diff --git a/generator/states-newstyle-opt-meta-context.c b/generator/states-newstyle-opt-meta-context.c
+index 3945411e..699e24aa 100644
+--- a/generator/states-newstyle-opt-meta-context.c
++++ b/generator/states-newstyle-opt-meta-context.c
+@@ -272,6 +272,7 @@ STATE_MACHINE {
+     if (opt == h->opt_current) {
+       debug (h, "unexpected response, possibly the server does not "
+              "support meta contexts");
++      err = ENOTSUP;
+       CALL_CALLBACK (h->opt_cb.completion, &err);
+       nbd_internal_free_option (h);
+       SET_NEXT_STATE (%.NEGOTIATING);
+-- 
+2.43.0
+
diff --git a/SOURCES/0004-generator-states-newstyle.c-Quote-untrusted-string-f.patch b/SOURCES/0004-generator-states-newstyle.c-Quote-untrusted-string-f.patch
new file mode 100644
index 0000000..bdc9946
--- /dev/null
+++ b/SOURCES/0004-generator-states-newstyle.c-Quote-untrusted-string-f.patch
@@ -0,0 +1,175 @@
+From 1de017428047f1a8991285766b69b767ab895c24 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 25 Jul 2024 13:25:34 +0100
+Subject: [PATCH] generator/states-newstyle.c: Quote untrusted string from the
+ server
+
+Updates: commit cf49a49adc8abc8c917437db7461ed9956583877
+(cherry picked from commit 5dbfc418cb6176102634acea2256b2335520159c)
+---
+ generator/states-newstyle.c | 124 ++++++++++++++++++++----------------
+ 1 file changed, 68 insertions(+), 56 deletions(-)
+
+diff --git a/generator/states-newstyle.c b/generator/states-newstyle.c
+index 6c7cc45c..8c483bd2 100644
+--- a/generator/states-newstyle.c
++++ b/generator/states-newstyle.c
+@@ -18,6 +18,7 @@
+ 
+ #include <assert.h>
+ 
++#include "ascii-ctype.h"
+ #include "internal.h"
+ 
+ /* Common code for parsing a reply to NBD_OPT_*. */
+@@ -88,80 +89,91 @@ prepare_for_reply_payload (struct nbd_handle *h, uint32_t opt)
+ static int
+ handle_reply_error (struct nbd_handle *h)
+ {
+-  uint32_t len;
+   uint32_t reply;
+-  char *msg = NULL;
++  uint32_t replylen;
++  FILE *fp;
++  char *s = NULL;
++  size_t len = 0;
++  int err = 0;
+ 
+-  len = be32toh (h->sbuf.or.option_reply.replylen);
+   reply = be32toh (h->sbuf.or.option_reply.reply);
+   if (!NBD_REP_IS_ERR (reply)) {
+     set_error (0, "handshake: unexpected option reply type %d", reply);
+     return -1;
+   }
+ 
++  replylen = be32toh (h->sbuf.or.option_reply.replylen);
+   assert (NBD_MAX_STRING < sizeof h->sbuf.or.payload);
+-  if (len > NBD_MAX_STRING) {
++  if (replylen > NBD_MAX_STRING) {
+     set_error (0, "handshake: option error string too long");
+     return -1;
+   }
+ 
+-  /* Decode expected errors into a nicer string.
+-   *
+-   * XXX Note this string comes directly from the server, and most
+-   * libnbd users simply print the error using 'fprintf'.  We really
+-   * ought to quote this string somehow, but we don't have a useful
+-   * function for that.
+-   */
+-  if (len > 0) {
+-    if (asprintf (&msg, ": %.*s",
+-                  (int)len, h->sbuf.or.payload.err_msg) == -1) {
+-      set_error (errno, "asprintf");
+-      return -1;
+-    }
++  /* Decode expected errors into a nicer string. */
++  fp = open_memstream (&s, &len);
++  if (fp == NULL) {
++    set_error (errno, "open_memstream");
++    return -1;
+   }
+ 
+   switch (reply) {
+   case NBD_REP_ERR_UNSUP:
+-    set_error (ENOTSUP, "the operation is not supported by the server%s",
+-               msg ? : "");
+-      break;
+-    case NBD_REP_ERR_POLICY:
+-      set_error (0, "server policy prevents the operation%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_PLATFORM:
+-      set_error (0, "the operation is not supported by the server platform%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_INVALID:
+-      set_error (EINVAL, "the server rejected this operation as invalid%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_TOO_BIG:
+-      set_error (EINVAL, "the operation is too large to process%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_TLS_REQD:
+-      set_error (ENOTSUP, "the server requires TLS encryption first%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_UNKNOWN:
+-      set_error (ENOENT, "the server has no export named '%s'%s",
+-                 h->export_name, msg ? : "");
+-      break;
+-    case NBD_REP_ERR_SHUTDOWN:
+-      set_error (ESHUTDOWN, "the server is shutting down%s",
+-                 msg ? : "");
+-      break;
+-    case NBD_REP_ERR_BLOCK_SIZE_REQD:
+-      set_error (EINVAL, "the server requires specific block sizes%s",
+-                 msg ? : "");
+-      break;
+-    default:
+-      set_error (0, "handshake: unknown reply from the server: 0x%" PRIx32 "%s",
+-                 reply, msg ? : "");
++    err = ENOTSUP;
++    fprintf (fp, "the operation is not supported by the server");
++    break;
++  case NBD_REP_ERR_POLICY:
++    fprintf (fp, "server policy prevents the operation");
++    break;
++  case NBD_REP_ERR_PLATFORM:
++    fprintf (fp, "the operation is not supported by the server platform");
++    break;
++  case NBD_REP_ERR_INVALID:
++    err = EINVAL;
++    fprintf (fp, "the server rejected this operation as invalid");
++    break;
++  case NBD_REP_ERR_TOO_BIG:
++    err = EINVAL;
++    fprintf (fp, "the operation is too large to process");
++    break;
++  case NBD_REP_ERR_TLS_REQD:
++    err = ENOTSUP;
++    fprintf (fp, "the server requires TLS encryption first");
++    break;
++  case NBD_REP_ERR_UNKNOWN:
++    err = ENOENT;
++    fprintf (fp, "the server has no export named '%s'", h->export_name);
++    break;
++  case NBD_REP_ERR_SHUTDOWN:
++    err = ESHUTDOWN;
++    fprintf (fp, "the server is shutting down");
++    break;
++  case NBD_REP_ERR_BLOCK_SIZE_REQD:
++    err = EINVAL;
++    fprintf (fp, "the server requires specific block sizes");
++    break;
++  default:
++    fprintf (fp, "handshake: unknown reply from the server: 0x%" PRIx32,
++             reply);
++  }
++
++  if (replylen > 0) {
++    /* Since this message comes from the server, take steps to quote it. */
++    uint32_t i;
++    const char *msg = h->sbuf.or.payload.err_msg;
++
++    fprintf (fp, ": ");
++    for (i = 0; i < replylen; ++i) {
++      if (ascii_isprint (msg[i]))
++        fputc (msg[i], fp);
++      else
++        fprintf (fp, "\\x%02x", msg[i]);
+     }
+-  free (msg);
++  }
++
++  fclose (fp);
++
++  set_error (err, "%s", s);
++  free (s);
+ 
+   return 0;
+ }
+-- 
+2.43.0
+
diff --git a/SOURCES/0005-generator-states-newstyle.c-Don-t-sign-extend-escape.patch b/SOURCES/0005-generator-states-newstyle.c-Don-t-sign-extend-escape.patch
new file mode 100644
index 0000000..f4c8f90
--- /dev/null
+++ b/SOURCES/0005-generator-states-newstyle.c-Don-t-sign-extend-escape.patch
@@ -0,0 +1,27 @@
+From f24c7801aef0e2f8936d74ac5237c3391fb39d26 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Thu, 25 Jul 2024 15:48:46 +0100
+Subject: [PATCH] generator/states-newstyle.c: Don't sign extend escaped chars
+
+Fixes: commit 5dbfc418cb6176102634acea2256b2335520159c
+(cherry picked from commit 0d6c6bbb3386de3b60ab6c4831045f2b1896051b)
+---
+ generator/states-newstyle.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/generator/states-newstyle.c b/generator/states-newstyle.c
+index 8c483bd2..1e026a8a 100644
+--- a/generator/states-newstyle.c
++++ b/generator/states-newstyle.c
+@@ -159,7 +159,7 @@ handle_reply_error (struct nbd_handle *h)
+   if (replylen > 0) {
+     /* Since this message comes from the server, take steps to quote it. */
+     uint32_t i;
+-    const char *msg = h->sbuf.or.payload.err_msg;
++    const unsigned char *msg = (unsigned char *) h->sbuf.or.payload.err_msg;
+ 
+     fprintf (fp, ": ");
+     for (i = 0; i < replylen; ++i) {
+-- 
+2.43.0
+
diff --git a/SOURCES/copy-patches.sh b/SOURCES/copy-patches.sh
new file mode 100755
index 0000000..bab7b72
--- /dev/null
+++ b/SOURCES/copy-patches.sh
@@ -0,0 +1,55 @@
+#!/bin/bash -
+
+set -e
+
+# Maintainer script to copy patches from the git repo to the current
+# directory.  Use it like this:
+#   ./copy-patches.sh
+
+rhel_version=10.0
+
+# Check we're in the right directory.
+if [ ! -f libnbd.spec ]; then
+    echo "$0: run this from the directory containing 'libnbd.spec'"
+    exit 1
+fi
+
+git_checkout=$HOME/d/libnbd-rhel-$rhel_version
+if [ ! -d $git_checkout ]; then
+    echo "$0: $git_checkout does not exist"
+    echo "This script is only for use by the maintainer when preparing a"
+    echo "libnbd release on RHEL."
+    exit 1
+fi
+
+# Get the base version of libnbd.
+version=`grep '^Version:' libnbd.spec | awk '{print $2}'`
+tag="v$version"
+
+# Remove any existing patches.
+git rm -f [0-9]*.patch ||:
+rm -f [0-9]*.patch
+
+# Get the patches.
+(cd $git_checkout; rm -f [0-9]*.patch; git format-patch -N $tag)
+mv $git_checkout/[0-9]*.patch .
+
+# Remove any not to be applied.
+rm -f *NOT-FOR-RPM*.patch
+
+# Add the patches.
+git add [0-9]*.patch
+
+# Print out the patch lines.
+echo
+echo "--- Copy the following text into libnbd.spec file"
+echo
+
+echo "# Patches."
+for f in [0-9]*.patch; do
+    n=`echo $f | awk -F- '{print $1}'`
+    echo "Patch$n:     $f"
+done
+
+echo
+echo "--- End of text"
diff --git a/SOURCES/libnbd-1.20.2.tar.gz.sig b/SOURCES/libnbd-1.20.2.tar.gz.sig
new file mode 100644
index 0000000..80a5dcf
--- /dev/null
+++ b/SOURCES/libnbd-1.20.2.tar.gz.sig
@@ -0,0 +1,17 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmZ7KY8RHHJpY2hAYW5u
+ZXhpYS5vcmcACgkQkXOPc+G3aKAP7A/9EzaUWFPP1GDCrpfvVods7F+8DN87O/aZ
+mTzw59HNZVz42Yw0cM8MAEckgnpMdT7d64m6E1lx8fxIYGaO+c4r+VeZfYlsZIam
+HFzTe4UYwdjZT1HcR9njSkdL/6th5ZMM6NK+RI3MBmQAc5TfFxPUsXbHSAfLgclb
+v3yh2F0x6gnSBMxdVVYGha/eGegLZONGhZIxVYlVr0VlFrpy3Lo6+4mxIw5Sbery
+cY+LxKwpyx1Gj01qZS+muub7kCXefwZggf15F1NqaQNz6tzriwXpW1yrZGayERmT
+s11htXEvqSI3ViO3Rf/paq5vKwo5v7AMLHI7cv2dzrmNglLrEsY4GywlHdgbDYLh
+7qY6/35WzQwCcCWlvXP3K4SIkauH5lVR0KMsdU+idxpodqtHSTQN8f0z1vSSf5We
+wilBzw1LPiD55Dz7/9AIbjU/w/iUREsZceplbis1DFsVxf+cVZTtwx0LJn2enKTc
+O61LVcV9FDB7EJIdTQfFr9WJTR+6gfSF5R7H4kMX8gZHucoUruoXA+M4fqV8aRHc
+5lrzgnsVN/GatF5R63yt6dSByQGqnyhpLynoYWCht64PRglb7XekGuT9AR3m85VP
+hTu1fZsLfmVl9iJjc47/c5CKq9mAhoicDiCVCgTidCq5O9SmI2HgmCPUH/nd2+Fc
+uB2geCRdnZ0=
+=dUDc
+-----END PGP SIGNATURE-----
diff --git a/SPECS/libnbd.spec b/SPECS/libnbd.spec
new file mode 100644
index 0000000..92f4633
--- /dev/null
+++ b/SPECS/libnbd.spec
@@ -0,0 +1,1007 @@
+# i686 no longer has any kind of OCaml compiler, not even ocamlc.
+%ifnarch %{ix86}
+%global have_ocaml 1
+%endif
+
+# No ublk in RHEL 9.
+%if !0%{?rhel}
+%global have_ublk 1
+%endif
+
+# No nbd.ko in RHEL 9.
+%if !0%{?rhel}
+%global have_nbd_ko 1
+%endif
+
+# If we should verify tarball signature with GPGv2.
+%global verify_tarball_signature 1
+
+# The source directory.
+%global source_directory 1.20-stable
+
+Name:           libnbd
+Version:        1.20.2
+Release:        2%{?dist}
+Summary:        NBD client library in userspace
+
+License:        LGPL-2.0-or-later AND BSD-3-Clause
+URL:            https://gitlab.com/nbdkit/libnbd
+
+Source0:        http://libguestfs.org/download/libnbd/%{source_directory}/%{name}-%{version}.tar.gz
+Source1:        http://libguestfs.org/download/libnbd/%{source_directory}/%{name}-%{version}.tar.gz.sig
+# Keyring used to verify tarball signature.  This contains the single
+# key from here:
+# https://pgp.key-server.io/pks/lookup?search=rjones%40redhat.com&fingerprint=on&op=vindex
+Source2:       libguestfs.keyring
+
+# Maintainer script which helps with handling patches.
+Source3:        copy-patches.sh
+
+# Patches are stored in the upstream repository:
+# https://gitlab.com/nbdkit/libnbd/-/commits/rhel-10.0/
+
+Patch0001:     0001-generator-Print-full-error-in-handle_reply_error.patch
+Patch0002:     0002-lib-Don-t-overwrite-error-in-nbd_opt_-go-info.patch
+Patch0003:     0003-generator-Restore-assignment-to-local-err.patch
+Patch0004:     0004-generator-states-newstyle.c-Quote-untrusted-string-f.patch
+Patch0005:     0005-generator-states-newstyle.c-Don-t-sign-extend-escape.patch
+
+%if 0%{verify_tarball_signature}
+BuildRequires:  gnupg2
+%endif
+
+# For rebuilding autoconf cruft.
+BuildRequires:  autoconf, automake, libtool
+
+# For the core library.
+BuildRequires:  gcc
+BuildRequires:  make
+BuildRequires:  /usr/bin/pod2man
+BuildRequires:  gnutls-devel
+BuildRequires:  libxml2-devel
+
+# For nbdfuse.
+BuildRequires:  fuse3, fuse3-devel
+
+%if 0%{?have_ublk}
+# For nbdublk
+BuildRequires:  liburing-devel >= 2.2
+BuildRequires:  ubdsrv-devel >= 1.0-3.rc6
+%endif
+
+# For the Python 3 bindings.
+BuildRequires:  python3-devel
+
+%if 0%{?have_ocaml}
+# For the OCaml bindings.
+BuildRequires:  ocaml
+BuildRequires:  ocaml-findlib-devel
+BuildRequires:  ocaml-ocamldoc
+%endif
+
+# Only for building the examples.
+BuildRequires:  glib2-devel
+
+# For bash-completion.
+BuildRequires:  bash-completion
+
+# Only for running the test suite.
+BuildRequires:  coreutils
+BuildRequires:  gcc-c++
+BuildRequires:  glibc-utils
+BuildRequires:  gnutls-utils
+BuildRequires:  iproute
+BuildRequires:  jq
+%if 0%{?have_nbd_ko}
+BuildRequires:  nbd
+%endif
+BuildRequires:  util-linux
+
+# On RHEL, maybe even in Fedora in future, we do not build qemu-img or
+# nbdkit for i686.  These are only needed for the test suite so make
+# them optional.  This reduces our test exposure on 32 bit platforms,
+# although there is still Fedora/armv7 and some upstream testing.
+%ifnarch %{ix86}
+BuildRequires:  qemu-img
+BuildRequires:  nbdkit
+BuildRequires:  nbdkit-data-plugin
+BuildRequires:  nbdkit-eval-plugin
+BuildRequires:  nbdkit-memory-plugin
+BuildRequires:  nbdkit-null-plugin
+BuildRequires:  nbdkit-pattern-plugin
+BuildRequires:  nbdkit-sh-plugin
+BuildRequires:  nbdkit-sparse-random-plugin
+%endif
+
+
+%description
+NBD — Network Block Device — is a protocol for accessing Block Devices
+(hard disks and disk-like things) over a Network.
+
+This is the NBD client library in userspace, a simple library for
+writing NBD clients.
+
+The key features are:
+
+ * Synchronous and asynchronous APIs, both for ease of use and for
+   writing non-blocking, multithreaded clients.
+
+ * High performance.
+
+ * Minimal dependencies for the basic library.
+
+ * Well-documented, stable API.
+
+ * Bindings in several programming languages.
+
+
+%package devel
+Summary:        Development headers for %{name}
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+
+
+%description devel
+This package contains development headers for %{name}.
+
+
+%if 0%{?have_ocaml}
+%package -n ocaml-%{name}
+Summary:        OCaml language bindings for %{name}
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+
+
+%description -n ocaml-%{name}
+This package contains OCaml language bindings for %{name}.
+
+
+%package -n ocaml-%{name}-devel
+Summary:        OCaml language development package for %{name}
+Requires:       ocaml-%{name}%{?_isa} = %{version}-%{release}
+
+
+%description -n ocaml-%{name}-devel
+This package contains OCaml language development package for
+%{name}.  Install this if you want to compile OCaml software which
+uses %{name}.
+%endif
+
+
+%package -n python3-%{name}
+Summary:        Python 3 bindings for %{name}
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+%{?python_provide:%python_provide python3-%{name}}
+
+# The Python module happens to be called lib*.so.  Don't scan it and
+# have a bogus "Provides: libnbdmod.*".
+%global __provides_exclude_from ^%{python3_sitearch}/lib.*\\.so
+
+
+%description -n python3-%{name}
+python3-%{name} contains Python 3 bindings for %{name}.
+
+
+%package -n nbdfuse
+Summary:        FUSE support for %{name}
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+Recommends:     fuse3
+
+
+%description -n nbdfuse
+This package contains FUSE support for %{name}.
+
+
+%if 0%{?have_ublk}
+%package -n nbdublk
+Summary:        Userspace NBD block device
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+Recommends:     kernel >= 6.0.0
+Recommends:     %{_sbindir}/ublk
+
+
+%description -n nbdublk
+This package contains a userspace NBD block device
+based on %{name}.
+%endif
+
+
+%package bash-completion
+Summary:       Bash tab-completion for %{name}
+BuildArch:     noarch
+Requires:      bash-completion >= 2.0
+# Don't use _isa here because it's a noarch package.  This dependency
+# is just to ensure that the subpackage is updated along with libnbd.
+Requires:      %{name} = %{version}-%{release}
+
+
+%description bash-completion
+Install this package if you want intelligent bash tab-completion
+for %{name}.
+
+
+%prep
+%if 0%{verify_tarball_signature}
+%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
+%endif
+%autosetup -p1
+autoreconf -i
+
+
+%build
+%configure \
+    --disable-static \
+    --with-tls-priority=@LIBNBD,SYSTEM \
+    --with-bash-completions \
+    PYTHON=%{__python3} \
+    --enable-python \
+%if 0%{?have_ocaml}
+    --enable-ocaml \
+%else
+    --disable-ocaml \
+%endif
+    --enable-fuse \
+    --disable-golang \
+    --disable-rust \
+%if 0%{?have_ublk}
+    --enable-ublk \
+%else
+    --disable-ublk \
+%endif
+    %{nil}
+
+make %{?_smp_mflags}
+
+
+%install
+%make_install
+
+# Delete libtool crap.
+find $RPM_BUILD_ROOT -name '*.la' -delete
+
+# Delete the golang man page since we're not distributing the bindings.
+rm $RPM_BUILD_ROOT%{_mandir}/man3/libnbd-golang.3*
+
+%if !0%{?have_ocaml}
+# Delete the OCaml man page on i686.
+rm $RPM_BUILD_ROOT%{_mandir}/man3/libnbd-ocaml.3*
+%endif
+
+
+%check
+function skip_test ()
+{
+    for f in "$@"; do
+        rm -f "$f"
+        echo 'exit 77' > "$f"
+        chmod +x "$f"
+    done
+}
+
+# interop/interop-qemu-storage-daemon.sh fails in RHEL 9 because of
+# this bug in qemu:
+# https://lists.nongnu.org/archive/html/qemu-devel/2021-03/threads.html#03544
+%if 0%{?rhel}
+skip_test interop/interop-qemu-storage-daemon.sh
+%endif
+
+# All fuse tests fail in Koji with:
+# fusermount: entry for fuse/test-*.d not found in /etc/mtab
+# for unknown reasons but probably related to the Koji environment.
+skip_test fuse/test-*.sh
+
+# IPv6 loopback connections fail in Koji.
+make -C tests connect-tcp6 ||:
+skip_test tests/connect-tcp6
+
+make %{?_smp_mflags} check || {
+    for f in $(find -name test-suite.log); do
+        echo
+        echo "==== $f ===="
+        cat $f
+    done
+    exit 1
+  }
+
+
+%files
+%doc README.md
+%license COPYING.LIB
+%{_bindir}/nbdcopy
+%{_bindir}/nbddump
+%{_bindir}/nbdinfo
+%{_libdir}/libnbd.so.*
+%{_mandir}/man1/nbdcopy.1*
+%{_mandir}/man1/nbddump.1*
+%{_mandir}/man1/nbdinfo.1*
+
+
+%files devel
+%doc TODO examples/*.c
+%license examples/LICENSE-FOR-EXAMPLES
+%{_includedir}/libnbd.h
+%{_libdir}/libnbd.so
+%{_libdir}/pkgconfig/libnbd.pc
+%{_mandir}/man3/libnbd.3*
+%{_mandir}/man1/libnbd-release-notes-1.*.1*
+%{_mandir}/man3/libnbd-security.3*
+%{_mandir}/man3/nbd_*.3*
+
+
+%if 0%{?have_ocaml}
+%files -n ocaml-%{name}
+%dir %{_libdir}/ocaml/nbd
+%{_libdir}/ocaml/nbd/META
+%{_libdir}/ocaml/nbd/*.cma
+%{_libdir}/ocaml/nbd/*.cmi
+%{_libdir}/ocaml/stublibs/dllmlnbd.so
+%{_libdir}/ocaml/stublibs/dllmlnbd.so.owner
+
+
+%files -n ocaml-%{name}-devel
+%doc ocaml/examples/*.ml
+%license ocaml/examples/LICENSE-FOR-EXAMPLES
+%ifarch %{ocaml_native_compiler}
+%{_libdir}/ocaml/nbd/*.cmxa
+%{_libdir}/ocaml/nbd/*.cmx
+%endif
+%{_libdir}/ocaml/nbd/*.a
+%{_libdir}/ocaml/nbd/*.mli
+%{_mandir}/man3/libnbd-ocaml.3*
+%{_mandir}/man3/NBD.3*
+%{_mandir}/man3/NBD.*.3*
+%endif
+
+
+%files -n python3-%{name}
+%{python3_sitearch}/libnbdmod*.so
+%{python3_sitearch}/nbd.py
+%{python3_sitearch}/nbdsh.py
+%{python3_sitearch}/__pycache__/nbd*.py*
+%{_bindir}/nbdsh
+%{_mandir}/man1/nbdsh.1*
+
+
+%files -n nbdfuse
+%{_bindir}/nbdfuse
+%{_mandir}/man1/nbdfuse.1*
+
+
+%if 0%{?have_ublk}
+%files -n nbdublk
+%{_bindir}/nbdublk
+%{_mandir}/man1/nbdublk.1*
+%endif
+
+
+%files bash-completion
+%dir %{_datadir}/bash-completion/completions
+%{_datadir}/bash-completion/completions/nbdcopy
+%{_datadir}/bash-completion/completions/nbddump
+%{_datadir}/bash-completion/completions/nbdfuse
+%{_datadir}/bash-completion/completions/nbdinfo
+%{_datadir}/bash-completion/completions/nbdsh
+%if 0%{?have_ublk}
+%{_datadir}/bash-completion/completions/nbdublk
+%endif
+
+
+%changelog
+* Tue Nov 26 2024 MSVSphere Packaging Team <packager@msvsphere-os.ru> - 1.20.2-2
+- Rebuilt for MSVSphere 10
+
+* Fri Jul 26 2024 Richard W.M. Jones <rjones@redhat.com> - 1.20.2-2
+- Rebase to libnbd 1.20.2
+- Fix multiple flaws in TLS server certificate checking
+  resolves: RHEL-49802
+- Print full NBD error from server
+  resolves: RHEL-50667
+
+* Tue Jun 25 2024 Troy Dawson <tdawson@redhat.com> - 1.20.1-5
+- Bump release for June 2024 mass rebuild
+
+* Wed Jun 19 2024 Richard W.M. Jones <rjones@redhat.com> - 1.20.1-4
+- OCaml 5.2.0 ppc64le fix
+
+* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 1.20.1-3
+- Rebuilt for Python 3.13
+
+* Wed May 29 2024 Richard W.M. Jones <rjones@redhat.com> - 1.20.1-2
+- OCaml 5.2.0 for Fedora 41
+
+* Thu May 23 2024 Jerry James <loganjerry@gmail.com> - 1.20.1-1
+- Remove unneeded Stdlib__Callback workaround
+
+* Tue May  7 2024 Richard W.M. Jones <rjones@redhat.com> - 1.20.1-1
+- New stable branch version 1.20.1
+
+* Mon Apr 15 2024 Miroslav Rezanina <mrezanin@redhat.com> - 1.20.0-1
+- New stable branch version 1.20.0
+- Rebuild autoconf cruft unconditionally.
+- Resolves: RHEL-32642
+
+* Mon Feb 05 2024 Richard W.M. Jones <rjones@redhat.com> - 1.19.6-1
+- New upstream development version 1.19.6
+
+* Thu Jan 25 2024 Richard W.M. Jones <rjones@redhat.com> - 1.19.5-3
+- Bump and rebuild for ELN
+
+* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.19.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Mon Jan 22 2024 Richard W.M. Jones <rjones@redhat.com> - 1.19.5-1
+- New upstream development version 1.19.5
+
+* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.19.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Tue Jan 16 2024 Richard W.M. Jones <rjones@redhat.com> - 1.19.4-1
+- New upstream development version 1.19.4
+
+* Tue Dec 19 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.3-2
+- New upstream development version 1.19.3
+
+* Mon Dec 18 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.2-4
+- OCaml 5.1.1 + s390x code gen fix for Fedora 40
+
+* Thu Dec 14 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.2-3
+- Fixes for https://github.com/ocaml/ocaml/issues/12820
+
+* Tue Dec 12 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.2-2
+- OCaml 5.1.1 rebuild for Fedora 40
+
+* Wed Nov 22 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.2-1
+- New upstream development version 1.19.2
+
+* Tue Oct 31 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.1-2
+- Fix assertion in ext-mode BLOCK_STATUS (CVE-2023-5871)
+
+* Mon Oct 23 2023 Richard W.M. Jones <rjones@redhat.com> - 1.19.1-1
+- New upstream development version 1.19.1
+
+* Thu Oct 05 2023 Richard W.M. Jones <rjones@redhat.com> - 1.18.0-2
+- OCaml 5.1 rebuild for Fedora 40
+
+* Wed Sep 27 2023 Richard W.M. Jones <rjones@redhat.com> - 1.18.0-1
+- New upstream stable version 1.18.0
+
+* Fri Sep 08 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.5-1
+- New upstream development version 1.17.5
+
+* Wed Aug 30 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.4-1
+- New upstream development version 1.17.4
+
+* Fri Aug 04 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.3-1
+- New upstream development version 1.17.3
+- Disable Rust bindings.
+
+* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.17.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Fri Jul 14 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.2-1
+- New upstream development version 1.17.2
+
+* Thu Jul 13 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.1-6
+- Bump and rebuild for updated python3 and perl
+
+* Tue Jul 11 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.1-5
+- OCaml 5.0 rebuild for Fedora 39
+
+* Mon Jul 10 2023 Jerry James <loganjerry@gmail.com> - 1.17.1-4
+- OCaml 5.0.0 rebuild
+
+* Mon Jun 26 2023 Python Maint <python-maint@redhat.com> - 1.17.1-3
+- Rebuilt for Python 3.12
+
+* Thu Jun 22 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.1-2
+- Add OCaml 5 support
+
+* Mon Jun 19 2023 Richard W.M. Jones <rjones@redhat.com> - 1.17.1-1
+- New upstream development version 1.17.1
+
+* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 1.16.1-3
+- Rebuilt for Python 3.12
+
+* Mon Jun 05 2023 Richard W.M. Jones <rjones@redhat.com> - 1.16.1-2
+- Migrated to SPDX license
+
+* Wed May 10 2023 Richard W.M. Jones <rjones@redhat.com> - 1.16.1-1
+- New upstream stable version 1.16.1
+
+* Tue Apr 18 2023 Richard W.M. Jones <rjones@redhat.com> - 1.16.0-1
+- New upstream stable version 1.16.0
+
+* Thu Apr 13 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.13-1
+- New upstream development version 1.15.13
+
+* Thu Mar 09 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.12-1
+- New upstream development version 1.15.12
+
+* Tue Feb 28 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.11-1
+- New upstream development version 1.15.11
+
+* Sat Feb 25 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.10-1
+- New upstream development version 1.15.10
+
+* Tue Jan 24 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.9-2
+- Rebuild OCaml packages for F38
+
+* Sat Jan 21 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.9-1
+- New upstream development version 1.15.9
+
+* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.15.8-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Tue Jan 03 2023 Richard W.M. Jones <rjones@redhat.com> - 1.15.8-3
+- Fix for Python 3.12 distutils change (RHBZ#2152674).
+
+* Fri Dec 09 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.8-2
+- Rebuild against new ubdsrv API
+
+* Fri Nov 25 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.8-1
+- New upstream development version 1.15.8
+
+* Thu Nov 03 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.7-1
+- New upstream development version 1.15.7
+
+* Thu Oct 13 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.6-1
+- New upstream development version 1.15.6
+
+* Tue Oct 11 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.5-1
+- New upstream development version 1.15.5
+
+* Tue Sep 27 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.4-1
+- New upstream development version 1.15.4
+
+* Fri Sep 02 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.3-1
+- New upstream development version 1.15.3
+- New tool: nbdublk
+
+* Thu Aug 18 2022 Richard W.M. Jones <rjones@redhat.com> - 1.15.1-1
+- New upstream development version 1.15.1
+
+* Thu Aug 11 2022 Richard W.M. Jones <rjones@redhat.com> - 1.14.1-1
+- New upstream stable version 1.14.1
+
+* Tue Aug 02 2022 Richard W.M. Jones <rjones@redhat.com> - 1.14.0-2
+- Add some small upstream patches since 1.14.0
+
+* Mon Aug 01 2022 Richard W.M. Jones <rjones@redhat.com> - 1.14.0-1
+- New upstream stable version 1.14.0
+
+* Fri Jul 29 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.9-1
+- New upstream development version 1.13.9
+
+* Wed Jul 27 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.8-1
+- New upstream development version 1.13.8
+
+* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.13.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Sun Jul 10 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.7-1
+- New upstream development version 1.13.7
+
+* Sun Jul 10 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.6-1
+- New upstream development version 1.13.6
+
+* Fri Jul 01 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.5-1
+- New upstream development version 1.13.5
+
+* Thu Jun 30 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.4-1
+- New upstream development version 1.13.4
+- New tool: nbddump
+
+* Mon Jun 27 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.3-1
+- New upstream development version 1.13.3
+
+* Mon Jun 20 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.2-5
+- Rebuild for OCaml 4.14.0 because of Python conflict
+
+* Mon Jun 20 2022 Python Maint <python-maint@redhat.com> - 1.13.2-4
+- Rebuilt for Python 3.11
+
+* Sat Jun 18 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.2-3
+- OCaml 4.14.0 rebuild
+
+* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 1.13.2-2
+- Rebuilt for Python 3.11
+
+* Mon Jun 13 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.2-1
+- New upstream development version 1.13.2
+
+* Thu Jun 09 2022 Richard W.M. Jones <rjones@redhat.com> - 1.13.1-1
+- New upstream development version 1.13.1
+- Rename README file.
+
+* Sun May 29 2022 Richard W.M. Jones <rjones@redhat.com> - 1.12.3-1
+- New upstream stable version 1.12.3
+
+* Tue Mar 15 2022 Richard W.M. Jones <rjones@redhat.com> - 1.12.2-1
+- New upstream stable version 1.12.2
+
+* Tue Mar 01 2022 Richard W.M. Jones <rjones@redhat.com> - 1.12.1-1
+- New upstream stable version 1.12.1
+
+* Thu Feb 24 2022 Richard W.M. Jones <rjones@redhat.com> - 1.12.0-1
+- New upstream stable version 1.12.0
+
+* Sat Feb 19 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.11-1
+- New upstream development version 1.11.11
+
+* Tue Feb 15 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.10-1
+- New upstream development version 1.11.10
+
+* Thu Feb 10 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.9-1
+- New upstream development version 1.11.9
+
+* Sat Feb 05 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.8-1
+- New upstream development version 1.11.8.
+- Fixes: CVE-2022-0485 nbdcopy may create corrupted destination image
+
+* Fri Feb 04 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.7-3
+- OCaml 4.13.1 rebuild to remove package notes
+
+* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.11.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Mon Jan 17 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.7-1
+- New upstream development version 1.11.7
+
+* Tue Jan 04 2022 Richard W.M. Jones <rjones@redhat.com> - 1.11.6-1
+- New upstream development version 1.11.6
+
+* Tue Nov 30 2021 Eric Blake <eblake@redhat.com> - 1.11.5-1
+- New upstream development version 1.11.5
+
+* Fri Nov 19 2021 Richard W.M. Jones <rjones@redhat.com> - 1.11.4-1
+- New upstream development version 1.11.4
+
+* Thu Nov 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1.11.3-1
+- New upstream development version 1.11.3
+
+* Tue Nov 02 2021 Richard W.M. Jones <rjones@redhat.com> - 1.11.2-1
+- New upstream development version 1.11.2
+
+* Mon Oct 25 2021 Richard W.M. Jones <rjones@redhat.com> - 1.11.1-1
+- New upstream development version 1.11.1
+
+* Mon Oct 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1.10.0-2
+- OCaml 4.13.1 build
+
+* Thu Sep 23 2021 Richard W.M. Jones <rjones@redhat.com> - 1.10.0-1
+- New upstream stable branch version 1.10.0
+
+* Tue Sep 21 2021 Richard W.M. Jones <rjones@redhat.com> - 1.9.6-1
+- New upstream development version 1.9.6.
+
+* Fri Sep 03 2021 Richard W.M. Jones <rjones@redhat.com> - 1.9.5-1
+- New upstream development version 1.9.5.
+
+* Fri Aug 27 2021 Richard W.M. Jones <rjones@redhat.com> - 1.9.4-1
+- New upstream development version 1.9.4.
+
+* Fri Jul 30 2021 Eric Blake <eblake@redhat.com> - 1.9.3-1
+- New upstream development version 1.9.3.
+
+* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Sat Jul 03 2021 Richard W.M. Jones <rjones@redhat.com> - 1.9.2-1
+- New upstream development version 1.9.2.
+
+* Fri Jun 11 2021 Richard W.M. Jones <rjones@redhat.com> - 1.9.1-1
+- New upstream development version 1.9.1.
+
+* Mon Jun 07 2021 Python Maint <python-maint@redhat.com> - 1.8.0-2
+- Rebuilt for Python 3.10
+
+* Mon Jun 07 2021 Richard W.M. Jones <rjones@redhat.com> - 1.8.0-1
+- New upstream version 1.8.0.
+
+* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 1.7.12-2
+- Rebuilt for Python 3.10
+
+* Sat May 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.12-1
+- New upstream version 1.7.12.
+
+* Thu May 20 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.11-1
+- New upstream version 1.7.11.
+
+* Fri May 14 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.10-1
+- New upstream version 1.7.10.
+
+* Thu Apr 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.9-1
+- New upstream version 1.7.9.
+- Switch to fuse3.
+- Make nbdfuse package recommend fuse3 (to get fusermount3).
+
+* Sat Apr 24 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.8-1
+- New upstream development version 1.7.8.
+
+* Sat Apr 10 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.7-1
+- New upstream development version 1.7.7.
+- +BR iproute
+- Add skip_test helper function.
+- Skip connect-tcp6 test which fails under Koji.
+
+* Thu Apr 08 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.6-1
+- New upstream development version 1.7.6.
+
+* Sat Apr 03 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.5-1
+- New upstream development version 1.7.5.
+
+* Mon Mar 15 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.4-1
+- New upstream development version 1.7.4.
+
+* Mon Mar 15 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.3-3
+- Update documentation for CVE-2021-20286.
+- Workaround broken interop/interop-qemu-storage-daemon.sh test in RHEL 9.
+
+* Thu Mar  4 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.3-2
+- Add fix for nbdkit test suite.
+
+* Tue Mar  2 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.3-1
+- New upstream version 1.7.3.
+
+* Mon Mar  1 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.2-3
+- OCaml 4.12.0 build
+
+* Wed Feb 24 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.2-2
+- Disable nbd BR on RHEL.
+
+* Mon Feb 22 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.2-1
+- New upstream version 1.7.2.
+
+* Fri Jan 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.1-6
+- Disable BR qemu-img on i686.
+
+* Thu Jan 28 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.1-3
+- Disable BR nbdkit on i686 because it breaks ELN/RHEL 9.
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.7.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Jan 20 2021 Richard W.M. Jones <rjones@redhat.com> - 1.7.1-1
+- New upstream development version 1.7.1.
+
+* Thu Jan 07 2021 Richard W.M. Jones <rjones@redhat.com> - 1.6.0-1
+- New upstream stable version 1.6.0.
+
+* Tue Dec 08 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.9-1
+- New upstream development version 1.5.9.
+
+* Thu Dec 03 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.8-1
+- New upstream development version 1.5.8.
+- Unify Fedora and RHEL spec files.
+
+* Wed Nov 25 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.7-1
+- New upstream development version 1.5.7.
+- Add some more test suite buildrequires lines.
+- Fix bogus date in changelog.
+
+* Thu Nov 12 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.6-1
+- New upstream development version 1.5.6.
+
+* Mon Nov 02 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.5-1
+- New upstream development version 1.5.5.
+
+* Mon Oct 05 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.4-1
+- New upstream development version 1.5.4.
+- More OCaml man pages.
+
+* Sat Sep 26 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.3-1
+- New upstream development version 1.5.3.
+
+* Thu Sep 10 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.2-1
+- New upstream development version 1.5.2.
+
+* Tue Sep 08 2020 Richard W.M. Jones <rjones@redhat.com> - 1.5.1-1
+- New upstream development version 1.5.1.
+
+* Tue Sep 01 2020 Richard W.M. Jones <rjones@redhat.com> - 1.4.0-2
+- OCaml 4.11.1 rebuild
+
+* Tue Aug 25 2020 Richard W.M. Jones <rjones@redhat.com> - 1.4.0-1
+- New stable release 1.4.0.
+
+* Fri Aug 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.12-3
+- Bump release and rebuild.
+
+* Fri Aug 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.12-2
+- OCaml 4.11.0 rebuild
+
+* Thu Aug 20 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.12-1
+- New upstream version 1.3.12.
+
+* Thu Aug  6 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.11-1
+- New upstream version 1.3.11.
+
+* Tue Aug  4 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.10-1
+- New upstream version 1.3.10.
+
+* Wed Jul 29 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.9-3
+- Bump and rebuild.
+
+* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jul 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.9-1
+- New upstream version 1.3.9.
+- New tool: nbdinfo.
+
+* Fri Jul 17 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.8-2
+- New upstream version 1.3.8.
+- New tool: nbdcopy
+- Add upstream patch to fix compilation with glibc from Rawhide.
+
+* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-3
+- Rebuilt for Python 3.9
+
+* Mon May 04 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.7-2
+- OCaml 4.11.0+dev2-2020-04-22 rebuild
+
+* Thu Apr 23 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.7-1
+- New upstream version 1.3.7.
+
+* Tue Apr 21 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.6-5
+- OCaml 4.11.0 pre-release attempt 2
+
+* Fri Apr 17 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.6-4
+- OCaml 4.11.0 pre-release
+- Add upstream patch to fix one of the tests that fails on slow machines.
+
+* Thu Apr 02 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.6-2
+- Update all OCaml dependencies for RPM 4.16.
+
+* Tue Mar 31 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.6-1
+- New upstream development version 1.3.6.
+- Golang bindings are contained in this release but not distributed.
+
+* Wed Mar 11 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.5-2
+- Fix bogus runtime Requires of new bash-completion package.
+
+* Tue Mar 10 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.5-1
+- New upstream development version 1.3.5.
+- Add new bash-completion subpackage.
+
+* Sat Feb 29 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.4-1
+- New upstream development version 1.3.4.
+
+* Wed Feb 26 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.3-2
+- OCaml 4.10.0 final.
+
+* Wed Feb 05 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.3-1
+- New upstream development version 1.3.3.
+
+* Thu Jan 30 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.2-1
+- New upstream development version 1.3.2.
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Sun Jan 19 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.1-4
+- Bump release and rebuild.
+
+* Sun Jan 19 2020 Richard W.M. Jones <rjones@redhat.com> - 1.3.1-3
+- OCaml 4.10.0+beta1 rebuild.
+
+* Thu Dec 12 2019 Richard W.M. Jones <rjones@redhat.com> - 1.3.1-2
+- Rebuild for OCaml 4.09.0.
+
+* Tue Dec 03 2019 Richard W.M. Jones <rjones@redhat.com> - 1.3.1-1
+- New upstream development version 1.3.1.
+
+* Wed Nov 27 2019 Richard W.M. Jones <rjones@redhat.com> - 1.2.0-2
+- Use gpgverify macro instead of explicit gpgv2 command.
+
+* Thu Nov 14 2019 Richard W.M. Jones <rjones@redhat.com> - 1.2.0-1
+- New stable release 1.2.0
+
+* Sat Nov 09 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.9-1
+- New upstream version 1.1.9.
+- Add new nbdkit-release-notes-1.2(1) man page.
+
+* Wed Nov 06 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.8-1
+- New upstream version 1.1.8.
+
+* Thu Oct 24 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.7-1
+- New upstream version 1.1.7.
+
+* Sat Oct 19 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.6-1
+- New upstream version 1.1.6.
+
+* Sat Oct 12 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.5-1
+- New upstream version 1.1.5.
+- New tool and subpackage nbdfuse.
+
+* Wed Oct  9 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.4-1
+- New upstream version 1.1.4.
+- Contains fix for remote code execution vulnerability.
+- Add new libnbd-security(3) man page.
+
+* Tue Oct  1 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.3-1
+- New upstream version 1.1.3.
+
+* Tue Sep 17 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.2-1
+- New upstream version 1.1.2.
+- Remove patches which are upstream.
+- Contains fix for NBD Protocol Downgrade Attack (CVE-2019-14842).
+
+* Thu Sep 12 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.1-2
+- Add upstream patch to fix nbdsh (for nbdkit tests).
+
+* Sun Sep 08 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.1-1
+- New development version 1.1.1.
+
+* Wed Aug 28 2019 Richard W.M. Jones <rjones@redhat.com> - 1.0.0-1
+- New upstream version 1.0.0.
+
+* Wed Aug 21 2019 Miro Hrončok <mhroncok@redhat.com> - 0.9.9-2
+- Rebuilt for Python 3.8
+
+* Wed Aug 21 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.9-1
+- New upstream version 0.9.9.
+
+* Wed Aug 21 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.8-4
+- Fix nbdkit dependencies so we're actually running the tests.
+- Add glib2-devel BR so we build the glib main loop example.
+- Add upstream patch to fix test error:
+  nbd_connect_unix: getlogin: No such device or address
+- Fix test failure on 32 bit.
+
+* Tue Aug 20 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.8-3
+- Bump and rebuild to fix releng brokenness.
+  https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/2LIDI33G3IEIPYSCCIP6WWKNHY7XZJGQ/
+
+* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 0.9.8-2
+- Rebuilt for Python 3.8
+
+* Thu Aug 15 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.8-1
+- New upstream version 0.9.8.
+- Package the new nbd_*(3) man pages.
+
+* Mon Aug  5 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.7-1
+- New upstream version 0.9.7.
+- Add libnbd-ocaml(3) man page.
+
+* Sat Aug  3 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.6-2
+- Add all upstream patches since 0.9.6 was released.
+- Package the ocaml bindings into a subpackage.
+
+* Tue Jul 30 2019 Richard W.M. Jones <rjones@redhat.com> - 0.9.6-1
+- New upstream verison 0.9.6.
+
+* Fri Jul 26 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.9-1
+- New upstream version 0.1.9.
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Wed Jul 17 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.8-1
+- New upstream version 0.1.8.
+
+* Tue Jul 16 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.7-1
+- New upstream version 0.1.7.
+
+* Wed Jul  3 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.6-1
+- New upstream version 0.1.6.
+
+* Thu Jun 27 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.5-1
+- New upstream version 0.1.5.
+
+* Sun Jun 09 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.4-1
+- New upstream version 0.1.4.
+
+* Sun Jun  2 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.2-2
+- Enable libxml2 for NBD URI support.
+
+* Thu May 30 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.2-1
+- New upstream version 0.1.2.
+
+* Tue May 28 2019 Richard W.M. Jones <rjones@redhat.com> - 0.1.1-1
+- Fix license in man pages and examples.
+- Add nbdsh(1) man page.
+- Include the signature and keyring even if validation is disabled.
+- Update devel subpackage license.
+- Fix old FSF address in Python tests.
+- Filter Python provides.
+- Remove executable permission on the tar.gz.sig file.
+- Initial release.