reassign 338810 libpam0g 0.79-3
thanks
Hello,
This issue happens when entering Control+D as the first password during a
password change:
> # passwd
> Enter new UNIX password: ^D
> Retype new UNIX password: ^D
> Segmentation fault
I could not reproduce it with 0.76-23.
In 0.79, a NULL string is returned by the libpam_misc default conversation
fonction (it was an empty string in 0.76).
I'm not sure where this shall be fixed.
I attach 3 patches:
* libpam-modules_pam_unix_null_passwd.patch
This fixes this issue in the pam_unix module.
I'm not sure it is the right place to fix this (maybe this bug can
appear on other PAM modules). However, another protection should not
harm.
* libpam0g_pam_misc_null_passwd.patch
This fixes the issue at the conversation function level.
I'm not sure this patch is correct (I don't know if there are some
specifications that indicate if the password string must be NULL or
empty in this case).
* libpam-modules_pam_unix_typo.patch
This one just fixes a typo.
Kind Regards,
--
Nekral
diff -rauN ../orig/pam-0.79/Linux-PAM/modules/pam_unix/pam_unix_passwd.c
./pam-0.79/Linux-PAM/modules/pam_unix/pam_unix_passwd.c
--- ../orig/pam-0.79/Linux-PAM/modules/pam_unix/pam_unix_passwd.c
2005-11-18 19:13:35.000000000 +0100
+++ ./pam-0.79/Linux-PAM/modules/pam_unix/pam_unix_passwd.c 2005-11-18
19:00:58.000000000 +0100
@@ -1121,7 +1121,7 @@
* password is acceptable.
*/
- if (pass_new[0] == '\0') { /* "\0" password = NULL
*/
+ if (pass_new && pass_new[0] == '\0') { /* "\0"
password = NULL */
pass_new = NULL;
}
retval = _pam_unix_approve_pass(pamh, ctrl, pass_old,
pass_new);
diff -rauN ../orig/pam-0.79/Linux-PAM/libpam_misc/misc_conv.c
./pam-0.79/Linux-PAM/libpam_misc/misc_conv.c
--- ../orig/pam-0.79/Linux-PAM/libpam_misc/misc_conv.c 2005-11-18
19:13:35.000000000 +0100
+++ ./pam-0.79/Linux-PAM/libpam_misc/misc_conv.c 2005-11-18
19:08:01.000000000 +0100
@@ -210,7 +210,7 @@
} else if (nc == 0) { /* Ctrl-D */
D(("user did not want to type anything"));
- *retstr = NULL;
+ *retstr = x_strdup("");
if (echo) {
fprintf(stderr, "\n");
}
diff -rauN ../orig/pam-0.79/Linux-PAM/modules/pam_unix/support.c
./pam-0.79/Linux-PAM/modules/pam_unix/support.c
--- ../orig/pam-0.79/Linux-PAM/modules/pam_unix/support.c 2005-11-18
19:13:35.000000000 +0100
+++ ./pam-0.79/Linux-PAM/modules/pam_unix/support.c 2005-11-18
19:00:22.000000000 +0100
@@ -90,7 +90,7 @@
}
} else if (retval != PAM_CONV_AGAIN) {
_log_err(LOG_ERR, pamh
- ,"couldn't obtain coversation function [%s]"
+ ,"couldn't obtain conversation function [%s]"
,pam_strerror(pamh, retval));
}
D(("ready to return from module conversation"));