author | zecke <zecke> | 2004-02-21 13:09:17 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-02-21 13:09:17 (UTC) |
commit | 4024cfd1e32a43d82361d6ba9977fe64db88e3ce (patch) (side-by-side diff) | |
tree | 1d2e0592a3df330a17d9a07cd2f29615ce5be595 | |
parent | aa11789fc4d735a04fac09063851753d8a57027b (diff) | |
download | opie-4024cfd1e32a43d82361d6ba9977fe64db88e3ce.zip opie-4024cfd1e32a43d82361d6ba9977fe64db88e3ce.tar.gz opie-4024cfd1e32a43d82361d6ba9977fe64db88e3ce.tar.bz2 |
Fix up syncing mode
InetlliSync,Opie1.0,QtopiaNEW
-rw-r--r-- | core/launcher/qcopbridge.cpp | 2 | ||||
-rw-r--r-- | core/launcher/qcopbridge.h | 3 | ||||
-rw-r--r-- | core/launcher/transferserver.cpp | 36 |
3 files changed, 30 insertions, 11 deletions
diff --git a/core/launcher/qcopbridge.cpp b/core/launcher/qcopbridge.cpp index b45f0cc..9bca360 100644 --- a/core/launcher/qcopbridge.cpp +++ b/core/launcher/qcopbridge.cpp @@ -136,65 +136,65 @@ void QCopBridge::closed( QCopBridgePI *pi ) #if 0 QPEApplication::setTempScreenSaverMode( QPEApplication::Enable ); #endif #ifndef QT_NO_COP QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; #endif } } void QCopBridge::closeOpenConnections() { QCopBridgePI *pi; for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) pi->close(); } void QCopBridge::desktopMessage( const QCString &command, const QByteArray &data ) { if ( command == "startSync()" ) { // we need to buffer it a bit sendSync = TRUE; startTimer( 20000 ); } if ( m_mode & Qtopia1_7 ) { // send the command to all open connections QCopBridgePI *pi; for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) { pi->sendDesktopMessage( command, data ); } } - if ( m_mode & Sharp ) + if ( ( m_mode & Sharp ) || (m_mode & IntelliSync) ) sendDesktopMessageOld( command, data ); } #ifndef OPIE_NO_OLD_SYNC_CODE /* * Old compat mode */ void QCopBridge::sendDesktopMessageOld( const QCString& command, const QByteArray& args) { command.stripWhiteSpace(); int paren = command.find( "(" ); if ( paren <= 0 ) { qDebug("DesktopMessage: bad qcop syntax"); return; } QString params = command.mid( paren + 1 ); if ( params[params.length()-1] != ')' ) { qDebug("DesktopMessage: bad qcop syntax"); return; } params.truncate( params.length()-1 ); QStringList paramList = QStringList::split( ",", params ); QString data; if ( paramList.count() ) { QDataStream stream( args, IO_ReadOnly ); for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) { QString str; if ( *it == "QString" ) { stream >> str; diff --git a/core/launcher/qcopbridge.h b/core/launcher/qcopbridge.h index 9483d9d..d5988cd 100644 --- a/core/launcher/qcopbridge.h +++ b/core/launcher/qcopbridge.h @@ -8,65 +8,66 @@ ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __qcopbridge_h__ #define __qcopbridge_h__ #include <qtopia/global.h> #include <qserversocket.h> #include <qsocket.h> #include <qdir.h> #include <qfile.h> #include <qbuffer.h> class QFileInfo; class QCopBridgePI; class QCopChannel; class QTimer; class QCopBridge : public QServerSocket { Q_OBJECT public: - enum Mode { Qtopia1_7= 0x01, Sharp = 0x02, Both = Qtopia1_7 | Sharp }; + /* can not or anymore :) */ + enum Mode { Qtopia1_7= 0x01, Sharp = 0x02, IntelliSync = 0x04 }; QCopBridge( Q_UINT16 port, QObject *parent = 0, const char* name = 0 ); virtual ~QCopBridge(); void newConnection( int socket ); void closeOpenConnections(); void authorizeConnections(); public slots: void closed( QCopBridgePI *pi ); void desktopMessage( const QCString &call, const QByteArray & ); signals: void connectionClosed( const QHostAddress & ); protected: void timerEvent( QTimerEvent * ); void sendDesktopMessageOld( const QCString&, const QByteArray& ); private: QCopChannel *desktopChannel; QCopChannel *cardChannel; QList<QCopBridgePI> openConnections; bool sendSync; Mode m_mode; }; class QCopBridgePI : public QSocket { Q_OBJECT enum State { Connected, Wait_USER, Wait_PASS, Ready, Forbidden }; diff --git a/core/launcher/transferserver.cpp b/core/launcher/transferserver.cpp index 9cb9d7a..8367a62 100644 --- a/core/launcher/transferserver.cpp +++ b/core/launcher/transferserver.cpp @@ -165,73 +165,91 @@ bool SyncAuthentication::checkUser( const QString& user ) { if ( user.isEmpty() ) return FALSE; QString euser = loginName(); return user == euser; } bool SyncAuthentication::checkPassword( const QString& password ) { #ifdef ALLOW_UNIX_USER_FTP // First, check system password... struct passwd *pw = 0; struct spwd *spw = 0; pw = getpwuid( geteuid() ); spw = getspnam( pw->pw_name ); QString cpwd = QString::fromLocal8Bit( pw->pw_passwd ); if ( cpwd == "x" && spw ) cpwd = QString::fromLocal8Bit( spw->sp_pwdp ); // Note: some systems use more than crypt for passwords. QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) ); if ( cpwd == cpassword ) return TRUE; #endif static int lastdenial=0; static int denials=0; int now = time(0); Config cfg("Security"); - cfg.setGroup("Sync"); - QString syncapp = cfg.readEntry("syncapp","Qtopia"); - - //No password needed if the user really wants it - if (syncapp == "IntelliSync") { - return TRUE; - } - - // Detect old Qtopia Desktop (no password) + cfg.setGroup("SyncMode"); + int mode = cfg.readNumEntry("Mode", 0x02 ); + + //No pass word needed if the user really needs it + if (mode & 0x04) { + QMessageBox unauth( + tr("Sync Connection"), + tr("<qt><p>An unauthorized system is requesting access to this device." + "<p>You chose IntelliSync so you may I allow or deny this connection.</qt>" ), + QMessageBox::Warning, + QMessageBox::Ok, QMessageBox::Cancel|QMessageBox::Default, QMessageBox::NoButton, + 0, QString::null, TRUE, WStyle_StaysOnTop); + unauth.setButtonText(QMessageBox::Ok, tr("Allow" ) ); + unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); + switch( unauth.exec() ) { + case QMessageBox::Ok: + return TRUE; + break; + case QMessageBox::Cancel: + default: + denials++; + lastdenial=now; + return FALSE; + } + } + + // Detect old Qtopia Desktop (no password) and fail if ( password.isEmpty() ) { if ( denials < 3 || now > lastdenial+600 ) { QMessageBox unauth( tr("Sync Connection"), tr("<p>An unauthorized system is requesting access to this device." "<p>If you are using a version of Qtopia Desktop older than 1.5.1, " "please upgrade or change the security setting to use IntelliSync." ), QMessageBox::Warning, QMessageBox::Cancel, QMessageBox::NoButton, QMessageBox::NoButton, 0, QString::null, TRUE, WStyle_StaysOnTop); unauth.setButtonText(QMessageBox::Cancel, tr("Deny")); unauth.exec(); denials++; lastdenial=now; } return FALSE; } // Second, check sync password... static int lock=0; if ( lock ) return FALSE; ++lock; /* * we need to support old Sync software and QtopiaDesktop */ if ( password.left(6) == "Qtopia" || password.left(6) == "rootme" ) { Config cfg( "Security" ); |