|
Lines 1065-1071
client_global_request_reply_fwd(int type
Link Here
|
| 1065 |
} |
1065 |
} |
| 1066 |
} |
1066 |
} |
| 1067 |
|
1067 |
|
| 1068 |
static void |
1068 |
static int |
| 1069 |
ssh_control_listener(void) |
1069 |
ssh_control_listener(void) |
| 1070 |
{ |
1070 |
{ |
| 1071 |
struct sockaddr_un addr; |
1071 |
struct sockaddr_un addr; |
|
Lines 1073-1082
ssh_control_listener(void)
Link Here
|
| 1073 |
int addr_len; |
1073 |
int addr_len; |
| 1074 |
|
1074 |
|
| 1075 |
if (options.control_path == NULL || |
1075 |
if (options.control_path == NULL || |
| 1076 |
options.control_master == SSHCTL_MASTER_NO) |
1076 |
options.control_master == SSHCTL_MASTER_NO || |
| 1077 |
return; |
1077 |
control_fd != -1) |
|
|
1078 |
return 1; |
| 1078 |
|
1079 |
|
| 1079 |
debug("setting up multiplex master socket"); |
1080 |
debug("trying to set up multiplex master socket"); |
| 1080 |
|
1081 |
|
| 1081 |
memset(&addr, '\0', sizeof(addr)); |
1082 |
memset(&addr, '\0', sizeof(addr)); |
| 1082 |
addr.sun_family = AF_UNIX; |
1083 |
addr.sun_family = AF_UNIX; |
|
Lines 1093-1103
ssh_control_listener(void)
Link Here
|
| 1093 |
old_umask = umask(0177); |
1094 |
old_umask = umask(0177); |
| 1094 |
if (bind(control_fd, (struct sockaddr *)&addr, addr_len) == -1) { |
1095 |
if (bind(control_fd, (struct sockaddr *)&addr, addr_len) == -1) { |
| 1095 |
control_fd = -1; |
1096 |
control_fd = -1; |
| 1096 |
if (errno == EINVAL || errno == EADDRINUSE) |
1097 |
if (errno != EINVAL && errno != EADDRINUSE) |
| 1097 |
fatal("ControlSocket %s already exists", |
|
|
| 1098 |
options.control_path); |
| 1099 |
else |
| 1100 |
fatal("%s bind(): %s", __func__, strerror(errno)); |
1098 |
fatal("%s bind(): %s", __func__, strerror(errno)); |
|
|
1099 |
return 0; |
| 1101 |
} |
1100 |
} |
| 1102 |
umask(old_umask); |
1101 |
umask(old_umask); |
| 1103 |
|
1102 |
|
|
Lines 1105-1110
ssh_control_listener(void)
Link Here
|
| 1105 |
fatal("%s listen(): %s", __func__, strerror(errno)); |
1104 |
fatal("%s listen(): %s", __func__, strerror(errno)); |
| 1106 |
|
1105 |
|
| 1107 |
set_nonblock(control_fd); |
1106 |
set_nonblock(control_fd); |
|
|
1107 |
|
| 1108 |
debug("control master listening on %s", options.control_path); |
| 1109 |
return 1; |
| 1108 |
} |
1110 |
} |
| 1109 |
|
1111 |
|
| 1110 |
/* request pty/x11/agent/tcpfwd/shell for channel */ |
1112 |
/* request pty/x11/agent/tcpfwd/shell for channel */ |
|
Lines 1196-1202
ssh_session2(void)
Link Here
|
| 1196 |
ssh_init_forwarding(); |
1198 |
ssh_init_forwarding(); |
| 1197 |
|
1199 |
|
| 1198 |
/* Start listening for multiplex clients */ |
1200 |
/* Start listening for multiplex clients */ |
| 1199 |
ssh_control_listener(); |
1201 |
if (!ssh_control_listener()) |
|
|
1202 |
fatal("control master socket %s already exists", |
| 1203 |
options.control_path); |
| 1200 |
|
1204 |
|
| 1201 |
/* |
1205 |
/* |
| 1202 |
* If we are the control master, and if control_persist is set, |
1206 |
* If we are the control master, and if control_persist is set, |
|
Lines 1375-1381
control_client(const char *path)
Link Here
|
| 1375 |
switch (options.control_master) { |
1379 |
switch (options.control_master) { |
| 1376 |
case SSHCTL_MASTER_AUTO: |
1380 |
case SSHCTL_MASTER_AUTO: |
| 1377 |
case SSHCTL_MASTER_AUTO_ASK: |
1381 |
case SSHCTL_MASTER_AUTO_ASK: |
| 1378 |
debug("auto-mux: Trying existing master"); |
1382 |
/* see if we can create a control master socket |
|
|
1383 |
to avoid a race between two auto clients */ |
| 1384 |
if (mux_command == SSHMUX_COMMAND_OPEN && |
| 1385 |
ssh_control_listener()) |
| 1386 |
return; |
| 1387 |
debug("trying to connect to control master socket %s", |
| 1388 |
options.control_path); |
| 1379 |
/* FALLTHROUGH */ |
1389 |
/* FALLTHROUGH */ |
| 1380 |
case SSHCTL_MASTER_NO: |
1390 |
case SSHCTL_MASTER_NO: |
| 1381 |
break; |
1391 |
break; |
|
Lines 1522-1527
control_client(const char *path)
Link Here
|
| 1522 |
signal(SIGTERM, control_client_sighandler); |
1532 |
signal(SIGTERM, control_client_sighandler); |
| 1523 |
signal(SIGWINCH, control_client_sigrelay); |
1533 |
signal(SIGWINCH, control_client_sigrelay); |
| 1524 |
|
1534 |
|
|
|
1535 |
debug("connected to control master; waiting for exit"); |
| 1536 |
|
| 1525 |
if (tty_flag) |
1537 |
if (tty_flag) |
| 1526 |
enter_raw_mode(); |
1538 |
enter_raw_mode(); |
| 1527 |
|
1539 |
|