ls no longer crashes when printing the SELinux context for unstatable files.
[bug introduced in coreutils-6.9.91]
+ mkdir -m no longer mishandles modes more generous than the umask.
+ [bug introduced in coreutils-8.22]
+
nl now handles single character --section-delimiter arguments,
by assuming a second ':' character has been specified, as specified by POSIX.
[This bug was present in "the beginning".]
made. */
int (*make_ancestor_function) (char const *, char const *, void *);
- /* Umask value in effect. */
- mode_t umask_value;
+ /* Umask value for when making an ancestor. */
+ mode_t umask_ancestor;
+
+ /* Umask value for when making the directory itself. */
+ mode_t umask_self;
/* Mode for directory itself. */
mode_t mode;
error (0, errno, _("failed to set default creation context for %s"),
quoteaf (dir));
- mode_t user_wx = S_IWUSR | S_IXUSR;
- bool self_denying_umask = (o->umask_value & user_wx) != 0;
- if (self_denying_umask)
- umask (o->umask_value & ~user_wx);
+ if (o->umask_ancestor != o->umask_self)
+ umask (o->umask_ancestor);
int r = mkdir (component, S_IRWXUGO);
- if (self_denying_umask)
+ if (o->umask_ancestor != o->umask_self)
{
int mkdir_errno = errno;
- umask (o->umask_value);
+ umask (o->umask_self);
errno = mkdir_errno;
}
if (r == 0)
{
- r = (o->umask_value & S_IRUSR) != 0;
+ r = (o->umask_ancestor & S_IRUSR) != 0;
announce_mkdir (dir, options);
}
return r;
if (options.make_ancestor_function || specified_mode)
{
mode_t umask_value = umask (0);
- umask (umask_value);
- options.umask_value = umask_value;
+ options.umask_ancestor = umask_value & ~(S_IWUSR | S_IXUSR);
if (specified_mode)
{
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
+ options.umask_self = umask_value & ~options.mode;
free (change);
}
else
- options.mode = S_IRWXUGO;
+ {
+ options.mode = S_IRWXUGO;
+ options.umask_self = umask_value;
+ }
+
+ umask (options.umask_self);
}
return savewd_process_files (argc - optind, argv + optind,