Hi!
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <unistd.h>
> +#include <error.h>
> +#include <stdlib.h>
> +#include <errno.h>
> +#include <string.h>
> +#include <signal.h>
> +#include "test.h"
> +#include "usctest.h"
> +#include "safe_macros.h"
> +#include "fchownat.h"

I've added AT_SYMLINK_NOFOLLOW to lapi/fcntl.h, please include it here.

> +#define TESTFILE     "testfile"
> +#define TESTFILE_LINK        "testfile_link"
> +
> +char *TCID = "fchownat02";
> +int TST_TOTAL = 1;
> +
> +static int dirfd;
> +static uid_t set_uid = 1000;
> +static gid_t set_gid = 1000;
> +static void setup(void);
> +static void cleanup(void);
> +static void test_verify(void);
> +static void fchownat_verify(void);
> +
> +int main(int ac, char **av)
> +{
> +     int lc;
> +     char *msg;
> +     int i;
> +
> +     msg = parse_opts(ac, av, NULL, NULL);
> +     if (msg != NULL)
> +             tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg);
> +
> +     setup();
> +
> +     for (lc = 0; TEST_LOOPING(lc); lc++) {
> +             tst_count = 0;
> +             for (i = 0; i < TST_TOTAL; i++)
> +                     fchownat_verify();
> +     }
> +
> +     cleanup();
> +     tst_exit();
> +}
> +
> +static void setup(void)
> +{
> +     struct stat c_buf, l_buf;
> +
> +     if ((tst_kvercmp(2, 6, 16)) < 0)
> +             tst_brkm(TCONF, NULL, "This test needs kernel 2.6.16 or newer");
> +
> +     tst_require_root(NULL);
> +
> +     tst_sig(NOFORK, DEF_HANDLER, cleanup);
> +
> +     TEST_PAUSE;
> +
> +     tst_tmpdir();
> +
> +     dirfd = SAFE_OPEN(cleanup, "./", O_DIRECTORY);
> +
> +     SAFE_TOUCH(cleanup, TESTFILE, 0600, NULL);
> +
> +     SAFE_SYMLINK(cleanup, TESTFILE, TESTFILE_LINK);
> +
> +     if (stat(TESTFILE_LINK, &c_buf) < 0)
> +             tst_brkm(TBROK | TERRNO, cleanup, "stat() failed unexpected");
> +     if (lstat(TESTFILE_LINK, &l_buf) < 0)
> +             tst_brkm(TBROK | TERRNO, cleanup, "lstat() failed unexpected");

I've added SAFE_STAT() and SAFE_LSTAT() to safe_macros.h please use them
here.

> +     if (l_buf.st_uid == set_uid || l_buf.st_gid == set_gid) {
> +             tst_brkm(TBROK | TERRNO, cleanup,
> +                      "link_uid(%d) == set_uid(%d) or link_gid(%d) == "
> +                      "set_gid(%d)", l_buf.st_uid, set_uid, l_buf.st_gid,
> +                      set_gid);
> +     }
> +}
> +
> +static void fchownat_verify(void)
> +{
> +     TEST(fchownat(dirfd, TESTFILE_LINK, set_uid, set_gid,
> +                   AT_SYMLINK_NOFOLLOW));
> +
> +     if (TEST_ERRNO != 0) {
> +             tst_resm(TFAIL | TTERRNO, "fchownat() Failed, errno=%d : %s",
> +                      TEST_ERRNO, strerror(TEST_ERRNO));
> +     } else {
> +             test_verify();
> +     }
> +}
> +
> +static void test_verify(void)
> +{
> +     struct stat c_buf, l_buf;
> +
> +     stat(TESTFILE_LINK, &c_buf);
> +     lstat(TESTFILE_LINK, &l_buf);

Safe macros here as well.

> +     if (c_buf.st_uid != set_uid && l_buf.st_uid == set_uid &&
> +         c_buf.st_gid != set_gid && l_buf.st_gid == set_gid) {
> +             tst_resm(TPASS, "fchownat() test AT_SYMLINK_NOFOLLOW success");
> +     } else {
> +             tst_resm(TFAIL,
> +                      "fchownat() fail with uid: %d link_uid: %d set_uid: "
> +                      "%d | gid: %d link_gid: %d set_gid: %d", c_buf.st_uid,
> +                      l_buf.st_uid, set_uid, c_buf.st_gid, l_buf.st_gid,
> +                      set_gid);
> +     }
> +}
> +
> +static void cleanup(void)
> +{
> +     tst_rmdir();
> +
> +     TEST_CLEANUP;
> +}

Otherwise it's fine, but needs to be applied over the first patch.
(If that wasn't the case I would have fixed the minor issues and pushed
 it allready)

-- 
Cyril Hrubis
[email protected]

------------------------------------------------------------------------------
Flow-based real-time traffic analytics software. Cisco certified tool.
Monitor traffic, SLAs, QoS, Medianet, WAAS etc. with NetFlow Analyzer
Customize your own dashboards, set traffic alerts and generate reports.
Network behavioral analysis & security monitoring. All-in-one tool.
http://pubads.g.doubleclick.net/gampad/clk?id=126839071&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to