#include #include #include #include #include #include #include #include int test_chmod () { const char *filename = "test_chmod"; struct stat st; int fd; int rc = 0; unlink (filename); fd = open (filename, O_CREAT | O_EXCL, 0600); if (fd < 0) error (1, errno, "open"); chmod (filename, 0667); if (stat (filename, &st)) error (1, errno, "stat"); if ((st.st_mode & (~S_IFMT)) == 0667) { puts ("chmod: mode changed"); } else { puts ("chmod: mode NOT changed"); rc = 1; } fchmod (fd, 0665); if (stat (filename, &st)) error (1, errno, "stat"); if ((st.st_mode & (~S_IFMT)) == 0665) { puts ("fchmod: mode changed"); } else { puts ("fchmod: mode NOT changed"); rc = 1; } close (fd); return rc; } void test_chown () { const char *filename = "test_chown"; int fd; int rc = 0; unlink (filename); fd = open (filename, O_CREAT | O_EXCL, 0600); if (fd < 0) error (1, errno, "open"); /* test for segfaults only */ rc = chown (filename, -1, -1); if (rc) error (1, errno, "chown"); rc = lchown (filename, -1, -1); if (rc) error (1, errno, "lchown"); rc = fchown (fd, -1, -1); if (rc) error (1, errno, "fchown"); } int main () { int rc = 0; rc = test_chmod (); test_chown (); return rc; }