| |
@@ -264,12 +264,13 @@
|
| |
}
|
| |
|
| |
static mode_t
|
| |
- get_umask(int *configured)
|
| |
+ get_umask(int *configured, const char *variable)
|
| |
{
|
| |
FILE *fp;
|
| |
char buf[BUFSIZ], *p, *end;
|
| |
mode_t mask = umask(0777);
|
| |
long tmp;
|
| |
+ size_t vlen = strlen(variable);
|
| |
|
| |
fp = fopen("/etc/login.defs", "r");
|
| |
if (fp != NULL) {
|
| |
@@ -279,10 +280,10 @@
|
| |
}
|
| |
buf[strcspn(buf, "\r\n")] = '\0';
|
| |
p = buf + strspn(buf, " \t");
|
| |
- if (strncmp(p, "UMASK", 5) != 0) {
|
| |
+ if (strncmp(p, variable, vlen) != 0) {
|
| |
continue;
|
| |
}
|
| |
- p += 5;
|
| |
+ p += vlen;
|
| |
if (strspn(p, " \t") == 0) {
|
| |
continue;
|
| |
}
|
| |
@@ -308,7 +309,11 @@
|
| |
int i, configured_umask = 0, flags = FLAG_POPULATE;
|
| |
|
| |
openlog(PACKAGE "-mkhomedir", LOG_PID, LOG_DAEMON);
|
| |
- override_umask = get_umask(&configured_umask);
|
| |
+ /* Unlike UMASK, HOME_MODE is the file mode, so needs to be reverted */
|
| |
+ override_umask = 0777 & ~get_umask(&configured_umask, "HOME_MODE");
|
| |
+ if (configured_umask == 0) {
|
| |
+ override_umask = get_umask(&configured_umask, "UMASK");
|
| |
+ }
|
| |
umask(override_umask);
|
| |
skel_dir = "/etc/skel";
|
| |
|
| |
shadow-utils changed behavior of UMASK to only apply to runtime
processes. For home directories, HOME_MODE variable was introduced
instead.
Read HOME_MODE and fall back to UMASK if that does not exist.
Signed-off-by: Alexander Bokovoy abokovoy@redhat.com