Initial import
[samba] / testsuite / nsswitch / initgroups.c
diff --git a/testsuite/nsswitch/initgroups.c b/testsuite/nsswitch/initgroups.c
new file mode 100644 (file)
index 0000000..b7d9c50
--- /dev/null
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <grp.h>
+#include <pwd.h>
+#include <sys/types.h>
+
+int main(int argc, char **argv)
+{
+       int result, ngroups, i;
+       gid_t *groups;
+       struct passwd *pw;
+
+       if (!(pw = getpwnam(argv[1]))) {
+               printf("FAIL: no passwd entry for %s\n", argv[1]);
+               return 1;
+       }
+
+       result = initgroups(argv[1], pw->pw_gid);
+
+       if (result == -1) {
+               printf("FAIL");
+               return 1;
+       }
+
+       ngroups = getgroups(0, NULL);
+
+       groups = (gid_t *)malloc(sizeof(gid_t) * ngroups);
+       ngroups = getgroups(ngroups, groups);
+
+       printf("%s is a member of groups:\n", argv[1]);
+
+       for (i = 0; i < ngroups; i++) {
+               struct group *grp;
+
+               grp = getgrgid(groups[i]);
+
+               printf("%d (%s)\n", groups[i], grp ? grp->gr_name : "?");
+       }
+
+       printf("PASS\n");
+       return 0;
+}