From 449925a68090c785f7399b269f0f846e98f32961 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 30 Oct 2001 21:45:27 +0000 Subject: [PATCH] The other utilities should do the same processing of the hostname (parsing `user@' prefixes etc) that PuTTY proper does. git-svn-id: svn://svn.tartarus.org/sgt/putty@1346 cda61777-01e9-0310-a592-d414129be87e --- plink.c | 26 ++++++++++++++++++++++++++ psftp.c | 26 ++++++++++++++++++++++++++ scp.c | 26 ++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/plink.c b/plink.c index 80c5b6ae..1b742cec 100644 --- a/plink.c +++ b/plink.c @@ -591,6 +591,32 @@ int main(int argc, char **argv) usage(); } + /* + * Trim leading whitespace off the hostname if it's there. + */ + { + int space = strspn(cfg.host, " \t"); + memmove(cfg.host, cfg.host+space, 1+strlen(cfg.host)-space); + } + + /* See if host is of the form user@host */ + if (cfg.host[0] != '\0') { + char *atsign = strchr(cfg.host, '@'); + /* Make sure we're not overflowing the user field */ + if (atsign) { + if (atsign - cfg.host < sizeof cfg.username) { + strncpy(cfg.username, cfg.host, atsign - cfg.host); + cfg.username[atsign - cfg.host] = '\0'; + } + memmove(cfg.host, atsign + 1, 1 + strlen(atsign + 1)); + } + } + + /* + * Trim a colon suffix off the hostname if it's there. + */ + cfg.host[strcspn(cfg.host, ":")] = '\0'; + if (!*cfg.remote_cmd_ptr) flags |= FLAG_INTERACTIVE; diff --git a/psftp.c b/psftp.c index aa3c08e1..6439de3f 100644 --- a/psftp.c +++ b/psftp.c @@ -1710,6 +1710,32 @@ int main(int argc, char *argv[]) cfg.port = 22; } + /* + * Trim leading whitespace off the hostname if it's there. + */ + { + int space = strspn(cfg.host, " \t"); + memmove(cfg.host, cfg.host+space, 1+strlen(cfg.host)-space); + } + + /* See if host is of the form user@host */ + if (cfg.host[0] != '\0') { + char *atsign = strchr(cfg.host, '@'); + /* Make sure we're not overflowing the user field */ + if (atsign) { + if (atsign - cfg.host < sizeof cfg.username) { + strncpy(cfg.username, cfg.host, atsign - cfg.host); + cfg.username[atsign - cfg.host] = '\0'; + } + memmove(cfg.host, atsign + 1, 1 + strlen(atsign + 1)); + } + } + + /* + * Trim a colon suffix off the hostname if it's there. + */ + cfg.host[strcspn(cfg.host, ":")] = '\0'; + /* Set username */ if (user != NULL && user[0] != '\0') { strncpy(cfg.username, user, sizeof(cfg.username) - 1); diff --git a/scp.c b/scp.c index 8237f902..b09653f0 100644 --- a/scp.c +++ b/scp.c @@ -578,6 +578,32 @@ static void do_cmd(char *host, char *user, char *cmd) cfg.port = 22; } + /* + * Trim leading whitespace off the hostname if it's there. + */ + { + int space = strspn(cfg.host, " \t"); + memmove(cfg.host, cfg.host+space, 1+strlen(cfg.host)-space); + } + + /* See if host is of the form user@host */ + if (cfg.host[0] != '\0') { + char *atsign = strchr(cfg.host, '@'); + /* Make sure we're not overflowing the user field */ + if (atsign) { + if (atsign - cfg.host < sizeof cfg.username) { + strncpy(cfg.username, cfg.host, atsign - cfg.host); + cfg.username[atsign - cfg.host] = '\0'; + } + memmove(cfg.host, atsign + 1, 1 + strlen(atsign + 1)); + } + } + + /* + * Trim a colon suffix off the hostname if it's there. + */ + cfg.host[strcspn(cfg.host, ":")] = '\0'; + /* Set username */ if (user != NULL && user[0] != '\0') { strncpy(cfg.username, user, sizeof(cfg.username) - 1); -- 2.11.0