From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26260 invoked by alias); 14 Jun 2018 08:41:38 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43008 Received: (qmail 16329 invoked by uid 1010); 14 Jun 2018 08:41:38 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.12):SA:0(-6.9/5.0):. Processed in 2.353259 secs); 14 Jun 2018 08:41:38 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS,SPF_PASS,T_DKIMWL_WL_HIGH,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180614084130euoutp021b84a94ea9ea8b875a3e6c964cf73c04~3_jHqrE1h0506205062euoutp02W DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1528965690; bh=LGG4BglQbfsfm5JX3Drx9x30smmaDIfKLJyvQFm2kA4=; h=Date:From:To:Subject:In-Reply-To:References:From; b=fMj25azDgVPoy0Wta76WLjQjGqZ3cIwvrbwLKMs0yXJuF8rxwiXcWHFDKJRBDMoP7 XCkwj1YVS/Xq80+OQBWRn5tXO4i97KiItFVkrRBNuLxxZqHY3mGWalY8JIdTyji3BY ASKfbauLjQLgbBrcjC2oy672lFmURMDpkh4H6dCk= X-AuditID: cbfec7f2-5ffe19c000011644-0e-5b222a37dc0b Date: Thu, 14 Jun 2018 09:41:23 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: [PATCH] Silence compilation warnings about setuid, setgid In-Reply-To: <25A87D83-CBB6-446E-9008-DA413639AC7D@dana.is> Organization: SCSC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsWy7djPc7rmWkrRBk37uC0ONj9kcmD0WHXw A1MAYxSXTUpqTmZZapG+XQJXxvktS9gL/gpWbPh7jK2B8SZvFyMHh4SAicSmdUAmF4eQwApG iccnDjJBOH1MEt+vtUM5vUwSt7ccY+9i5ATrOHRiBiNEYjmjRNPhbcxwVStadoFVCQmcYZS4 MQGq/QKjxJ0PB1lBFrIIqEr8eicKUsMmYCgxddNsRhBbREBLYsfJk0wgtrCAm8TmeZuZQWxO AWuJUzu+MYK08gsISVxotoU4wl7i6B6Icl4BQYmTM5+wgNjMAvIS29/OAbtHQuA7m8Tm/71s EEVlEo3n17BBNLtIfP/zkwnCFpZ4dXwL1GcyEqcn97BANLczSqyZ9JodwulhlNh09A4jRJW1 RN/ti2AXMQtoSqzfpQ8RdpT4d2gbOyRQ+SRuvBWEOIhPYtK26cwQYV6JjjYhiGo1iR1NWxkn MCrPQvLCLCQvzEKYv4CReRWjeGppcW56arFhXmq5XnFibnFpXrpecn7uJkZgIjj97/inHYxf LyUdYhTgYFTi4X3goRgtxJpYVlyZe4hRgoNZSYR38k+gEG9KYmVValF+fFFpTmrxIUZpDhYl cd44jbooIYH0xJLU7NTUgtQimCwTB6dUA6NuV9tLGUPT998DpsVGy57nCpx9oyFo2Y1svbmH A5radZ5xVa2a/3dDuKwl44nFBrpPbaJVfG/12gdOVX5R1hRjuzav4ZJfdqiQYfWPDW1xb//b N+7lzXnw4bZOP8PEmVa8/wUdvzPxZ2zhf71mTsf/FU11c2doxqcyzBJ5VGjlOitusgN3tBJL cUaioRZzUXEiAKhXm34AAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuplkeLIzCtJLcpLzFFi42I5/e/4XV1TLaVog0kfWSwONj9kcmD0WHXw A1MAY5SeTVF+aUmqQkZ+cYmtUrShhZGeoaWFnpGJpZ6hsXmslZGpkr6dTUpqTmZZapG+XYJe xvktS9gL/gpWbPh7jK2B8SZvFyMnh4SAicShEzMYuxi5OIQEljJK3L34lg0iISPx6cpHdghb WOLPtS42iKJuJombh2ezQjhnGCWefj3GAuFcYJSYfeIkcxcjBweLgKrEr3eiIN1sAoYSUzfN ZgSxRQS0JHacPMkEYgsLuElsnreZGcTmFXCWuPP6NyuIzSlgLXFqxzeok1pYJa79esYEMpNf QEjiQrMtxEX2Ekf3QMzhFRCUODnzCQuIzSygI3Fi1TFmCFteYvvbOcwTGIVnISmbhaRsFpKy BYzMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQKjYtuxn5t3MF7aGHyIUYCDUYmH1+KhYrQQ a2JZcWXuIUYJDmYlEd7JP4FCvCmJlVWpRfnxRaU5qcWHGE2BYTGRWUo0OR8YsXkl8YamhuYW lobmxubGZhZK4rznDSqjhATSE0tSs1NTC1KLYPqYODilGhgt5F4Z8yjv8Ypps75j8n+/46nM T+Z7XPmylBJiI89GlnPuNjsmsKMt2830zK8g1jsyc5UXau29dDONQ+/d3P/X/WRuL9VYfvHw RCeriK7uDZPiN7hPOv2zh//qSlXujL8Bpsc8/8sovDjwIjzHcKUnzwnxCYl6LirbUya2hljF VK8SeDpFg0uJpTgj0VCLuag4EQCN/ewRoAIAAA== Message-Id: <20180614084126eucas1p28dc51492cd295fc0c7df99529c94221a~3_jDOvnXx1349013490eucas1p2N@eucas1p2.samsung.com> X-CMS-MailID: 20180614084126eucas1p28dc51492cd295fc0c7df99529c94221a X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20180613115039epcas5p3f7e70bdce12919686a5dec9895782138 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180613115039epcas5p3f7e70bdce12919686a5dec9895782138 References: <20180613131021eucas1p263704fa9832375e6a49cf7f2077606dc~3ukj6hhqT1702017020eucas1p2W@eucas1p2.samsung.com> <20180613171924eucas1p1ffdbcc9252255b19e36788fd06a7f582~3x_Aqkahf0839108391eucas1p1U@eucas1p1.samsung.com> <25A87D83-CBB6-446E-9008-DA413639AC7D@dana.is> On Wed, 13 Jun 2018 13:41:25 -0500 dana wrote: > On 13 Jun 2018, at 12:19, Peter Stephenson > wrote: > >+ (void)setgid(getgid()); > > Casting to void doesn't actually silence this warning with (at least > some versions of) GCC/glibc. If the function has the > warn_unused_result attribute, you have to (a) disable the warning > entirely, (b) actually use the result somehow, or (c) use some hack > like this: > http://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/ignore-value.h Something like the following therefore ought to work generally. Disabling an explicit cast to void is pretty broken behaviour, so I'm gradually losing interest if for some reason this doesn't work. pws diff --git a/Src/options.c b/Src/options.c index 590652e..600b649 100644 --- a/Src/options.c +++ b/Src/options.c @@ -769,15 +769,32 @@ dosetopt(int optno, int value, int force, char *new_opts) } else if(optno == PRIVILEGED && !value) { /* unsetting PRIVILEGED causes the shell to make itself unprivileged */ #ifdef HAVE_SETUID - setuid(getuid()); - setgid(getgid()); - if (setuid(getuid())) { - zwarn("failed to change user ID: %e", errno); - return -1; - } else if (setgid(getgid())) { + int ignore_err; + errno = 0; + /* + * Set the GID first as if we set the UID to non-privileged it + * might be impossible to restore the GID. + * + * Some OSes (possibly no longer around) have been known to + * fail silently the first time, so we attempt the change twice. + * If it fails we are guaranteed to pick this up the second + * time, so ignore the first time. + * + * Some versions of gcc make it hard to ignore the results the + * first time, hence the following. (These are probably not + * systems that require the doubled calls.) + */ + ignore_err = setgid(getgid()); + (void)ignore_err; + ignore_err = setuid(getuid()); + (void)ignore_err; + if (setgid(getgid())) { zwarn("failed to change group ID: %e", errno); return -1; - } + } else if (setuid(getuid())) { + zwarn("failed to change user ID: %e", errno); + return -1; + } #else zwarn("setuid not available"); return -1;