]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
The other utilities should do the same processing of the hostname
authorSimon Tatham <anakin@pobox.com>
Tue, 30 Oct 2001 21:45:27 +0000 (21:45 +0000)
committerSimon Tatham <anakin@pobox.com>
Tue, 30 Oct 2001 21:45:27 +0000 (21:45 +0000)
(parsing `user@' prefixes etc) that PuTTY proper does.

[originally from svn r1346]

plink.c
psftp.c
scp.c

diff --git a/plink.c b/plink.c
index 80c5b6aed9aff754b0011a813b7033890d365ccc..1b742cecf12a7ae394d2fdf84886c674c8896b0a 100644 (file)
--- 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 aa3c08e131305a77af47658af7aebc8d2ee91d98..6439de3ff607ef2362e77b88b606ce64ca261f13 100644 (file)
--- 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 8237f9026c3392436a37866f3b1b476f832a73a1..b09653f0934a63eab028aea0363270aef6453f7f 100644 (file)
--- 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);