diff options
Diffstat (limited to 'singleapplication.cpp')
-rw-r--r-- | singleapplication.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/singleapplication.cpp b/singleapplication.cpp index 8fd8e7e..58eee7c 100644 --- a/singleapplication.cpp +++ b/singleapplication.cpp @@ -59,11 +59,21 @@ void SingleApplicationPrivate::genBlockServerName( int timeout ) QCryptographicHash appData( QCryptographicHash::Sha256 ); appData.addData( "SingleApplication", 17 ); appData.addData( SingleApplication::app_t::applicationName().toUtf8() ); - appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() ); - appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() ); appData.addData( SingleApplication::app_t::organizationName().toUtf8() ); appData.addData( SingleApplication::app_t::organizationDomain().toUtf8() ); + if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ) { + appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() ); + } + + if( ! (options & SingleApplication::Mode::ExcludeAppPath) ) { +#ifdef Q_OS_WIN + appData.addData( SingleApplication::app_t::applicationFilePath().toLower().toUtf8() ); +#else + appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() ); +#endif + } + // User level block requires a user specific data in the hash if( options & SingleApplication::Mode::User ) { #ifdef Q_OS_WIN @@ -108,6 +118,15 @@ void SingleApplicationPrivate::startPrimary( bool resetMemory ) // So we start a QLocalServer to listen for connections QLocalServer::removeServer( blockServerName ); server = new QLocalServer(); + + // Restrict access to the socket according to the + // SingleApplication::Mode::User flag on User level or no restrictions + if( options & SingleApplication::Mode::User ) { + server->setSocketOptions( QLocalServer::UserAccessOption ); + } else { + server->setSocketOptions( QLocalServer::WorldAccessOption ); + } + server->listen( blockServerName ); QObject::connect( server, |