diff options
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbus_symbols_p.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 7 | ||||
-rw-r--r-- | src/dbus/qdbusserver.cpp | 27 | ||||
-rw-r--r-- | src/dbus/qdbusserver.h | 3 |
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> ¶ms); 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); |