59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
sfree(saves[pri].params);
}
#define SAVEABLE(pri) do { \
if (need_save) { cmdline_save_param(p, value, pri); return ret; } \
} while (0)
char *cmdline_password = NULL;
static int cmdline_get_line(const char *prompt, char *str,
int maxlen, int is_pw)
{
static int tried_once = 0;
assert(is_pw && cmdline_password);
if (tried_once) {
return 0;
} else {
strncpy(str, cmdline_password, maxlen);
str[maxlen - 1] = '\0';
tried_once = 1;
return 1;
}
}
/*
* Here we have a flags word which describes the capabilities of
* the particular tool on whose behalf we're running. We will
* refuse certain command-line options if a particular tool
* inherently can't do anything sensible. For example, the file
|
|
>
>
>
>
>
|
<
|
>
>
>
>
>
|
>
|
>
>
>
>
>
|
|
|
>
|
>
|
|
|
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
sfree(saves[pri].params);
}
#define SAVEABLE(pri) do { \
if (need_save) { cmdline_save_param(p, value, pri); return ret; } \
} while (0)
static char *cmdline_password = NULL;
/*
* Similar interface to get_userpass_input(), except that here a -1
* return means that we aren't capable of processing the prompt and
* someone else should do it.
*/
int cmdline_get_passwd_input(prompts_t *p, unsigned char *in, int inlen) {
static int tried_once = 0;
/*
* We only handle prompts which don't echo (which we assume to be
* passwords), and (currently) we only cope with a password prompt
* that comes in a prompt-set on its own.
*/
if (!cmdline_password || in || p->n_prompts != 1 || p->prompts[0]->echo) {
return -1;
}
/*
* If we've tried once, return utter failure (no more passwords left
* to try).
*/
if (tried_once)
return 0;
strncpy(p->prompts[0]->result, cmdline_password,
p->prompts[0]->result_len);
p->prompts[0]->result[p->prompts[0]->result_len-1] = '\0';
memset(cmdline_password, 0, strlen(cmdline_password));
tried_once = 1;
return 1;
}
/*
* Here we have a flags word which describes the capabilities of
* the particular tool on whose behalf we're running. We will
* refuse certain command-line options if a particular tool
* inherently can't do anything sensible. For example, the file
|
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
SAVEABLE(1); /* lower priority than -ssh,-telnet */
cfg->port = atoi(value);
}
if (!strcmp(p, "-pw")) {
RETURN(2);
UNAVAILABLE_IN(TOOLTYPE_NONNETWORK);
cmdline_password = value;
ssh_get_line = cmdline_get_line;
ssh_getline_pw_only = TRUE;
}
if (!strcmp(p, "-A")) {
RETURN(1);
UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK);
SAVEABLE(0);
cfg->agentfwd = 1;
|
<
<
|
285
286
287
288
289
290
291
292
293
294
295
296
297
298
|
SAVEABLE(1); /* lower priority than -ssh,-telnet */
cfg->port = atoi(value);
}
if (!strcmp(p, "-pw")) {
RETURN(2);
UNAVAILABLE_IN(TOOLTYPE_NONNETWORK);
cmdline_password = value;
}
if (!strcmp(p, "-A")) {
RETURN(1);
UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK);
SAVEABLE(0);
cfg->agentfwd = 1;
|