Commit 5ea2d901 authored by Salvador Fandino's avatar Salvador Fandino Committed by Mike Gabriel

rewrite SetupUnixSocket to use ListenConnectionUnix

parent c5a2cf82
...@@ -3954,90 +3954,40 @@ int SetupUnixSocket() ...@@ -3954,90 +3954,40 @@ int SetupUnixSocket()
// Open UNIX domain socket for display. // Open UNIX domain socket for display.
// //
unixFD = socket(AF_UNIX, SOCK_STREAM, PF_UNSPEC); if (!control->TempPath) {
if (unixFD == -1)
{
#ifdef PANIC #ifdef PANIC
*logofs << "Loop: PANIC! Call to socket failed for UNIX domain" *logofs << "Loop: PANIC! Temporal path is null.\n" << logofs_flush;
<< ". Error is " << EGET() << " '" << ESTR() << "'.\n"
<< logofs_flush;
#endif #endif
cerr << "Error" << ": Call to socket failed for UNIX domain" cerr << "Error" << ": Temporal path is null.\n";
<< ". Error is " << EGET() << " '" << ESTR() << "'.\n";
HandleCleanup(); HandleCleanup();
} }
sockaddr_un unixAddr; unsigned int required = snprintf(unixSocketName, DEFAULT_STRING_LENGTH, "%s/.X11-unix", control->TempPath);
unixAddr.sun_family = AF_UNIX; if (required < sizeof(unixSocketName)) {
char dirName[DEFAULT_STRING_LENGTH];
snprintf(dirName, DEFAULT_STRING_LENGTH - 1, "%s/.X11-unix",
control -> TempPath);
*(dirName + DEFAULT_STRING_LENGTH - 1) = '\0'; // No need to execute the following actions conditionally
mkdir(unixSocketName, (0777 | S_ISVTX));
chmod(unixSocketName, (0777 | S_ISVTX));
struct stat dirStat; required = snprintf(unixSocketName, DEFAULT_STRING_LENGTH, "%s/.X11-unix/X%d", control->TempPath, proxyPort);
if (required < sizeof(unixSocketName)) {
if ((stat(dirName, &dirStat) == -1) && (EGET() == ENOENT)) unixFD = ListenConnectionUnix(unixSocketName, "x11");
{ if (unixFD >= 0)
mkdir(dirName, (0777 | S_ISVTX)); chmod(unixSocketName, 0777);
chmod(dirName, (0777 | S_ISVTX)); return unixFD;
} }
snprintf(unixSocketName, DEFAULT_STRING_LENGTH - 1, "%s/X%d",
dirName, proxyPort);
strncpy(unixAddr.sun_path, unixSocketName, 108);
#ifdef TEST
*logofs << "Loop: Assuming Unix socket with name '"
<< unixAddr.sun_path << "'.\n"
<< logofs_flush;
#endif
*(unixAddr.sun_path + 107) = '\0';
if (bind(unixFD, (sockaddr *) &unixAddr, sizeof(unixAddr)) == -1)
{
#ifdef PANIC
*logofs << "Loop: PANIC! Call to bind failed for UNIX domain socket "
<< unixSocketName << ". Error is " << EGET() << " '" << ESTR()
<< "'.\n" << logofs_flush;
#endif
cerr << "Error" << ": Call to bind failed for UNIX domain socket "
<< unixSocketName << ". Error is " << EGET() << " '" << ESTR()
<< "'.\n";
HandleCleanup();
} }
if (listen(unixFD, 8) == -1) unixSocketName[0] = '\0'; // Just in case!
{
#ifdef PANIC #ifdef PANIC
*logofs << "Loop: PANIC! Call to listen failed for UNIX domain socket " *logofs << "Loop: PANIC! path for unix socket is too long.\n" << logofs_flush;
<< unixSocketName << ". Error is " << EGET() << " '" << ESTR()
<< "'.\n" << logofs_flush;
#endif #endif
cerr << "Error" << ": Call to listen failed for UNIX domain socket " cerr << "Error" << ": path for Unix socket is too long.\n";
<< unixSocketName << ". Error is " << EGET() << " '" << ESTR()
<< "'.\n";
HandleCleanup(); HandleCleanup();
}
//
// Let any local user to gain access to socket.
//
chmod(unixSocketName, 0777);
return 1;
} }
// //
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment