diff options
author | julian <julian@FreeBSD.org> | 1997-06-02 06:24:52 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 1997-06-02 06:24:52 +0000 |
commit | 68081e32bccab743c4962c5ca40d1acef554a858 (patch) | |
tree | c88072dbc126f0bd1bc7114bc5797aff4b4fa2bb /bin | |
parent | 18750f03542b6c804f678f3b4fc1d4b4405fa79a (diff) | |
download | FreeBSD-src-68081e32bccab743c4962c5ca40d1acef554a858.zip FreeBSD-src-68081e32bccab743c4962c5ca40d1acef554a858.tar.gz |
Submitted by: Whistle Communications (archie Cobbs)
These changes add the ability to specify that a UFS file/directory
cannot be unlinked. This is basically a scaled back version
of the IMMUTABLE flag. The reason is to allow an administrator
to create a directory hierarchy that a group of users
can arbitrarily add/delete files from, but that the hierarchy
itself is safe from removal by them.
If the NOUNLINK definition is set to 0
then this results in no change to what happens normally.
(and results in identical binary (in the kernel)).
It can be proven that if this bit is never set by the admin,
no new behaviour is introduced..
Several "good idea" comments from reviewers plus one grumble
about creeping featurism.
This code is in production in 2.2 based systems
Diffstat (limited to 'bin')
-rw-r--r-- | bin/chflags/chflags.1 | 5 | ||||
-rw-r--r-- | bin/ls/stat_flags.c | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/bin/chflags/chflags.1 b/bin/chflags/chflags.1 index 9c808a0..9ab880f 100644 --- a/bin/chflags/chflags.1 +++ b/bin/chflags/chflags.1 @@ -83,9 +83,12 @@ arch set the archived flag (super-user only) dump set the dump flag sappnd set the system append-only flag (super-user only) schg set the system immutable flag (super-user only) +sunlnk set the system undeletable flag (super-user only) uappnd set the user append-only flag (owner or super-user only) uchg set the user immutable flag (owner or super-user only) -archived, sappend, schange, simmutable, uappend, uchange, uimmutable +uunlnk set the user undeletable flag (owner or super-user only) +archived, sappend, schange, simmutable, uappend, uchange, uimmutable, +sunlink, uunlink aliases for the above .Ed .Pp diff --git a/bin/ls/stat_flags.c b/bin/ls/stat_flags.c index f0092fe..b1e7062 100644 --- a/bin/ls/stat_flags.c +++ b/bin/ls/stat_flags.c @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: stat_flags.c,v 1.5 1997/02/22 14:04:02 peter Exp $ */ #ifndef lint @@ -69,6 +69,8 @@ flags_to_string(flags, def) SAPPEND("uappnd"); if (flags & UF_IMMUTABLE) SAPPEND("uchg"); + if (flags & UF_NOUNLINK) + SAPPEND("uunlnk"); if (flags & UF_NODUMP) SAPPEND("nodump"); if (flags & UF_OPAQUE) @@ -79,6 +81,8 @@ flags_to_string(flags, def) SAPPEND("arch"); if (flags & SF_IMMUTABLE) SAPPEND("schg"); + if (flags & SF_NOUNLINK) + SAPPEND("sunlnk"); return (prefix == NULL && def != NULL ? def : string); } @@ -139,6 +143,8 @@ string_to_flags(stringp, setp, clrp) TEST(p, "schg", SF_IMMUTABLE); TEST(p, "schange", SF_IMMUTABLE); TEST(p, "simmutable", SF_IMMUTABLE); + TEST(p, "sunlnk", SF_NOUNLINK); + TEST(p, "sunlink", SF_NOUNLINK); return (1); case 'u': TEST(p, "uappnd", UF_APPEND); @@ -146,6 +152,8 @@ string_to_flags(stringp, setp, clrp) TEST(p, "uchg", UF_IMMUTABLE); TEST(p, "uchange", UF_IMMUTABLE); TEST(p, "uimmutable", UF_IMMUTABLE); + TEST(p, "uunlnk", UF_NOUNLINK); + TEST(p, "uunlink", UF_NOUNLINK); /* FALLTHROUGH */ default: return (1); |