aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2023-11-12 17:16:35 +0100
committerDmitry V. Levin <ldv@strace.io>2023-11-29 15:40:53 +0000
commitf2fef8e3a84507ae15e40ac9b37256a4f7484500 (patch)
tree02f3241cdc63213668c8299bb3c4b02b59335ee4
parent8d082da1bc993b5b061ae81a9743891328e04ce6 (diff)
downloadpam-f2fef8e3a84507ae15e40ac9b37256a4f7484500.tar.gz
pam-f2fef8e3a84507ae15e40ac9b37256a4f7484500.tar.bz2
pam-f2fef8e3a84507ae15e40ac9b37256a4f7484500.zip
pam_mkhomedir: always call chown/chmod for dir
In some error cases in create_homedir ownership and mode of the newly created directory are not set. Always do so to prevent root-owned directories as error leftovers. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.c b/modules/pam_mkhomedir/mkhomedir_helper.c
index 1d18ee88..67b6f34e 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.c
+++ b/modules/pam_mkhomedir/mkhomedir_helper.c
@@ -131,7 +131,8 @@ create_homedir(const struct passwd *pwd,
if (pointed == NULL) {
free(newsource);
free(newdest);
- return PAM_BUF_ERR;
+ retval = PAM_BUF_ERR;
+ goto go_out;
}
pointedlen = readlink(newsource, pointed, size);
if (pointedlen < 0) break;
@@ -163,7 +164,8 @@ create_homedir(const struct passwd *pwd,
#endif
free(newsource);
free(newdest);
- return PAM_PERM_DENIED;
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
}
#ifndef PATH_MAX
@@ -196,7 +198,8 @@ create_homedir(const struct passwd *pwd,
free(newsource);
free(newdest);
- return PAM_PERM_DENIED;
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
/* Open the dest file */
@@ -209,7 +212,8 @@ create_homedir(const struct passwd *pwd,
free(newsource);
free(newdest);
- return PAM_PERM_DENIED;
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
/* Set the proper ownership and permissions for the module. We make
@@ -227,7 +231,8 @@ create_homedir(const struct passwd *pwd,
free(newsource);
free(newdest);
- return PAM_PERM_DENIED;
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
/* Copy the file */
@@ -253,7 +258,8 @@ create_homedir(const struct passwd *pwd,
free(newsource);
free(newdest);
- return PAM_PERM_DENIED;
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
while (res != 0);
close(srcfd);