diff --git a/setter/src/unix/bsd/CMakeLists.txt b/setter/src/unix/bsd/CMakeLists.txt index 7056c25..037f622 100644 --- a/setter/src/unix/bsd/CMakeLists.txt +++ b/setter/src/unix/bsd/CMakeLists.txt @@ -31,7 +31,7 @@ project( DESCRIPTION "Filesystem test creator for BSD" LANGUAGES C) -set(PLATFORM_SOURCES bsd.h xattr.c xattr.h attr.c attr.h) +set(PLATFORM_SOURCES bsd.h xattr.c xattr.h attr.c attr.h volume.c volume.h) set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") diff --git a/setter/src/unix/bsd/bsd.h b/setter/src/unix/bsd/bsd.h index ac21639..5a02fdb 100644 --- a/setter/src/unix/bsd/bsd.h +++ b/setter/src/unix/bsd/bsd.h @@ -28,4 +28,8 @@ Copyright (C) 2011-2021 Natalia Portillo void BsdExtendedAttributes(const char* path); void BsdFileAttributes(const char* path); +#if defined(__NetBSD__) +void NetBsdPrintStatvfsFlags(unsigned long flags); +#endif + #endif // SETTER_SRC_BSD_H_ diff --git a/setter/src/unix/bsd/volume.c b/setter/src/unix/bsd/volume.c new file mode 100644 index 0000000..e0a16a5 --- /dev/null +++ b/setter/src/unix/bsd/volume.c @@ -0,0 +1,207 @@ +/**************************************************************************** +Aaru Data Preservation Suite +----------------------------------------------------------------------------- + + Author(s) : Natalia Portillo + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2021 Natalia Portillo +*****************************************************************************/ + +#ifdef HAVE_SYS_STATVFS_H +#include +#endif + +#include "../../log.h" +#include "volume.h" + +#if defined(__NetBSD__) +void NetBsdPrintStatvfsFlags(unsigned long flags) +{ + log_write("\tFlags:\n"); + + if(flags & ST_RDONLY) + { + log_write("\t\tVolume is read-only.\n"); + flags -= ST_RDONLY; + } + + if(flags & ST_NOSUID) + { + log_write("\t\tVolume ignores suid and sgid bits.\n"); + flags -= ST_NOSUID; + } + + if(flags & ST_NODEV) + { + log_write("\t\tVolume disallows access to device special files.\n"); + flags -= ST_NODEV; + } + + if(flags & ST_NOEXEC) + { + log_write("\t\tVolume disallows program execution.\n"); + flags -= ST_NOEXEC; + } + + if(flags & ST_SYNCHRONOUS) + { + log_write("\t\tVolume writes are synced at once.\n"); + flags -= ST_SYNCHRONOUS; + } + + if(flags & ST_NOATIME) + { + log_write("\t\tVolume does not update access times.\n"); + flags -= ST_NOATIME; + } + + if(flags & ST_UNION) + { + log_write("\t\tVolume is a union.\n"); + flags -= ST_UNION; + } + + if(flags & ST_ASYNC) + { + log_write("\t\tVolume is written asynchronously.\n"); + flags -= ST_ASYNC; + } + + if(flags & ST_NOCOREDUMP) + { + log_write("\t\tVolume shall not have core dumps written.\n"); + flags -= ST_NOCOREDUMP; + } + + if(flags & ST_RELATIME) + { + log_write("\t\tVolume only updates access time on changes.\n"); + flags -= ST_RELATIME; + } + + if(flags & ST_IGNORE) + { + log_write("\t\tVolume does not appear in df.\n"); + flags -= ST_IGNORE; + } + + if(flags & ST_SYMPERM) + { + log_write("\t\tVolume recognizes symbolic link permissions.\n"); + flags -= ST_SYMPERM; + } + + if(flags & ST_NODEVMTIME) + { + log_write("\t\tVolume does not update modification times for devices.\n"); + flags -= ST_NODEVMTIME; + } + + if(flags & ST_SOFTDEP) + { + log_write("\t\tVolume uses soft dependencies.\n"); + flags -= ST_SOFTDEP; + } + + if(flags & ST_LOG) + { + log_write("\t\tVolume uses logging.\n"); + flags -= ST_LOG; + } + + if(flags & ST_EXTATTR) + { + log_write("\t\tVolume has extended attributes enabled.\n"); + flags -= ST_EXTATTR; + } + + if(flags & ST_EXRDONLY) + { + log_write("\t\tVolume is exported read-only.\n"); + flags -= ST_EXRDONLY; + } + + if(flags & ST_EXPORTED) + { + log_write("\t\tVolume is exported.\n"); + flags -= ST_EXPORTED; + } + + if(flags & ST_DEFEXPORTED) + { + log_write("\t\tVolume is exported to the world.\n"); + flags -= ST_DEFEXPORTED; + } + + if(flags & ST_EXPORTANON) + { + log_write("\t\tVolume uses anon id.\n"); + flags -= ST_EXPORTANON; + } + + if(flags & ST_EXKERB) + { + log_write("\t\tVolume is exported with Kerberos ID.\n"); + flags -= ST_EXKERB; + } + + if(flags & ST_EXNORESPORT) + { + log_write("\t\tVolume export does not enforce reserved ports.\n"); + flags -= ST_EXNORESPORT; + } + + if(flags & ST_EXPUBLIC) + { + log_write("\t\tVolume is exported publicly.\n"); + flags -= ST_EXPUBLIC; + } + + if(flags & ST_LOCAL) + { + log_write("\t\tVolume is local.\n"); + flags -= ST_LOCAL; + } + + if(flags & ST_QUOTA) + { + log_write("\t\tVolume has quotas enabled.\n"); + flags -= ST_QUOTA; + } + + if(flags & ST_ROOTFS) + { + log_write("\t\tVolume is the root filesystem.\n"); + flags -= ST_ROOTFS; + } + + if(flags & ST_DISCARD) + { + log_write("\t\tVolume is TRIMmed/DISCARDed.\n"); + flags -= ST_DISCARD; + } + + if(flags & ST_AUTOMOUNTED) + { + log_write("\t\tVolume is automounted.\n"); + flags -= ST_AUTOMOUNTED; + } + + if(flags) { log_write("\t\tRemaining flags: 0x%08lX\n", flags); } +} +#endif \ No newline at end of file diff --git a/setter/src/unix/bsd/volume.h b/setter/src/unix/bsd/volume.h new file mode 100644 index 0000000..a1fa3dc --- /dev/null +++ b/setter/src/unix/bsd/volume.h @@ -0,0 +1,142 @@ +/**************************************************************************** +Aaru Data Preservation Suite +----------------------------------------------------------------------------- + + Author(s) : Natalia Portillo + +--[ License ] --------------------------------------------------------------- + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +----------------------------------------------------------------------------- +Copyright (C) 2011-2021 Natalia Portillo +*****************************************************************************/ + +#ifndef AARU_FSTESTER_SETTER_SRC_BSD_VOLUME_H_ +#define AARU_FSTESTER_SETTER_SRC_BSD_VOLUME_H_ + +#if defined(__NetBSD__) +#ifndef ST_RDONLY +#define ST_RDONLY 0x00000001 /* read only filesystem */ +#endif + +#ifndef ST_SYNCHRONOUS +#define ST_SYNCHRONOUS 0x00000002 /* file system written synchronously */ +#endif + +#ifndef ST_NOEXEC +#define ST_NOEXEC 0x00000004 /* can't exec from filesystem */ +#endif + +#ifndef ST_NOSUID +#define ST_NOSUID 0x00000008 /* don't honor setuid bits on fs */ +#endif + +#ifndef ST_NODEV +#define ST_NODEV 0x00000010 /* don't interpret special files */ +#endif + +#ifndef ST_UNION +#define ST_UNION 0x00000020 /* union with underlying filesystem */ +#endif + +#ifndef ST_ASYNC +#define ST_ASYNC 0x00000040 /* file system written asynchronously */ +#endif + +#ifndef ST_NOCOREDUMP +#define ST_NOCOREDUMP 0x00008000 /* don't write core dumps to this FS */ +#endif + +#ifndef ST_RELATIME +#define ST_RELATIME 0x00020000 /* only update access time if mod/ch */ +#endif + +#ifndef ST_IGNORE +#define ST_IGNORE 0x00100000 /* don't show entry in df */ +#endif + +#ifndef ST_DISCARD +#define ST_DISCARD 0x00800000 /* use DISCARD/TRIM if supported */ +#endif + +#ifndef ST_EXTATTR +#define ST_EXTATTR 0x01000000 /* enable extended attributes */ +#endif + +#ifndef ST_LOG +#define ST_LOG 0x02000000 /* Use logging */ +#endif + +#ifndef ST_NOATIME +#define ST_NOATIME 0x04000000 /* Never update access times in fs */ +#endif + +#ifndef ST_AUTOMOUNTED +#define ST_AUTOMOUNTED 0x10000000 /* mounted by automountd(8) */ +#endif + +#ifndef ST_SYMPERM +#define ST_SYMPERM 0x20000000 /* recognize symlink permission */ +#endif + +#ifndef ST_NODEVMTIME +#define ST_NODEVMTIME 0x40000000 /* Never update mod times for devs */ +#endif + +#ifndef ST_SOFTDEP +#define ST_SOFTDEP 0x80000000 /* Use soft dependencies */ +#endif + +#ifndef ST_EXRDONLY +#define ST_EXRDONLY 0x00000080 /* exported read only */ +#endif + +#ifndef ST_EXPORTED +#define ST_EXPORTED 0x00000100 /* file system is exported */ +#endif + +#ifndef ST_DEFEXPORTED +#define ST_DEFEXPORTED 0x00000200 /* exported to the world */ +#endif + +#ifndef ST_EXPORTANON +#define ST_EXPORTANON 0x00000400 /* use anon uid mapping for everyone */ +#endif + +#ifndef ST_EXKERB +#define ST_EXKERB 0x00000800 /* exported with Kerberos uid mapping */ +#endif + +#ifndef ST_EXNORESPORT +#define ST_EXNORESPORT 0x08000000 /* don't enforce reserved ports (NFS) */ +#endif + +#ifndef ST_EXPUBLIC +#define ST_EXPUBLIC 0x10000000 /* public export (WebNFS) */ +#endif + +#ifndef ST_LOCAL +#define ST_LOCAL 0x00001000 /* filesystem is stored locally */ +#endif + +#ifndef ST_QUOTA +#define ST_QUOTA 0x00002000 /* quotas are enabled on filesystem */ +#endif + +#ifndef ST_ROOTFS +#define ST_ROOTFS 0x00004000 /* identifies the root filesystem */ +#endif +#endif // NetBSD + +#endif // AARU_FSTESTER_SETTER_SRC_BSD_VOLUME_H_ diff --git a/setter/src/unix/volume.c b/setter/src/unix/volume.c index 4b1feaa..e2ea5b7 100644 --- a/setter/src/unix/volume.c +++ b/setter/src/unix/volume.c @@ -181,7 +181,7 @@ void GetVolumeInfo(const char* path, size_t* clusterSize) if(buf.f_flag) { #if defined(__NetBSD__) -// TODO: NetBsdPrintStatfsFlags(buf.f_flag); + NetBsdPrintStatvfsFlags(buf.f_flag); #else log_write("\tFlags: 0x%08lX\n", buf.f_flag); #endif