diff --git a/accountdialog.cpp b/accountdialog.cpp index 299ab564b..56c83381d 100644 --- a/accountdialog.cpp +++ b/accountdialog.cpp @@ -32,6 +32,9 @@ #include #include +#include +#include + #include "accountdialog.h" #include "kmacctlocal.h" #include "kmacctmgr.h" @@ -140,7 +143,7 @@ void AccountDialog::makeLocalAccountPage() void AccountDialog::makePopAccountPage() { QFrame *page = makeMainWidget(); - QGridLayout *topLayout = new QGridLayout( page, 16, 2, 0, spacingHint() ); + QGridLayout *topLayout = new QGridLayout( page, 17, 2, 0, spacingHint() ); topLayout->addColSpacing( 1, fontMetrics().maxWidth()*15 ); topLayout->setRowStretch( 16, 10 ); topLayout->setColStretch( 1, 10 ); @@ -189,51 +192,56 @@ void AccountDialog::makePopAccountPage() mPop.portEdit->setValidator( new QIntValidator(this) ); topLayout->addWidget( mPop.portEdit, 6, 1 ); + mPop.useSSLCheck = + new QCheckBox( i18n("Use SSL for secure mail download"), page); + topLayout->addMultiCellWidget( mPop.useSSLCheck, 7, 7, 0, 1); + connect(mPop.useSSLCheck, SIGNAL(clicked()), this, SLOT(slotSSLChanged())); + mPop.storePasswordCheck = new QCheckBox( i18n("Store POP password in configuration file"), page ); - topLayout->addMultiCellWidget( mPop.storePasswordCheck, 7, 7, 0, 1 ); + topLayout->addMultiCellWidget( mPop.storePasswordCheck, 8, 8, 0, 1 ); mPop.deleteMailCheck = new QCheckBox( i18n("Delete mail from server"), page ); - topLayout->addMultiCellWidget( mPop.deleteMailCheck, 8, 8, 0, 1 ); + topLayout->addMultiCellWidget( mPop.deleteMailCheck, 9, 9, 0, 1 ); mPop.retriveAllCheck = new QCheckBox( i18n("Retrieve all mail from server"), page ); - topLayout->addMultiCellWidget( mPop.retriveAllCheck, 9, 9, 0, 1 ); + topLayout->addMultiCellWidget( mPop.retriveAllCheck, 10, 10, 0, 1 ); mPop.excludeCheck = new QCheckBox( i18n("Exclude from \"Check Mail\""), page ); - topLayout->addMultiCellWidget( mPop.excludeCheck, 10, 10, 0, 1 ); + topLayout->addMultiCellWidget( mPop.excludeCheck, 11, 11, 0, 1 ); mPop.intervalCheck = new QCheckBox( i18n("Enable interval mail checking"), page ); - topLayout->addMultiCellWidget( mPop.intervalCheck, 11, 11, 0, 1 ); + topLayout->addMultiCellWidget( mPop.intervalCheck, 12, 12, 0, 1 ); connect( mPop.intervalCheck, SIGNAL(toggled(bool)), this, SLOT(slotEnablePopInterval(bool)) ); mPop.intervalLabel = new QLabel( i18n("Check interval (minutes):"), page ); - topLayout->addWidget( mPop.intervalLabel, 12, 0 ); + topLayout->addWidget( mPop.intervalLabel, 13, 0 ); mPop.intervalSpin = new QSpinBox( page ); mPop.intervalSpin->setRange( 1, 10000 ); mPop.intervalSpin->setValue( 1 ); - topLayout->addWidget( mPop.intervalSpin, 12, 1 ); + topLayout->addWidget( mPop.intervalSpin, 13, 1 ); label = new QLabel( i18n("Destination folder:"), page ); - topLayout->addWidget( label, 13, 0 ); + topLayout->addWidget( label, 14, 0 ); mPop.folderCombo = new QComboBox( false, page ); - topLayout->addWidget( mPop.folderCombo, 13, 1 ); + topLayout->addWidget( mPop.folderCombo, 14, 1 ); /* label = new QLabel( i18n("Default identity:"), page ); - topLayout->addWidget( label, 14, 0 ); + topLayout->addWidget( label, 15, 0 ); mPop.identityCombo = new QComboBox( false, page ); - topLayout->addWidget( mPop.identityCombo, 14, 1 ); + topLayout->addWidget( mPop.identityCombo, 15, 1 ); */ label->setEnabled(false); // mPop.identityCombo->setEnabled(false); label = new QLabel( i18n("Precommand:"), page ); - topLayout->addWidget( label, 15, 0 ); + topLayout->addWidget( label, 16, 0 ); mPop.precommand = new QLineEdit( page ); - topLayout->addWidget( mPop.precommand, 15, 1 ); + topLayout->addWidget( mPop.precommand, 16, 1 ); connect(kapp,SIGNAL(kdisplayFontChanged()),SLOT(slotFontChanged())); } @@ -265,6 +273,7 @@ void AccountDialog::setupSettings() mPop.passwordEdit->setText( ap.passwd()); mPop.hostEdit->setText( ap.host() ); mPop.portEdit->setText( QString("%1").arg( ap.port() ) ); + mPop.useSSLCheck->setChecked( ap.useSSL() ); mPop.storePasswordCheck->setChecked( ap.storePasswd() ); mPop.deleteMailCheck->setChecked( !ap.leaveOnServer() ); mPop.retriveAllCheck->setChecked( ap.retrieveAll() ); @@ -313,6 +322,30 @@ void AccountDialog::setupSettings() } +void AccountDialog::slotSSLChanged() +{ + if (mPop.useSSLCheck->isChecked()) { + struct servent *serv = getservbyname("spop3", "tcp"); + if (serv) { + QString x; + x.sprintf("%u", ntohs(serv->s_port)); + mPop.portEdit->setText(x); + } else { + mPop.portEdit->setText("995"); + } + } else { + struct servent *serv = getservbyname("pop-3", "tcp"); + if (serv) { + QString x; + x.sprintf("%u", ntohs(serv->s_port)); + mPop.portEdit->setText(x); + } else { + mPop.portEdit->setText("110"); + } + } +} + + void AccountDialog::slotOk() { saveSettings(); @@ -367,6 +400,7 @@ void AccountDialog::saveSettings() epa.setPort( mPop.portEdit->text().toInt() ); epa.setLogin( mPop.loginEdit->text() ); epa.setPasswd( mPop.passwordEdit->text(), true ); + epa.setUseSSL( mPop.useSSLCheck->isChecked() ); epa.setStorePasswd( mPop.storePasswordCheck->isChecked() ); epa.setPasswd( mPop.passwordEdit->text(), epa.storePasswd() ); epa.setLeaveOnServer( !mPop.deleteMailCheck->isChecked() ); diff --git a/accountdialog.h b/accountdialog.h index 6d104d52e..d395784e8 100644 --- a/accountdialog.h +++ b/accountdialog.h @@ -60,6 +60,7 @@ class AccountDialog : public KDialogBase QLineEdit *hostEdit; QLineEdit *portEdit; QLineEdit *precommand; + QCheckBox *useSSLCheck; QCheckBox *storePasswordCheck; QCheckBox *deleteMailCheck; QCheckBox *retriveAllCheck; @@ -77,6 +78,7 @@ class AccountDialog : public KDialogBase void slotEnablePopInterval( bool state ); void slotEnableLocalInterval( bool state ); void slotFontChanged(); + void slotSSLChanged(); private: void makeLocalAccountPage(); diff --git a/kmacctexppop.cpp b/kmacctexppop.cpp index e93b4fef7..9df79bf40 100644 --- a/kmacctexppop.cpp +++ b/kmacctexppop.cpp @@ -4,6 +4,7 @@ #include "kmacctexppop.moc" +#include #include #include #include @@ -39,11 +40,17 @@ KMAcctExpPop::KMAcctExpPop(KMAcctMgr* aOwner, const char* aAccountName): { initMetaObject(); + mUseSSL = FALSE; mStorePasswd = FALSE; mLeaveOnServer = FALSE; mRetrieveAll = TRUE; mProtocol = 3; - mPort = 110; + struct servent *serv = getservbyname("pop-3", "tcp"); + if (serv) { + mPort = serv->s_port; + } else { + mPort = 110; + } job = 0L; stage = Idle; indexOfCurrentMsg = -1; @@ -76,10 +83,16 @@ const char* KMAcctExpPop::type(void) const void KMAcctExpPop::init(void) { mHost = ""; - mPort = 110; + struct servent *serv = getservbyname("pop-3", "tcp"); + if (serv) { + mPort = serv->s_port; + } else { + mPort = 110; + } mLogin = ""; mPasswd = ""; mProtocol = 3; + mUseSSL = FALSE; mStorePasswd = FALSE; mLeaveOnServer = FALSE; mRetrieveAll = TRUE; @@ -130,6 +143,7 @@ void KMAcctExpPop::readConfig(KConfig& config) mLogin = config.readEntry("login", ""); + mUseSSL = config.readNumEntry("use-ssl", FALSE); mStorePasswd = config.readNumEntry("store-passwd", TRUE); if (mStorePasswd) mPasswd = config.readEntry("passwd"); else mPasswd = ""; @@ -147,6 +161,7 @@ void KMAcctExpPop::writeConfig(KConfig& config) KMAcctExpPopInherited::writeConfig(config); config.writeEntry("login", mLogin); + config.writeEntry("use-ssl", mUseSSL); config.writeEntry("store-passwd", mStorePasswd); if (mStorePasswd) config.writeEntry("passwd", mPasswd); else config.writeEntry("passwd", ""); @@ -186,6 +201,12 @@ const QString KMAcctExpPop::decryptStr(const QString aStr) const } +//----------------------------------------------------------------------------- +void KMAcctExpPop::setUseSSL(bool b) +{ + mUseSSL = b; +} + //----------------------------------------------------------------------------- void KMAcctExpPop::setStorePasswd(bool b) { diff --git a/kmacctexppop.h b/kmacctexppop.h index 6d7921cbe..080228f2b 100644 --- a/kmacctexppop.h +++ b/kmacctexppop.h @@ -44,6 +44,10 @@ public: const QString passwd(void) const; virtual void setPasswd(const QString&, bool storeInConfig=FALSE); + /** Use SSL? */ + bool useSSL(void) const { return mUseSSL; } + virtual void setUseSSL(bool); + /** Will the password be stored in the config file ? */ bool storePasswd(void) const { return mStorePasswd; } virtual void setStorePasswd(bool); @@ -101,6 +105,7 @@ protected: QString mHost, mPrecommand; unsigned short int mPort; short mProtocol; + bool mUseSSL; bool mStorePasswd; bool mLeaveOnServer; bool mRetrieveAll; diff --git a/kmacctpop.cpp b/kmacctpop.cpp index f283fd7d6..7816fa905 100644 --- a/kmacctpop.cpp +++ b/kmacctpop.cpp @@ -39,6 +39,7 @@ KMAcctPop::KMAcctPop(KMAcctMgr* aOwner, const char* aAccountName): initMetaObject(); mStorePasswd = FALSE; + mUseSSL = FALSE; mLeaveOnServer = FALSE; mRetrieveAll = TRUE; mProtocol = 3; @@ -67,6 +68,7 @@ void KMAcctPop::init(void) mLogin = ""; mPasswd = ""; mProtocol = 3; + mUseSSL = FALSE; mStorePasswd = FALSE; mLeaveOnServer = FALSE; mRetrieveAll = TRUE; @@ -375,6 +377,7 @@ void KMAcctPop::readConfig(KConfig& config) mLogin = config.readEntry("login", ""); + mUseSSL = config.readNumEntry("use-ssl", FALSE); mStorePasswd = config.readNumEntry("store-passwd", TRUE); if (mStorePasswd) mPasswd = config.readEntry("passwd"); else mPasswd = ""; @@ -393,6 +396,7 @@ void KMAcctPop::writeConfig(KConfig& config) KMAcctPopInherited::writeConfig(config); config.writeEntry("login", mLogin); + config.writeEntry("use-ssl", mUseSSL); config.writeEntry("store-passwd", mStorePasswd); if (mStorePasswd) config.writeEntry("passwd", mPasswd); else config.writeEntry("passwd", ""); @@ -433,6 +437,12 @@ const QString KMAcctPop::decryptStr(const QString aStr) const } +//----------------------------------------------------------------------------- +void KMAcctPop::setUseSSL(bool b) +{ + mUseSSL = b; +} + //----------------------------------------------------------------------------- void KMAcctPop::setStorePasswd(bool b) { diff --git a/kmacctpop.h b/kmacctpop.h index e2beb4f34..9ab379055 100644 --- a/kmacctpop.h +++ b/kmacctpop.h @@ -35,6 +35,10 @@ public: const QString passwd(void) const; virtual void setPasswd(const QString&, bool storeInConfig=FALSE); + /** Use SSL ? */ + bool useSSL(void) const { return mUseSSL; } + virtual void setUseSSL(bool); + /** Will the password be stored in the config file ? */ bool storePasswd(void) const { return mStorePasswd; } virtual void setStorePasswd(bool); @@ -92,6 +96,7 @@ protected: QString mHost, mPrecommand; unsigned short int mPort; short mProtocol; + bool mUseSSL; bool mStorePasswd; bool mLeaveOnServer; bool mRetrieveAll;