Date: Tue, 6 May 2025 16:58:36 GMT From: Jessica Clarke <jrtc27@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 52c8e24cc03b - main - cross-build: Provide real fflagstostr/strtofflags on Linux Message-ID: <202505061658.546GwawW051729@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=52c8e24cc03b6a109f678a3a72ef5c88cb45cc07 commit 52c8e24cc03b6a109f678a3a72ef5c88cb45cc07 Author: Jessica Clarke <jrtc27@FreeBSD.org> AuthorDate: 2025-05-06 16:58:10 +0000 Commit: Jessica Clarke <jrtc27@FreeBSD.org> CommitDate: 2025-05-06 16:58:10 +0000 cross-build: Provide real fflagstostr/strtofflags on Linux These are used by mtree and makefs, so in order to be able to set schg on /var/empty in METALOG and set schg on various files and directories in the resulting disk images we need to have a real implementation rather than always giving no flags. Ideally mtree wouldn't rely on round-tripping the textual flags field via the "native" flags encoding using these functions, and ideally makefs wouldn't rely on the "native" flags encoding matching FreeBSD's, but in practice macOS's schg is the same and we can pretend Linux has the same. This fixes Linux-produced disk images lacking schg on any files or directories, and Linux-produced distribution tarballs lacking schg on /var/empty (note though that they do set schg on files, as install already preserves file flags on Linux). Reviewed by: emaste, markj Differential Revision: https://reviews.freebsd.org/D50080 --- tools/build/Makefile | 7 ++- tools/build/cross-build/fflags.c | 62 ------------------------ tools/build/cross-build/include/linux/sys/stat.h | 20 ++++++++ 3 files changed, 25 insertions(+), 64 deletions(-) diff --git a/tools/build/Makefile b/tools/build/Makefile index f4bb383693a8..a9f4a84e6f7c 100644 --- a/tools/build/Makefile +++ b/tools/build/Makefile @@ -212,8 +212,11 @@ CFLAGS.closefrom.c+= -DSTDC_HEADERS -DHAVE_SYS_DIR_H -DHAVE_DIRENT_H \ -DHAVE_DIRFD -DHAVE_SYSCONF # Provide getprogname/setprograme SRCS+= progname.c -# Stub implementations of fflagstostr/strtofflags -SRCS+= fflags.c +# Provide fflagstostr/strtofflags for mtree and makefs +# On macOS we use the host's so conflate host and target flags, which ideally +# we'd avoid, but in practice these align for many flags, including +# SF_IMMUTABLE, the only flag we currently set during install. +SRCS+= strtofflags.c # macOS has a standalone cross-build implementation, but Linux can use the same # ELF one as FreeBSD diff --git a/tools/build/cross-build/fflags.c b/tools/build/cross-build/fflags.c deleted file mode 100644 index f1d23c3637b6..000000000000 --- a/tools/build/cross-build/fflags.c +++ /dev/null @@ -1,62 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright 2018-2020 Alex Richardson <arichardson@FreeBSD.org> - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory (Department of Computer Science and - * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the - * DARPA SSITH research programme. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * This work was supported by Innovate UK project 105694, "Digital Security by - * Design (DSbD) Technology Platform Prototype". - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <string.h> -#include <unistd.h> - -char * -fflagstostr(u_long flags __unused) -{ - return strdup(""); -} - -int -strtofflags(char **stringp __unused, u_long *setp, u_long *clrp) -{ - /* On linux just ignore the file flags for now */ - /* - * XXX: this will prevent makefs from setting noschg on libc, etc. - * so we should really find a way to support flags in disk images. - */ - if (setp) - *setp = 0; - if (clrp) - *clrp = 0; - return (0); /* success */ -} diff --git a/tools/build/cross-build/include/linux/sys/stat.h b/tools/build/cross-build/include/linux/sys/stat.h index 5937920ce461..1a69e127c2e1 100644 --- a/tools/build/cross-build/include/linux/sys/stat.h +++ b/tools/build/cross-build/include/linux/sys/stat.h @@ -66,5 +66,25 @@ #define ALLPERMS (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) #endif +#define UF_SETTABLE 0x0000ffff +#define UF_NODUMP 0x00000001 +#define UF_IMMUTABLE 0x00000002 +#define UF_APPEND 0x00000004 +#define UF_OPAQUE 0x00000008 +#define UF_NOUNLINK 0x00000010 +#define UF_SYSTEM 0x00000080 +#define UF_SPARSE 0x00000100 +#define UF_OFFLINE 0x00000200 +#define UF_REPARSE 0x00000400 +#define UF_ARCHIVE 0x00000800 +#define UF_READONLY 0x00001000 +#define UF_HIDDEN 0x00008000 +#define SF_SETTABLE 0xffff0000 +#define SF_ARCHIVED 0x00010000 +#define SF_IMMUTABLE 0x00020000 +#define SF_APPEND 0x00040000 +#define SF_NOUNLINK 0x00100000 +#define SF_SNAPSHOT 0x00200000 + /* This include is needed for OpenZFS bootstrap */ #include <sys/mount.h>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505061658.546GwawW051729>