+ case 's':
+ if (isdigit((unsigned char )optarg[0])) {
+ char *q;
+ drop = strtol(optarg, &q, 0);
+ if (*q)
+ die(1, "bad uid `%s'", optarg);
+ } else {
+ struct passwd *pw = getpwnam(optarg);
+ if (!pw)
+ die(1, "unknown user `%s'", optarg);
+ drop = pw->pw_uid;
+ }
+ break;
+ case 'g':
+ if (isdigit((unsigned char )optarg[0])) {
+ char *q;
+ dropg = strtol(optarg, &q, 0);
+ if (*q)
+ die(1, "bad gid `%s'", optarg);
+ } else {
+ struct group *gr = getgrnam(optarg);
+ if (!gr)
+ die(1, "unknown group `%s'", optarg);
+ dropg = gr->gr_gid;
+ }
+ break;