X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Ftest-uid.c;h=6a1f9cc14024ec7e51ebb316fad9eb582794afd2;hb=c141c2b05e374757b6499d12bb8a6d4d943b1529;hp=0a75fcf43f91bf6899c0422d8cd29f8c5037a1c2;hpb=df7adbee81405e2849728a24b498ad2117784b1f;p=xscreensaver diff --git a/driver/test-uid.c b/driver/test-uid.c index 0a75fcf4..6a1f9cc1 100644 --- a/driver/test-uid.c +++ b/driver/test-uid.c @@ -1,5 +1,5 @@ /* test-uid.c --- playing with setuid. - * xscreensaver, Copyright (c) 1998 Jamie Zawinski + * xscreensaver, Copyright (c) 1998, 2005 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -36,6 +36,8 @@ print(void) int egid = getegid(); struct passwd *p = 0; struct group *g = 0; + gid_t groups[1024]; + int n, size; p = getpwuid (uid); g = getgrgid (gid); @@ -48,6 +50,24 @@ print(void) fprintf(stderr, "eff. user/group: %ld/%ld (%s/%s)\n", (long)euid, (long)egid, (p && p->pw_name ? p->pw_name : "???"), (g && g->gr_name ? g->gr_name : "???")); + + size = sizeof(groups) / sizeof(gid_t); + n = getgroups(size - 1, groups); + if (n < 0) + perror("getgroups failed"); + else + { + int i; + fprintf (stderr, "eff. group list: ["); + for (i = 0; i < n; i++) + { + g = getgrgid (groups[i]); + fprintf(stderr, "%s%s=%ld", (i == 0 ? "" : ", "), + (g->gr_name ? g->gr_name : "???"), + (long) groups[i]); + } + fprintf (stderr, "]\n"); + } } int @@ -114,6 +134,15 @@ main (int argc, char **argv) } } + fprintf(stderr, "setgroups(1, [%ld]) \"%s\"", gid, group); + { + gid_t g2 = gid; + if (setgroups(1, &g2) == 0) + fprintf(stderr, " succeeded.\n"); + else + perror(" failed"); + } + fprintf(stderr, "setgid(%ld) \"%s\"", gid, group); if (setgid(gid) == 0) fprintf(stderr, " succeeded.\n");