aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2023-11-12 17:41:49 +0100
committerDmitry V. Levin <ldv@strace.io>2023-11-29 15:40:53 +0000
commita5e132e5af2a1b5ece95c1f66e398cdeea10ceff (patch)
tree2002ef3049b25867268d39e7e3a025dcb16acad7 /modules
parentea53ebbd05ea695bca0130a882f89ea831284c36 (diff)
downloadpam-a5e132e5af2a1b5ece95c1f66e398cdeea10ceff.tar.gz
pam-a5e132e5af2a1b5ece95c1f66e398cdeea10ceff.tar.bz2
pam-a5e132e5af2a1b5ece95c1f66e398cdeea10ceff.zip
pam_mkhomedir: return error if link creation fails
Treat symlink creation failures the same way as failures when creating files and directories. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'modules')
-rw-r--r--modules/pam_mkhomedir/mkhomedir_helper.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/modules/pam_mkhomedir/mkhomedir_helper.c b/modules/pam_mkhomedir/mkhomedir_helper.c
index 36d9502e..fd7708bb 100644
--- a/modules/pam_mkhomedir/mkhomedir_helper.c
+++ b/modules/pam_mkhomedir/mkhomedir_helper.c
@@ -151,21 +151,32 @@ create_homedir(const struct passwd *pwd, mode_t dir_mode,
#endif
if (pointedlen >= 0) {
- if(symlink(pointed, newdest) == 0)
+ if(symlink(pointed, newdest) != 0)
{
- if (lchown(newdest, pwd->pw_uid, pwd->pw_gid) != 0)
- {
- pam_syslog(NULL, LOG_DEBUG,
- "unable to change perms on link %s: %m", newdest);
- closedir(d);
+ pam_syslog(NULL, LOG_DEBUG,
+ "unable to create link %s: %m", newdest);
+ closedir(d);
#ifndef PATH_MAX
- free(pointed);
+ free(pointed);
+#endif
+ free(newsource);
+ free(newdest);
+ retval = PAM_PERM_DENIED;
+ goto go_out;
+ }
+
+ if (lchown(newdest, pwd->pw_uid, pwd->pw_gid) != 0)
+ {
+ pam_syslog(NULL, LOG_DEBUG,
+ "unable to change perms on link %s: %m", newdest);
+ closedir(d);
+#ifndef PATH_MAX
+ free(pointed);
#endif
- free(newsource);
- free(newdest);
- retval = PAM_PERM_DENIED;
- goto go_out;
- }
+ free(newsource);
+ free(newdest);
+ retval = PAM_PERM_DENIED;
+ goto go_out;
}
#ifndef PATH_MAX
free(pointed);