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"));

Reply via email to