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
OpenBSD version for more complete fixes. E.g., to seek to offsets >
INT_MAX using a block size of 1, block numbers need to be off_t's
instead of u_long's.
appears, not the longest _maximum_ username (this should probably also go
into 2.2, for the day when we bump up the username length there too).
Submitted-By: Terry Lambert <terry@lambert.org>
1) Fix mkdir -p to exit with the proper exit status and issue an error
message if it was unable to create all of the specified directories
and they did not previously exist. POSIX says:
The mkdir utility shall exit with one of the following values:
0 All the specified directories were created successfully or the
-p option was specified and all the specified directories now
exist.
E.g.
% mkdir -p /var/mkdir
mkdir: /var/mkdir: Permission denied
% touch /tmp/file
% mkdir -p /tmp/file/dir
mkdir: /tmp/file: Not a directory
Previously the above examples would exit with a zero exit status
and no error message. Something like the following run as a
normal user will still not produce an error:
% id
uid=629(mpp) gid=629(mpp)....
% mkdir -p /usr/local/etc
% ls -ld /usr/local/etc
drwxr-xr-x 4 bin bin 512 Dec 26 14:55 /usr/local/etc/
2) Cleaned up the mode handling to be more efficient when multiple
directories are being created.
3) Fixed a problem where directories could be created with the wrong mode
if the the -p option was specified and the build() routine returned
and error. It would leave the umask set incorrectly at this point.
4) Removed an unused variable.
Closes PR# 2304.