void test_ncache_both_gid(void **state) { errno_t ret; struct ncache_test_ctx *test_ctx; test_ctx = talloc_get_type_abort(*state, struct ncache_test_ctx); assert_non_null(test_ctx); ret = sss_ncache_init(test_ctx, TIMEOUT, TIMEOUT, &test_ctx->ncache); assert_int_equal(ret, EOK); set_gids(test_ctx); check_gids(test_ctx, EEXIST, ENOENT, EEXIST, ENOENT); talloc_zfree(test_ctx->ncache); }
int main(int argc, char *argv[]) { struct syscall_desc *scall; unsigned int n; char *gids, *endp; int uid, umsk, ch; uid = -1; gids = NULL; umsk = 0; while ((ch = getopt(argc, argv, "g:u:U:")) != -1) { switch(ch) { case 'g': gids = optarg; break; case 'u': uid = (int)strtol(optarg, &endp, 0); if (*endp != '\0' && !isspace((unsigned char)*endp)) { fprintf(stderr, "invalid uid '%s' - number " "expected\n", optarg); exit(1); } break; case 'U': umsk = (int)strtol(optarg, &endp, 0); if (*endp != '\0' && !isspace((unsigned char)*endp)) { fprintf(stderr, "invalid umask '%s' - number " "expected\n", optarg); exit(1); } break; default: usage(); } } argc -= optind; argv += optind; if (argc < 1) { fprintf(stderr, "too few arguments\n"); usage(); } if (gids != NULL) { fprintf(stderr, "changing groups to %s\n", gids); set_gids(gids); } if (uid != -1) { fprintf(stderr, "changing uid to %d\n", uid); if (setuid(uid) < 0) { fprintf(stderr, "cannot change uid: %s\n", strerror(errno)); exit(1); } } /* Change umask to requested value or to 0, if not requested. */ umask(umsk); for (;;) { scall = find_syscall(argv[0]); if (scall == NULL) { fprintf(stderr, "syscall '%s' not supported\n", argv[0]); exit(1); } argc--; argv++; n = call_syscall(scall, argv); argc -= n; argv += n; if (argv[0] == NULL) break; argc--; argv++; } /* Close the descriptors left open */ while (ndescriptors > 0) { close(descriptor_get(ndescriptors - 1)); ndescriptors--; } exit(0); }