From 407eca9a7167145158272e3d41316b6079b4eb74 Mon Sep 17 00:00:00 2001 From: Thomas Equeter Date: Fri, 26 Aug 2016 10:35:30 +0200 Subject: [PATCH 76/79] IFP: expose user and group unique IDs through DBus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a uniqueID property on User and Group InfoPipe objects. It has a useful value on AD- and IPA-backed domains. For Active Directory, this is the GUID. Reviewed-by: Pavel Březina (cherry picked from commit e9a2e7afbd09c23dd8748246e09831ed7b17d7c5) --- src/db/sysdb.h | 2 ++ src/responder/ifp/ifp_groups.c | 19 +++++++++++++++++++ src/responder/ifp/ifp_groups.h | 4 ++++ src/responder/ifp/ifp_iface.c | 2 ++ src/responder/ifp/ifp_iface.xml | 2 ++ src/responder/ifp/ifp_iface_generated.c | 18 ++++++++++++++++++ src/responder/ifp/ifp_iface_generated.h | 4 ++++ src/responder/ifp/ifp_users.c | 7 +++++++ src/responder/ifp/ifp_users.h | 4 ++++ 9 files changed, 62 insertions(+) diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 8713efa6e8fcc6fb620340fe152989a5dae58434..7de3acdf343e0c013ab39a249268c93cbb2d0dbc 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -224,6 +224,7 @@ SYSDB_OVERRIDE_DN, \ SYSDB_OVERRIDE_OBJECT_DN, \ SYSDB_DEFAULT_OVERRIDE_NAME, \ + SYSDB_UUID, \ NULL} #define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \ @@ -235,6 +236,7 @@ SYSDB_OVERRIDE_DN, \ SYSDB_OVERRIDE_OBJECT_DN, \ SYSDB_DEFAULT_OVERRIDE_NAME, \ + SYSDB_UUID, \ NULL} #define SYSDB_NETGR_ATTRS {SYSDB_NAME, SYSDB_NETGROUP_TRIPLE, \ diff --git a/src/responder/ifp/ifp_groups.c b/src/responder/ifp/ifp_groups.c index babd8ec3f57b0469c8ca35f9f2464a0a32076967..29aebe45e710e53538c317a688077689ece4c979 100644 --- a/src/responder/ifp/ifp_groups.c +++ b/src/responder/ifp/ifp_groups.c @@ -751,6 +751,25 @@ void ifp_groups_group_get_gid_number(struct sbus_request *sbus_req, return; } +void ifp_groups_group_get_unique_id(struct sbus_request *sbus_req, + void *data, + const char **_out) +{ + struct ldb_message *msg; + struct sss_domain_info *domain; + errno_t ret; + + ret = ifp_groups_group_get(sbus_req, data, NULL, &domain, &msg); + if (ret != EOK) { + *_out = 0; + return; + } + + *_out = sss_view_ldb_msg_find_attr_as_string(domain, msg, SYSDB_UUID, 0); + + return; +} + static errno_t ifp_groups_group_get_members(TALLOC_CTX *mem_ctx, struct sbus_request *sbus_req, diff --git a/src/responder/ifp/ifp_groups.h b/src/responder/ifp/ifp_groups.h index 4cfabb9d70df92cda02de02cd1dcf7cc5b071ba8..1e0377fae6101473f5fcc6f9f69f12c3adf33f79 100644 --- a/src/responder/ifp/ifp_groups.h +++ b/src/responder/ifp/ifp_groups.h @@ -64,6 +64,10 @@ void ifp_groups_group_get_gid_number(struct sbus_request *sbus_req, void *data, uint32_t *_out); +void ifp_groups_group_get_unique_id(struct sbus_request *sbus_req, + void *data, + const char **_out); + void ifp_groups_group_get_users(struct sbus_request *sbus_req, void *data, const char ***_out, diff --git a/src/responder/ifp/ifp_iface.c b/src/responder/ifp/ifp_iface.c index e6ddc687ba9db878ee39fee5868d1f924d58482d..ff306adf3243994ee7f71850226dc1c5e0831f16 100644 --- a/src/responder/ifp/ifp_iface.c +++ b/src/responder/ifp/ifp_iface.c @@ -104,6 +104,7 @@ struct iface_ifp_users_user iface_ifp_users_user = { .get_gecos = ifp_users_user_get_gecos, .get_homeDirectory = ifp_users_user_get_home_directory, .get_loginShell = ifp_users_user_get_login_shell, + .get_uniqueID = ifp_users_user_get_unique_id, .get_groups = ifp_users_user_get_groups, .get_extraAttributes = ifp_users_user_get_extra_attributes }; @@ -121,6 +122,7 @@ struct iface_ifp_groups_group iface_ifp_groups_group = { .UpdateMemberList = ifp_groups_group_update_member_list, .get_name = ifp_groups_group_get_name, .get_gidNumber = ifp_groups_group_get_gid_number, + .get_uniqueID = ifp_groups_group_get_unique_id, .get_users = ifp_groups_group_get_users, .get_groups = ifp_groups_group_get_groups }; diff --git a/src/responder/ifp/ifp_iface.xml b/src/responder/ifp/ifp_iface.xml index 25b104ad70c0fd84b6c0fe9dbb0dc6e6439c1376..41e9f1d026fa434705ea50999ab3d9ad116f7f29 100644 --- a/src/responder/ifp/ifp_iface.xml +++ b/src/responder/ifp/ifp_iface.xml @@ -186,6 +186,7 @@ + @@ -221,6 +222,7 @@ + diff --git a/src/responder/ifp/ifp_iface_generated.c b/src/responder/ifp/ifp_iface_generated.c index 6156ca2947434f301d206232f83cfc0647007707..ed018a044bd01c69554116946450aca7aacd5fd8 100644 --- a/src/responder/ifp/ifp_iface_generated.c +++ b/src/responder/ifp/ifp_iface_generated.c @@ -976,6 +976,15 @@ const struct sbus_property_meta iface_ifp_users_user__properties[] = { NULL, /* no invoker */ }, { + "uniqueID", /* name */ + "s", /* type */ + SBUS_PROPERTY_READABLE, + offsetof(struct iface_ifp_users_user, get_uniqueID), + sbus_invoke_get_s, + 0, /* not writable */ + NULL, /* no invoker */ + }, + { "groups", /* name */ "ao", /* type */ SBUS_PROPERTY_READABLE, @@ -1165,6 +1174,15 @@ const struct sbus_property_meta iface_ifp_groups_group__properties[] = { NULL, /* no invoker */ }, { + "uniqueID", /* name */ + "s", /* type */ + SBUS_PROPERTY_READABLE, + offsetof(struct iface_ifp_groups_group, get_uniqueID), + sbus_invoke_get_s, + 0, /* not writable */ + NULL, /* no invoker */ + }, + { "users", /* name */ "ao", /* type */ SBUS_PROPERTY_READABLE, diff --git a/src/responder/ifp/ifp_iface_generated.h b/src/responder/ifp/ifp_iface_generated.h index 141348249d2da5447fa04495564a8c6a55d67a1b..0c6fd151cd674cdbd4582cb95ef43c9fcc133d6f 100644 --- a/src/responder/ifp/ifp_iface_generated.h +++ b/src/responder/ifp/ifp_iface_generated.h @@ -88,6 +88,7 @@ #define IFACE_IFP_USERS_USER_GECOS "gecos" #define IFACE_IFP_USERS_USER_HOMEDIRECTORY "homeDirectory" #define IFACE_IFP_USERS_USER_LOGINSHELL "loginShell" +#define IFACE_IFP_USERS_USER_UNIQUEID "uniqueID" #define IFACE_IFP_USERS_USER_GROUPS "groups" #define IFACE_IFP_USERS_USER_EXTRAATTRIBUTES "extraAttributes" @@ -103,6 +104,7 @@ #define IFACE_IFP_GROUPS_GROUP_UPDATEMEMBERLIST "UpdateMemberList" #define IFACE_IFP_GROUPS_GROUP_NAME "name" #define IFACE_IFP_GROUPS_GROUP_GIDNUMBER "gidNumber" +#define IFACE_IFP_GROUPS_GROUP_UNIQUEID "uniqueID" #define IFACE_IFP_GROUPS_GROUP_USERS "users" #define IFACE_IFP_GROUPS_GROUP_GROUPS "groups" @@ -294,6 +296,7 @@ struct iface_ifp_users_user { void (*get_gecos)(struct sbus_request *, void *data, const char **); void (*get_homeDirectory)(struct sbus_request *, void *data, const char **); void (*get_loginShell)(struct sbus_request *, void *data, const char **); + void (*get_uniqueID)(struct sbus_request *, void *data, const char **); void (*get_groups)(struct sbus_request *, void *data, const char ***, int *); void (*get_extraAttributes)(struct sbus_request *, void *data, hash_table_t **); }; @@ -328,6 +331,7 @@ struct iface_ifp_groups_group { int (*UpdateMemberList)(struct sbus_request *req, void *data); void (*get_name)(struct sbus_request *, void *data, const char **); void (*get_gidNumber)(struct sbus_request *, void *data, uint32_t*); + void (*get_uniqueID)(struct sbus_request *, void *data, const char **); void (*get_users)(struct sbus_request *, void *data, const char ***, int *); void (*get_groups)(struct sbus_request *, void *data, const char ***, int *); }; diff --git a/src/responder/ifp/ifp_users.c b/src/responder/ifp/ifp_users.c index 5481413ef908785ecf276aad7154e4a7b511fd45..a2bafff5853683443f25f857124214a048132c4a 100644 --- a/src/responder/ifp/ifp_users.c +++ b/src/responder/ifp/ifp_users.c @@ -774,6 +774,13 @@ void ifp_users_user_get_login_shell(struct sbus_request *sbus_req, ifp_users_get_as_string(sbus_req, data, SYSDB_SHELL, _out); } +void ifp_users_user_get_unique_id(struct sbus_request *sbus_req, + void *data, + const char **_out) +{ + ifp_users_get_as_string(sbus_req, data, SYSDB_UUID, _out); +} + void ifp_users_user_get_groups(struct sbus_request *sbus_req, void *data, const char ***_out, diff --git a/src/responder/ifp/ifp_users.h b/src/responder/ifp/ifp_users.h index 99114fe9562f237204b3121ae3fe1f29dbc256a8..6a3a66951ff2c68cdc220364d28651d53b9d6a68 100644 --- a/src/responder/ifp/ifp_users.h +++ b/src/responder/ifp/ifp_users.h @@ -84,6 +84,10 @@ void ifp_users_user_get_login_shell(struct sbus_request *sbus_req, void *data, const char **_out); +void ifp_users_user_get_unique_id(struct sbus_request *sbus_req, + void *data, + const char **_out); + void ifp_users_user_get_groups(struct sbus_request *sbus_req, void *data, const char ***_out, -- 2.9.3