version 1.25, 2011/04/17 22:42:41 |
version 1.26, 2011/05/05 05:12:08 |
|
|
strlen(options.control_path) + 1; |
strlen(options.control_path) + 1; |
|
|
if (strlcpy(addr.sun_path, options.control_path, |
if (strlcpy(addr.sun_path, options.control_path, |
sizeof(addr.sun_path)) >= sizeof(addr.sun_path)) |
sizeof(addr.sun_path)) >= sizeof(addr.sun_path)) { |
fatal("ControlPath too long"); |
error("ControlPath \"%s\" too long for Unix domain socket", |
|
options.control_path); |
|
goto disable_mux_master; |
|
} |
|
|
if ((muxserver_sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) |
if ((muxserver_sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) |
fatal("%s socket(): %s", __func__, strerror(errno)); |
fatal("%s socket(): %s", __func__, strerror(errno)); |
|
|
old_umask = umask(0177); |
old_umask = umask(0177); |
if (bind(muxserver_sock, (struct sockaddr *)&addr, addr.sun_len) == -1) { |
if (bind(muxserver_sock, (struct sockaddr *)&addr, addr.sun_len) == -1) { |
muxserver_sock = -1; |
|
if (errno == EINVAL || errno == EADDRINUSE) { |
if (errno == EINVAL || errno == EADDRINUSE) { |
error("ControlSocket %s already exists, " |
error("ControlSocket %s already exists, " |
"disabling multiplexing", options.control_path); |
"disabling multiplexing", options.control_path); |
disable_mux_master: |
disable_mux_master: |
close(muxserver_sock); |
if (muxserver_sock != -1) { |
muxserver_sock = -1; |
close(muxserver_sock); |
|
muxserver_sock = -1; |
|
} |
xfree(options.control_path); |
xfree(options.control_path); |
options.control_path = NULL; |
options.control_path = NULL; |
options.control_master = SSHCTL_MASTER_NO; |
options.control_master = SSHCTL_MASTER_NO; |