aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--singleapplication.cpp23
-rw-r--r--singleapplication.h4
2 files changed, 24 insertions, 3 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,
diff --git a/singleapplication.h b/singleapplication.h
index 9376dfe..93447f4 100644
--- a/singleapplication.h
+++ b/singleapplication.h
@@ -59,7 +59,9 @@ public:
enum Mode {
User = 1 << 0,
System = 1 << 1,
- SecondaryNotification = 1 << 2
+ SecondaryNotification = 1 << 2,
+ ExcludeAppVersion = 1 << 3,
+ ExcludeAppPath = 1 << 4
};
Q_DECLARE_FLAGS(Options, Mode)