Disambiguate socket API pathes on Windows with user name

Addresses #3411
This commit is contained in:
Daniel Molkentin 2016-04-20 16:51:17 +02:00
parent 09eea7f5f2
commit ce6a365328
3 changed files with 17 additions and 4 deletions

2
binary

@ -1 +1 @@
Subproject commit ac422574995d2339d98fff552f11450b18d7bcff
Subproject commit a56480559ddda3af36b63bb42cfc6cfe05ebc6db

View file

@ -31,12 +31,24 @@
using namespace std;
#define BUFSIZE 512
std::wstring getUserName() {
DWORD len = BUFSIZE;
TCHAR buf[BUFSIZE];
if (GetUserName(buf, &len)) {
return std::wstring(&buf[0], len);
} else {
return std::wstring();
}
}
// This code is run in a thread
void RemotePathChecker::workerThreadLoop()
{
auto pipename = std::wstring(L"\\\\.\\pipe\\");
pipename += L"ownCloud";
pipename += L"ownCloud\\";
pipename += getUserName();
bool connected = false;
CommunicationSocket socket;
@ -241,4 +253,4 @@ RemotePathChecker::FileState RemotePathChecker::_StrToFileState(const std::wstri
}
return StateNone;
}
}

View file

@ -67,7 +67,8 @@ SocketApi::SocketApi(QObject* parent)
if (Utility::isWindows()) {
socketPath = QLatin1String("\\\\.\\pipe\\")
+ QLatin1String("ownCloud");
+ QLatin1String("ownCloud") + '\\'
+ QString::fromLocal8Bit(qgetenv("USERNAME"));
// TODO: once the windows extension supports multiple
// client connections, switch back to the theme name
// See issue #2388