} g_conn[2];
struct udesc {
- char user[256];
dbus_uid_t uid;
- char group[256];
dbus_gid_t gid;
char label[256];
} g_udesc;
static bool dbuspolicy_init_once(void)
{
- struct passwd pwent;
- struct passwd *pwd;
- struct group grent;
- struct group *gg;
char buf[1024];
int attr_fd;
int r;
if (attr_fd < 0)
return -1;
r = read(attr_fd, buf, sizeof(buf));
-
close(attr_fd);
if (r < 0 || r >= (long int)sizeof(g_udesc.label)) /* read */
g_udesc.uid = getuid();
g_udesc.gid = getgid();
-
snprintf(g_udesc.label, r + 1 /* additional byte for \0 */, "%s", buf);
- if (getpwuid_r(g_udesc.uid, &pwent, buf, sizeof(buf), &pwd))
- return true;
-
- if (getgrgid_r(g_udesc.gid, &grent, buf, sizeof(buf), &gg))
- return true;
-
- if (!pwd || !gg)
- return false;
-
- snprintf(g_udesc.user, sizeof(g_udesc.user), "%s", pwd->pw_name);
- snprintf(g_udesc.group, sizeof(g_udesc.group), "%s", gg->gr_name);
__internal_init_once();