Ve aşağıdaki gibi bir çözüme ulaştım, aşağıdaki yama dosyası tam olarak PAM'dan bir kez daha PAM_USER'i alıyor. Bu şekilde hem 2 kez kontrol edilmiş oluyor hem de misafir kullanıcı hesabı çalışmış olur.
yama dosyası:
--- kdm/backend/client.c.old 2010-08-17 11:43:02.775903757 +0300
+++ kdm/backend/client.c 2010-08-17 11:43:19.548533659 +0300
@@ -474,14 +474,13 @@
* the module needs an own conversation plugin which does not cause
* curuser being set.
*/
- if (!curuser) {
- debug( " asking PAM for user ...\n" );
- pam_get_item( pamh, PAM_USER, &pitem );
- reInitErrorLog();
- strDup( &curuser, (const char *)pitem );
- gSendInt( V_PUT_USER );
- gSendStr( curuser );
- }
+ /* Always check username from PAM */
+ debug( " asking PAM for user ...\n" );
+ pam_get_item( pamh, PAM_USER, &pitem );
+ reInitErrorLog();
+ strDup( &curuser, (const char *)pitem );
+ gSendInt( V_PUT_USER );
+ gSendStr( curuser );
if (pretc != PAM_SUCCESS) {
/* Log the failed login attempt */
log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED);
Bu yamayı kaynak koda uygulayıp, derleyip kurduğumuzda Misafir Kullanıcı sorunsuz olarak çalışıyor.
Şimdilik projede sadece ssh ile bağlantı sorunu kaldı, o da önemli bir sorun olarak görülmüyor.
Ayrıca PAM yapılandırma (/etc/pam.d/ içerisindeki) dosyaları düzenleme aracı yazmak gibi bir plan var. README dosyasını düzenledikten sonra burada yayınlamayı düşünüyorum.
Yama ise Pardus SVN depolarında mevcut. KDM nin de bir parçası olduğu "kdebase-workspace" paketinin bakımcısı olan Gökçen ile bu durumu konuştuktan sonra yamayı ona yolladım.
Paket Adresi: http://svn.pardus.org.tr/pardus/2009/devel/desktop/kde/base/kdebase-workspace/
Yama Adresi: http://svn.pardus.org.tr/pardus/2009/devel/desktop/kde/base/kdebase-workspace/files/pardus/kdm-pam-fix-for-guest-account.patch
Hiç yorum yok:
Yorum Gönder