From: Lennart Poettering Date: Fri, 10 Jul 2026 04:31:30 +0000 (+0200) Subject: core: tag dynamic user userdb provider with dynamic uid/gid ranges X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=845786f60b1cc045e2f56ddc2710ad152f1f3828;p=thirdparty%2Fsystemd.git core: tag dynamic user userdb provider with dynamic uid/gid ranges Let's optimize lookups to PID 1's dynamic UID/GID range feature. --- diff --git a/src/core/varlink.c b/src/core/varlink.c index fa6a5e15656..79a198f14d7 100644 --- a/src/core/varlink.c +++ b/src/core/varlink.c @@ -4,12 +4,14 @@ #include "constants.h" #include "errno-util.h" +#include "format-util.h" #include "job.h" #include "json-util.h" #include "manager.h" #include "metrics.h" #include "path-util.h" #include "pidref.h" +#include "stdio-util.h" #include "string-util.h" #include "strv.h" #include "unit.h" @@ -27,6 +29,7 @@ #include "varlink-serialize.h" #include "varlink-unit.h" #include "varlink-util.h" +#include "xattr-util.h" static const char* const managed_oom_mode_properties[] = { "ManagedOOMSwap", @@ -481,10 +484,14 @@ int manager_setup_varlink_metrics_server(Manager *m) { if (MANAGER_IS_SYSTEM(m)) flags |= SD_VARLINK_SERVER_ACCOUNT_UID; - return metrics_setup_varlink_server(&m->metrics_varlink_server, flags, - m->event, EVENT_PRIORITY_IPC, - vl_method_list_metrics, vl_method_describe_metrics, - m); + return metrics_setup_varlink_server( + &m->metrics_varlink_server, + flags, + m->event, + EVENT_PRIORITY_IPC, + vl_method_list_metrics, + vl_method_describe_metrics, + m); } static int varlink_server_listen_many_idempotent_sentinel( @@ -549,6 +556,12 @@ static int manager_varlink_init_system_api(Manager *m) { VARLINK_PATH_MANAGED_OOM_SYSTEM); if (r < 0) return r; + + /* Reduce the noise routed to us: advertise that only look-ups for the dynamic UID range should go to us */ + char text[DECIMAL_STR_MAX(uid_t) + 1 + DECIMAL_STR_MAX(gid_t) + 1]; + xsprintf(text, UID_FMT "-" UID_FMT, (uid_t) DYNAMIC_UID_MIN, (uid_t) DYNAMIC_UID_MAX); + FOREACH_STRING(xattr, "user.userdb.uid", "user.userdb.gid") + (void) xsetxattr(AT_FDCWD, "/run/systemd/userdb/io.systemd.DynamicUser", /* at_flags= */ 0, xattr, text); } return 0;