pkg/60498: net/unfs3: udpate to 0.11.0

"[email protected] via gnats" <[email protected]> Fri, 24 Jul 2026 18:30:01 +0000 (UTC)
Newsgroups gmane.os.netbsd.devel.pkgsrc.bugs
Message-ID <[email protected]>
>Number:         60498
>Category:       pkg
>Synopsis:       net/unfs3: udpate to 0.11.0
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 24 18:30:01 +0000 2026
>Originator:     Bartosz Kuzma
>Release:        NetBSD 11.0_RC6, pkgsrc-2026Q2
>Organization:
>Environment:
>Description:
net/unfs3: update to 0.11.0

Changes since 0.9.22:

unsf3 0.11.0:
 - fixes to make sure unfs3 works on macOS and Windows again
 - 32-bit mode can now be enabled at any time, for compatibility with very old NFS clients
 - starting unfsd now gives a reliable error code if it fails to start
 - fix incorrect file mode when doing exclusive create
 - fix to correctly update the time on symlinks, not what they point to
 - Flex' libfl is no longer needed

unsf3 0.10.0
 - switched to libtirpc as a base requirement
 - contrib scripts now require Python 3 instead of Python 2
 - fix stale handle when moving files or directories

unfs3 0.9.23
 - include AFS support for better serving of files from AFS filesystems
 - use svc_getreq_poll() when available
 - fix serving files larger than 4GB from Windows
 - better support for 64-bit systems
 - fixes for macOS and Windows support
 - fixes when cross compiling
 - better support for exporting FAT filesystems

>How-To-Repeat:
Tested with NetBSD 11.0_RC6 and OpenBSD 7.9 mount_nfs
>Fix:
Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/net/unfs3/Makefile,v
retrieving revision 1.17
diff -u -r1.17 Makefile
--- Makefile	17 Nov 2025 11:01:17 -0000	1.17
+++ Makefile	24 Jul 2026 17:02:05 -0000
@@ -1,23 +1,38 @@
 # $NetBSD: Makefile,v 1.17 2025/11/17 11:01:17 wiz Exp $
 #
 
-DISTNAME=	unfs3-0.9.22
-PKGREVISION=	2
+DISTNAME=	unfs3-0.11.0
 CATEGORIES=	net
-MASTER_SITES=	${MASTER_SITE_SOURCEFORGE:=unfs3/}
+MASTER_SITES=	${MASTER_SITE_GITHUB:=unfs3/}
+GITHUB_PROJECT=	unfs3
+GITHUB_TAG=	refs/tags/${DISTNAME}
 
 MAINTAINER=	[email protected]
-HOMEPAGE=	https://unfs3.sourceforge.net/
+HOMEPAGE=	https://unfs3.github.io/
 COMMENT=	Userspace NFSv3 server
 LICENSE=	modified-bsd
 
-GNU_CONFIGURE=	yes
-USE_TOOLS+=	flex:run bison
+WRKSRC=		${WRKDIR}/${GITHUB_PROJECT}-${DISTNAME}
+
+USE_TOOLS+=	flex:run bison autoconf automake pkg-config gmake
+USE_LANGUAGES=	c
+
+HAS_CONFIGURE=		yes
+CONFIGURE_ARGS+=	--prefix=${PREFIX}
+CONFIGURE_ARGS+=	--mandir=${PREFIX}/${PKGMANDIR}
+
+.include "../../devel/libtirpc/buildlink3.mk"
+.include "../../devel/libtirpc/builtin.mk"
+
+.if ${USE_BUILTIN.libtirpc:Uno} == "yes"
+CONFIGURE_ENV+=	TIRPC_CFLAGS=-I/usr/include
+CONFIGURE_ENV+=	TIRPC_LIBS=-lc
+.endif
 
 .include "../../mk/bsd.prefs.mk"
 
 CONF_FILES+=		${PREFIX}/share/examples/unfs3/exports \
-			    ${PKG_SYSCONFDIR}/exports
+				${PKG_SYSCONFDIR}/exports
 RCD_SCRIPTS=		unfsd
 
 INSTALLATION_DIRS+=	share/examples/unfs3
@@ -28,11 +43,12 @@
 SUBST_FILES.exports=	daemon.c unfsd.8
 SUBST_SED.exports=	-e 's,/etc/exports,${PKG_SYSCONFDIR}/exports,g'
 
