if (progname == NULL)
progname = argv0;
-
+
fprintf (help ? stdout : stderr,
"Usage: %s [flags] file[s]\n",
progname);
-
+
if (!help)
{
fprintf (stderr, " or try '-h' for help\n");
exit (1);
}
-
+
printf ("Check given files have...\n");
printf (" -p permission file must have required permissions\n");
printf (" -t dir|file|link file must be of the specified type\n");
long long size = -1;
int follow = 0;
char *term;
-
+
while ((c = getopt (argc, argv, "p:t:l:s:u:g:avfh")) != -1)
switch (c)
{
}
} else {
struct passwd *pw = getpwnam (optarg);
-
+
if (pw == NULL)
{
fprintf (stderr, "Can't find user %s\n", optarg);
}
} else {
struct group *gr = getgrnam (optarg);
-
+
if (gr == NULL)
{
fprintf (stderr, "Can't find group %s\n", optarg);
uid = gr->gr_gid;
}
break;
-
+
case 't':
type = optarg;
break;
case 'v':
verbose++;
break;
-
+
case 'f':
follow++;
break;
-
+
case 'h':
usage (argv[0], 1);
return (0);
-
+
default:
usage (argv[0], 0);
}
if (optind == argc)
usage (argv[0], 0);
-
+
do
{
char *fname = argv[optind];
int rc = follow ? stat64 (fname, &buf) : lstat64 (fname, &buf);
-
+
if (rc != 0)
{
if (!(absent && errno == ENOENT))
{
if (verbose)
- printf ("Can't %sstat %s: %s\n",
+ printf ("Can't %sstat %s: %s\n",
follow ? "" : "l",
fname, strerror (errno));
return (1);
printf ("%s exists\n", fname);
return (1);
}
-
+
if (type != NULL)
{
- if (!strcmp (type, "d") ||
+ if (!strcmp (type, "d") ||
!strcmp (type, "dir"))
{
if (!S_ISDIR (buf.st_mode))
{
if (verbose)
- printf ("%s is not a directory\n",
+ printf ("%s is not a directory\n",
fname);
return (1);
}
}
- else if (!strcmp (type, "f") ||
+ else if (!strcmp (type, "f") ||
!strcmp (type, "file"))
{
if (!S_ISREG (buf.st_mode))
{
if (verbose)
- printf ("%s is not a regular file\n",
+ printf ("%s is not a regular file\n",
fname);
return (1);
}
}
- else if (!strcmp (type, "l") ||
+ else if (!strcmp (type, "l") ||
!strcmp (type, "link"))
{
if (!S_ISLNK (buf.st_mode))
{
if (verbose)
- printf ("%s is not a link\n",
+ printf ("%s is not a link\n",
fname);
return (1);
}
fprintf (stderr, "Can't parse file type %s\n", type);
return (1);
}
-
+
if (verbose)
printf ("%s has type %s OK\n", fname, type);
}
fname, (long long)buf.st_size, size);
return (1);
}
-
+
if (verbose)
printf ("%s has size %Ld OK\n", fname, size);
}
-
+
if (checklink != NULL)
{
static char lname[4<<10];
fname, strerror (errno));
return (1);
}
-
+
lname[rc] = 0;
if (strcmp (checklink, lname))
{
fname, lname, checklink);
return (1);
}
-
+
if (verbose)
printf ("%s links to %s OK\n", fname, checklink);
}
fname, (long)buf.st_uid, (long)uid);
return (1);
}
-
+
if (verbose)
printf ("%s is owned by user #%ld OK\n",
fname, (long)uid);
}
-
+
if (gid != (gid_t)-1)
{
if (buf.st_gid != gid)
fname, (long)buf.st_gid, (long)gid);
return (1);
}
-
+
if (verbose)
printf ("%s is owned by group #%ld OK\n",
fname, (long)gid);
}
-
} while (++optind < argc);
-
+
return (0);
}
int main(int argc, char **argv)
{
- int fd1, fd2;
+ int fd1, fd2;
struct stat st1, st2;
-
- if (argc != 3) {
+
+ if (argc != 3) {
printf("Usage %s file1 file2\n", argv[0]);
return 1;
}
fd1 = open(argv[1], O_CREAT| O_RDWR, 0666);
- if (fd1 == -1) {
+ if (fd1 == -1) {
printf("Error opening %s: %s\n", argv[1], strerror(errno));
- return errno;
+ return errno;
}
fd2 = open(argv[2], O_RDONLY);
- if (fd2 == -1) {
+ if (fd2 == -1) {
printf("Error opening %s: %s\n", argv[2], strerror(errno));
- return errno;
+ return errno;
}
sleep(1);
- if ( write(fd1, "hello", strlen("hello")) != strlen("hello")) {
+ if ( write(fd1, "hello", strlen("hello")) != strlen("hello")) {
printf("Error writing: %s\n", strerror(errno));
return errno;
}
- if ( fstat(fd1, &st1) ) {
+ if ( fstat(fd1, &st1) ) {
printf("Error statting %s: %s\n", argv[1], strerror(errno));
return errno;
}
- if ( fstat(fd2, &st2) ) {
+ if ( fstat(fd2, &st2) ) {
printf("Error statting %s: %s\n", argv[2], strerror(errno));
return errno;
}
- if ( st1.st_size != st2.st_size ) {
- printf("Sizes don't match %ld, %ld\n",
+ if ( st1.st_size != st2.st_size ) {
+ printf("Sizes don't match %ld, %ld\n",
st1.st_size, st2.st_size);
return 1;
}
- if ( st1.st_mtime != st2.st_mtime ) {
- printf("Mtimes don't match %ld, %ld\n",
+ if ( st1.st_mtime != st2.st_mtime ) {
+ printf("Mtimes don't match %ld, %ld\n",
st1.st_mtime, st2.st_mtime);
return 1;
}
-
+
return 0;
}