public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
To: git-commits@fedoraproject.org
Subject: [rpms/tftp] rawhide: rebase to the latest upstream release
Date: Thu, 03 Sep 2026 09:12:29 GMT	[thread overview]
Message-ID: <178842674926.1.12027486397434219689.rpms-tftp-b2b5876d55ea@fedoraproject.org> (raw)

            A new commit has been pushed.

            Repo   : rpms/tftp
            Branch : rawhide
            Commit : b2b5876d55ea3c28d665b9c7d9b0b46f3f536080
            Author : Lukáš Zaoral <lzaoral@redhat.com>
            Date   : 2026-09-01T16:13:48+02:00
            Stats  : +370/-264 in 10 file(s)
            URL    : https://src.fedoraproject.org/rpms/tftp/c/b2b5876d55ea3c28d665b9c7d9b0b46f3f536080?branch=rawhide

            Log:
            rebase to the latest upstream release

Resolves: rhbz#2525859

---
diff --git a/.gitignore b/.gitignore
index cda16ac..20f5e37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@ tftp-hpa-0.49.tar.bz2
 /tftp-hpa-5.3.tar.gz
 /tftp-hpa-5.4.tar.gz
 /tftp-hpa-5.4.tar.sign
+/tftp-hpa-6.0.tar.gz
+/tftp-hpa-6.0.tar.sign

diff --git a/sources b/sources
index a4ae615..38914a2 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (tftp-hpa-5.4.tar.gz) = a7f42f7e128b553da4f5b67cb494cb0f95ec6b05300bd0ed650ccf2ce658cc9fee9b462f0a08d92800275608d830d243e2016d6a50d9ba656beefb9beb892739
-SHA512 (tftp-hpa-5.4.tar.sign) = a8db01ccb5e71b0b4e200112964fede7480134b9412232a1ed58923ed5fcc3758ed80f1496761146f4274b68b46afc3530bbbdc57621fe570ea71a78fb320d17
+SHA512 (tftp-hpa-6.0.tar.gz) = 85620c5ce5b7fdeb074a0093c640ace941954189328c2a42b0339b74007767221567240731a15d529c5308c868f03fe9464f9ce6a666932fb738d3ed153dd66f
+SHA512 (tftp-hpa-6.0.tar.sign) = 697595d1ef3bb114b9acc4a95950e4244fb6375a6b97ba0604946a97cc2e4c72be8c7d68040d9d1424ef0fc53aef1d6ae440e7149deb59ec124ddf1e135b9103

diff --git a/tftp-0.42-tftpboot.patch b/tftp-0.42-tftpboot.patch
index 98b92f9..fbd7218 100644
--- a/tftp-0.42-tftpboot.patch
+++ b/tftp-0.42-tftpboot.patch
@@ -1,11 +1,11 @@
 diff --git a/README.security b/README.security
-index 644babb..24f5103 100644
+index 8ff9e85..df2fa38 100644
 --- a/README.security
 +++ b/README.security
-@@ -13,10 +13,10 @@ probably the following:
+@@ -23,10 +23,10 @@ probably the following:
  
  1. Create a separate "tftpd" user and group only used for tftpd;
- 2. Have all your boot files in a single directory tree (usually called 
+ 2. Have all your boot files in a single directory tree (usually called
 -   /tftpboot).
 -3. Specify "-p -u tftpd -s /tftpboot" on the tftpd command line; if
 +   /var/lib/tftpboot).
@@ -15,8 +15,8 @@ index 644babb..24f5103 100644
 +   "-p -c -U 002 -u tftpd -s /var/lib/tftpboot" (replace 002 with whatever
     umask is appropriate for your setup.)
  
