- strncpy(ptr+1, fwd, sizeof(cfg.portfwd) - i);
- /*
- * We expect _at least_ two colons in this string. The
- * possible formats are `sourceport:desthost:destport', or
- * `sourceip:sourceport:desthost:destport' if you're
- * specifying a particular loopback address. We need to
- * replace the one between source and dest with a \t; this
- * means we must find the second-to-last colon in the
- * string.
- */
- q = qq = strchr(ptr, ':');
- while (qq) {
- char *qqq = strchr(qq+1, ':');
- if (qqq)
- q = qq;
- qq = qqq;
+ strncpy(ptr, fwd, sizeof(cfg->portfwd) - i - 2);
+ if (!dynamic) {
+ /*
+ * We expect _at least_ two colons in this string. The
+ * possible formats are `sourceport:desthost:destport',
+ * or `sourceip:sourceport:desthost:destport' if you're
+ * specifying a particular loopback address. We need to
+ * replace the one between source and dest with a \t;
+ * this means we must find the second-to-last colon in
+ * the string.
+ */
+ q = qq = strchr(ptr, ':');
+ while (qq) {
+ char *qqq = strchr(qq+1, ':');
+ if (qqq)
+ q = qq;
+ qq = qqq;
+ }
+ if (q) *q = '\t'; /* replace second-last colon with \t */
+ }
+ cfg->portfwd[sizeof(cfg->portfwd) - 1] = '\0';
+ cfg->portfwd[sizeof(cfg->portfwd) - 2] = '\0';
+ ptr[strlen(ptr)+1] = '\000'; /* append 2nd '\000' */
+ }
+ if ((!strcmp(p, "-nc"))) {
+ char *host, *portp;
+
+ RETURN(2);
+ UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK);
+ SAVEABLE(0);
+
+ host = portp = value;
+ while (*portp && *portp != ':')
+ portp++;
+ if (*portp) {
+ unsigned len = portp - host;
+ if (len >= sizeof(cfg->ssh_nc_host))
+ len = sizeof(cfg->ssh_nc_host) - 1;
+ strncpy(cfg->ssh_nc_host, value, len);
+ cfg->ssh_nc_host[sizeof(cfg->ssh_nc_host) - 1] = '\0';
+ cfg->ssh_nc_port = atoi(portp+1);
+ } else {
+ cmdline_error("-nc expects argument of form 'host:port'");
+ return ret;