Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbhatman1441 <blackhat1441@protonmail.com>2023-10-12 15:20:58 +0300
committerbhatman1441 <blackhat1441@protonmail.com>2023-10-12 15:20:58 +0300
commit61e100fe0c5bb97f2d294809ca67a542a460431f (patch)
treef6121940628792f76966d8161146f8bb233459ad /src
parentef357a9bbc8a189ff19fcb0cab2d119da1d40321 (diff)
Prompt for username if empty for SSH private key auth
Diffstat (limited to 'src')
-rw-r--r--src/remmina_ssh.c44
-rw-r--r--src/remmina_ssh.h3
2 files changed, 45 insertions, 2 deletions
diff --git a/src/remmina_ssh.c b/src/remmina_ssh.c
index 5634649d7..ddfb0cb93 100644
--- a/src/remmina_ssh.c
+++ b/src/remmina_ssh.c
@@ -878,6 +878,12 @@ remmina_ssh_auth_pubkey(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile
return REMMINA_SSH_AUTH_FATAL_ERROR;
}
+ // Check for empty username
+ if (ssh->user == NULL) {
+ remmina_ssh_set_error(ssh, _("No username found. Asking user to enter it."));
+ return REMMINA_SSH_AUTH_AUTHFAILED_EMPTY_USERNAME;
+ }
+
g_snprintf(pubkey, sizeof(pubkey), "%s.pub", ssh->privkeyfile);
/*G_FILE_TEST_EXISTS*/
@@ -1531,12 +1537,48 @@ remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *re
* on a ssh connection. And the 3rd failed attempt will block the calling thread forever.
* So we retry only 2 extra time authentication. */
for (attempt = 0;
- attempt < 2 && ret == REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT;
+ attempt < 2 && (ret == REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT || ret == REMMINA_SSH_AUTH_AUTHFAILED_EMPTY_USERNAME);
attempt++) {
if (ssh->error)
REMMINA_DEBUG("Retrying auth because %s", ssh->error);
if (remmina_ssh_auth_type == REMMINA_SSH_AUTH_PKPASSPHRASE) {
+ // If username is empty, prompt user to enter it and attempt reconnect
+ if ( ret == REMMINA_SSH_AUTH_AUTHFAILED_EMPTY_USERNAME ) {
+ current_user = g_strdup(remmina_file_get_string(remminafile, ssh->is_tunnel ? "ssh_tunnel_username" : "username"));
+ ret = remmina_protocol_widget_panel_auth(gp,
+ (REMMINA_MESSAGE_PANEL_FLAG_USERNAME | REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD),
+ (ssh->is_tunnel ? _("SSH tunnel private key credentials") : _("SSH private key credentials")),
+ current_user,
+ remmina_file_get_string(remminafile, pwdfkey),
+ NULL,
+ _("Password for private SSH key"));
+
+ if (ret == GTK_RESPONSE_OK) {
+ // Save username to remmina file and reset ssh error for reconnect attempt
+ // If password is empty or changed, save the new password
+ remmina_file_set_string(remminafile, ssh->is_tunnel ? "ssh_tunnel_username" : "username", remmina_protocol_widget_get_username(gp));
+ ssh->user = remmina_protocol_widget_get_username(gp);
+
+ g_free(current_pwd);
+ current_pwd = remmina_protocol_widget_get_password(gp);
+ save_password = remmina_protocol_widget_get_savepassword(gp);
+ if (save_password) {
+ remmina_file_set_string(remminafile, pwdfkey, current_pwd);
+ }
+ else {
+ remmina_file_set_string(remminafile, pwdfkey, NULL);
+ }
+
+ ssh->passphrase = remmina_protocol_widget_get_password(gp);
+ ssh->error = NULL;
+ return REMMINA_SSH_AUTH_RECONNECT;
+ }
+ else {
+ return REMMINA_SSH_AUTH_USERCANCEL;
+ }
+ }
+
ret = remmina_protocol_widget_panel_auth(gp,
(disablepasswordstoring ? 0 :
REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD),
diff --git a/src/remmina_ssh.h b/src/remmina_ssh.h
index e7ab78754..baad19206 100644
--- a/src/remmina_ssh.h
+++ b/src/remmina_ssh.h
@@ -112,7 +112,8 @@ enum remmina_ssh_auth_result {
REMMINA_SSH_AUTH_AUTHFAILED_RETRY_AFTER_PROMPT,
REMMINA_SSH_AUTH_USERCANCEL,
REMMINA_SSH_AUTH_FATAL_ERROR,
- REMMINA_SSH_AUTH_RECONNECT
+ REMMINA_SSH_AUTH_RECONNECT,
+ REMMINA_SSH_AUTH_AUTHFAILED_EMPTY_USERNAME
};
enum remmina_ssh_auth_result remmina_ssh_auth(RemminaSSH *ssh, const gchar *password, RemminaProtocolWidget *gp, RemminaFile *remminafile);