KPasswordEdit::password() now returns a TQString instead of a const char *. This relates to bug 2961.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/6/head
Michele Calgaro 5 years ago
parent 82afa07a43
commit 6ec26d859b
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -482,7 +482,7 @@ emit completed();
// x-pkcs12 loading // x-pkcs12 loading
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
if (whatType == "application/x-pkcs12") { if (whatType == "application/x-pkcs12") {
TQCString pass; TQString pass;
_p12 = KSSLPKCS12::loadCertFile(m_file); _p12 = KSSLPKCS12::loadCertFile(m_file);
while (!_p12) { while (!_p12) {
@ -490,7 +490,7 @@ if (whatType == "application/x-pkcs12") {
int rc = KPasswordDialog::getPassword(pass, i18n("Certificate Password")); int rc = KPasswordDialog::getPassword(pass, i18n("Certificate Password"));
if (rc != KPasswordDialog::Accepted) break; if (rc != KPasswordDialog::Accepted) break;
_p12 = KSSLPKCS12::loadCertFile(m_file, TQString(pass)); _p12 = KSSLPKCS12::loadCertFile(m_file, pass);
if (!_p12) { if (!_p12) {
rc = KMessageBox::warningContinueCancel(_frame, i18n("The certificate file could not be loaded. Try a different password?"), i18n("Certificate Import"),i18n("Try Different")); rc = KMessageBox::warningContinueCancel(_frame, i18n("The certificate file could not be loaded. Try a different password?"), i18n("Certificate Import"),i18n("Try Different"));

@ -28,26 +28,23 @@
int KSSLPemCallback(char *buf, int size, int rwflag, void *userdata) { int KSSLPemCallback(char *buf, int size, int rwflag, void *userdata) {
#ifdef KSSL_HAVE_SSL #ifdef KSSL_HAVE_SSL
TQCString pass; TQString pass2;
Q_UNUSED(userdata); Q_UNUSED(userdata);
Q_UNUSED(rwflag); Q_UNUSED(rwflag);
if (!buf) return -1; if (!buf) return -1;
int rc = KPasswordDialog::getPassword(pass, i18n("Certificate password")); int rc = KPasswordDialog::getPassword(pass2, i18n("Certificate password"));
if (rc != KPasswordDialog::Accepted) return -1; if (rc != KPasswordDialog::Accepted) return -1;
TQCString pass = pass2.utf8(); // utf8 length may differ from TQString length
const uint passlen = pass.length(); const uint passlen = pass.length();
if (passlen > (unsigned int)size-1) if (passlen > (unsigned int)size-1)
pass.truncate((unsigned int)size-1); pass.truncate((unsigned int)size-1);
tqstrncpy(buf, pass.data(), size-1); tqstrncpy(buf, pass, size-1);
buf[size-1] = 0;
for (unsigned int i = 0; i < passlen; i++) pass.fill(' ');
pass[i] = 0; pass2.fill(' ');
// To be sure that it doesn't optimise the previous loop away
for (unsigned int i = 0; i < passlen; i++)
pass[i] = pass[i];
buf[size-1] = 0;
return (int)passlen; return (int)passlen;
#else #else
Q_UNUSED(buf); Q_UNUSED(buf);

@ -471,13 +471,13 @@ int TDEWalletD::internalOpen(const TQCString& appid, const TQString& wallet, boo
kpd->setAllowEmptyPasswords(true); kpd->setAllowEmptyPasswords(true);
} }
const char *p = 0L; TQCString p;
while (!b->isOpen()) { while (!b->isOpen()) {
assert(kpd); // kpd can't be null if isOpen() is false assert(kpd); // kpd can't be null if isOpen() is false
setupDialog( kpd, w, appid, modal ); setupDialog( kpd, w, appid, modal );
if (kpd->exec() == KDialog::Accepted) { if (kpd->exec() == KDialog::Accepted) {
p = kpd->password(); p = kpd->password().utf8();
int rc = b->open(TQByteArray().duplicate(p, strlen(p))); int rc = b->open(TQByteArray().duplicate(p));
if (!b->isOpen()) { if (!b->isOpen()) {
kpd->setPrompt(i18n("<qt>Error opening the wallet '<b>%1</b>'. Please try again.<br>(Error code %2: %3)").arg(TQStyleSheet::escape(wallet)).arg(rc).arg(TDEWallet::Backend::openRCToString(rc))); kpd->setPrompt(i18n("<qt>Error opening the wallet '<b>%1</b>'. Please try again.<br>(Error code %2: %3)").arg(TQStyleSheet::escape(wallet)).arg(rc).arg(TDEWallet::Backend::openRCToString(rc)));
kpd->clearPassword(); kpd->clearPassword();
@ -487,7 +487,7 @@ int TDEWalletD::internalOpen(const TQCString& appid, const TQString& wallet, boo
} }
} }
if (!emptyPass && (!p || !b->isOpen())) { if (!emptyPass && (p.isEmpty() || !b->isOpen())) {
delete b; delete b;
delete kpd; delete kpd;
return -1; return -1;
@ -662,11 +662,11 @@ void TDEWalletD::doTransactionChangePassword(const TQCString& appid, const TQStr
kpd->setAllowEmptyPasswords(true); kpd->setAllowEmptyPasswords(true);
setupDialog( kpd, wId, appid, false ); setupDialog( kpd, wId, appid, false );
if (kpd->exec() == KDialog::Accepted) { if (kpd->exec() == KDialog::Accepted) {
const char *p = kpd->password(); TQCString p = kpd->password().utf8();
if (p) { if (!p.isEmpty()) {
_passwords[wallet] = p; _passwords[wallet] = p;
TQByteArray pa; TQByteArray pa;
pa.duplicate(p, strlen(p)); pa.duplicate(p);
int rc = w->close(pa); int rc = w->close(pa);
if (rc < 0) { if (rc < 0) {
KMessageBox::sorryWId(wId, i18n("Error re-encrypting the wallet. Password was not changed."), i18n("TDE Wallet Service")); KMessageBox::sorryWId(wId, i18n("Error re-encrypting the wallet. Password was not changed."), i18n("TDE Wallet Service"));

@ -172,7 +172,7 @@ void Security::slotDataArrived(KProcIO *procIO)
case Sign: case Sign:
if (data.find("passphrase.enter") != -1) if (data.find("passphrase.enter") != -1)
{ {
TQCString password; TQString password;
KeyStruct key = m_keys[m_secretKey]; KeyStruct key = m_keys[m_secretKey];
int result = KPasswordDialog::getPassword(password, i18n("<qt>Enter passphrase for key <b>0x%1</b>, belonging to<br><i>%2&lt;%3&gt;</i>:</qt>").arg(m_secretKey).arg(key.name).arg(key.mail)); int result = KPasswordDialog::getPassword(password, i18n("<qt>Enter passphrase for key <b>0x%1</b>, belonging to<br><i>%2&lt;%3&gt;</i>:</qt>").arg(m_secretKey).arg(key.name).arg(key.mail));
if (result == KPasswordDialog::Accepted) if (result == KPasswordDialog::Accepted)

@ -497,13 +497,13 @@ KDE_EXPORT int KRsync::establishConnectionRsync(char *buffer, TDEIO::fileoffset_
myDebug( << "sending mpass" << endl); myDebug( << "sending mpass" << endl);
connectionAuth.prompt = thisFn+buf; connectionAuth.prompt = thisFn+buf;
connectionAuth.password = TQString(); // don't prefill connectionAuth.password = TQString(); // don't prefill
TQCString thispass; TQString thispass;
if (KPasswordDialog::getPassword (thispass, i18n("Remote authorization required") + TQString("\n") + i18n("Please input") + TQString(" ") + TQString(buf), NULL) != 1) { if (KPasswordDialog::getPassword (thispass, i18n("Remote authorization required") + TQString("\n") + i18n("Please input") + TQString(" ") + TQString(buf), NULL) != 1) {
shutdownConnection(true, false); shutdownConnection(true, false);
return -1; return -1;
} }
else { else {
connectionAuth.password = TQString(thispass); connectionAuth.password = thispass;
} }
connectionAuth.password += "\n"; connectionAuth.password += "\n";
myDebug( << "sending pass" << endl); myDebug( << "sending pass" << endl);
@ -620,13 +620,13 @@ KDE_EXPORT int KRsync::establishConnectionUnison(char *buffer, TDEIO::fileoffset
myDebug( << "sending mpass" << endl); myDebug( << "sending mpass" << endl);
connectionAuth.prompt = thisFn+buf; connectionAuth.prompt = thisFn+buf;
connectionAuth.password = TQString(); // don't prefill connectionAuth.password = TQString(); // don't prefill
TQCString thispass; TQString thispass;
if (KPasswordDialog::getPassword (thispass, i18n("Remote authorization required") + TQString("\n") + i18n("Please input") + TQString(" ") + TQString(buf), NULL) != 1) { if (KPasswordDialog::getPassword (thispass, i18n("Remote authorization required") + TQString("\n") + i18n("Please input") + TQString(" ") + TQString(buf), NULL) != 1) {
slotUnisonCancelled(); slotUnisonCancelled();
return -1; return -1;
} }
else { else {
connectionAuth.password = TQString(thispass); connectionAuth.password = thispass;
} }
connectionAuth.password += "\n"; connectionAuth.password += "\n";
myDebug( << "sending pass" << endl); myDebug( << "sending pass" << endl);

@ -138,8 +138,8 @@ KPasswordEdit::~KPasswordEdit()
{ {
} }
const char *KPasswordEdit::password() const { TQString KPasswordEdit::password() const {
return text().ascii(); return text();
} }
void KPasswordEdit::erase() void KPasswordEdit::erase()
@ -404,7 +404,7 @@ void KPasswordDialog::erase()
void KPasswordDialog::slotOk() void KPasswordDialog::slotOk()
{ {
if (m_Type == NewPassword) { if (m_Type == NewPassword) {
if (strcmp(m_pEdit->password(), m_pEdit2->password())) { if (m_pEdit->password() != m_pEdit2->password()) {
KMessageBox::sorry(this, i18n("You entered two different " KMessageBox::sorry(this, i18n("You entered two different "
"passwords. Please try again.")); "passwords. Please try again."));
erase(); erase();
@ -459,8 +459,7 @@ void KPasswordDialog::slotLayout()
} }
// static . antlarr: KDE 4: Make it const TQString & prompt int KPasswordDialog::getPassword(TQString &password, TQString prompt,
int KPasswordDialog::getPassword(TQCString &password, TQString prompt,
int *keep) int *keep)
{ {
const bool enableKeep = (keep && *keep); const bool enableKeep = (keep && *keep);
@ -477,7 +476,7 @@ int KPasswordDialog::getPassword(TQCString &password, TQString prompt,
// static . antlarr: KDE 4: Make it const TQString & prompt // static . antlarr: KDE 4: Make it const TQString & prompt
int KPasswordDialog::getNewPassword(TQCString &password, TQString prompt) int KPasswordDialog::getNewPassword(TQString &password, TQString prompt)
{ {
KPasswordDialog* const dlg = new KPasswordDialog(NewPassword, prompt); KPasswordDialog* const dlg = new KPasswordDialog(NewPassword, prompt);
const int ret = dlg->exec(); const int ret = dlg->exec();
@ -502,8 +501,8 @@ void KPasswordDialog::virtual_hook( int id, void* data )
void KPasswordDialog::enableOkBtn() void KPasswordDialog::enableOkBtn()
{ {
if (m_Type == NewPassword) { if (m_Type == NewPassword) {
const bool match = strcmp(m_pEdit->password(), m_pEdit2->password()) == 0 const bool match = (m_pEdit->password() == m_pEdit2->password())
&& (d->allowEmptyPasswords || m_pEdit->password()[0]); && (d->allowEmptyPasswords || !m_pEdit->password().isEmpty());
const TQString pass(m_pEdit->password()); const TQString pass(m_pEdit->password());
@ -515,7 +514,7 @@ void KPasswordDialog::enableOkBtn()
enableButtonOK( match ); enableButtonOK( match );
} }
if ( match && d->allowEmptyPasswords && m_pEdit->password()[0] == 0 ) { if ( match && d->allowEmptyPasswords && m_pEdit->password().isEmpty() ) {
d->m_MatchLabel->setText( i18n("Password is empty") ); d->m_MatchLabel->setText( i18n("Password is empty") );
} else { } else {
if ((int) pass.length() < minPasswordLength) { if ((int) pass.length() < minPasswordLength) {

@ -76,10 +76,9 @@ public:
~KPasswordEdit(); ~KPasswordEdit();
/** /**
* Returns the password. The memory is freed in the destructor * Returns the password.
* so you should make a copy.
*/ */
const char *password() const; TQString password() const;
/** /**
* Erases the current password. * Erases the current password.
@ -129,7 +128,7 @@ private:
* <b>Usage example</b>\n * <b>Usage example</b>\n
* *
* \code * \code
* TQCString password; * TQString password;
* int result = KPasswordDialog::getPassword(password, i18n("Prompt message")); * int result = KPasswordDialog::getPassword(password, i18n("Prompt message"));
* if (result == KPasswordDialog::Accepted) * if (result == KPasswordDialog::Accepted)
* use(password); * use(password);
@ -146,14 +145,6 @@ private:
* Core dumps are dangerous because they are an image of the process memory, * Core dumps are dangerous because they are an image of the process memory,
* and thus include any passwords that were in memory. * and thus include any passwords that were in memory.
* *
* @li You should delete passwords as soon as they are not needed anymore.
* The functions getPassword() and getNewPassword() return the
* password as a TQCString. I believe this is safer than a TQString. A QString
* stores its characters internally as 16-bit wide values, so conversions are
* needed, both for creating the TQString and by using it. The temporary
* memory used for these conversion is probably not erased. This could lead
* to stray passwords in memory, even if you think you erased all of them.
*
* @author Geert Jansen <jansen@kde.org> * @author Geert Jansen <jansen@kde.org>
*/ */
@ -327,10 +318,9 @@ public:
int passwordStrengthWarningLevel() const; int passwordStrengthWarningLevel() const;
/** /**
* Returns the password entered. The memory is freed in the destructor, * Returns the password entered.
* so you should make a copy.
*/ */
const char *password() const { return m_pEdit->password(); } TQString password() const { return m_pEdit->password(); }
/** /**
* Clears the password input field. You might want to use this after the * Clears the password input field. You might want to use this after the
@ -356,7 +346,7 @@ public:
* is shown and the result is stored in *keep. * is shown and the result is stored in *keep.
* @return Result code: Accepted or Rejected. * @return Result code: Accepted or Rejected.
*/ */
static int getPassword(TQCString &password, TQString prompt, int *keep=0L); static int getPassword(TQString &password, TQString prompt, int *keep=0L);
/** /**
* Pops up the dialog, asks the user for a password and returns it. The * Pops up the dialog, asks the user for a password and returns it. The
@ -368,7 +358,7 @@ public:
* information. The text is word broken to fit nicely in the dialog. * information. The text is word broken to fit nicely in the dialog.
* @return Result code: Accepted or Rejected. * @return Result code: Accepted or Rejected.
*/ */
static int getNewPassword(TQCString &password, TQString prompt); static int getNewPassword(TQString &password, TQString prompt);
/** /**
* Static helper function that disables core dumps. * Static helper function that disables core dumps.
@ -388,7 +378,7 @@ protected:
* checking in derived classes. It should return @p true if the * checking in derived classes. It should return @p true if the
* password is valid, @p false otherwise. * password is valid, @p false otherwise.
*/ */
virtual bool checkPassword(const char *) { return true; } virtual bool checkPassword(const TQString&) { return true; }
private slots: private slots:
void enableOkBtn(); void enableOkBtn();

Loading…
Cancel
Save