-pre-build:
-	cd ${WRKSRC}/Config && ${MAKE_PROGRAM} clean
+pre-configure:
+	cd ${WRKSRC} && autoupdate
+	cd ${WRKSRC} && autoreconf -fiv
 
 post-install:
 	${INSTALL_DATA} ${FILESDIR}/exports \
-	    ${DESTDIR}${PREFIX}/share/examples/unfs3
+		${DESTDIR}${PREFIX}/share/examples/unfs3
 
 .include "../../mk/bsd.pkg.mk"
Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/net/unfs3/distinfo,v
retrieving revision 1.7
diff -u -r1.7 distinfo
--- distinfo	26 Oct 2021 11:07:06 -0000	1.7
+++ distinfo	24 Jul 2026 17:02:05 -0000
@@ -1,6 +1,9 @@
 $NetBSD: distinfo,v 1.7 2021/10/26 11:07:06 nia Exp $
 
-BLAKE2s (unfs3-0.9.22.tar.gz) = f960cf569c5c9ee56b54a6f8346651864497db2c6dc5f3d11c07bbc037bc0fcb
-SHA512 (unfs3-0.9.22.tar.gz) = b1e4b7f5b7b7de27bb5411c69363a6b40be0fcf1f772e283f0868a2155fa9ea4b9b8e7f05b1706e41cf09dd2ee4baab472a01bc4640ae47e3be2a19d8d3f5f9e
-Size (unfs3-0.9.22.tar.gz) = 168447 bytes
-SHA1 (patch-Makefile_in) = 68e86790c80db6d9cfb5698735ec54163adea68d
+BLAKE2s (unfs3-0.11.0.tar.gz) = a0d5c7c7136253df207c5294a4ffbce020384eaf0ec7a1a283e06eb1d52437ca
+SHA512 (unfs3-0.11.0.tar.gz) = be7298a82ab5680cf6719a8784621034c0e25ed15846fc8ed04bbdf0bae037c5d5985d44416aa932f36435131cafd5797d438fa967607113603c2dbb078f7645
+Size (unfs3-0.11.0.tar.gz) = 110613 bytes
+SHA1 (patch-configure.ac) = 86c07b31245edce7bc77c08d0364a7e342f05446
+SHA1 (patch-daemon.c) = 67dcfb852b395887ad12ec2792dc833332391de1
+SHA1 (patch-nfs.c) = 8b66d408a2531e1e087f528b102d0c897451eb09
+SHA1 (patch-xdr.c) = 6899df775bd68a173db92e1b3484b02fe847407b
Index: patches/patch-Makefile_in
===================================================================
RCS file: patches/patch-Makefile_in
diff -N patches/patch-Makefile_in
--- patches/patch-Makefile_in	21 Dec 2011 17:13:48 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-$NetBSD: patch-Makefile_in,v 1.1 2011/12/21 17:13:48 dholland Exp $
-
---- Makefile.in~	2007-12-05 19:11:28.000000000 +0000
-+++ Makefile.in
-@@ -25,7 +25,7 @@ SUBDIRS = Config @SUBDIRS@
- 
- DESTDIR =
- 
--all: subdirs unfsd$(EXEEXT)
-+all: subdirs .WAIT unfsd$(EXEEXT)
- 
- unfsd$(EXEEXT): $(OBJS) $(CONFOBJ) $(EXTRAOBJ)
- 	$(CC) -o $@ $(OBJS) $(CONFOBJ) $(EXTRAOBJ) $(LDFLAGS)
Index: patches/patch-configure.ac
===================================================================
RCS file: patches/patch-configure.ac
diff -N patches/patch-configure.ac
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-configure.ac	24 Jul 2026 17:02:05 -0000
@@ -0,0 +1,15 @@
+$NetBSD$
+
+Portability
+
+--- configure.ac.orig	2026-07-24 05:24:37.161821367 +0000
++++ configure.ac
+@@ -8,7 +8,7 @@ AC_PROG_INSTALL
+ AC_PROG_CC([gcc egcs kgcc cc])
+ AC_CHECK_TOOL([AR], [ar])
+ AC_PROG_LEX([noyywrap])
+-AS_IF([test "x$LEX" == "x:"], [
++AS_IF([test "x$LEX" = "x:"], [
+   AC_MSG_ERROR([flex or lex missing.])
+ ])
+ AC_PROG_YACC
Index: patches/patch-daemon.c
===================================================================
RCS file: patches/patch-daemon.c
diff -N patches/patch-daemon.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-daemon.c	24 Jul 2026 17:02:05 -0000
@@ -0,0 +1,23 @@
+$NetBSD$
+
+Use getsockname for NetBSD
+
+--- daemon.c.orig	2025-03-28 08:56:00.000000000 +0000
++++ daemon.c
+@@ -707,7 +707,15 @@ static void mountprog_3(struct svc_req *
+ static int
+ _socket_getdomain(int socket)
+ {
+-#ifdef SO_DOMAIN
++#if defined(__NetBSD__)
++    struct sockaddr name;
++    socklen_t namelen = sizeof(name);
++
++    if (getsockname(socket, &name, &namelen) == -1)
++        return -1;
++
++    return name.sa_family;
++#elif defined(SO_DOMAIN)
+     int ret, domain;
+     socklen_t len;
+     len = sizeof(domain);
Index: patches/patch-nfs.c
===================================================================
RCS file: patches/patch-nfs.c
diff -N patches/patch-nfs.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-nfs.c	24 Jul 2026 17:02:05 -0000
@@ -0,0 +1,24 @@
+$NetBSD$
+
+Portability
+
+--- nfs.c.orig	2026-07-24 15:19:36.054976780 +0000
++++ nfs.c
+@@ -334,7 +334,7 @@ READ3res *nfsproc3_read_3_svc(READ3args 
+         fd = fd_open(path, argp->file, UNFS3_FD_READ, TRUE);
+         if (fd != -1) {
+             /* read one more to check for eof */
+-            res = backend_pread(fd, buf, argp->count + 1, (off64_t)argp->offset);
++            res = backend_pread(fd, buf, argp->count + 1, (off_t)argp->offset);
+ 
+             /* eof if we could not read one more */
+             result.READ3res_u.resok.eof = (res <= (int64) argp->count);
+@@ -395,7 +395,7 @@ WRITE3res *nfsproc3_write_3_svc(WRITE3ar
+         if (fd != -1) {
+             res =
+                 backend_pwrite(fd, argp->data.data_val, argp->data.data_len,
+-                               (off64_t)argp->offset);
++                               (off_t)argp->offset);
+ 
+             /* close for real if not UNSTABLE write */
+             if (argp->stable == UNSTABLE)
Index: patches/patch-xdr.c
===================================================================
RCS file: patches/patch-xdr.c
diff -N patches/patch-xdr.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-xdr.c	24 Jul 2026 17:02:05 -0000
@@ -0,0 +1,187 @@
+$NetBSD$
+
+Portability - libtirpc uses rpc/xdr.h from NetBSD
+
+--- xdr.c.orig	2026-07-24 15:34:36.125979939 +0000
++++ xdr.c
+@@ -160,14 +160,14 @@ bool_t xdr_nfspath3(XDR * xdrs, nfspath3
+ 
+ bool_t xdr_fileid3(XDR * xdrs, fileid3 * objp)
+ {
+-    if (!xdr_uint64_t(xdrs, objp))
++    if (!xdr_u_int64_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_cookie3(XDR * xdrs, cookie3 * objp)
+ {
+-    if (!xdr_uint64_t(xdrs, objp))
++    if (!xdr_u_int64_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+@@ -195,42 +195,42 @@ bool_t xdr_writeverf3(XDR * xdrs, writev
+ 
+ bool_t xdr_uid3(XDR * xdrs, uid3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, objp))
++    if (!xdr_u_int32_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_gid3(XDR * xdrs, gid3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, objp))
++    if (!xdr_u_int32_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_size3(XDR * xdrs, size3 * objp)
+ {
+-    if (!xdr_uint64_t(xdrs, objp))
++    if (!xdr_u_int64_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_offset3(XDR * xdrs, offset3 * objp)
+ {
+-    if (!xdr_uint64_t(xdrs, objp))
++    if (!xdr_u_int64_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_mode3(XDR * xdrs, mode3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, objp))
++    if (!xdr_u_int32_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+ 
+ bool_t xdr_count3(XDR * xdrs, count3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, objp))
++    if (!xdr_u_int32_t(xdrs, objp))
+         return FALSE;
+     return TRUE;
+ }
+@@ -251,9 +251,9 @@ bool_t xdr_ftype3(XDR * xdrs, ftype3 * o
+ 
+ bool_t xdr_specdata3(XDR * xdrs, specdata3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, &objp->specdata1))
++    if (!xdr_u_int32_t(xdrs, &objp->specdata1))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->specdata2))
++    if (!xdr_u_int32_t(xdrs, &objp->specdata2))
+         return FALSE;
+     return TRUE;
+ }
+@@ -269,9 +269,9 @@ bool_t xdr_nfs_fh3(XDR * xdrs, nfs_fh3 *
+ 
+ bool_t xdr_nfstime3(XDR * xdrs, nfstime3 * objp)
+ {
+-    if (!xdr_uint32_t(xdrs, &objp->seconds))
++    if (!xdr_u_int32_t(xdrs, &objp->seconds))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->nseconds))
++    if (!xdr_u_int32_t(xdrs, &objp->nseconds))
+         return FALSE;
+     return TRUE;
+ }
+@@ -282,7 +282,7 @@ bool_t xdr_fattr3(XDR * xdrs, fattr3 * o
+         return FALSE;
+     if (!xdr_mode3(xdrs, &objp->mode))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->nlink))
++    if (!xdr_u_int32_t(xdrs, &objp->nlink))
+         return FALSE;
+     if (!xdr_uid3(xdrs, &objp->uid))
+         return FALSE;
+@@ -294,7 +294,7 @@ bool_t xdr_fattr3(XDR * xdrs, fattr3 * o
+         return FALSE;
+     if (!xdr_specdata3(xdrs, &objp->rdev))
+         return FALSE;
+-    if (!xdr_uint64_t(xdrs, &objp->fsid))
++    if (!xdr_u_int64_t(xdrs, &objp->fsid))
+         return FALSE;
+     if (!xdr_fileid3(xdrs, &objp->fileid))
+         return FALSE;
+@@ -635,7 +635,7 @@ bool_t xdr_ACCESS3args(XDR * xdrs, ACCES
+ {
+     if (!xdr_nfs_fh3(xdrs, &objp->object))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->access))
++    if (!xdr_u_int32_t(xdrs, &objp->access))
+         return FALSE;
+     return TRUE;
+ }
+@@ -644,7 +644,7 @@ bool_t xdr_ACCESS3resok(XDR * xdrs, ACCE
+ {
+     if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->access))
++    if (!xdr_u_int32_t(xdrs, &objp->access))
+         return FALSE;
+     return TRUE;
+ }
+@@ -1408,7 +1408,7 @@ bool_t xdr_FSSTAT3resok(XDR * xdrs, FSST
+         return FALSE;
+     if (!xdr_size3(xdrs, &objp->afiles))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->invarsec))
++    if (!xdr_u_int32_t(xdrs, &objp->invarsec))
+         return FALSE;
+     return TRUE;
+ }
+@@ -1448,25 +1448,25 @@ bool_t xdr_FSINFO3resok(XDR * xdrs, FSIN
+ {
+     if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->rtmax))
++    if (!xdr_u_int32_t(xdrs, &objp->rtmax))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->rtpref))
++    if (!xdr_u_int32_t(xdrs, &objp->rtpref))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->rtmult))
++    if (!xdr_u_int32_t(xdrs, &objp->rtmult))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->wtmax))
++    if (!xdr_u_int32_t(xdrs, &objp->wtmax))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->wtpref))
++    if (!xdr_u_int32_t(xdrs, &objp->wtpref))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->wtmult))
++    if (!xdr_u_int32_t(xdrs, &objp->wtmult))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->dtpref))
++    if (!xdr_u_int32_t(xdrs, &objp->dtpref))
+         return FALSE;
+     if (!xdr_size3(xdrs, &objp->maxfilesize))
+         return FALSE;
+     if (!xdr_nfstime3(xdrs, &objp->time_delta))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->properties))
++    if (!xdr_u_int32_t(xdrs, &objp->properties))
+         return FALSE;
+     return TRUE;
+ }
+@@ -1506,9 +1506,9 @@ bool_t xdr_PATHCONF3resok(XDR * xdrs, PA
+ {
+     if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->linkmax))
++    if (!xdr_u_int32_t(xdrs, &objp->linkmax))
+         return FALSE;
+-    if (!xdr_uint32_t(xdrs, &objp->name_max))
++    if (!xdr_u_int32_t(xdrs, &objp->name_max))
+         return FALSE;
+     if (!xdr_bool(xdrs, &objp->no_trunc))
+         return FALSE;