Message ID | 1688637954-17765-2-git-send-email-xuyang2018.jy@fujitsu.com |
---|---|
State | Accepted |
Headers | show |
Series | [v2,1/2] syscalls/geteuid01: Convert into new api | expand |
Hi Xu, > - if (pwent == NULL) > - tst_resm(TFAIL | TERRNO, "getpwuid failed"); > - > - UID16_CHECK(pwent->pw_uid, geteuid, cleanup); Don't we need to use UID16_CHECK()? In the new API version from compat_tst_16.h Kind regards, Petr > - if (pwent->pw_uid != TEST_RETURN) > - tst_resm(TFAIL, "getpwuid value, %d, " > - "does not match geteuid " > - "value, %ld", pwent->pw_uid, > - TEST_RETURN); > - else > - tst_resm(TPASS, "values from geteuid " > - "and getpwuid match"); > - } ... > + TST_EXP_EXPR(TST_RET == uid[1], > + "geteuid() ret %ld == /proc/self/status EUID: %ld", > + TST_RET, uid[1]); > } > +static struct tst_test test = { > + .test_all = verify_geteuid, > +};
Hi Petr, > Hi Xu, > >> - if (pwent == NULL) >> - tst_resm(TFAIL | TERRNO, "getpwuid failed"); >> - >> - UID16_CHECK(pwent->pw_uid, geteuid, cleanup); > Don't we need to use UID16_CHECK()? In the new API version from > compat_tst_16.h > > Previously, the EUID was obtained from the return value of getpwuid() and compared with the return value of geteuid() to check for a match. This approach seemed more like a test of getpwuid() rather than testing geteuid() itself. EUID is stored in /proc/self/status, and we can directly obtain it for comparison with the return from geteuid(). Best Regards Yang Xu > Kind regards, > Petr > >> - if (pwent->pw_uid != TEST_RETURN) >> - tst_resm(TFAIL, "getpwuid value, %d, " >> - "does not match geteuid " >> - "value, %ld", pwent->pw_uid, >> - TEST_RETURN); >> - else >> - tst_resm(TPASS, "values from geteuid " >> - "and getpwuid match"); >> - } > ... >> + TST_EXP_EXPR(TST_RET == uid[1], >> + "geteuid() ret %ld == /proc/self/status EUID: %ld", >> + TST_RET, uid[1]); >> } > >> +static struct tst_test test = { >> + .test_all = verify_geteuid, >> +};
Hi Petr, Kindly ping, This case references getuid03, the URL for providing modification suggestions is as follows: https://patchwork.ozlabs.org/project/ltp/patch/20211109085745.21531-2-tangmeng@uniontech.com/ Best Regards Yang Xu > Hi Petr, > >> Hi Xu, >> >>> - if (pwent == NULL) >>> - tst_resm(TFAIL | TERRNO, "getpwuid failed"); >>> - >>> - UID16_CHECK(pwent->pw_uid, geteuid, cleanup); >> Don't we need to use UID16_CHECK()? In the new API version from >> compat_tst_16.h >> > > > Previously, the EUID was obtained from the return value of getpwuid() > and compared with the return value of geteuid() to check for a match. > This approach seemed more like a test of getpwuid() rather than testing > geteuid() itself. > > EUID is stored in /proc/self/status, and we can directly obtain it for > comparison with the return from geteuid(). > > Best Regards > Yang Xu > >> Kind regards, >> Petr >> >>> - if (pwent->pw_uid != TEST_RETURN) >>> - tst_resm(TFAIL, "getpwuid value, %d, " >>> - "does not match geteuid " >>> - "value, %ld", pwent->pw_uid, >>> - TEST_RETURN); >>> - else >>> - tst_resm(TPASS, "values from geteuid " >>> - "and getpwuid match"); >>> - } >> ... >>> + TST_EXP_EXPR(TST_RET == uid[1], >>> + "geteuid() ret %ld == /proc/self/status EUID: %ld", >>> + TST_RET, uid[1]); >>> } >> >>> +static struct tst_test test = { >>> + .test_all = verify_geteuid, >>> +}; >
Hi Xu, > Hi Petr, > Kindly ping, I'm sorry, I thought I replied, but obviously I forget. Go ahead and merge, please. Reviewed-by: Petr Vorel <pvorel@suse.cz> > This case references getuid03, > the URL for providing modification suggestions is as follows: > https://patchwork.ozlabs.org/project/ltp/patch/20211109085745.21531-2-tangmeng@uniontech.com/ Thanks for this info. Kind regards, Petr ...
diff --git a/testcases/kernel/syscalls/geteuid/geteuid02.c b/testcases/kernel/syscalls/geteuid/geteuid02.c index e00f812..00b42c3 100644 --- a/testcases/kernel/syscalls/geteuid/geteuid02.c +++ b/testcases/kernel/syscalls/geteuid/geteuid02.c @@ -1,79 +1,36 @@ +//SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (c) International Business Machines Corp., 2001 - * Ported by Wayne Boyer - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See - * the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Copyright (c) Linux Test Project, 2003-2023 + * AUTHOR: Wayne Boyer */ -#include <pwd.h> -#include <errno.h> - -#include "test.h" -#include "compat_16.h" - -TCID_DEFINE(geteuid02); -int TST_TOTAL = 1; +/*\ + *[Description] + * + * Check that geteuid() return value matches value from /proc/self/status. + */ -static void setup(void); -static void cleanup(void); +#include "tst_test.h" +#include "compat_tst_16.h" -int main(int ac, char **av) +static void verify_geteuid(void) { - struct passwd *pwent; - int lc; - uid_t uid; - - tst_parse_opts(ac, av, NULL, NULL); - - setup(); + long uid[4]; - for (lc = 0; TEST_LOOPING(lc); lc++) { - tst_count = 0; + TST_EXP_POSITIVE(GETEUID(), "geteuid()"); - TEST(GETEUID(cleanup)); + if (!TST_PASS) + return; - if (TEST_RETURN == -1) - tst_brkm(TBROK | TTERRNO, cleanup, "geteuid* failed"); + SAFE_FILE_LINES_SCANF("/proc/self/status", "Uid: %ld %ld %ld %ld", + &uid[0], &uid[1], &uid[2], &uid[3]); - uid = geteuid(); - pwent = getpwuid(uid); - - if (pwent == NULL) - tst_resm(TFAIL | TERRNO, "getpwuid failed"); - - UID16_CHECK(pwent->pw_uid, geteuid, cleanup); - if (pwent->pw_uid != TEST_RETURN) - tst_resm(TFAIL, "getpwuid value, %d, " - "does not match geteuid " - "value, %ld", pwent->pw_uid, - TEST_RETURN); - else - tst_resm(TPASS, "values from geteuid " - "and getpwuid match"); - } - - cleanup(); - tst_exit(); -} - -static void setup(void) -{ - tst_sig(NOFORK, DEF_HANDLER, cleanup); - TEST_PAUSE; + TST_EXP_EXPR(TST_RET == uid[1], + "geteuid() ret %ld == /proc/self/status EUID: %ld", + TST_RET, uid[1]); } -static void cleanup(void) -{ -} +static struct tst_test test = { + .test_all = verify_geteuid, +};
Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> --- testcases/kernel/syscalls/geteuid/geteuid02.c | 89 +++++++-------------------- 1 file changed, 23 insertions(+), 66 deletions(-)