diff -up ecryptfs-utils-99/src/pam_ecryptfs/pam_ecryptfs.c.fixpamfork ecryptfs-utils-99/src/pam_ecryptfs/pam_ecryptfs.c
--- ecryptfs-utils-99/src/pam_ecryptfs/pam_ecryptfs.c.fixpamfork 2012-07-24 13:19:34.168544970 +0200
+++ ecryptfs-utils-99/src/pam_ecryptfs/pam_ecryptfs.c 2012-07-24 13:20:20.600959698 +0200
@@ -228,7 +228,7 @@ PAM_EXTERN int pam_sm_authenticate(pam_h
}
out_child:
free(auth_tok_sig);
- exit(0);
+ _exit(0);
}
tmp_pid = waitpid(child_pid, NULL, 0);
if (tmp_pid == -1)
@@ -322,7 +322,7 @@ static int private_dir(pam_handle_t *pam
"%s/.ecryptfs/.wrapped-passphrase.recorded",
pwd->pw_dir) < 0) || recorded == NULL) {
syslog(LOG_ERR, "pam_ecryptfs: Error allocating memory for recorded name");
- exit(1);
+ _exit(255);
}
if (stat(recorded, &s) != 0 && stat("/usr/share/ecryptfs-utils/ecryptfs-record-passphrase", &s) == 0) {
/* User has not recorded their passphrase */
@@ -334,33 +334,35 @@ static int private_dir(pam_handle_t *pam
if (stat(autofile, &s) != 0) {
/* User does not want to auto-mount */
syslog(LOG_DEBUG, "pam_ecryptfs: Skipping automatic eCryptfs mount");
- exit(0);
+ _exit(0);
}
clearenv();
if (setgroups(1, &pwd->pw_gid) < 0 || setgid(pwd->pw_gid) < 0)
- return -1;
+ _exit(255);
/* run mount.ecryptfs_private as the user */
if (setresuid(pwd->pw_uid, pwd->pw_uid, pwd->pw_uid) < 0)
- return -1;
+ _exit(255);
execl("/sbin/mount.ecryptfs_private",
"mount.ecryptfs_private", NULL);
+ syslog(LOG_ERR,"unable to execute mount.ecryptfs_private : %m");
} else {
if (stat(autofile, &s) != 0) {
/* User does not want to auto-unmount */
syslog(LOG_DEBUG, "pam_ecryptfs: Skipping automatic eCryptfs unmount");
- exit(0);
+ _exit(0);
}
clearenv();
if (setgroups(1, &pwd->pw_gid) < 0 || setgid(pwd->pw_gid) < 0)
- return -1;
+ _exit(255);
/* run umount.ecryptfs_private as the user */
if (setresuid(pwd->pw_uid, pwd->pw_uid, pwd->pw_uid) < 0)
- return -1;
+ _exit(255);
execl("/sbin/umount.ecryptfs_private",
"umount.ecryptfs_private", NULL);
- exit(1);
+ syslog(LOG_ERR,"unable to execute umount.ecryptfs_private : %m");
+ _exit(255);
}
- exit(1);
+ _exit(255);
} else {
waitpid(pid, &rc, 0);
}
@@ -505,7 +507,7 @@ PAM_EXTERN int pam_sm_chauthtok(pam_hand
goto out_child;
}
out_child:
- exit(0);
+ _exit(0);
}
if ((tmp_pid = waitpid(child_pid, NULL, 0)) == -1)
syslog(LOG_WARNING, "pam_ecryptfs: waitpid() returned with error condition\n");