+ if (opts.user) {
+ p = getpwnam(opts.user);
+ if (!p) {
+ ERROR("failed to get uid/gid for user %s: %d (%s)\n",
+ opts.user, errno, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (opts.group) {
+ g = getgrnam(opts.group);
+ if (!g) {
+ ERROR("failed to get gid for group %s: %m\n", opts.group);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (p && p->pw_gid && initgroups(opts.user, p->pw_gid)) {
+ ERROR("failed to initgroups() for user %s: %m\n", opts.user);
+ exit(EXIT_FAILURE);
+ }
+
+ if (g && g->gr_gid && setgid(g->gr_gid)) {
+ ERROR("failed to set group id %d: %m\n", g?g->gr_gid:p->pw_gid);
+ exit(EXIT_FAILURE);
+ }
+
+ if (p && p->pw_uid && setuid(p->pw_uid)) {
+ ERROR("failed to set user id %d: %m\n", p->pw_uid);
+ exit(EXIT_FAILURE);
+ }
+
+