[LTP] [PATCH 2/2] Use SAFE_RUNCMD()

Li Wang liwang@redhat.com
Mon Mar 23 14:42:47 CET 2020


Hi Petr, Xu,

On Mon, Mar 23, 2020 at 7:37 PM Petr Vorel <pvorel@suse.cz> wrote:

> Hi Li, Xu,
>
> > >       testcases/kernel/syscalls/add_key/add_key05.c   | 15
> ++-------------
> > >       testcases/kernel/syscalls/quotactl/quotactl01.c | 14
> ++------------
> > >       testcases/kernel/syscalls/quotactl/quotactl06.c | 12 +-----------
>
> > > Apart from the three, do you consider converting to SAFE_RUNCMD for the
> > > rest testcases?
> > > (it seems not too much work remaining since only a few test case uses
> > > tst_run_cmd)
> > At the beginning, I have the same idea. But after seeing code, I think we
> > should not because these cases have many sub tests(only few test deponds
> on
> > the result of the cmd execution.
>
> > > kernel/syscalls/setpriority/setpriority01.c
> > One year ago has a commit db82b596(setpriority01: Skip only PRIO_USER
> when
> > unable to add test user). It only affects PRIO_USER sub test.
> + 1. I didn't want to break the case when useradd is not available
> (android or
> some custom embedded linux) or there is no password file (root mounted as
> ro -
> custom embedded linux).
>

That's right. Thanks for the clarification.

>
> BTW I also avoid handling adding user as I want to implement better
> handling
> user and group in LTP (adding a flag), see:
> https://github.com/linux-test-project/ltp/issues/468


Good plan.


>
>
> Feel free to commend this plan.
> This patchset is kind of preparation for it.
>
> > > kernel/syscalls/copy_file_range/copy_file_range02.c
> > only affect test6 and test7
> >  6) Try to copy contents to a file chattred with +i
> >  *    flag -> EPERM
> >  * 7) Try to copy contents to a swapfile ->ETXTBSY
> Yes, it'd be bad to break all tests due it.
>
> Here is also problem with swapoff (or maybe chattr, mkswap, swapon; I don't
> remember), which returns exit code 255 on error, so it's not possible to
> distinguish this from the case whether command is not available (any idea,
> how
> to fix it?).
>

Maybe we could achieve a tst_cmd_available(char *cmd) in the C version?
which uses popen() to open a process like: "whereis/which command" and do
string parse in the result to see the path(/usr/bin/cmd, /usr/sbin/cmd) of
the bin if it has been found.

A draft version to show the idea:

int tst_cmd_available(char *cmd)
{
    int ret = 0;
    char path[PATH_MAX];
    char result[PATH_MAX];
    char command[PATH_MAX];

    snprintf(path, PATH_MAX, "/usr/bin/%s", cmd);
    snprintf(command, PATH_MAX, "whereis %s", cmd);
    FILE *fp = popen(command, "r");
    fgets(result, sizeof(result), fp);

    if (strstr(result, path) != NULL)
        ret = 1;
    pclose(fp);

    return ret;
}
-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20200323/984d7b66/attachment.htm>


More information about the ltp mailing list