diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2001-05-08 20:27:25 +0000 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2001-05-08 20:27:25 +0000 |
commit | 387c472660ef173c2e469e70eb1a25d47f6e8887 (patch) | |
tree | 4686516a373bbb5ca9594c4cb285aedc6a72aa8d /scp.c | |
parent | 69128668938c82e8d428e77726ef00b2b6f799b9 (diff) |
- mouring@cvs.openbsd.org 2001/05/08 19:45:25
[misc.c misc.h scp.c sftp.c]
Use addargs() in sftp plus some clean up of addargs(). OK Markus
Diffstat (limited to 'scp.c')
-rw-r--r-- | scp.c | 55 |
1 files changed, 13 insertions, 42 deletions
@@ -75,7 +75,7 @@ | |||
75 | */ | 75 | */ |
76 | 76 | ||
77 | #include "includes.h" | 77 | #include "includes.h" |
78 | RCSID("$OpenBSD: scp.c,v 1.69 2001/05/03 23:09:53 mouring Exp $"); | 78 | RCSID("$OpenBSD: scp.c,v 1.70 2001/05/08 19:45:24 mouring Exp $"); |
79 | 79 | ||
80 | #include "xmalloc.h" | 80 | #include "xmalloc.h" |
81 | #include "atomicio.h" | 81 | #include "atomicio.h" |
@@ -107,8 +107,8 @@ void progressmeter(int); | |||
107 | int getttywidth(void); | 107 | int getttywidth(void); |
108 | int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc); | 108 | int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc); |
109 | 109 | ||
110 | /* setup arguments for the call to ssh */ | 110 | /* Struct for addargs */ |
111 | void addargs(char *fmt, ...) __attribute__((format(printf, 1, 2))); | 111 | arglist args; |
112 | 112 | ||
113 | /* Time a transfer started. */ | 113 | /* Time a transfer started. */ |
114 | static struct timeval start; | 114 | static struct timeval start; |
@@ -131,13 +131,6 @@ int showprogress = 1; | |||
131 | /* This is the program to execute for the secured connection. ("ssh" or -S) */ | 131 | /* This is the program to execute for the secured connection. ("ssh" or -S) */ |
132 | char *ssh_program = _PATH_SSH_PROGRAM; | 132 | char *ssh_program = _PATH_SSH_PROGRAM; |
133 | 133 | ||
134 | /* This is the list of arguments that scp passes to ssh */ | ||
135 | struct { | ||
136 | char **list; | ||
137 | int num; | ||
138 | int nalloc; | ||
139 | } args; | ||
140 | |||
141 | /* | 134 | /* |
142 | * This function executes the given command as the specified user on the | 135 | * This function executes the given command as the specified user on the |
143 | * given host. This returns < 0 if execution fails, and >= 0 otherwise. This | 136 | * given host. This returns < 0 if execution fails, and >= 0 otherwise. This |
@@ -181,9 +174,9 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc) | |||
181 | 174 | ||
182 | args.list[0] = ssh_program; | 175 | args.list[0] = ssh_program; |
183 | if (remuser != NULL) | 176 | if (remuser != NULL) |
184 | addargs("-l%s", remuser); | 177 | addargs(&args, "-l%s", remuser); |
185 | addargs("%s", host); | 178 | addargs(&args, "%s", host); |
186 | addargs("%s", cmd); | 179 | addargs(&args, "%s", cmd); |
187 | 180 | ||
188 | execvp(ssh_program, args.list); | 181 | execvp(ssh_program, args.list); |
189 | perror(ssh_program); | 182 | perror(ssh_program); |
@@ -238,9 +231,9 @@ main(argc, argv) | |||
238 | __progname = get_progname(argv[0]); | 231 | __progname = get_progname(argv[0]); |
239 | 232 | ||
240 | args.list = NULL; | 233 | args.list = NULL; |
241 | addargs("ssh"); /* overwritten with ssh_program */ | 234 | addargs(&args, "ssh"); /* overwritten with ssh_program */ |
242 | addargs("-x"); | 235 | addargs(&args, "-x"); |
243 | addargs("-oFallBackToRsh no"); | 236 | addargs(&args, "-oFallBackToRsh no"); |
244 | 237 | ||
245 | fflag = tflag = 0; | 238 | fflag = tflag = 0; |
246 | while ((ch = getopt(argc, argv, "dfprtvBCc:i:P:q46S:o:")) != -1) | 239 | while ((ch = getopt(argc, argv, "dfprtvBCc:i:P:q46S:o:")) != -1) |
@@ -249,18 +242,18 @@ main(argc, argv) | |||
249 | case '4': | 242 | case '4': |
250 | case '6': | 243 | case '6': |
251 | case 'C': | 244 | case 'C': |
252 | addargs("-%c", ch); | 245 | addargs(&args, "-%c", ch); |
253 | break; | 246 | break; |
254 | case 'o': | 247 | case 'o': |
255 | case 'c': | 248 | case 'c': |
256 | case 'i': | 249 | case 'i': |
257 | addargs("-%c%s", ch, optarg); | 250 | addargs(&args, "-%c%s", ch, optarg); |
258 | break; | 251 | break; |
259 | case 'P': | 252 | case 'P': |
260 | addargs("-p%s", optarg); | 253 | addargs(&args, "-p%s", optarg); |
261 | break; | 254 | break; |
262 | case 'B': | 255 | case 'B': |
263 | addargs("-oBatchmode yes"); | 256 | addargs(&args, "-oBatchmode yes"); |
264 | break; | 257 | break; |
265 | case 'p': | 258 | case 'p': |
266 | pflag = 1; | 259 | pflag = 1; |
@@ -1212,25 +1205,3 @@ getttywidth(void) | |||
1212 | else | 1205 | else |
1213 | return (80); | 1206 | return (80); |
1214 | } | 1207 | } |
1215 | |||
1216 | void | ||
1217 | addargs(char *fmt, ...) | ||
1218 | { | ||
1219 | va_list ap; | ||
1220 | char buf[1024]; | ||
1221 | |||
1222 | va_start(ap, fmt); | ||
1223 | vsnprintf(buf, sizeof(buf), fmt, ap); | ||
1224 | va_end(ap); | ||
1225 | |||
1226 | if (args.list == NULL) { | ||
1227 | args.nalloc = 32; | ||
1228 | args.num = 0; | ||
1229 | args.list = xmalloc(args.nalloc * sizeof(char *)); | ||
1230 | } else if (args.num+2 >= args.nalloc) { | ||
1231 | args.nalloc *= 2; | ||
1232 | args.list = xrealloc(args.list, args.nalloc * sizeof(char *)); | ||
1233 | } | ||
1234 | args.list[args.num++] = xstrdup(buf); | ||
1235 | args.list[args.num] = NULL; | ||
1236 | } | ||