version 1.382, 2023/10/11 22:42:26 |
version 1.383, 2023/10/12 02:18:18 |
|
|
|
|
char * |
char * |
ssh_connection_hash(const char *thishost, const char *host, const char *portstr, |
ssh_connection_hash(const char *thishost, const char *host, const char *portstr, |
const char *user) |
const char *user, const char *jumphost) |
{ |
{ |
struct ssh_digest_ctx *md; |
struct ssh_digest_ctx *md; |
u_char conn_hash[SSH_DIGEST_MAX_LENGTH]; |
u_char conn_hash[SSH_DIGEST_MAX_LENGTH]; |
|
|
ssh_digest_update(md, host, strlen(host)) < 0 || |
ssh_digest_update(md, host, strlen(host)) < 0 || |
ssh_digest_update(md, portstr, strlen(portstr)) < 0 || |
ssh_digest_update(md, portstr, strlen(portstr)) < 0 || |
ssh_digest_update(md, user, strlen(user)) < 0 || |
ssh_digest_update(md, user, strlen(user)) < 0 || |
|
ssh_digest_update(md, jumphost, strlen(jumphost)) < 0 || |
ssh_digest_final(md, conn_hash, sizeof(conn_hash)) < 0) |
ssh_digest_final(md, conn_hash, sizeof(conn_hash)) < 0) |
fatal_f("mux digest failed"); |
fatal_f("mux digest failed"); |
ssh_digest_free(md); |
ssh_digest_free(md); |
|
|
if (r == (negate ? 1 : 0)) |
if (r == (negate ? 1 : 0)) |
this_result = result = 0; |
this_result = result = 0; |
} else if (strcasecmp(attrib, "exec") == 0) { |
} else if (strcasecmp(attrib, "exec") == 0) { |
char *conn_hash_hex, *keyalias; |
char *conn_hash_hex, *keyalias, *jmphost; |
|
|
if (gethostname(thishost, sizeof(thishost)) == -1) |
if (gethostname(thishost, sizeof(thishost)) == -1) |
fatal("gethostname: %s", strerror(errno)); |
fatal("gethostname: %s", strerror(errno)); |
|
jmphost = option_clear_or_none(options->jump_host) ? |
|
"" : options->jump_host; |
strlcpy(shorthost, thishost, sizeof(shorthost)); |
strlcpy(shorthost, thishost, sizeof(shorthost)); |
shorthost[strcspn(thishost, ".")] = '\0'; |
shorthost[strcspn(thishost, ".")] = '\0'; |
snprintf(portstr, sizeof(portstr), "%d", port); |
snprintf(portstr, sizeof(portstr), "%d", port); |
snprintf(uidstr, sizeof(uidstr), "%llu", |
snprintf(uidstr, sizeof(uidstr), "%llu", |
(unsigned long long)pw->pw_uid); |
(unsigned long long)pw->pw_uid); |
conn_hash_hex = ssh_connection_hash(thishost, host, |
conn_hash_hex = ssh_connection_hash(thishost, host, |
portstr, ruser); |
portstr, ruser, jmphost); |
keyalias = options->host_key_alias ? |
keyalias = options->host_key_alias ? |
options->host_key_alias : host; |
options->host_key_alias : host; |
|
|
|
|
"r", ruser, |
"r", ruser, |
"u", pw->pw_name, |
"u", pw->pw_name, |
"i", uidstr, |
"i", uidstr, |
|
"j", jmphost, |
(char *)NULL); |
(char *)NULL); |
free(conn_hash_hex); |
free(conn_hash_hex); |
if (result != 1) { |
if (result != 1) { |