[LTP] [PATCH v4 2/4] syscalls: lchown01: Convert to new API
Ricardo B. Marlière
rbm@suse.com
Fri Aug 29 22:59:24 CEST 2025
On Thu Aug 28, 2025 at 8:28 AM -03, Cyril Hrubis wrote:
> Hi!
>> -struct test_case_t {
>> +static struct test_case_t {
>> char *desc;
>> uid_t user_id;
>> gid_t group_id;
>> +} test_cases[] = {
>> + { "Change Owner/Group ids", 700, 701 },
>> + { "Change Owner id only", 702, 0 },
>> + { "Change Owner/Group ids", 703, 701 },
>> + { "Change Group id only", 0, 704 },
>> + { "Change Group/Group ids", 703, 705 },
>> + { "Change none", 0, 0 },
>> };
>>
>> -static struct test_case_t test_cases[] = {
>> - {"Change Owner/Group ids", 700, 701},
>> - {"Change Owner id only", 702, -1},
>> - {"Change Owner/Group ids", 703, 701},
>> - {"Change Group id only", -1, 704},
>> - {"Change Group/Group ids", 703, 705},
>> - {"Change none", -1, -1},
>> - {NULL, 0, 0}
>> -};
>
> This actually changes what the test does. To cite manual page:
>
> "If the owner or group is specified as -1, then that ID is not changed."
>
> The -1 values there were correct, all we need to do in case we have -1
> in there is to lstat() the file before lchonw() and use that value for
> the check.
>
>
>> - cleanup();
>> - tst_exit();
>> + struct test_case_t *tc = &test_cases[i];
>> + uid_t user_id = tc->user_id;
>> + gid_t group_id = tc->group_id;
>> +
>> + tst_res(TINFO, "%s", tc->desc);
>> + SAFE_LCHOWN(SFILE, user_id, group_id);
>> + SAFE_LSTAT(SFILE, &stat_buf);
>> + TST_EXP_EQ_LI(stat_buf.st_uid, user_id);
>> + TST_EXP_EQ_LI(stat_buf.st_gid, group_id);
>
> So this would look like:
>
> uid_t usr_id = tc->user_id;
> gid_t grp_id = tc->group_id;
>
> SAFE_LSTAT(SFILE, &stat_buf);
>
> uid_t cmp_usr_id = usr_id == -1 ? stat_buf.st_uid : usr_id;
> uid_t cmp_grp_id = grp_id == -1 ? stat_buf.st_gid : grp_id;
>
> SAFE_LCHOWN(SFILE, user_id, group_id);
> SAFE_LSTAT(SFILE, &stat_buf);
> TST_EXP_EQ_LI(stat_buf.st_uid, cmp_user_id);
> TST_EXP_EQ_LI(stat_buf.st_gid, cmp_group_id);
>
> And this is exactly what the code was done before.
Thanks for the explanation!
More information about the ltp
mailing list