X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=service%2Finstance.c;h=33678851e6321160c2a24609ee8a86dac599035d;hb=a6afa72f192f6efe8374d0f0c77fb2a545225a92;hp=1fb65fa04d9343b2606cd0dd5975d490b72c8c58;hpb=312d0fc22d32171b5b2f6cf5272b11784888dfbe;p=project%2Fprocd.git diff --git a/service/instance.c b/service/instance.c index 1fb65fa..3367885 100644 --- a/service/instance.c +++ b/service/instance.c @@ -282,12 +282,15 @@ instance_run(struct service_instance *in, int _stdout, int _stderr) closefd(_stderr); } - if (in->uid || in->gid) { - if (setuid(in->uid) || setgid(in->gid)) { - ERROR("failed to set uid:%d, gid:%d\n", in->uid, in->gid); - exit(127); - } + if (in->gid && setgid(in->gid)) { + ERROR("failed to set group id %d: %d (%s)\n", in->gid, errno, strerror(errno)); + exit(127); + } + if (in->uid && setuid(in->uid)) { + ERROR("failed to set user id %d: %d (%s)\n", in->uid, errno, strerror(errno)); + exit(127); } + execvp(argv[0], argv); exit(127); }