version 1.527, 2020/04/10 00:52:07 |
version 1.528, 2020/05/29 04:25:40 |
|
|
} |
} |
|
|
/* |
/* |
|
* Expands the set of percent_expand options used by the majority of keywords |
|
* AND perform environment variable substitution. |
|
* Caller must free returned string. |
|
*/ |
|
static char * |
|
default_client_percent_dollar_expand(const char *str, const char *homedir, |
|
const char *remhost, const char *remuser, const char *locuser) |
|
{ |
|
char *ret; |
|
|
|
ret = percent_dollar_expand(str, |
|
/* values from statics above */ |
|
DEFAULT_CLIENT_PERCENT_EXPAND_ARGS, |
|
/* values from arguments */ |
|
"d", homedir, |
|
"h", remhost, |
|
"r", remuser, |
|
"u", locuser, |
|
(char *)NULL); |
|
if (ret == NULL) |
|
fatal("invalid environment variable expansion"); |
|
return ret; |
|
} |
|
|
|
/* |
* Attempt to resolve a host name / port to a set of addresses and |
* Attempt to resolve a host name / port to a set of addresses and |
* optionally return any CNAMEs encountered along the way. |
* optionally return any CNAMEs encountered along the way. |
* Returns NULL on failure. |
* Returns NULL on failure. |
|
|
if (options.control_path != NULL) { |
if (options.control_path != NULL) { |
cp = tilde_expand_filename(options.control_path, getuid()); |
cp = tilde_expand_filename(options.control_path, getuid()); |
free(options.control_path); |
free(options.control_path); |
options.control_path = default_client_percent_expand(cp, |
options.control_path = default_client_percent_dollar_expand(cp, |
pw->pw_dir, host, options.user, pw->pw_name); |
pw->pw_dir, host, options.user, pw->pw_name); |
free(cp); |
free(cp); |
} |
} |
|
|
if (options.identity_agent != NULL) { |
if (options.identity_agent != NULL) { |
p = tilde_expand_filename(options.identity_agent, getuid()); |
p = tilde_expand_filename(options.identity_agent, getuid()); |
cp = default_client_percent_expand(p, |
cp = default_client_percent_dollar_expand(p, |
pw->pw_dir, host, options.user, pw->pw_name); |
pw->pw_dir, host, options.user, pw->pw_name); |
free(p); |
free(p); |
free(options.identity_agent); |
free(options.identity_agent); |
|
|
if (options.forward_agent_sock_path != NULL) { |
if (options.forward_agent_sock_path != NULL) { |
p = tilde_expand_filename(options.forward_agent_sock_path, |
p = tilde_expand_filename(options.forward_agent_sock_path, |
getuid()); |
getuid()); |
cp = default_client_percent_expand(p, |
cp = default_client_percent_dollar_expand(p, |
pw->pw_dir, host, options.user, pw->pw_name); |
pw->pw_dir, host, options.user, pw->pw_name); |
free(p); |
free(p); |
free(options.forward_agent_sock_path); |
free(options.forward_agent_sock_path); |
|
|
unsetenv(SSH_AUTHSOCKET_ENV_NAME); |
unsetenv(SSH_AUTHSOCKET_ENV_NAME); |
} else { |
} else { |
cp = options.identity_agent; |
cp = options.identity_agent; |
if (cp[0] == '$') { |
/* legacy (limited) format */ |
|
if (cp[0] == '$' && cp[1] != '{') { |
if (!valid_env_name(cp + 1)) { |
if (!valid_env_name(cp + 1)) { |
fatal("Invalid IdentityAgent " |
fatal("Invalid IdentityAgent " |
"environment variable name %s", cp); |
"environment variable name %s", cp); |
|
|
continue; |
continue; |
} |
} |
cp = tilde_expand_filename(options.identity_files[i], getuid()); |
cp = tilde_expand_filename(options.identity_files[i], getuid()); |
filename = default_client_percent_expand(cp, |
filename = default_client_percent_dollar_expand(cp, |
pw->pw_dir, host, options.user, pw->pw_name); |
pw->pw_dir, host, options.user, pw->pw_name); |
free(cp); |
free(cp); |
check_load(sshkey_load_public(filename, &public, NULL), |
check_load(sshkey_load_public(filename, &public, NULL), |
|
|
for (i = 0; i < options.num_certificate_files; i++) { |
for (i = 0; i < options.num_certificate_files; i++) { |
cp = tilde_expand_filename(options.certificate_files[i], |
cp = tilde_expand_filename(options.certificate_files[i], |
getuid()); |
getuid()); |
filename = default_client_percent_expand(cp, |
filename = default_client_percent_dollar_expand(cp, |
pw->pw_dir, host, options.user, pw->pw_name); |
pw->pw_dir, host, options.user, pw->pw_name); |
free(cp); |
free(cp); |
|
|