[systemd-devel] [PATCH] libsystemd-bus: Add checking masks creds in bus_creds_dump() function
Lennart Poettering
lennart at poettering.net
Thu Dec 12 06:42:08 PST 2013
On Wed, 11.12.13 15:23, Lukasz Skalski (l.skalski at partner.samsung.com) wrote:
> log_assert_failed_return macro generates a lot of logs when we use
> bus_message_dump() function without checking masks in creds.
Actually, the checks in the creds object where wrong, they should not
have used assert_return(). I fixed those now.
> ---
> src/libsystemd-bus/bus-dump.c | 93 +++++++++++++++++++++++++++----------------
> 1 file changed, 59 insertions(+), 34 deletions(-)
>
> diff --git a/src/libsystemd-bus/bus-dump.c b/src/libsystemd-bus/bus-dump.c
> index ddad418..85396aa 100644
> --- a/src/libsystemd-bus/bus-dump.c
> +++ b/src/libsystemd-bus/bus-dump.c
> @@ -322,9 +322,12 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f) {
> fprintf(f, " TID=%lu", (unsigned long) c->tid);
> if (c->mask & SD_BUS_CREDS_UID)
> fprintf(f, " UID=%lu", (unsigned long) c->uid);
> - r = sd_bus_creds_get_owner_uid(c, &owner);
> - if (r >= 0)
> - fprintf(f, " OwnerUID=%lu", (unsigned long) owner);
> + if (c->mask & SD_BUS_CREDS_OWNER_UID) {
> + r = sd_bus_creds_get_owner_uid(c, &owner);
> + if (r >= 0)
> + fprintf(f, " OwnerUID=%lu", (unsigned long) owner);
> + }
> +
> if (c->mask & SD_BUS_CREDS_GID)
> fprintf(f, " GID=%lu", (unsigned long) c->gid);
>
> @@ -359,29 +362,45 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f) {
>
> if (c->mask & SD_BUS_CREDS_CGROUP)
> fprintf(f, " CGroup=%s", c->cgroup);
> - sd_bus_creds_get_unit(c, &u);
> - if (u)
> - fprintf(f, " Unit=%s", u);
> - sd_bus_creds_get_user_unit(c, &uu);
> - if (uu)
> - fprintf(f, " UserUnit=%s", uu);
> - sd_bus_creds_get_slice(c, &sl);
> - if (sl)
> - fprintf(f, " Slice=%s", sl);
> - sd_bus_creds_get_session(c, &s);
> - if (s)
> - fprintf(f, " Session=%s", s);
> + if (c->mask & SD_BUS_CREDS_UNIT) {
> + sd_bus_creds_get_unit(c, &u);
> + if (u)
> + fprintf(f, " Unit=%s", u);
> + }
> +
> + if (c->mask & SD_BUS_CREDS_USER_UNIT) {
> + sd_bus_creds_get_user_unit(c, &uu);
> + if (uu)
> + fprintf(f, " UserUnit=%s", uu);
> + }
> +
> + if (c->mask & SD_BUS_CREDS_SLICE) {
> + sd_bus_creds_get_slice(c, &sl);
> + if (sl)
> + fprintf(f, " Slice=%s", sl);
> + }
> +
> + if (c->mask & SD_BUS_CREDS_SESSION) {
> + sd_bus_creds_get_session(c, &s);
> + if (s)
> + fprintf(f, " Session=%s", s);
> + }
>
> if ((c->mask & SD_BUS_CREDS_CGROUP) || u || uu || sl || s)
> fputs("\n", f);
>
> - if (sd_bus_creds_get_audit_login_uid(c, &audit_loginuid) >= 0) {
> - audit_loginuid_is_set = true;
> - fprintf(f, " AuditLoginUID=%lu", (unsigned long) audit_loginuid);
> + if (c->mask & SD_BUS_CREDS_AUDIT_LOGIN_UID) {
> + if (sd_bus_creds_get_audit_login_uid(c, &audit_loginuid) >= 0) {
> + audit_loginuid_is_set = true;
> + fprintf(f, " AuditLoginUID=%lu", (unsigned long) audit_loginuid);
> + }
> }
> - if (sd_bus_creds_get_audit_session_id(c, &audit_sessionid) >= 0) {
> - audit_sessionid_is_set = true;
> - fprintf(f, " AuditSessionID=%lu", (unsigned long) audit_sessionid);
> +
> + if (c->mask & SD_BUS_CREDS_AUDIT_SESSION_ID) {
> + if (sd_bus_creds_get_audit_session_id(c, &audit_sessionid) >= 0) {
> + audit_sessionid_is_set = true;
> + fprintf(f, " AuditSessionID=%lu", (unsigned long) audit_sessionid);
> + }
> }
>
> if (audit_loginuid_is_set || audit_sessionid_is_set)
> @@ -390,27 +409,33 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f) {
> if (c->mask & SD_BUS_CREDS_UNIQUE_NAME)
> fprintf(f, " UniqueName=%s", c->unique_name);
>
> - if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) {
> - char **i;
> + if (c->mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) {
> + if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) {
> + char **i;
>
> - fputs(" WellKnownNames={", f);
> - STRV_FOREACH(i, well_known) {
> - if (i != well_known)
> - fputc(' ', f);
> + fputs(" WellKnownNames={", f);
> + STRV_FOREACH(i, well_known) {
> + if (i != well_known)
> + fputc(' ', f);
>
> - fputs(*i, f);
> - }
> + fputs(*i, f);
> + }
>
> - fputc('}', f);
> + fputc('}', f);
> + }
> }
>
> if (c->mask & SD_BUS_CREDS_UNIQUE_NAME || well_known)
> fputc('\n', f);
>
> - dump_capabilities(c, f, "EffectiveCapabilities", sd_bus_creds_has_effective_cap);
> - dump_capabilities(c, f, "PermittedCapabilities", sd_bus_creds_has_permitted_cap);
> - dump_capabilities(c, f, "InheritableCapabilities", sd_bus_creds_has_inheritable_cap);
> - dump_capabilities(c, f, "BoundingCapabilities", sd_bus_creds_has_bounding_cap);
> + if (c->mask & SD_BUS_CREDS_EFFECTIVE_CAPS)
> + dump_capabilities(c, f, "EffectiveCapabilities", sd_bus_creds_has_effective_cap);
> + if (c->mask & SD_BUS_CREDS_PERMITTED_CAPS)
> + dump_capabilities(c, f, "PermittedCapabilities", sd_bus_creds_has_permitted_cap);
> + if (c->mask & SD_BUS_CREDS_INHERITABLE_CAPS)
> + dump_capabilities(c, f, "InheritableCapabilities", sd_bus_creds_has_inheritable_cap);
> + if (c->mask & SD_BUS_CREDS_BOUNDING_CAPS)
> + dump_capabilities(c, f, "BoundingCapabilities", sd_bus_creds_has_bounding_cap);
>
> return 0;
> }
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list