Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Jan 2024 16:11:34 GMT
From:      Dan Langille <dvl@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 3c57e9fa97a0 - main - sysutils/bacula13-server: Add upstream patch
Message-ID:  <202401311611.40VGBYKZ021736@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by dvl:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3c57e9fa97a073c2911a6b3c76161376d3d185f6

commit 3c57e9fa97a073c2911a6b3c76161376d3d185f6
Author:     Dan Langille <dvl@FreeBSD.org>
AuthorDate: 2024-01-31 16:08:51 +0000
Commit:     Dan Langille <dvl@FreeBSD.org>
CommitDate: 2024-01-31 16:11:31 +0000

    sysutils/bacula13-server: Add upstream patch
    
    If you are using bacula-fd < 13.x, this is a required update for you.
    
    Not all warnings from a bacula < 13 client are seen when running with
    bacula-server >= 13.x
    
    See: https://gitlab.bacula.org/bacula-community-edition/bacula-community/-/issues/2704
---
 sysutils/bacula13-server/Makefile                  |  1 +
 .../files/patch-src_dird_fd__cmds.c                | 46 ++++++++++++++++++++++
 .../bacula13-server/files/patch-src_dird_getmsg.c  | 17 ++++++++
 sysutils/bacula13-server/files/patch-src_jcr.h     | 10 +++++
 4 files changed, 74 insertions(+)

diff --git a/sysutils/bacula13-server/Makefile b/sysutils/bacula13-server/Makefile
index 1fcc10f551ee..6d239e2ed9a1 100644
--- a/sysutils/bacula13-server/Makefile
+++ b/sysutils/bacula13-server/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	bacula
 DISTVERSION=	13.0.3
+PORTREVISION=	1
 CATEGORIES?=	sysutils
 MASTER_SITES=	SF/bacula/bacula/${PORTVERSION}
 PKGNAMEPREFIX?=	#
diff --git a/sysutils/bacula13-server/files/patch-src_dird_fd__cmds.c b/sysutils/bacula13-server/files/patch-src_dird_fd__cmds.c
new file mode 100644
index 000000000000..ecd0a9ddbb04
--- /dev/null
+++ b/sysutils/bacula13-server/files/patch-src_dird_fd__cmds.c
@@ -0,0 +1,46 @@
+--- src/dird/fd_cmds.c.orig	2023-05-02 09:50:49 UTC
++++ src/dird/fd_cmds.c
+@@ -72,6 +72,34 @@ static void delete_bsock_end_cb(JCR *jcr, void *ctx)
+    free_bsock(socket);
+ }
+ 
++/* 16.0.10 (12Jan24) x86_64-pc-linux-gnu,ubuntu,20.04 -> 160010 */
++static uint64_t scan_version(char *str)
++{
++   Enter(0);
++   uint64_t version = 0;
++
++   regex_t r1;
++   regmatch_t pmatch[16];
++   regcomp(&r1, "^([0-9]+)\\.([0-9]+)\\.([0-9]+)", REG_EXTENDED);
++   if (regexec(&r1, str, 4, pmatch, 0) == 0 &&
++       pmatch[1].rm_so == 0 && pmatch[1].rm_eo > 0 && pmatch[1].rm_eo < 50 &&
++       pmatch[2].rm_so > 0 && pmatch[2].rm_eo > 0 && (pmatch[2].rm_eo - pmatch[2].rm_so) < 50 &&
++       pmatch[3].rm_so > 0 && pmatch[3].rm_eo > 0 && (pmatch[3].rm_eo - pmatch[3].rm_so) < 50)
++   {
++      char buf[50];
++      bstrncpy(buf, str + pmatch[1].rm_so, pmatch[1].rm_eo - pmatch[1].rm_so + 1);
++      version = str_to_uint64(buf) * 10000;
++
++      bstrncpy(buf, str + pmatch[2].rm_so, pmatch[2].rm_eo - pmatch[2].rm_so + 1);
++      version += str_to_uint64(buf) * 100;
++
++      bstrncpy(buf, str + pmatch[3].rm_so, pmatch[3].rm_eo - pmatch[3].rm_so + 1);
++      version += str_to_uint64(buf);
++   }
++   regfree(&r1);
++   return version;
++}
++
+ /*
+  * Open connection with File daemon.
+  * Try connecting every retry_interval (default 10 sec), and
+@@ -195,6 +223,8 @@ int connect_to_file_daemon(JCR *jcr, int retry_interva
+           cr.FileRetention = jcr->client->FileRetention;
+           cr.JobRetention = jcr->client->JobRetention;
+           bstrncpy(cr.Uname, fd->msg+strlen(OKjob)+1, sizeof(cr.Uname));
++          jcr->client_version = scan_version(cr.Uname);
++
+           if (!db_update_client_record(jcr, jcr->db, &cr)) {
+              Jmsg(jcr, M_WARNING, 0, _("Error updating Client record. ERR=%s\n"),
+                 db_strerror(jcr->db));
diff --git a/sysutils/bacula13-server/files/patch-src_dird_getmsg.c b/sysutils/bacula13-server/files/patch-src_dird_getmsg.c
new file mode 100644
index 000000000000..2ee3adae7320
--- /dev/null
+++ b/sysutils/bacula13-server/files/patch-src_dird_getmsg.c
@@ -0,0 +1,17 @@
+--- src/dird/getmsg.c.orig	2023-05-02 09:50:49 UTC
++++ src/dird/getmsg.c
+@@ -251,6 +251,14 @@ int bget_dirmsg(JCR *jcr, BSOCK *bs, BSOCK_CLIENT_TYPE
+          if (*msg == ' ') {
+             msg++;                    /* skip leading space */
+          }
++         /* Fix to support old FDs */
++         if (role == BSOCK_TYPE_FD && jcr->client_version > 0 && jcr->client_version < 130000) {
++            type = type + 1; /* Adding M_EVENTS pushed all old events by 1, we fix it automatically here */
++         }
++         if (type == M_ABORT) { // not allowed here
++            Jmsg1(jcr, M_ERROR, 0, _("Malformed message: %s\n"), bs->msg);
++            continue;
++         }
+          Dmsg1(900, "Dispatch msg: %s", msg);
+          dispatch_message(jcr, type, mtime, msg);
+          continue;
diff --git a/sysutils/bacula13-server/files/patch-src_jcr.h b/sysutils/bacula13-server/files/patch-src_jcr.h
new file mode 100644
index 000000000000..10d7432088b2
--- /dev/null
+++ b/sysutils/bacula13-server/files/patch-src_jcr.h
@@ -0,0 +1,10 @@
+--- src/jcr.h.orig	2023-05-02 09:50:49 UTC
++++ src/jcr.h
+@@ -399,6 +399,7 @@ class JCR { (public)
+    int32_t FDVersion;                 /* File daemon version number */
+    int32_t SDVersion;                 /* Storage daemon version number */
+    int64_t spool_size;                /* Spool size for this job */
++   uint64_t client_version;           /* Client version as a number */
+    utime_t snapshot_retention;        /* Snapshot retention (from Client/Job resource) */
+    volatile bool sd_msg_thread_done;  /* Set when Storage message thread done */
+    bool wasVirtualFull;               /* set if job was VirtualFull */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202401311611.40VGBYKZ021736>