tdeioslave/sftp: better cancelation handling in case of several publickeys

Consider publickey auth canceled only if user canceled it for each of
the prompted keys.

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
pull/447/head
Alexander Golubev 3 months ago committed by TDE Gitea
parent 95b18e6338
commit 4b4b72db8f

@ -226,6 +226,7 @@ int sftpProtocol::auth_callback(const char *prompt, char *buf, size_t len,
kdDebug(TDEIO_SFTP_DB) << "Entering public key authentication callback" << endl;
int rc=0;
bool firstTimeCalled = !mPubKeyAuthData.wasCalled;
mPubKeyAuthData.wasCalled = true;
AuthInfo pubKeyInfo = authInfo();
@ -277,15 +278,20 @@ int sftpProtocol::auth_callback(const char *prompt, char *buf, size_t len,
buf[len-1]=0; // Just to be on the safe side
purgeString(pubKeyInfo.password);
// take a note that we already tried unlocking this keyfile
if(firstTry) {
mPubKeyAuthData.attemptedKeys.append(keyFile);
}
// we consider publickey auth canceled only if we cancel all the key dialogs
mPubKeyAuthData.wasCanceled = false;
} else {
kdDebug(TDEIO_SFTP_DB) << "User canceled entry of public key passphrase" << endl;
rc = -1;
mPubKeyAuthData.wasCanceled = true;
}
// take a note that we already tried unlocking this keyfile
if(firstTry) {
mPubKeyAuthData.attemptedKeys.append(keyFile);
if (firstTimeCalled) {
mPubKeyAuthData.wasCanceled = true;
}
}
return rc;

@ -164,7 +164,7 @@ private: // Private variables
long current_seqNr;
/** true if callback was called */
bool wasCalled;
/** true if user canceled password entry dialog */
/** true if user canceled all passphrase entry dialogues */
bool wasCanceled;
} mPubKeyAuthData;

Loading…
Cancel
Save