summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/opie-login/passworddialogimpl.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/core/opie-login/passworddialogimpl.cpp b/core/opie-login/passworddialogimpl.cpp
index 852708e..d9132e2 100644
--- a/core/opie-login/passworddialogimpl.cpp
+++ b/core/opie-login/passworddialogimpl.cpp
@@ -1,107 +1,112 @@
/*
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2004 Holger Hans Peter Freyther <zecke@handhelds.org>
           .>+-=
 _;:,     .>    :=|. This file is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This file is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
..}^=.=       =       ; Public License for more details.
++=   -.     .`     .:
 :     =  ...= . :.=- You should have received a copy of the GNU
 -.   .:....=;==+<; General Public License along with this file;
  -_. . .   )=.  = see the file COPYING. If not, write to the
    --        :-=` Free Software Foundation, Inc.,
59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
-
#include <qlayout.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qvalidator.h>
#include <qmessagebox.h>
#include <qhbox.h>
#include <qtoolbutton.h>
+
+
#include <sys/types.h>
#include <pwd.h>
#include <shadow.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
+// Shitty gcc2 toolchain
+extern "C" char* crypt( const char*, const char* );
+
+
#include "passworddialogimpl.h"
// This function is taken from 'busybox'.
static int i64c(int i) {
if (i <= 0)
return ('.');
if (i == 1)
return ('/');
if (i >= 2 && i < 12)
return ('0' - 2 + i);
if (i >= 12 && i < 38)
return ('A' - 12 + i);
if (i >= 38 && i < 63)
return ('a' - 38 + i);
return ('z');
}
// This function is taken from 'busybox'.
static char *crypt_make_salt() {
time_t now;
static unsigned long x;
static char result[3];
::time(&now);
x += now + getpid() + clock();
result[0] = i64c(((x >> 18) ^ (x >> 6)) & 077);
result[1] = i64c(((x >> 12) ^ x) & 077);
result[2] = '\0';
return result;
}
/*
* Modal dialog to force root password. It is quite hard as it only leave
* when a password is set.
* Also it prevalidates the password...
*/
PasswordDialogImpl::PasswordDialogImpl( QWidget* parent )
: PasswordDialog( parent, 0, true ), m_isSet( PasswordDialogImpl::needDialog() ) {
}
PasswordDialogImpl::~PasswordDialogImpl() {
/* qt does the stuff for us */
}
void PasswordDialogImpl::done(int res) {
m_isSet = true;
/*
* The user hit 'Ok' see if we can safe the file
* if not an error will be raised and m_isSet altered.
* On cancel we will see if it is now ok...
*/
if ( res == Accepted )
writePassword();
else if(PasswordDialogImpl::needDialog() ) {
switch( QMessageBox::warning(this,tr("Trying to leave without password set") ,
tr("<qt>No password was set. This could lead to you not beeing"
"able to remotely connect to your machine."
"Do you want to continue not setting a password?</qt>" ),
QMessageBox::Ok, QMessageBox::Cancel ) ) {
case QMessageBox::Cancel:
m_isSet = false;