freebsd-nq/lib
Kenneth D. Merry 7da1a731c6 Expand the use of stat(2) flags to allow storing some Windows/DOS
and CIFS file attributes as BSD stat(2) flags.

This work is intended to be compatible with ZFS, the Solaris CIFS
server's interaction with ZFS, somewhat compatible with MacOS X,
and of course compatible with Windows.

The Windows attributes that are implemented were chosen based on
the attributes that ZFS already supports.

The summary of the flags is as follows:

UF_SYSTEM:	Command line name: "system" or "usystem"
		ZFS name: XAT_SYSTEM, ZFS_SYSTEM
		Windows: FILE_ATTRIBUTE_SYSTEM

		This flag means that the file is used by the
		operating system.  FreeBSD does not enforce any
		special handling when this flag is set.

UF_SPARSE:	Command line name: "sparse" or "usparse"
		ZFS name: XAT_SPARSE, ZFS_SPARSE
		Windows: FILE_ATTRIBUTE_SPARSE_FILE

		This flag means that the file is sparse.  Although
		ZFS may modify this in some situations, there is
		not generally any special handling for this flag.

UF_OFFLINE:	Command line name: "offline" or "uoffline"
		ZFS name: XAT_OFFLINE, ZFS_OFFLINE
		Windows: FILE_ATTRIBUTE_OFFLINE

		This flag means that the file has been moved to
		offline storage.  FreeBSD does not have any special
		handling for this flag.

UF_REPARSE:	Command line name: "reparse" or "ureparse"
		ZFS name: XAT_REPARSE, ZFS_REPARSE
		Windows: FILE_ATTRIBUTE_REPARSE_POINT

		This flag means that the file is a Windows reparse
		point.  ZFS has special handling code for reparse
		points, but we don't currently have the other
		supporting infrastructure for them.

UF_HIDDEN:	Command line name: "hidden" or "uhidden"
		ZFS name: XAT_HIDDEN, ZFS_HIDDEN
		Windows: FILE_ATTRIBUTE_HIDDEN

		This flag means that the file may be excluded from
		a directory listing if the application honors it.
		FreeBSD has no special handling for this flag.

		The name and bit definition for UF_HIDDEN are
		identical to the definition in MacOS X.

UF_READONLY:	Command line name: "urdonly", "rdonly", "readonly"
		ZFS name: XAT_READONLY, ZFS_READONLY
		Windows: FILE_ATTRIBUTE_READONLY

		This flag means that the file may not written or
		appended, but its attributes may be changed.

		ZFS currently enforces this flag, but Illumos
		developers have discussed disabling enforcement.

		The behavior of this flag is different than MacOS X.
		MacOS X uses UF_IMMUTABLE to represent the DOS
		readonly permission, but that flag has a stronger
		meaning than the semantics of DOS readonly permissions.

UF_ARCHIVE:	Command line name: "uarch", "uarchive"
		ZFS_NAME: XAT_ARCHIVE, ZFS_ARCHIVE
		Windows name: FILE_ATTRIBUTE_ARCHIVE

		The UF_ARCHIVED flag means that the file has changed and
		needs to be archived.  The meaning is same as
		the Windows FILE_ATTRIBUTE_ARCHIVE attribute, and
		the ZFS XAT_ARCHIVE and ZFS_ARCHIVE attribute.

		msdosfs and ZFS have special handling for this flag.
		i.e. they will set it when the file changes.

sys/param.h:		Bump __FreeBSD_version to 1000047 for the
			addition of new stat(2) flags.

chflags.1:		Document the new command line flag names
			(e.g. "system", "hidden") available to the
			user.

ls.1:			Reference chflags(1) for a list of file flags
			and their meanings.

strtofflags.c:		Implement the mapping between the new
			command line flag names and new stat(2)
			flags.

chflags.2:		Document all of the new stat(2) flags, and
			explain the intended behavior in a little
			more detail.  Explain how they map to
			Windows file attributes.

			Different filesystems behave differently
			with respect to flags, so warn the
			application developer to take care when
			using them.

zfs_vnops.c:		Add support for getting and setting the
			UF_ARCHIVE, UF_READONLY, UF_SYSTEM, UF_HIDDEN,
			UF_REPARSE, UF_OFFLINE, and UF_SPARSE flags.

			All of these flags are implemented using
			attributes that ZFS already supports, so
			the on-disk format has not changed.

			ZFS currently doesn't allow setting the
			UF_REPARSE flag, and we don't really have
			the other infrastructure to support reparse
			points.

