[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