Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 827227
Collapse All | Expand All

(-)a/obt/paths.c (-14 / +21 lines)
Lines 108-132 static void find_uid_gid(uid_t *u, gid_t **g, guint *n) Link Here
108
    const gchar *name;
108
    const gchar *name;
109
    struct group *gr;
109
    struct group *gr;
110
110
111
    gid_t gmain;
112
    unsigned int maininc;
113
    int i;
114
111
    *u = getuid();
115
    *u = getuid();
112
    pw = getpwuid(*u);
116
    pw = getpwuid(*u);
113
    name = pw->pw_name;
117
    name = pw->pw_name;
114
118
115
    *g = g_new(gid_t, *n=1);
119
    gmain = getgid();
116
    (*g)[0] = getgid();
120
117
121
    *n = getgroups(0, *g);
118
    while ((gr = getgrent())) {
122
    *g = g_new(gid_t, *n);
119
        if (gr->gr_gid != (*g)[0]) { /* skip the main group */
123
    *n = getgroups(*n, *g);
120
            gchar **c;
124
121
            for (c = gr->gr_mem; *c; ++c)
125
    /* Check if the effective group ID of the calling process is already
122
                if (strcmp(*c, name) == 0) {
126
       included in the returned list. Add it otherwise. */
123
                    *g = g_renew(gid_t, *g, ++(*n)); /* save the group */
127
    maininc = 0;
124
                    (*g)[*n-1] = gr->gr_gid;
128
    for (i = 0; i < *n; i++) {
125
                    break;
129
        if ( (*g)[i] == gmain ) {
126
                }
130
            maininc = 1;
131
            break;
127
        }
132
        }
128
    }
133
    }
129
    endgrent();
134
    if (!maininc) {
135
        *g = g_renew(gid_t, *g, ++(*n));
136
        (*g)[*n-1] = gmain;
137
    }
130
138
131
    qsort(*g, *n, sizeof(gid_t), gid_cmp);
139
    qsort(*g, *n, sizeof(gid_t), gid_cmp);
132
}
140
}
133
- 

Return to bug 827227