client: set ucred properties

This commit is contained in:
Wim Taymans 2017-09-04 20:19:27 +02:00
parent 3334ed73ae
commit ebea63ad0a
3 changed files with 19 additions and 6 deletions

View file

@ -1038,11 +1038,6 @@ static struct client *client_new(struct impl *impl, int fd)
if (properties == NULL) if (properties == NULL)
goto no_props; goto no_props;
if (ucredp) {
pw_properties_setf(properties, "application.process.id", "%d", ucredp->pid);
pw_properties_setf(properties, "application.process.userid", "%d", ucredp->uid);
}
client = pw_client_new(impl->core, pw_module_get_global(impl->module), client = pw_client_new(impl->core, pw_module_get_global(impl->module),
ucredp, properties, sizeof(struct client)); ucredp, properties, sizeof(struct client));
if (client == NULL) if (client == NULL)

View file

@ -230,6 +230,7 @@ static struct pw_client *client_new(struct server *s, int fd)
socklen_t len; socklen_t len;
struct ucred ucred, *ucredp; struct ucred ucred, *ucredp;
struct pw_core *core = protocol->core; struct pw_core *core = protocol->core;
struct pw_properties *props;
len = sizeof(ucred); len = sizeof(ucred);
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) < 0) { if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) < 0) {
@ -239,10 +240,14 @@ static struct pw_client *client_new(struct server *s, int fd)
ucredp = &ucred; ucredp = &ucred;
} }
props = pw_properties_new("pipewire.protocol", "protocol-native", NULL);
if (props == NULL)
goto no_props;
client = pw_client_new(protocol->core, client = pw_client_new(protocol->core,
pw_module_get_global(pd->module), pw_module_get_global(pd->module),
ucredp, ucredp,
NULL, props,
sizeof(struct client_data)); sizeof(struct client_data));
if (client == NULL) if (client == NULL)
goto no_client; goto no_client;
@ -272,6 +277,7 @@ static struct pw_client *client_new(struct server *s, int fd)
no_source: no_source:
pw_client_destroy(client); pw_client_destroy(client);
no_client: no_client:
no_props:
return NULL; return NULL;
} }

View file

@ -108,6 +108,18 @@ struct pw_client *pw_client_new(struct pw_core *core,
this->core = core; this->core = core;
if ((this->ucred_valid = (ucred != NULL))) if ((this->ucred_valid = (ucred != NULL)))
this->ucred = *ucred; this->ucred = *ucred;
if (properties == NULL)
properties = pw_properties_new(NULL, NULL);
if (properties == NULL)
return NULL;
if (ucred) {
pw_properties_setf(properties, "pipewire.ucred.pid", "%d", ucred->pid);
pw_properties_setf(properties, "pipewire.ucred.uid", "%d", ucred->uid);
pw_properties_setf(properties, "pipewire.ucred.gid", "%d", ucred->gid);
}
this->properties = properties; this->properties = properties;
if (user_data_size > 0) if (user_data_size > 0)