diff --git a/src/admin/admin_server_dispatch.c b/src/admin/admin_server_dispatch.c index b78ff902c0fa7f3b410f3d7e7d0dcf743a8a8db9..9f25813ae341a303b86ba1f49faabd016415a349 100644 --- a/src/admin/admin_server_dispatch.c +++ b/src/admin/admin_server_dispatch.c @@ -66,6 +66,28 @@ remoteAdmClientNew(virNetServerClientPtr client ATTRIBUTE_UNUSED, void *opaque) { struct daemonAdmClientPrivate *priv; + uid_t clientuid; + gid_t clientgid; + pid_t clientpid; + unsigned long long timestamp; + + if (virNetServerClientGetUNIXIdentity(client, + &clientuid, + &clientgid, + &clientpid, + ×tamp) < 0) + return NULL; + + VIR_DEBUG("New client pid %lld uid %lld", + (long long)clientpid, + (long long)clientuid); + + if (geteuid() != clientuid) { + virReportRestrictedError(_("Disallowing client %lld with uid %lld"), + (long long)clientpid, + (long long)clientuid); + return NULL; + } if (VIR_ALLOC(priv) < 0) return NULL;