[[diary/Kojima]]
・gnome-screensaver 2
gnome-cdplayer とかが動くようになったので gnome-screensaver の認証問題を再調査.
ソースコードレベルで追いかけてみたけど,結論的には gs-auth-pam.c の中の
gs_auth_thread_fund で
status = pam_authenticate (pam_handle, flags);
して,libpam の中の pam_authenticate で認証を行なっているだけだから,test-passwd で
kojima@gnome[~/gnome-screensaver/build/src]% ./test-passwd
** Message: pam_start ("gnome-screensaver", "kojima", ...) ==> 0 (Success)
** Message: Handling message style 1: 'Password: '
** Message: Waiting for respose to message style 1: 'Password: '
** Message: Waiting for lock
** Message: Waiting for response
** Message: Got message style 1: 'Password: '
Password: ** Message: Got response
** Message: Got respose to message style 1: interrupt:0
** Message: Msg handler returned 1
** Message: pam_authenticate (...) ==> 7 (Authentication failure)
** Message: pam_end (...) ==> 0 (Success)
ERROR: Incorrect password.
Incorrect
** Message: pam_start ("gnome-screensaver", "kojima", ...) ==> 0 (Success)
** Message: Handling message style 1: 'Password: '
** Message: Waiting for respose to message style 1: 'Password: '
** Message: Waiting for lock
** Message: Waiting for response
** Message: Got message style 1: 'Password: '
Password:
このエラーを返しているのは libpam の中の pam_authenticate ということになるのだけど,
PAM を使っている他の認証系では問題なく通っている設定が,なぜ gnome-screensaver
だけエラーになるのか不明.
gnome-screensaver の PAM の認証の設定は /etc/pam.d/gnome-screensaver になるので,
動いている login とか su とか cups とかの設定ファイルを gnome-screensaver
にコピーして試してみたのだけど,ことごとくダメになるところを見ると gnome-screensaver
側から libpam を呼び出す時の問題のような気はするのだけど,PAM を起動するやりとりを
見る限りでは特に問題はなさそうなのだがなぁ..
-もうしばらくジタバタしたところ、Linux-PAM を 0.77 から 1.0.1 に更新してやれば gnome-screensaver でも正しく認証できる模様。PAM まわりは結構影響が大きいのであまりいじりたくはないのだけど、さすがに 0.77 というのは古いから更新した方がいい気はするな。ただ、0.99 あたりから pam_stack.so がなくなって、include で別のサービスを呼ぶようになっているので、pam_stack.so を使っている設定ファイルは修正しないといけないなぁ。まぁ、GNOMEのビルドの時にも気にはなってたけど、最近のソフトウェアは PAM を使う場合、include system-auth を使うのが一般的なので、それに合わせるようにしておく方がいい気はするな。 -- [[kojima]] &new{2008-07-30 (水) 23:46:41};
ちなみに、うまくいった時の test-passwd はこんな感じだった。
kojima@gnome[~/gnome-screensaver/build/src]% ./test-passwd
** Message: pam_start ("gnome-screensaver", "kojima", ...) ==> 0 (Success)
** Message: Handling message style 1: 'Password: '
** Message: Waiting for respose to message style 1: 'Password: '
** Message: Waiting for lock
** Message: Waiting for response
** Message: Got message style 1: 'Password: '
Password: ** Message: Got response
** Message: Got respose to message style 1: interrupt:0
** Message: Msg handler returned 1
** Message: pam_authenticate (...) ==> 0 (Success)
** Message: pam_acct_mgmt (...) ==> 0 (Success)
** Message: pam_setcred (...) ==> 0 (Success)
** Message: pam_end (...) ==> 0 (Success)
Correct!
これを見るかぎりでは、pam_authenticate のレベルの問題のように見えるが、
0.77 から何が変わったのだろう?