- 	       =======================================
-@@ -36,12 +36,12 @@ directly.  Thus, if your /etc/inetd.conf looks like this (all on one
+ When the -s (chroot) option is used, tftpd needs to be started as
+@@ -51,12 +51,12 @@ directly.  Thus, if your /etc/inetd.conf looks like this (all on one
  line):
  
  tftp	dgram	udp	wait	root	/usr/sbin/tcpd

diff --git a/tftp-doc.patch b/tftp-doc.patch
deleted file mode 100644
index c3733d9..0000000
--- a/tftp-doc.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/tftp/main.c
-+++ b/tftp/main.c
-@@ -165,9 +165,11 @@ static void usage(int errcode)
- {
-     fprintf(stderr,
- #ifdef HAVE_IPV6
--            "Usage: %s [-4][-6][-v][-l][-m mode] [host [port]] [-c command]\n",
-+            "Usage: %s [-4][-6][-v][-V][-l][-m mode] [-R port:port] "
-+			"[host [port]] [-c command]\n",
- #else
--            "Usage: %s [-v][-l][-m mode] [host [port]] [-c command]\n",
-+            "Usage: %s [-v][-V][-l][-m mode] [-R port:port] "
-+			"[host [port]] [-c command]\n",
- #endif
-             _progname);
-     exit(errcode);

diff --git a/tftp-enhanced-logging.patch b/tftp-enhanced-logging.patch
index cfb345f..f47c406 100644
--- a/tftp-enhanced-logging.patch
+++ b/tftp-enhanced-logging.patch
@@ -1,6 +1,8 @@
+diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
+index 9c1d195..98f7950 100644
 --- a/tftpd/tftpd.c
 +++ b/tftpd/tftpd.c
-@@ -1089,7 +1089,7 @@ int main(int argc, char **argv)
+@@ -1026,7 +1026,7 @@ int main(int argc, char **argv)
  static char *rewrite_access(const struct formats *,
  			    char *, int, int, const char **);
  static int validate_access(char *, int, const struct formats *, const char **);
@@ -9,7 +11,7 @@
  static void tftp_recvfile(const struct formats *, struct tftphdr *, int);
  
  static const struct formats formats[] = {
-@@ -1180,6 +1180,9 @@ int tftp(struct tftphdr *tp, int size)
+@@ -1119,6 +1119,9 @@ int tftp(struct tftphdr *tp, int size)
  	    if (!file) {
  		ecode =
  		    (*pf->f_validate) (filename, tp_opcode, pf, &errmsgptr);
@@ -19,7 +21,7 @@
  		if (ecode) {
  		    nak(ecode, errmsgptr);
  		    exit(0);
-@@ -1203,12 +1206,12 @@ int tftp(struct tftphdr *tp, int size)
+@@ -1145,12 +1148,12 @@ int tftp(struct tftphdr *tp, int size)
          if (tp_opcode == WRQ)
              (*pf->f_recv) (pf, (struct tftphdr *)ackbuf, ap - ackbuf);
          else
@@ -34,7 +36,7 @@
      }
      exit(0);                    /* Request completed */
  }
-@@ -1655,7 +1658,7 @@ static int validate_access(char *filename, int mode,
+@@ -1672,7 +1675,7 @@ static int validate_access(char *filename, int mode,
  /*
   * Send the requested file.
   */
@@ -43,10 +45,24 @@
  {
      struct tftphdr *dp;
      struct tftphdr *ap;         /* ack packet */
-@@ -1746,6 +1749,13 @@ static void tftp_sendfile(const struct formats *pf, struct tftphdr *oap, int oac
- 	if (!++block)
- 	  block = rollover_val;
-     } while (size == segsize);
+@@ -1783,6 +1786,13 @@ static void tftp_sendfile(const struct formats *pf, struct tftphdr *oap, int oac
+                 break;
+         }
+     }
++    tmp_p = (char *)inet_ntop(from.sa.sa_family, SOCKADDR_P(&from),
++                              tmpbuf, INET6_ADDRSTRLEN);
++    if (!tmp_p) {
++            tmp_p = tmpbuf;
++            strcpy(tmpbuf, "???");
++    }
++    tftpd_log(LOG_NOTICE, "Client %s finished %s", tmp_p, filename);
+   abort:
+     tftpio_stop(io);
+     io = NULL;
+@@ -1856,6 +1866,13 @@ static void tftp_sendfile(const struct formats *pf, struct tftphdr *oap, int oac
+         xfree(packets);
+         xfree(lengths);
+     }
 +    tmp_p = (char *)inet_ntop(from.sa.sa_family, SOCKADDR_P(&from),
 +                              tmpbuf, INET6_ADDRSTRLEN);
 +    if (!tmp_p) {
@@ -56,10 +72,12 @@
 +    tftpd_log(LOG_NOTICE, "Client %s finished %s", tmp_p, filename);
    abort:
      (void)fclose(file);
- }
+ #endif
+diff --git a/tftpd/tftpd.h b/tftpd/tftpd.h
+index b6658d4..a52adc5 100644
 --- a/tftpd/tftpd.h
 +++ b/tftpd/tftpd.h
-@@ -33,7 +33,7 @@ struct formats {
+@@ -34,7 +34,7 @@ struct formats {
      const char *f_mode;
      char *(*f_rewrite) (const struct formats *, char *, int, int, const char **);
      int (*f_validate) (char *, int, const struct formats *, const char **);

diff --git a/tftp-hpa-5.2-osh.patch b/tftp-hpa-5.2-osh.patch
index 7435a3e..460b5a8 100644
--- a/tftp-hpa-5.2-osh.patch
+++ b/tftp-hpa-5.2-osh.patch
@@ -1,9 +1,9 @@
 # Fix leaked_handle: Handle variable "fd" going out of scope leaks the handle.
 diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
-index 6dcf14f..b267364 100644
+index 98f7950..b3fd06c 100644
 --- a/tftpd/tftpd.c
 +++ b/tftpd/tftpd.c
-@@ -1616,6 +1623,7 @@ static int validate_access(char *filename, int mode,
+@@ -1636,6 +1636,7 @@ static int validate_access(char *filename, int mode,
  
      if (mode == RRQ) {
          if (!unixperms && (stbuf.st_mode & (S_IREAD >> 6)) == 0) {
@@ -11,7 +11,7 @@ index 6dcf14f..b267364 100644
              *errmsg = "File must have global read permissions";
              return (EACCESS);
          }
-@@ -1625,6 +1633,7 @@ static int validate_access(char *filename, int mode,
+@@ -1645,6 +1646,7 @@ static int validate_access(char *filename, int mode,
      } else {
          if (!unixperms) {
              if ((stbuf.st_mode & (S_IWRITE >> 6)) == 0) {
@@ -19,7 +19,7 @@ index 6dcf14f..b267364 100644
                  *errmsg = "File must have global write permissions";
                  return (EACCESS);
              }
-@@ -1633,6 +1642,7 @@ static int validate_access(char *filename, int mode,
+@@ -1653,6 +1655,7 @@ static int validate_access(char *filename, int mode,
  #ifdef HAVE_FTRUNCATE
  	/* We didn't get to truncate the file at open() time */
  	if (ftruncate(fd, (off_t) 0)) {
@@ -27,34 +27,3 @@ index 6dcf14f..b267364 100644
  	  *errmsg = "Cannot reset file size";
  	  return (EACCESS);
  	}
-
-From 5f60355c4bd10b866847a0d58a9582bda7db72aa Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= <lzaoral@redhat.com>
-Date: Wed, 6 Apr 2022 09:34:46 +0200
-Subject: [PATCH] tftpd: Fix a possible usage of -1 file descriptor in
- standalone mode
-
----
- tftpd/tftpd.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
-index 00fa1cf..afd595d 100644
---- a/tftpd/tftpd.c
-+++ b/tftpd/tftpd.c
-@@ -672,6 +672,13 @@ int main(int argc, char **argv)
-                         exit(EX_USAGE);
-                     }
-                     ai_fam = AF_INET6;
-+
-+                    if (fd6 < 0) {
-+                        syslog(LOG_ERR,
-+                               "IPv6 was disabled but address %s is in address "
-+                               "family AF_INET6", address);
-+                        exit(EX_USAGE);
-+                    }
-                 }
-                 break;
- #endif
--- 
-2.35.1

diff --git a/tftp-hpa-5.3-stats.patch b/tftp-hpa-5.3-stats.patch
deleted file mode 100644
index 571ab30..0000000
--- a/tftp-hpa-5.3-stats.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 7b1051cafcfb4fd61c840e489cecea8380177aa4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Zaoral?= <lzaoral@redhat.com>
-Date: Tue, 14 Apr 2026 17:58:41 +0200
-Subject: [PATCH] =?UTF-8?q?tftp:=20correctly=20convert=20=CE=BCs=20to=20s?=
- =?UTF-8?q?=20to=20fix=20transfer=20statistics?=
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Before this patch, the microseconds difference was computed incorrectly
-leading to wrong transfer statistics.  The value should be divided by
-a million and not by ten thousand.
-
-$ ./tftp/tftp localhost -v -c get 10MB
-Connected to localhost (::1), port 69
-getting from localhost:10MB to 10MB [netascii]
-Received 10485760 bytes in -7.5 seconds [-11164298 bit/s]
-
-Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
-Signed-off-by: Lukáš Zaoral <lzaoral@redhat.com>
----
- tftp/tftp.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tftp/tftp.c b/tftp/tftp.c
-index 14c3a75..e161527 100644
---- a/tftp/tftp.c
-+++ b/tftp/tftp.c
-@@ -406,8 +406,8 @@ static void printstats(const char *direction, unsigned long amount)
- {
-     double delta;
- 
--    delta = (tstop.tv_sec + (tstop.tv_usec / 100000.0)) -
--        (tstart.tv_sec + (tstart.tv_usec / 100000.0));
-+    delta = (tstop.tv_sec + (tstop.tv_usec / 1000000.0)) -
-+        (tstart.tv_sec + (tstart.tv_usec / 1000000.0));
-     if (verbose) {
-         printf("%s %lu bytes in %.1f seconds", direction, amount, delta);
-         printf(" [%.0f bit/s]", (amount * 8.) / delta);
--- 
-2.55.0
-

diff --git a/tftp-hpa-5.3-tftp-exit-code-cmdmode.patch b/tftp-hpa-5.3-tftp-exit-code-cmdmode.patch
index 47c8351..8ab101b 100644
--- a/tftp-hpa-5.3-tftp-exit-code-cmdmode.patch
+++ b/tftp-hpa-5.3-tftp-exit-code-cmdmode.patch
@@ -5,32 +5,32 @@ Subject: [PATCH] tftp: propagate errors to exit code in single command mode
 
 ---
  tftp/extern.h |   4 +-
- tftp/main.c   | 132 ++++++++++++++++++++++++++++----------------------
- tftp/tftp.c   |  22 +++++++--
- 3 files changed, 94 insertions(+), 64 deletions(-)
+ tftp/main.c   | 144 ++++++++++++++++++++++++++++----------------------
+ tftp/tftp.c   |  37 +++++++++++--
+ 3 files changed, 115 insertions(+), 70 deletions(-)
 
 diff --git a/tftp/extern.h b/tftp/extern.h
-index 9fd424b..c1e1980 100644
+index 7740cb7..295b8e9 100644
 --- a/tftp/extern.h
 +++ b/tftp/extern.h
 @@ -10,8 +10,8 @@
  
  #include "config.h"
  
--void tftp_recvfile(int, const char *, const char *);
--void tftp_sendfile(int, const char *, const char *);
-+int tftp_recvfile(int, const char *, const char *);
-+int tftp_sendfile(int, const char *, const char *);
+-void tftp_recvfile(int, const char *, const char *, unsigned int);
+-void tftp_sendfile(int, const char *, const char *, unsigned int);
++int tftp_recvfile(int, const char *, const char *, unsigned int);
++int tftp_sendfile(int, const char *, const char *, unsigned int);
  extern sigjmp_buf toplevel;
  
  #endif
 diff --git a/tftp/main.c b/tftp/main.c
-index eed02bf..e7b338c 100644
+index d895a30..e8900ef 100644
 --- a/tftp/main.c
 +++ b/tftp/main.c
-@@ -77,20 +77,20 @@ int portrange = 0;
- unsigned int portrange_from = 0;
- unsigned int portrange_to = 0;
+@@ -82,22 +82,22 @@ unsigned int portrange_to = 0;
+ unsigned int blocksize = SEGSIZE;
+ unsigned int windowsize;
  
 -void get(int, char **);
 -void help(int, char **);
@@ -39,6 +39,7 @@ index eed02bf..e7b338c 100644
 -void quit(int, char **);
 -void setascii(int, char **);
 -void setbinary(int, char **);
+-void setblocksize(int, char **);
 -void setpeer(int, char **);
 -void setrexmt(int, char **);
 -void settimeout(int, char **);
@@ -46,6 +47,7 @@ index eed02bf..e7b338c 100644
 -void setverbose(int, char **);
 -void status(int, char **);
 -void setliteral(int, char **);
+-void setwindowsize(int, char **);
 +int get(int, char **);
 +int help(int, char **);
 +int modecmd(int, char **);
@@ -53,6 +55,7 @@ index eed02bf..e7b338c 100644
 +int quit(int, char **);
 +int setascii(int, char **);
 +int setbinary(int, char **);
++int setblocksize(int, char **);
 +int setpeer(int, char **);
 +int setrexmt(int, char **);
 +int settimeout(int, char **);
@@ -60,10 +63,11 @@ index eed02bf..e7b338c 100644
 +int setverbose(int, char **);
 +int status(int, char **);
 +int setliteral(int, char **);
++int setwindowsize(int, char **);
  
  static void command(void);
  
-@@ -104,7 +104,7 @@ static void settftpmode(const struct modes *);
+@@ -113,7 +113,7 @@ static void settftpmode(const struct modes *);
  struct cmd {
      const char *name;
      const char *help;
@@ -71,37 +75,29 @@ index eed02bf..e7b338c 100644
 +    int (*handler) (int, char **);
  };
  
- struct cmd cmdtab[] = {
-@@ -161,7 +161,7 @@ char *tail(char *);
- 
- char *xstrdup(const char *);
- 
--static void usage(int errcode)
-+static int usage(int errcode)
- {
-     fprintf(stderr,
- #ifdef HAVE_IPV6
-@@ -176,7 +176,7 @@ static void usage(int errcode)
+ static const struct cmd cmdtab[] = {
+@@ -243,7 +243,7 @@ static const char short_options[] = "+46vVlm:cR:B:W:w:h";
  int main(int argc, char *argv[])
  {
      union sock_addr sa;
--    int arg;
-+    int arg, ret;
+-    int optc;
++    int optc, ret;
      static int pargc, peerargc;
      static int iscmd = 0;
-     char **pargv;
-@@ -315,8 +315,8 @@ int main(int argc, char *argv[])
-                     pargv[1]);
-             exit(EX_USAGE);
-         }
+     static char **pargv;
+@@ -418,9 +418,9 @@ int main(int argc, char *argv[])
+         if (sigsetjmp(toplevel, 1) != 0)
+             exit(EX_UNAVAILABLE);
+ 
 -        (*c->handler) (pargc, pargv);
--        exit(0);
 +        ret = (*c->handler) (pargc, pargv);
+         xfree(splitbuf);
+-        exit(0);
 +        exit(ret);
      }
  #ifdef WITH_READLINE
  #ifdef HAVE_READLINE_HISTORY_H
-@@ -371,7 +371,7 @@ static void getmoreargs(const char *partial, const char *mprompt)
+@@ -475,7 +475,7 @@ static void getmoreargs(const char *partial, const char *mprompt)
  #endif
  }
  
@@ -110,7 +106,7 @@ index eed02bf..e7b338c 100644
  {
      int err;
  
-@@ -383,7 +383,7 @@ void setpeer(int argc, char *argv[])
+@@ -487,7 +487,7 @@ void setpeer(int argc, char *argv[])
      }
      if ((argc < 2) || (argc > 3)) {
          printf("usage: %s host-name [port]\n", argv[0]);
@@ -119,7 +115,7 @@ index eed02bf..e7b338c 100644
      }
  
      peeraddr.sa.sa_family = ai_fam;
-@@ -392,7 +392,7 @@ void setpeer(int argc, char *argv[])
+@@ -496,7 +496,7 @@ void setpeer(int argc, char *argv[])
          printf("Error: %s\n", gai_strerror(err));
          printf("%s: unknown host\n", argv[1]);
          connected = 0;
@@ -128,7 +124,7 @@ index eed02bf..e7b338c 100644
      }
      ai_fam = peeraddr.sa.sa_family;
      if (f == -1) { /* socket not open */
-@@ -429,7 +429,7 @@ void setpeer(int argc, char *argv[])
+@@ -533,7 +533,7 @@ void setpeer(int argc, char *argv[])
              if (*ep || myport > 65535UL) {
                  printf("%s: bad port number\n", argv[2]);
                  connected = 0;
@@ -137,7 +133,7 @@ index eed02bf..e7b338c 100644
              }
              port = htons((u_short) myport);
          }
-@@ -445,16 +445,17 @@ void setpeer(int argc, char *argv[])
+@@ -549,16 +549,17 @@ void setpeer(int argc, char *argv[])
                 hostname, tp, (unsigned int)ntohs(port));
      }
      connected = 1;
@@ -157,7 +153,7 @@ index eed02bf..e7b338c 100644
      }
      if (argc == 2) {
          for (p = modes; p->m_name; p++)
-@@ -462,7 +463,7 @@ void modecmd(int argc, char *argv[])
+@@ -566,7 +567,7 @@ void modecmd(int argc, char *argv[])
                  break;
          if (p->m_name) {
              settftpmode(p);
@@ -166,7 +162,7 @@ index eed02bf..e7b338c 100644
          }
          printf("%s: unknown mode\n", argv[1]);
          /* drop through and print usage message */
-@@ -476,21 +477,23 @@ void modecmd(int argc, char *argv[])
+@@ -580,21 +581,23 @@ void modecmd(int argc, char *argv[])
              sep = " | ";
      }
      printf(" ]\n");
@@ -193,7 +189,7 @@ index eed02bf..e7b338c 100644
  }
  
  static void settftpmode(const struct modes *newmode)
-@@ -503,7 +506,7 @@ static void settftpmode(const struct modes *newmode)
+@@ -607,7 +610,7 @@ static void settftpmode(const struct modes *newmode)
  /*
   * Send file(s).
   */
@@ -202,7 +198,7 @@ index eed02bf..e7b338c 100644
  {
      int fd;
      int n, err;
-@@ -517,14 +520,14 @@ void put(int argc, char *argv[])
+@@ -621,14 +624,14 @@ void put(int argc, char *argv[])
      }
      if (argc < 2) {
          putusage(argv[0]);
@@ -219,7 +215,7 @@ index eed02bf..e7b338c 100644
              }
          cp = argv[argc - 1];
          targ = strchr(cp, ':');
-@@ -535,14 +538,14 @@ void put(int argc, char *argv[])
+@@ -639,14 +642,14 @@ void put(int argc, char *argv[])
              printf("Error: %s\n", gai_strerror(err));
              printf("%s: unknown host\n", argv[1]);
              connected = 0;
@@ -236,7 +232,7 @@ index eed02bf..e7b338c 100644
      }
      if (argc < 4) {
          cp = argc == 2 ? tail(targ) : argv[1];
-@@ -550,17 +553,18 @@ void put(int argc, char *argv[])
+@@ -654,17 +657,18 @@ void put(int argc, char *argv[])
          if (fd < 0) {
              fprintf(stderr, "tftp: ");
              perror(cp);
@@ -247,9 +243,9 @@ index eed02bf..e7b338c 100644
              printf("putting %s to %s:%s [%s]\n",
                     cp, hostname, targ, mode->m_mode);
          sa_set_port(&peeraddr, port);
--        tftp_sendfile(fd, targ, mode->m_mode);
+-        tftp_sendfile(fd, targ, mode->m_mode, windowsize);
 -        return;
-+        err = tftp_sendfile(fd, targ, mode->m_mode);
++        err = tftp_sendfile(fd, targ, mode->m_mode, windowsize);
 +        return err;
      }
      /* this assumes the target is a directory */
@@ -258,7 +254,7 @@ index eed02bf..e7b338c 100644
      for (n = 1; n < argc - 1; n++) {
          const char *base = tail(argv[n]);
          char *remotepath = xmalloc(strlen(targ) + 1 + strlen(base) + 1);
-@@ -570,6 +574,7 @@ void put(int argc, char *argv[])
+@@ -674,6 +678,7 @@ void put(int argc, char *argv[])
          if (fd < 0) {
              fprintf(stderr, "tftp: ");
              perror(argv[n]);
@@ -266,12 +262,12 @@ index eed02bf..e7b338c 100644
              free(remotepath);
              continue;
          }
-@@ -577,9 +582,11 @@ void put(int argc, char *argv[])
+@@ -681,9 +686,11 @@ void put(int argc, char *argv[])
              printf("putting %s to %s:%s [%s]\n",
                     argv[n], hostname, remotepath, mode->m_mode);
          sa_set_port(&peeraddr, port);
--        tftp_sendfile(fd, remotepath, mode->m_mode);
-+        err |= tftp_sendfile(fd, remotepath, mode->m_mode);
+-        tftp_sendfile(fd, remotepath, mode->m_mode, windowsize);
++        err |= tftp_sendfile(fd, remotepath, mode->m_mode, windowsize);
          free(remotepath);
      }
 +
@@ -279,7 +275,7 @@ index eed02bf..e7b338c 100644
  }
  
  static void putusage(char *s)
-@@ -591,10 +598,10 @@ static void putusage(char *s)
+@@ -695,10 +702,10 @@ static void putusage(char *s)
  /*
   * Receive file(s).
   */
@@ -292,7 +288,7 @@ index eed02bf..e7b338c 100644
      char *cp;
      char *src;
  
-@@ -606,28 +613,28 @@ void get(int argc, char *argv[])
+@@ -710,28 +717,28 @@ void get(int argc, char *argv[])
      }
      if (argc < 2) {
          getusage(argv[0]);
@@ -317,7 +313,7 @@ index eed02bf..e7b338c 100644
 -
              *src++ = 0;
              peeraddr.sa.sa_family = ai_fam;
-             err = set_sock_addr(argv[n], &peeraddr, &hostname);
+             err = set_sock_addr(argv[n], &peeraddr, &hostname, false);
              if (err) {
                  printf("Warning: %s\n", gai_strerror(err));
                  printf("%s: unknown host\n", argv[1]);
@@ -325,7 +321,7 @@ index eed02bf..e7b338c 100644
                  continue;
              }
              ai_fam = peeraddr.sa.sa_family;
-@@ -640,13 +647,13 @@ void get(int argc, char *argv[])
+@@ -744,13 +751,13 @@ void get(int argc, char *argv[])
              if (fd < 0) {
                  fprintf(stderr, "tftp: ");
                  perror(cp);
@@ -336,12 +332,12 @@ index eed02bf..e7b338c 100644
                  printf("getting from %s:%s to %s [%s]\n",
                         hostname, src, cp, mode->m_mode);
              sa_set_port(&peeraddr, port);
--            tftp_recvfile(fd, src, mode->m_mode);
-+            err = tftp_recvfile(fd, src, mode->m_mode);
+-            tftp_recvfile(fd, src, mode->m_mode, windowsize);
++            err = tftp_recvfile(fd, src, mode->m_mode, windowsize);
              break;
          }
          cp = tail(src);         /* new .. jdg */
-@@ -655,14 +662,16 @@ void get(int argc, char *argv[])
+@@ -759,14 +766,16 @@ void get(int argc, char *argv[])
          if (fd < 0) {
              fprintf(stderr, "tftp: ");
              perror(cp);
@@ -352,14 +348,14 @@ index eed02bf..e7b338c 100644
              printf("getting from %s:%s to %s [%s]\n",
                     hostname, src, cp, mode->m_mode);
          sa_set_port(&peeraddr, port);
--        tftp_recvfile(fd, src, mode->m_mode);
-+        err |= tftp_recvfile(fd, src, mode->m_mode);
+-        tftp_recvfile(fd, src, mode->m_mode, windowsize);
++        err |= tftp_recvfile(fd, src, mode->m_mode, windowsize);
      }
 +    return err;
  }
  
  static void getusage(char *s)
-@@ -673,7 +682,7 @@ static void getusage(char *s)
+@@ -777,7 +786,7 @@ static void getusage(char *s)
  
  int rexmtval = TIMEOUT;
  
@@ -368,7 +364,7 @@ index eed02bf..e7b338c 100644
  {
      int t;
  
-@@ -685,18 +694,19 @@ void setrexmt(int argc, char *argv[])
+@@ -788,18 +797,19 @@ void setrexmt(int argc, char *argv[])
      }
      if (argc != 2) {
          printf("usage: %s value\n", argv[0]);
@@ -390,7 +386,7 @@ index eed02bf..e7b338c 100644
  {
      int t;
  
-@@ -708,24 +718,26 @@ void settimeout(int argc, char *argv[])
+@@ -810,16 +820,17 @@ void settimeout(int argc, char *argv[])
      }
      if (argc != 2) {
          printf("usage: %s value\n", argv[0]);
@@ -405,6 +401,44 @@ index eed02bf..e7b338c 100644
 +    return 0;
  }
  
+-void setblocksize(int argc, char *argv[])
++int setblocksize(int argc, char *argv[])
+ {
+     if (argc < 2) {
+         getmoreargs("blocksize ", "(size) ");
+@@ -828,15 +839,16 @@ void setblocksize(int argc, char *argv[])
+     }
+     if (argc != 2) {
+         printf("usage: %s size\n", argv[0]);
+-        return;
++        return EX_USAGE;
+     }
+     if (!parse_uint_range(argv[1], 8, MAX_SEGSIZE, &blocksize)) {
+         printf("%s: bad block size (valid range is 8-%d)\n",
+                argv[1], MAX_SEGSIZE);
+     }
++    return 0;
+ }
+ 
+-void setwindowsize(int argc, char *argv[])
++int setwindowsize(int argc, char *argv[])
+ {
+     if (argc < 2) {
+         getmoreargs("windowsize ", "(size) ");
+@@ -845,23 +857,25 @@ void setwindowsize(int argc, char *argv[])
+     }
+     if (argc != 2) {
+         printf("usage: %s size\n", argv[0]);
+-        return;
++        return EX_USAGE;
+     }
+     if (!parse_uint_range(argv[1], 1, TFTP_MAX_WINDOWSIZE, &windowsize)) {
+         printf("%s: bad window size (valid range is 1-%u)\n",
+                argv[1], TFTP_MAX_WINDOWSIZE);
+     }
++    return 0;
+ }
+ 
 -void setliteral(int argc, char *argv[])
 +int setliteral(int argc, char *argv[])
  {
@@ -420,16 +454,16 @@ index eed02bf..e7b338c 100644
  {
      (void)argc;
      (void)argv;                 /* Quiet unused warning */
-@@ -738,6 +750,7 @@ void status(int argc, char *argv[])
-            literal ? "on" : "off");
-     printf("Rexmt-interval: %d seconds, Max-timeout: %d seconds\n",
+@@ -876,6 +890,7 @@ void status(int argc, char *argv[])
             rexmtval, maxtimeout);
+     printf("Blocksize: %u, windowsize: %u\n", blocksize,
+            windowsize ? windowsize : 1);
 +    return 0;
  }
  
  void intr(int sig)
-@@ -872,7 +885,7 @@ static void makeargv(void)
-     *argp++ = 0;
+@@ -1018,7 +1033,7 @@ static int makeargv(char *str, char **argp)
+     return argc;
  }
  
 -void quit(int argc, char *argv[])
@@ -437,16 +471,16 @@ index eed02bf..e7b338c 100644
  {
      (void)argc;
      (void)argv;                 /* Quiet unused warning */
-@@ -882,7 +895,7 @@ void quit(int argc, char *argv[])
+@@ -1028,7 +1043,7 @@ void quit(int argc, char *argv[])
  /*
   * Help command.
   */
 -void help(int argc, char *argv[])
 +int help(int argc, char *argv[])
  {
-     struct cmd *c;
+     const struct cmd *c;
  
-@@ -892,7 +905,7 @@ void help(int argc, char *argv[])
+@@ -1038,7 +1053,7 @@ void help(int argc, char *argv[])
          printf("Commands may be abbreviated.  Commands are:\n\n");
          for (c = cmdtab; c->name; c++)
              printf("%-*s\t%s\n", (int)HELPINDENT, c->name, c->help);
@@ -454,8 +488,8 @@ index eed02bf..e7b338c 100644
 +        return 0;
      }
      while (--argc > 0) {
-         char *arg;
-@@ -905,22 +918,25 @@ void help(int argc, char *argv[])
+         const char *errtype;
+@@ -1050,22 +1065,25 @@ void help(int argc, char *argv[])
          else
              printf("%s\n", c->help);
      }
@@ -484,67 +518,114 @@ index eed02bf..e7b338c 100644
 +    return 0;
  }
 diff --git a/tftp/tftp.c b/tftp/tftp.c
-index e161527..8e5bb65 100644
+index 332d652..0a48459 100644
 --- a/tftp/tftp.c
 +++ b/tftp/tftp.c
-@@ -45,11 +45,11 @@ static void tpacket(const char *, struct tftphdr *, int);
+@@ -48,7 +48,7 @@ static void tpacket(const char *, struct tftphdr *, int);
  /*
   * Send the requested file.
   */
--void tftp_sendfile(int fd, const char *name, const char *mode)
-+int tftp_sendfile(int fd, const char *name, const char *mode)
+-void tftp_sendfile(int fd, const char *name, const char *mode,
++int tftp_sendfile(int fd, const char *name, const char *mode,
+                    unsigned int requested_window)
  {
-     struct tftphdr *ap;         /* data and ack packets */
-     struct tftphdr *dp;
--    int n;
-+    int n, err;
-     volatile int is_request;
-     volatile u_short block;
-     volatile int size, convert;
-@@ -67,6 +67,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
-     block = 0;
-     is_request = 1;             /* First packet is the actual WRQ */
-     amount = 0;
-+    err = 0;
+     struct tftphdr *dp, *ap;
+@@ -59,7 +59,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+     FILE *file = NULL;
+     char * volatile packets = NULL;
+     int * volatile lengths = NULL;
+-    int n, size;
++    int n, size, err = 0;
+     size_t packetsize;
+     volatile int packet_count, final;
+     int convert = !strcmp(mode, "netascii");
+@@ -72,8 +72,10 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+ 
+     startclock();
+     file = fdopen(fd, convert ? "rt" : "rb");
+-    if (!file)
++    if (!file) {
++        err = EX_OSERR;
+         goto abort;
++    }
+     ap = (struct tftphdr *)ackbuf;
  
      tftp_signal(SIGALRM, timer, 0);
-     do {
-@@ -81,6 +82,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
+@@ -81,6 +83,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+                        sizeof(ackbuf));
+     if (size < 0) {
+         fprintf(stderr, "tftp: %s: %s\n", name, strerror(errno));
++        err = EX_OSERR;
+         goto abort_packets;
+     }
+ 
+@@ -92,6 +95,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+             tpacket("sent", ap, size);
+         if (sendto(f, ap, size, 0, &peeraddr.sa, SOCKLEN(&peeraddr)) != size) {
+             perror("tftp: sendto");
++            err = EX_OSERR;
+             goto abort_packets;
+         }
+         alarm(rexmtval);
+@@ -100,6 +104,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+         alarm(0);
+         if (n < 0) {
+             perror("tftp: recvfrom");
++            err = EX_OSERR;
+             goto abort_packets;
+         }
+         sa_set_port(&peeraddr, SOCKPORT(&from));
+@@ -111,12 +116,14 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+         ap_block = ntohs(rp->th_block);
+         if (ap_opcode == ERROR) {
+             printf("Error code %d: %s\n", ap_block, rp->th_msg);
++            err = EX_PROTOCOL;
+             goto abort;
+         }
+         if (requested_options && ap_opcode == OACK) {
+             if (!parse_oack(rp, n, blocksize, requested_window,
+                             &negotiated_block, &negotiated_window)) {
+                 nak(EOPTNEG, "Invalid option response");
++                err = EX_PROTOCOL;
+                 goto abort;
+             }
+             segsize = (int)negotiated_block;
+@@ -143,6 +150,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
              size = readit(file, &dp, convert);
              if (size < 0) {
                  nak(errno + 100, NULL);
 +                err = EX_OSERR;
-                 break;
+                 goto abort_packets;
+             }
+             dp->th_opcode = htons((u_short)DATA);
+@@ -168,6 +176,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+             if (sendto(f, dp, lengths[n], 0, &peeraddr.sa,
+                        SOCKLEN(&peeraddr)) != lengths[n]) {
+                 perror("tftp: sendto");
++                err = EX_OSERR;
+                 goto abort_packets;
              }
-             dp->th_opcode = htons((u_short) DATA);
-@@ -95,6 +97,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
-                    &peeraddr.sa, SOCKLEN(&peeraddr));
-         if (n != size + 4) {
-             perror("tftp: sendto");
-+            err = EX_OSERR;
-             goto abort;
          }
-         read_ahead(file, convert);
-@@ -108,6 +111,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
+@@ -178,6 +187,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
              alarm(0);
              if (n < 0) {
                  perror("tftp: recvfrom");
 +                err = EX_OSERR;
-                 goto abort;
+                 goto abort_packets;
              }
-             sa_set_port(&peeraddr, SOCKPORT(&from));  /* added */
-@@ -118,6 +122,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
-             ap_block = ntohs((u_short) ap->th_block);
+             sa_set_port(&peeraddr, SOCKPORT(&from));
+@@ -189,6 +199,7 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
+             ap_block = ntohs(ap->th_block);
              if (ap_opcode == ERROR) {
                  printf("Error code %d: %s\n", ap_block, ap->th_msg);
 +                err = EX_PROTOCOL;
-                 goto abort;
+                 goto abort_packets;
              }
-             if (ap_opcode == ACK) {
-@@ -150,16 +155,18 @@ void tftp_sendfile(int fd, const char *name, const char *mode)
+             expected_ack = ntohs(((struct tftphdr *)(packets +
+@@ -216,12 +227,14 @@ void tftp_sendfile(int fd, const char *name, const char *mode,
      stopclock();
      if (amount > 0)
-         printstats("Sent", amount);
+         printstats("Sent", (unsigned long)amount);
 +
 +    return err;
  }
@@ -552,65 +633,115 @@ index e161527..8e5bb65 100644
  /*
   * Receive a file.
   */
--void tftp_recvfile(int fd, const char *name, const char *mode)
-+int tftp_recvfile(int fd, const char *name, const char *mode)
+-void tftp_recvfile(int fd, const char *name, const char *mode,
++int tftp_recvfile(int fd, const char *name, const char *mode,
+                    unsigned int requested_window)
  {
-     struct tftphdr *ap;
-     struct tftphdr *dp;
--    int n;
-+    int n, err;
-     volatile u_short block;
-     volatile int size, firsttrip;
-     volatile unsigned long amount;
-@@ -177,6 +184,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
-     block = 1;
-     firsttrip = 1;
-     amount = 0;
-+    err = 0;
- 
+     struct tftphdr *ap, *dp;
+@@ -229,6 +242,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+     socklen_t fromlen;
+     FILE *file = NULL;
+     volatile int n, size, packets_in_window = 0, first_data = 0, final;
++    int err = 0;
+     int convert = !strcmp(mode, "netascii");
+     volatile unsigned int window;
+     unsigned int negotiated_block, negotiated_window;
+@@ -239,14 +253,17 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+ 
+     startclock();
+     file = fdopen(fd, convert ? "wt" : "wb");
+-    if (!file)
++    if (!file) {
++        err = EX_OSERR;
+         goto abort;
++    }
+     dp = w_init();
+     ap = (struct tftphdr *)ackbuf;
+     size = makerequest(RRQ, name, ap, mode, blocksize, requested_window,
+                        sizeof(ackbuf));
+     if (size < 0) {
+         fprintf(stderr, "tftp: %s: %s\n", name, strerror(errno));
++        err = EX_OSERR;
+         goto abort;
+     }
      tftp_signal(SIGALRM, timer, 0);
-     do {
-@@ -202,6 +210,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
-                    SOCKLEN(&peeraddr)) != size) {
-             alarm(0);
+@@ -259,6 +276,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+             tpacket("sent", ap, size);
+         if (sendto(f, ap, size, 0, &peeraddr.sa, SOCKLEN(&peeraddr)) != size) {
+             perror("tftp: sendto");
++            err = EX_OSERR;
+             goto abort;
+         }
+         alarm(rexmtval);
+@@ -277,12 +295,14 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+             tpacket("received", dp, n);
+         if (opcode == ERROR) {
+             printf("Error code %d: %s\n", ntohs(dp->th_code), dp->th_msg);
++            err = EX_PROTOCOL;
+             goto abort;
+         }
+         if (requested_options && opcode == OACK) {
+             if (!parse_oack(dp, n, blocksize, requested_window,
+                             &negotiated_block, &negotiated_window)) {
+                 nak(EOPTNEG, "Invalid option response");
++                err = EX_PROTOCOL;
+                 goto abort;
+             }
+             segsize = (int)negotiated_block;
+@@ -306,6 +326,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+             tpacket("sent", ap, size);
+         if (sendto(f, ap, size, 0, &peeraddr.sa, SOCKLEN(&peeraddr)) != size) {
              perror("tftp: sendto");
 +            err = EX_OSERR;
              goto abort;
          }
          write_behind(file, convert);
-@@ -215,6 +224,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
+@@ -329,6 +350,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+             if (sendto(f, ap, 4, 0, &peeraddr.sa,
+                        SOCKLEN(&peeraddr)) != 4) {
+                 perror("tftp: sendto");
++                err = EX_OSERR;
+                 goto abort;
+             }
+             write_behind(file, convert);
+@@ -340,6 +362,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
              alarm(0);
              if (n < 0) {
                  perror("tftp: recvfrom");
 +                err = EX_OSERR;
                  goto abort;
              }
-             sa_set_port(&peeraddr, SOCKPORT(&from));  /* added */
-@@ -225,6 +235,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
-             dp_block = ntohs((u_short) dp->th_block);
-             if (dp_opcode == ERROR) {
-                 printf("Error code %d: %s\n", dp_block, dp->th_msg);
-+                err = EX_PROTOCOL;
-                 goto abort;
-             }
-             if (dp_opcode == DATA) {
-@@ -249,6 +260,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
+             if (trace)
+@@ -352,6 +375,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+         packet_block = ntohs(dp->th_block);
+         if (opcode == ERROR) {
+             printf("Error code %d: %s\n", packet_block, dp->th_msg);
++            err = EX_PROTOCOL;
+             goto abort;
+         }
+         if (opcode != DATA || n < 4)
+@@ -369,11 +393,13 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+         }
+         if (n - 4 > segsize) {
+             nak(EBADOP, "Data packet too large");
++            err = EX_PROTOCOL;
+             goto abort;
+         }
          size = writeit(file, &dp, n - 4, convert);
          if (size < 0) {
              nak(errno + 100, NULL);
 +            err = EX_OSERR;
-             break;
+             goto abort;
          }
          amount += size;
-@@ -263,6 +275,8 @@ void tftp_recvfile(int fd, const char *name, const char *mode)
-     stopclock();
-     if (amount > 0)
-         printstats("Received", amount);
-+
-+    return err;
- }
- 
- static int
+@@ -390,6 +416,7 @@ void tftp_recvfile(int fd, const char *name, const char *mode,
+             if (sendto(f, ap, 4, 0, &peeraddr.sa,
+                        SOCKLEN(&peeraddr)) != 4) {
+                 perror("tftp: sendto");
++                err = EX_OSERR;
+                 goto abort;
+             }
+             write_behind(file, convert);
 -- 
 2.55.0
 

diff --git a/tftp-hpa-6.0-stats.patch b/tftp-hpa-6.0-stats.patch
new file mode 100644
index 0000000..386a93d
--- /dev/null
+++ b/tftp-hpa-6.0-stats.patch
@@ -0,0 +1,41 @@
+From 7b4b6f75214c1c64d86f6c333db5dede33ef5e43 Mon Sep 17 00:00:00 2001
+From: Lukáš Zaoral via Syslinux <syslinux@syslinux.org>
+Date: Wed, 15 Apr 2026 10:15:23 +0200
+Subject: tftp: correctly convert μs to s to fix transfer statistics
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Before this patch, the microseconds difference was computed incorrectly
+leading to wrong transfer statistics.  The value should be divided by
+a million and not by 100,000.
+
+$ ./tftp/tftp localhost -v -c get 10MB
+Connected to localhost (::1), port 69
+getting from localhost:10MB to 10MB [netascii]
+Received 10485760 bytes in -7.5 seconds [-11164298 bit/s]
+
+Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
+Signed-off-by: Lukáš Zaoral <lzaoral@redhat.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+---
+ tftp/tftp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tftp/tftp.c b/tftp/tftp.c
+index abc25b9..d9c9394 100644
+--- a/tftp/tftp.c
++++ b/tftp/tftp.c
+@@ -638,8 +638,8 @@ static void printstats(const char *direction, unsigned long amount)
+ {
+     double delta;
+ 
+-    delta = (tstop.tv_sec + (tstop.tv_usec / 100000.0)) -
+-        (tstart.tv_sec + (tstart.tv_usec / 100000.0));
++    delta = (tstop.tv_sec + (tstop.tv_usec / 1000000.0)) -
++        (tstart.tv_sec + (tstart.tv_usec / 1000000.0));
+     if (verbose) {
+         printf("%s %lu bytes in %.1f seconds", direction, amount, delta);
+         printf(" [%.0f bit/s]", (amount * 8.) / delta);
+-- 
+cgit 1.3.1-korg

diff --git a/tftp.spec b/tftp.spec
index 0a6ffdf..61aeb5a 100644
--- a/tftp.spec
+++ b/tftp.spec
@@ -2,12 +2,12 @@
 
 Summary: The client for the Trivial File Transfer Protocol (TFTP)
 Name: tftp
-Version: 5.4
-Release: 2%{?dist}
+Version: 6.0
+Release: 1%{?dist}
 License: BSD-4-Clause-UC
 URL: http://www.kernel.org/pub/software/network/tftp/
-Source0: https://www.kernel.org/pub/software/network/tftp/tftp-hpa/tftp-hpa-5.4.tar.gz
-Source1: https://www.kernel.org/pub/software/network/tftp/tftp-hpa/tftp-hpa-5.4.tar.sign
+Source0: https://www.kernel.org/pub/software/network/tftp/tftp-hpa-%{version}.tar.gz
+Source1: https://www.kernel.org/pub/software/network/tftp/tftp-hpa-%{version}.tar.sign
 # gpg --keyserver pgp.mit.edu --recv-key 6D0107BC69EE5A274FD9B60C2DB3C3321B6DDF86
 # gpg --output hpa.gpg --armor --export hpa@zytor.com
 Source2: hpa.gpg
@@ -15,10 +15,10 @@ Source3: tftp.socket
 Source4: tftp.service
 Source5: tftp-server-tmpfiles.conf
 
+# Upstream patches
+Patch: tftp-hpa-6.0-stats.patch
+
 # To-be upstreamed patches
-# https://www.syslinux.org/archives/2026-April/026959.html
-Patch: tftp-hpa-5.3-stats.patch
-Patch: tftp-doc.patch
 Patch: tftp-enhanced-logging.patch
 Patch: tftp-hpa-5.2-osh.patch
 Patch: tftp-hpa-5.3-tftp-exit-code-cmdmode.patch
@@ -96,6 +96,9 @@ install -D -p -m 644 %SOURCE5 %{buildroot}%{_tmpfilesdir}/%{name}.conf
 %{_unitdir}/tftp.socket
 
 %changelog
+* Mon Aug 31 2026 Lukáš Zaoral <lzaoral@redhat.com> - 6.0-1
+- rebase to the latest upstream release (rhbz#2525859)
+
 * Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 5.4-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
 

             reply	other threads:[~2026-09-03  9:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-03  9:12  [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-09-08 10:49 [rpms/tftp] rawhide: rebase to the latest upstream release 
2026-07-09 20:16 

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178842674926.1.12027486397434219689.rpms-tftp-b2b5876d55ea@fedoraproject.org \
    --to=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox