diff -u -r ../openssh-7.1p1/mux.c ./mux.c --- ../openssh-7.1p1/mux.c 2015-08-21 00:49:03.000000000 -0400 +++ ./mux.c 2015-12-17 19:20:36.368902909 -0500 @@ -1295,6 +1295,22 @@ } /* Now atomically "move" the mux socket into position */ +#ifdef __ANDROID__ + /* Android does not support hard links, so use a non-atomic + check-then-rename for now. */ + if (access(orig_control_path, F_OK) == 0) { + error("ControlSocket %s already exists, disabling multiplexing", + orig_control_path); + unlink(options.control_path); + goto disable_mux_master; + } else { + if (rename(options.control_path, orig_control_path) == -1) { + fatal("%s: link mux listener %s => %s: %s", __func__, + options.control_path, orig_control_path, + strerror(errno)); + } + } +#else if (link(options.control_path, orig_control_path) != 0) { if (errno != EEXIST) { fatal("%s: link mux listener %s => %s: %s", __func__, @@ -1307,6 +1324,7 @@ goto disable_mux_master; } unlink(options.control_path); +#endif free(options.control_path); options.control_path = orig_control_path;