int main() { char buf[1021]; // read process uid readline(buf); uid_t puid; sscanf(buf, "%d", &puid); // read process gids gid_t thith[32]; size_t size = 0; readline(buf); read_gids(buf, thith, &size); // read operation readline(buf); unsigned operation; sscanf(buf, "%u", &operation); struct file_descr curfile; while (!readline(buf)) { parse_fdescr(buf, &curfile); if (!check_permission(&curfile, puid, thith, size, operation)) printf("%s\n", curfile.name_); } return 0; }
static int set_faked_resgid(gid_t rgid, gid_t egid, gid_t sgid) { read_gids(); if (rgid != (gid_t)-1) faked_real_gid = rgid; if (egid != (gid_t)-1) faked_effective_gid = egid; if (sgid != (gid_t)-1) faked_saved_gid = sgid; faked_fs_gid = faked_effective_gid; return write_gids(); }
static int set_faked_gid(gid_t gid) { read_gids(); if (faked_effective_gid == 0) { faked_real_gid = gid; faked_effective_gid = gid; faked_saved_gid = gid; } else { faked_effective_gid = gid; } faked_fs_gid = gid; return write_gids(); }