summaryrefslogtreecommitdiffstats
path: root/src/dbus
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/qdbus_symbols_p.h3
-rw-r--r--src/dbus/qdbusconnection_p.h2
-rw-r--r--src/dbus/qdbusintegrator.cpp7
-rw-r--r--src/dbus/qdbusserver.cpp27
-rw-r--r--src/dbus/qdbusserver.h3
5 files changed, 41 insertions, 1 deletions
diff --git a/src/dbus/qdbus_symbols_p.h b/src/dbus/qdbus_symbols_p.h
index 9e81bac30e..96f28ac821 100644
--- a/src/dbus/qdbus_symbols_p.h
+++ b/src/dbus/qdbus_symbols_p.h
@@ -183,6 +183,9 @@ DEFINEFUNC(unsigned int , dbus_watch_get_flags, (DBusWatch *watch),
DEFINEFUNC(dbus_bool_t , dbus_watch_handle, (DBusWatch *watch,
unsigned int flags),
(watch, flags), return)
+DEFINEFUNC(void , dbus_connection_set_allow_anonymous, (DBusConnection *connection,
+ dbus_bool_t value),
+ (connection, value), return)
/* dbus-errors.h */
DEFINEFUNC(void , dbus_error_free, (DBusError *error),
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index 350e49a50d..f2590f9c54 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -322,6 +322,8 @@ public:
QMutex callDeliveryMutex;
QDBusCallDeliveryEvent *callDeliveryState; // protected by the callDeliveryMutex mutex
+ bool anonymousAuthenticationAllowed;
+
public:
// static methods
static int findSlot(QObject *obj, const QByteArray &normalizedName, QVector<int> &params);
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 7ec19d6fec..1fef6d4d49 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -391,6 +391,10 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v
q_dbus_connection_ref(connection);
QDBusConnectionPrivate *serverConnection = static_cast<QDBusConnectionPrivate *>(data);
+ // allow anonymous authentication
+ if (serverConnection->anonymousAuthenticationAllowed)
+ q_dbus_connection_set_allow_anonymous(connection, true);
+
QDBusConnectionPrivate *newConnection = new QDBusConnectionPrivate(serverConnection->parent());
QMutexLocker locker(&QDBusConnectionManager::instance()->mutex);
QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection)), newConnection);
@@ -1014,7 +1018,8 @@ extern bool qDBusInitThreads();
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
: QObject(p), ref(1), capabilities(0), mode(InvalidMode), connection(0), server(0), busService(0),
watchAndTimeoutLock(QMutex::Recursive),
- rootNode(QString(QLatin1Char('/')))
+ rootNode(QString(QLatin1Char('/'))),
+ anonymousAuthenticationAllowed(false)
{
static const bool threads = q_dbus_threads_init_default();
static const int debugging = qgetenv("QDBUS_DEBUG").toInt();
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp
index 170e6ff5cf..a9dd72036c 100644
--- a/src/dbus/qdbusserver.cpp
+++ b/src/dbus/qdbusserver.cpp
@@ -150,6 +150,33 @@ QString QDBusServer::address() const
}
/*!
+ \since 5.3
+
+ If \a value is set to true, an incoming connection can proceed even if the
+ connecting client is not authenticated as a user.
+
+ By default, this value is false.
+
+ \sa isAnonymousAuthenticationAllowed()
+*/
+void QDBusServer::setAnonymousAuthenticationAllowed(bool value)
+{
+ d->anonymousAuthenticationAllowed = value;
+}
+
+/*!
+ \since 5.3
+
+ Returns true if anonymous authentication is allowed.
+
+ \sa setAnonymousAuthenticationAllowed()
+*/
+bool QDBusServer::isAnonymousAuthenticationAllowed() const
+{
+ return d->anonymousAuthenticationAllowed;
+}
+
+/*!
\fn void QDBusServer::newConnection(const QDBusConnection &connection)
This signal is emitted when a new client connection \a connection is
diff --git a/src/dbus/qdbusserver.h b/src/dbus/qdbusserver.h
index d455f8e0ec..7a7f54b6c1 100644
--- a/src/dbus/qdbusserver.h
+++ b/src/dbus/qdbusserver.h
@@ -66,6 +66,9 @@ public:
QDBusError lastError() const;
QString address() const;
+ void setAnonymousAuthenticationAllowed(bool value);
+ bool isAnonymousAuthenticationAllowed() const;
+
Q_SIGNALS:
void newConnection(const QDBusConnection &connection);