From: Arne Schwabe Date: Wed, 19 Oct 2022 13:36:27 +0000 (+0200) Subject: Fix regression of ignoring --user X-Git-Tag: v2.6_beta1~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66f6a3b7991d5316116ce7cb91dfa4d71d4df42f;p=thirdparty%2Fopenvpn.git Fix regression of ignoring --user Commit facb6fffb changed a call in the style of if(a() | b()) to if(a() || b()). While this looks identical, it is not. The first statement always executes b() while the second only executes b() if a() returns false. This lead to to the platform_state_user never to set as side effect and thus --user being ignored. Rewrite the code to make this more explicit. Signed-off-by: Arne Schwabe Acked-by: Gert Doering Message-Id: <20221019133627.2918110-1-arne@rfc2549.org> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25430.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/init.c b/src/openvpn/init.c index ed2ccb815..c48048a1b 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -3551,10 +3551,14 @@ do_init_first_time(struct context *c) ALLOC_OBJ_CLEAR_GC(c->c0, struct context_0, &c->gc); c0 = c->c0; - /* get user and/or group that we want to setuid/setgid to */ - c0->uid_gid_specified = - platform_group_get(c->options.groupname, &c0->platform_state_group) - || platform_user_get(c->options.username, &c0->platform_state_user); + /* get user and/or group that we want to setuid/setgid to, + * sets also platform_x_state */ + bool group_defined = platform_group_get(c->options.groupname, + &c0->platform_state_group); + bool user_defined = platform_user_get(c->options.username, + &c0->platform_state_user); + + c0->uid_gid_specified = user_defined || group_defined; /* perform postponed chdir if --daemon */ if (c->did_we_daemonize && c->options.cd_dir == NULL)