msdosfs_denode.c,
msdosfs_vnops.c:	Add support for getting and setting
			UF_HIDDEN, UF_SYSTEM and UF_READONLY
			in MSDOSFS.

			It supported SF_ARCHIVED, but this has been
			changed to be UF_ARCHIVE, which has the same
			semantics as the DOS archive attribute instead
			of inverse semantics like SF_ARCHIVED.

			After discussion with Bruce Evans, change
			several things in the msdosfs behavior:

			Use UF_READONLY to indicate whether a file
			is writeable instead of file permissions, but
			don't actually enforce it.

			Refuse to change attributes on the root
			directory, because it is special in FAT
			filesystems, but allow most other attribute
			changes on directories.

			Don't set the archive attribute on a directory
			when its modification time is updated.
			Windows and DOS don't set the archive attribute
			in that scenario, so we are now bug-for-bug
			compatible.

smbfs_node.c,
smbfs_vnops.c:		Add support for UF_HIDDEN, UF_SYSTEM,
			UF_READONLY and UF_ARCHIVE in SMBFS.

			This is similar to changes that Apple has
			made in their version of SMBFS (as of
			smb-583.8, posted on opensource.apple.com),
			but not quite the same.

			We map SMB_FA_READONLY to UF_READONLY,
			because UF_READONLY is intended to match
			the semantics of the DOS readonly flag.
			The MacOS X code maps both UF_IMMUTABLE
			and SF_IMMUTABLE to SMB_FA_READONLY, but
			the immutable flags have stronger meaning
			than the DOS readonly bit.

stat.h:			Add definitions for UF_SYSTEM, UF_SPARSE,
			UF_OFFLINE, UF_REPARSE, UF_ARCHIVE, UF_READONLY
			and UF_HIDDEN.

			The definition of UF_HIDDEN is the same as
			the MacOS X definition.

			Add commented-out definitions of
			UF_COMPRESSED and UF_TRACKED.  They are
			defined in MacOS X (as of 10.8.2), but we
			do not implement them (yet).

ufs_vnops.c:		Add support for getting and setting
			UF_ARCHIVE, UF_HIDDEN, UF_OFFLINE, UF_READONLY,
			UF_REPARSE, UF_SPARSE, and UF_SYSTEM in UFS.
			Alphabetize the flags that are supported.

			These new flags are only stored, UFS does
			not take any action if the flag is set.

