|
@@ -620,9 +620,16 @@ int create_directory_for_user(const char* path) {
|
|
|
uid_t user = geteuid();
|
|
|
gid_t group = getegid();
|
|
|
int ret = 0;
|
|
|
- ret = change_effective_user(tt_uid, tt_gid);
|
|
|
+ uid_t root = 0;
|
|
|
+
|
|
|
+ //This check is particularly required for c-based unit tests since
|
|
|
+ //tests run as a regular user.
|
|
|
+ if (getuid() == root) {
|
|
|
+ ret = change_effective_user(root, tt_gid);
|
|
|
+ }
|
|
|
+
|
|
|
if (ret == 0) {
|
|
|
- if (mkdir(path, permissions) == 0) {
|
|
|
+ if (mkdir(path, permissions) == 0 || errno == EEXIST) {
|
|
|
// need to reassert the group sticky bit
|
|
|
if (chmod(path, permissions) != 0) {
|
|
|
fprintf(LOGFILE, "Can't chmod %s to add the sticky bit - %s\n",
|
|
@@ -631,21 +638,6 @@ int create_directory_for_user(const char* path) {
|
|
|
} else if (change_owner(path, user, tt_gid) != 0) {
|
|
|
ret = -1;
|
|
|
}
|
|
|
- } else if (errno == EEXIST) {
|
|
|
- struct stat file_stat;
|
|
|
- if (stat(path, &file_stat) != 0) {
|
|
|
- fprintf(LOGFILE, "Can't stat directory %s - %s\n", path,
|
|
|
- strerror(errno));
|
|
|
- ret = -1;
|
|
|
- } else {
|
|
|
- if (file_stat.st_uid != user ||
|
|
|
- file_stat.st_gid != tt_gid) {
|
|
|
- fprintf(LOGFILE, "Directory %s owned by wrong user or group. "
|
|
|
- "Expected %d:%d and found %d:%d.\n",
|
|
|
- path, user, tt_gid, file_stat.st_uid, file_stat.st_gid);
|
|
|
- ret = -1;
|
|
|
- }
|
|
|
- }
|
|
|
} else {
|
|
|
fprintf(LOGFILE, "Failed to create directory %s - %s\n", path,
|
|
|
strerror(errno));
|