diff options
author | Roland Winklmeier <Roland.M.Winklmeier@gmail.com> | 2014-01-13 21:49:49 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-15 14:15:22 +0100 |
commit | 419a1f53d527583458da46d1508aab272fdf0280 (patch) | |
tree | 374c0a203d118e76a31f1bde3797c1ec01b76826 /src/dbus | |
parent | 40133df06fea67ab3983b90844cc2a8f47e6e20c (diff) |
Add method to QDBusServer to allow anonymous client connections.
This change adds a new method to QDBusServer to allow anonymous
connections. This is part of the DBus API and was not yet possible
to use with QDBusServer. It is set in the newConnection callback
when a new client tries to connect.
Anonymous connections are enabled by default in DBus but not allowed
by default.
[ChangeLog][QtDBus][QDBusServer] Added method to QDBusServer to allow
anonymous client connections, even if the connecting client is not
authenticated as a user.
Change-Id: I984c9e634101ecd2e67bb25c8d12bb1071836fd3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
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); |