Sponsored by:	Spectra Logic
Reviewed by:	bde (earlier version)
2013-08-21 23:04:48 +00:00
..
atf Remove -L<path> from LDADD, it doesn't belong there. 2012-11-07 00:23:51 +00:00
bind Update Bind to 9.8.5-P2 2013-08-06 06:22:54 +00:00
clang Upgrade our copy of llvm/clang to 3.3 release. 2013-06-12 18:48:53 +00:00
csu Add a makefle that recurses into the right architecture-specific 2013-05-21 17:47:53 +00:00
libalias
libarchive MFV r248590,248594: 2013-03-22 13:36:03 +00:00
libauditd
libbegemot
libblocksruntime
libbluetooth General mdoc(7) and typo fixes. 2012-05-11 20:06:46 +00:00
libbsm
libbsnmp Add missing DPADD 2013-01-01 18:29:25 +00:00
libbz2
libc Expand the use of stat(2) flags to allow storing some Windows/DOS 2013-08-21 23:04:48 +00:00
libc++ After r253839, which modifies ld's behaviour to not automatically pull 2013-08-03 16:23:43 +00:00
libcalendar
libcam Fix a typo: XPORT_SPI should be tested against transport, nor protocol. 2013-06-03 21:52:19 +00:00
libcom_err - Update FreeBSD Heimdal distribution to version 1.5.1. This also brings 2012-03-22 08:48:42 +00:00
libcompat
libcompiler_rt Build __clear_cache on ARM with clang now it supports it. 2013-06-15 12:16:27 +00:00
libcrypt Simple unit-tests for libcrypt, to show how easy it is. 2012-11-07 22:03:59 +00:00
libcxxrt Add several missing symbols to libcxxrt's symbol version map, and remove 2013-02-03 20:40:41 +00:00
libdevinfo
libdevstat New devstat metrics for devstat_compute_statistics(): 2012-12-15 18:19:48 +00:00
libdwarf When decoding SLEB128, make sure sign extension is performed for 2013-06-30 21:06:47 +00:00
libedit libedit: Revert r247683 to fix buildworld. 2013-03-03 14:42:15 +00:00
libefi
libelf Merge part of r1712 from elftoolchain, making it possible to resize ELF 2013-02-24 15:15:50 +00:00
libexpat Update base system libexpat to 2.1.0. 2013-02-26 00:58:44 +00:00
libfetch Include an Accept header in requests. 2013-07-30 13:07:55 +00:00
libgeom Since there's no defined schema for the XML that's generated by the 2013-07-19 06:42:15 +00:00
libgpib mdoc: minor Bl improvements. 2012-06-02 08:47:26 +00:00
libgssapi mdoc: add missing -width argument to Bl -tag. 2012-06-08 12:09:00 +00:00
libiconv
libiconv_compat Turn off warns for this do-nothing file. clang noticed. 2013-08-13 08:12:57 +00:00
libiconv_modules As a followup to r252547, propate const down the call stack. 2013-07-03 18:27:45 +00:00
libipsec Improve compatibility with recent flex from flex.sourceforge.net. 2013-05-03 23:51:32 +00:00
libipx
libjail Fix some memory allocation errors: 2012-10-04 19:07:05 +00:00
libkiconv The iconv in libc did two things - implement the standard APIs, the GNU 2013-08-13 07:15:01 +00:00
libkse Fix typo in ".PATH" 2012-04-18 07:02:53 +00:00
libkvm In r227839, when removing libkvm dependency on procfs(5), 2013-07-10 19:44:43 +00:00
libldns Clean up. 2013-04-14 00:59:56 +00:00
liblzma
libmagic r235638 is not the clean way to add support for building on ancient FreeBSD 2012-09-11 22:38:33 +00:00
libmandoc Merge mandoc from vendor into contrib and provide the necessary Makefile glue. 2012-10-19 22:21:01 +00:00
libmd Remove the RFC 1319 MD2 Message-Digest Algorithm routines from libmd. 2012-04-28 02:48:51 +00:00
libmemstat Refine UMA bucket allocation to reduce space consumption and improve 2013-06-18 04:50:20 +00:00
libmilter
libmp
libnandfs Import work done under project/nand (@235533) into head. 2012-05-17 10:11:18 +00:00
libnetbsd Add libnetbsd, a thin compatibility layer intended to allow a limited 2012-12-21 20:37:38 +00:00
libnetgraph Fix for quite a special case when userland emulates a netgraph node, and 2013-03-11 13:05:11 +00:00
libngatm
libopie
libpam GC unused source file. 2013-08-16 10:53:36 +00:00
libpcap MFV: libpcap 1.4.0. 2013-05-30 08:02:00 +00:00
libpmc Always install pmc.foo(3) manpages. 2013-05-03 08:20:10 +00:00
libproc Fix the return value when we found a symbol in .dynstr. This nasty bug was 2013-08-10 07:39:15 +00:00
libprocstat - Trim an unused and bogus Makefile for mount_smbfs. 2013-06-28 21:00:08 +00:00
libradius mdoc sweep. 2013-05-12 22:22:12 +00:00
librpcsec_gss Fix warnings found by -Wmising-variable-declarations. 2012-10-19 05:43:38 +00:00
librpcsvc Consistently set RPCGEN_CPP when running rpcgen, so the C preprocessor 2012-02-07 09:27:07 +00:00
librt Convert this piece of code to use C11 atomics. 2013-06-30 08:59:33 +00:00
librtld_db
libsbuf Add sbuf_start_section and sbuf_end_section to the libsbuf symbol map. 2013-04-11 19:50:10 +00:00
libsdp
libsm Since clang 3.2 now has an option to suppress warnings about implicitly 2013-02-16 20:17:31 +00:00
libsmb
libsmdb
libsmutil
libstand Move pos++ out of the complicated equation, introduced at r240780. 2013-07-01 17:23:13 +00:00
libstdbuf Remove WARNS=6 lines. 2012-10-18 15:39:29 +00:00
libstdthreads
libtacplus mdoc sweep. 2013-05-12 22:22:12 +00:00
libtelnet - Do not use deprecated krb5 error message reporting functions in libtelnet. 2012-04-06 00:03:45 +00:00
libthr The SUSv4tc1 requires that pthread_setcancelstate() shall be not a 2013-06-19 04:47:41 +00:00
libthread_db Ensure we set all fpu registers to zero by using the address and size of 2013-08-17 14:42:40 +00:00
libufs
libugidfw
libulog Properly use SHA1_Final() instead of SHA_Final(). 2012-04-19 15:28:15 +00:00
libusb Add pkgconf files for libusb. 2013-07-25 03:54:08 +00:00
libusbhid Restore handling of the third argument (id) of hid_start_parse(), same as 2012-09-20 18:56:27 +00:00
libutil Reset errno before strtoumax() call to properly detect ERANGE. 2013-08-21 22:37:15 +00:00
libvgl Fix various typos in manual pages. 2012-02-25 14:31:25 +00:00
libvmmapi Remove deprecated APIs to get the total and free memory available to vmm.ko. 2013-04-25 20:42:21 +00:00
libwrap
liby
libyaml Add a stub manpage modeled over the libexpat one to explain to users not to use 2013-03-05 13:06:40 +00:00
libypclnt Consistently set RPCGEN_CPP when running rpcgen, so the C preprocessor 2012-02-07 09:27:07 +00:00
libz MFV: Update zlib to 1.2.8. 2013-05-05 06:20:49 +00:00
msun Restore the longer form of the _Generic. The short form does not work in C++. 2013-07-29 12:33:03 +00:00
ncurses Convert old make variable modifiers :U and :L to bmake :tu and :tl. 2013-06-02 11:44:23 +00:00
Makefile The iconv in libc did two things - implement the standard APIs, the GNU 2013-08-13 07:15:01 +00:00
Makefile.inc