[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#569018: openssh-client: recreate mux control socket



Package: openssh-client
Version: 1:5.3p1-1

Hello.

This patch enables re-creation of the control socket for multiplexing. Without 
it, if ssh dies, it leaves socket in place, and newly started ssh cannot bind 
to it.

-- 
WBR, Andrew
--- openssh-5.3p1.orig/mux.c	2010-02-09 14:35:32.000000000 +0200
+++ openssh-5.3p1/mux.c	2010-02-09 11:03:25.000000000 +0200
@@ -143,16 +143,23 @@
 
 	old_umask = umask(0177);
 	if (bind(muxserver_sock, (struct sockaddr *)&addr, addr_len) == -1) {
-		muxserver_sock = -1;
 		if (errno == EINVAL || errno == EADDRINUSE) {
 			error("ControlSocket %s already exists, "
-			    "disabling multiplexing", options.control_path);
-			close(muxserver_sock);
-			muxserver_sock = -1;
-			xfree(options.control_path);
-			options.control_path = NULL;
-			options.control_master = SSHCTL_MASTER_NO;
-			return;
+			    "recreating socket", options.control_path);
+			unlink(options.control_path);
+			if (bind(muxserver_sock, (struct sockaddr *)&addr, addr_len) == -1) {
+				if (errno == EINVAL || errno == EADDRINUSE) {
+					error("ControlSocket %s already exists, "
+							"disabling multiplexing", options.control_path);
+					close(muxserver_sock);
+					muxserver_sock = -1;
+					xfree(options.control_path);
+					options.control_path = NULL;
+					options.control_master = SSHCTL_MASTER_NO;
+					return;
+				} else
+					fatal("%s bind(): %s", __func__, strerror(errno));
+			}
 		} else
 			fatal("%s bind(): %s", __func__, strerror(errno));
 	}

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: