X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/fa17a66e26aa47ff467d0af711621a70b1268f88..22dcdc3b1a1c7c820fabe3ebaae8be6b09b4408e:/plink.c diff --git a/plink.c b/plink.c index 121c65f9..ebe5bcc9 100644 --- a/plink.c +++ b/plink.c @@ -238,6 +238,7 @@ static void usage(void) printf(" -ssh force use of ssh protocol\n"); printf(" -P port connect to specified port\n"); printf(" -pw passw login with specified password\n"); + printf(" -m file read remote command(s) from file\n"); exit(1); } @@ -319,6 +320,35 @@ int main(int argc, char **argv) { --argc, username = *++argv; strncpy(cfg.username, username, sizeof(cfg.username)); cfg.username[sizeof(cfg.username)-1] = '\0'; + } else if (!strcmp(p, "-m") && argc > 1) { + char *filename, *command; + int cmdlen, cmdsize; + FILE *fp; + int c, d; + + --argc, filename = *++argv; + + cmdlen = cmdsize = 0; + command = NULL; + fp = fopen(filename, "r"); + if (!fp) { + fprintf(stderr, "plink: unable to open command " + "file \"%s\"\n", filename); + return 1; + } + do { + c = fgetc(fp); + d = c; + if (c == EOF) + d = 0; + if (cmdlen >= cmdsize) { + cmdsize = cmdlen + 512; + command = srealloc(command, cmdsize); + } + command[cmdlen++] = d; + } while (c != EOF); + cfg.remote_cmd_ptr = command; + cfg.nopty = TRUE; /* command => no terminal */ } else if (!strcmp(p, "-P") && argc > 1) { --argc, portnumber = atoi(*++argv); } @@ -393,8 +423,10 @@ int main(int argc, char **argv) { strncpy(cfg.host, p, sizeof(cfg.host)-1); cfg.host[sizeof(cfg.host)-1] = '\0'; cfg.port = default_port; - } else + } else { cfg = cfg2; + cfg.remote_cmd_ptr = cfg.remote_cmd; + } } else { *r++ = '\0'; strncpy(cfg.username, p, sizeof(cfg.username)-1); @@ -427,7 +459,7 @@ int main(int argc, char **argv) { usage(); } - if (!*cfg.remote_cmd) + if (!*cfg.remote_cmd_ptr) flags |= FLAG_INTERACTIVE; /*