-rw-r--r-- | core/opie-login/passworddialogimpl.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/core/opie-login/passworddialogimpl.cpp b/core/opie-login/passworddialogimpl.cpp index 951c4e1..852708e 100644 --- a/core/opie-login/passworddialogimpl.cpp +++ b/core/opie-login/passworddialogimpl.cpp @@ -150,82 +150,83 @@ void PasswordDialogImpl::writePassword() { FILE* file = ::fopen( "/etc/passwd.new", "w" ); struct passwd* pass; while ( (pass = ::getpwent()) != 0l ) { /* no shadow password support */ if ( pass->pw_uid == 0 ) pass->pw_passwd = password; ::putpwent( pass, file ); } ::fclose( file ); ::endpwent(); ::rename("/etc/passwd.new","/etc/passwd" ); /* should be done now */ #ifdef OPIE_LOGIN_SHADOW_PW #error "Can't write Shadow Passwords fixme" #endif } /** * Raise an error. Delete input and set the focus after showing * the error to the user */ void PasswordDialogImpl::error( const QString& caption, const QString& text ) { m_isSet = false; QMessageBox::critical(this,caption, text, QMessageBox::Ok, QMessageBox::NoButton ); m_pass->setText(""); m_pass->setFocus(); m_confirm->setText(""); } void PasswordDialogImpl::slotToggleEcho( bool b ) { m_pass-> setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); m_confirm->setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); } ///////////////////////// /// static functions /// /** * Ask whether or not we need to show the dialog. It returns true if * no root password is set so that the user will be able to set one. */ bool PasswordDialogImpl::needDialog() { /* * This can cope with no password and shadow passwords * Let us go through the user database until we find 'root' and then * see if it is 'shadow' and see if shadow is empty or see if the password is empty */ bool need = false; struct passwd *pwd; ::setpwent(); while((pwd = ::getpwent() ) ) { /* found root */ if( pwd->pw_uid == 0 ) { QString str = QString::fromLatin1(pwd->pw_passwd ); /* - * If str is really empty it is passwordless anyway... + * If str is really empty it is passwordless anyway... or '*' is a hint to set one + * on OE/Familiar * else it is shadow based */ - if(str.isEmpty() ) + if(str.isEmpty() || str == '*' ) need = true; - else if ( str == '*' || str == 'x' ) + else if ( str == 'x' ) #ifdef OPIE_LOGIN_SHADOW_PW need = QString::fromLatin1( ::getspnam( pwd->pw_name )->sp_pwdp ).isEmpty(); #else ; #endif break; } } ::endpwent(); return need; } |