version 1.13, 2015/11/22 16:52:06 |
version 1.14, 2015/11/23 12:01:04 |
|
|
{ |
{ |
uid_t uid; |
uid_t uid; |
struct stat sb; |
struct stat sb; |
mode_t mask; |
mode_t mask, omask; |
|
|
uid = geteuid(); |
uid = geteuid(); |
if (uid == 0) { |
if (uid == 0) { |
|
|
mask = 077; |
mask = 077; |
snprintf(base, SOCKPATH_MAX, SOCKPATH_DIR "-%u", uid); |
snprintf(base, SOCKPATH_MAX, SOCKPATH_DIR "-%u", uid); |
} |
} |
if (mkdir(base, 0777 & ~mask) < 0) { |
omask = umask(mask); |
|
if (mkdir(base, 0777) < 0) { |
if (errno != EEXIST) |
if (errno != EEXIST) |
err(1, "mkdir(\"%s\")", base); |
err(1, "mkdir(\"%s\")", base); |
} |
} |
|
umask(omask); |
if (stat(base, &sb) < 0) |
if (stat(base, &sb) < 0) |
err(1, "stat(\"%s\")", base); |
err(1, "stat(\"%s\")", base); |
if (sb.st_uid != uid || (sb.st_mode & mask) != 0) |
if (sb.st_uid != uid || (sb.st_mode & mask) != 0) |