X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-sameacls.c;h=3fafa3c202ddb485dea3f05331f232c70adff703;hb=68dd9ac979d5c3afd72f3d2fb0d6dcda32b3c384;hp=736be57bf02656949e7e7a738685b37bbfdf1a6a;hpb=49f595839f2f60ddcf622bc59bbd57b8cd42870e;p=gnulib.git diff --git a/tests/test-sameacls.c b/tests/test-sameacls.c index 736be57bf..3fafa3c20 100644 --- a/tests/test-sameacls.c +++ b/tests/test-sameacls.c @@ -1,5 +1,5 @@ /* Test whether two files have the same ACLs. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,26 +24,19 @@ #include #include -#if HAVE_ACL_GET_FILE || HAVE_ACL || HAVE_ACLX_GET || HAVE_STATACL +#if HAVE_ACL_GET_FILE || HAVE_FACL || HAVE_GETACL || HAVE_ACLX_GET || HAVE_STATACL || HAVE_ACLSORT # include # include #endif +#if HAVE_ACLV_H +# include +# include +#endif #include "progname.h" #include "read-file.h" #include "xalloc.h" - -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "macros.h" int main (int argc, char *argv[]) @@ -68,31 +61,31 @@ main (int argc, char *argv[]) contents1 = read_file (file1, &size1); if (contents1 == NULL) { - fprintf (stderr, "error reading file %s: errno = %d\n", file1, errno); - fflush (stderr); - abort (); + fprintf (stderr, "error reading file %s: errno = %d\n", file1, errno); + fflush (stderr); + abort (); } contents2 = read_file (file2, &size2); if (contents2 == NULL) { - fprintf (stderr, "error reading file %s: errno = %d\n", file2, errno); - fflush (stderr); - abort (); + fprintf (stderr, "error reading file %s: errno = %d\n", file2, errno); + fflush (stderr); + abort (); } if (size2 != size1) { - fprintf (stderr, "files %s and %s have different sizes\n", - file1, file2); - fflush (stderr); - abort (); + fprintf (stderr, "files %s and %s have different sizes\n", + file1, file2); + fflush (stderr); + abort (); } if (memcmp (contents1, contents2, size1) != 0) { - fprintf (stderr, "files %s and %s have different contents\n", - file1, file2); - fflush (stderr); - abort (); + fprintf (stderr, "files %s and %s have different contents\n", + file1, file2); + fflush (stderr); + abort (); } } @@ -103,133 +96,133 @@ main (int argc, char *argv[]) if (stat (file1, &statbuf1) < 0) { - fprintf (stderr, "error accessing file %s: errno = %d\n", file1, errno); - fflush (stderr); - abort (); + fprintf (stderr, "error accessing file %s: errno = %d\n", file1, errno); + fflush (stderr); + abort (); } if (stat (file2, &statbuf2) < 0) { - fprintf (stderr, "error accessing file %s: errno = %d\n", file2, errno); - fflush (stderr); - abort (); + fprintf (stderr, "error accessing file %s: errno = %d\n", file2, errno); + fflush (stderr); + abort (); } if (statbuf1.st_mode != statbuf2.st_mode) { - fprintf (stderr, "files %s and %s have different access modes: %03o and %03o\n", - file1, file2, - (unsigned int) statbuf1.st_mode, (unsigned int) statbuf2.st_mode); - return 1; + fprintf (stderr, "files %s and %s have different access modes: %03o and %03o\n", + file1, file2, + (unsigned int) statbuf1.st_mode, (unsigned int) statbuf2.st_mode); + return 1; } } { #if HAVE_ACL_GET_FILE /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ static const int types[] = { - ACL_TYPE_ACCESS + ACL_TYPE_ACCESS # if HAVE_ACL_TYPE_EXTENDED /* MacOS X */ - , ACL_TYPE_EXTENDED + , ACL_TYPE_EXTENDED # endif }; int t; for (t = 0; t < sizeof (types) / sizeof (types[0]); t++) { - int type = types[t]; - acl_t acl1; - char *text1; - int errno1; - acl_t acl2; - char *text2; - int errno2; - - acl1 = acl_get_file (file1, type); - if (acl1 == (acl_t)NULL) - { - text1 = NULL; - errno1 = errno; - } - else - { - text1 = acl_to_text (acl1, NULL); - if (text1 == NULL) - errno1 = errno; - else - errno1 = 0; - } - acl2 = acl_get_file (file2, type); - if (acl2 == (acl_t)NULL) - { - text2 = NULL; - errno2 = errno; - } - else - { - text2 = acl_to_text (acl2, NULL); - if (text2 == NULL) - errno2 = errno; - else - errno2 = 0; - } - - if (acl1 != (acl_t)NULL) - { - if (acl2 != (acl_t)NULL) - { - if (text1 != NULL) - { - if (text2 != NULL) - { - if (strcmp (text1, text2) != 0) - { - fprintf (stderr, "files %s and %s have different ACLs:\n%s\n%s\n", - file1, file2, text1, text2); - return 1; - } - } - else - { - fprintf (stderr, "file %s has a valid ACL, but file %s has an invalid ACL\n", - file1, file2); - return 1; - } - } - else - { - if (text2 != NULL) - { - fprintf (stderr, "file %s has an invalid ACL, but file %s has a valid ACL\n", - file1, file2); - return 1; - } - else - { - if (errno1 != errno2) - { - fprintf (stderr, "files %s and %s have differently invalid ACLs, errno = %d vs. %d\n", - file1, file2, errno1, errno2); - return 1; - } - } - } - } - else - { - fprintf (stderr, "file %s has an ACL, but file %s has no ACL\n", - file1, file2); - return 1; - } - } - else - { - if (acl2 != (acl_t)NULL) - { - fprintf (stderr, "file %s has no ACL, but file %s has an ACL\n", - file1, file2); - return 1; - } - } + int type = types[t]; + acl_t acl1; + char *text1; + int errno1; + acl_t acl2; + char *text2; + int errno2; + + acl1 = acl_get_file (file1, type); + if (acl1 == (acl_t)NULL) + { + text1 = NULL; + errno1 = errno; + } + else + { + text1 = acl_to_text (acl1, NULL); + if (text1 == NULL) + errno1 = errno; + else + errno1 = 0; + } + acl2 = acl_get_file (file2, type); + if (acl2 == (acl_t)NULL) + { + text2 = NULL; + errno2 = errno; + } + else + { + text2 = acl_to_text (acl2, NULL); + if (text2 == NULL) + errno2 = errno; + else + errno2 = 0; + } + + if (acl1 != (acl_t)NULL) + { + if (acl2 != (acl_t)NULL) + { + if (text1 != NULL) + { + if (text2 != NULL) + { + if (strcmp (text1, text2) != 0) + { + fprintf (stderr, "files %s and %s have different ACLs:\n%s\n%s\n", + file1, file2, text1, text2); + return 1; + } + } + else + { + fprintf (stderr, "file %s has a valid ACL, but file %s has an invalid ACL\n", + file1, file2); + return 1; + } + } + else + { + if (text2 != NULL) + { + fprintf (stderr, "file %s has an invalid ACL, but file %s has a valid ACL\n", + file1, file2); + return 1; + } + else + { + if (errno1 != errno2) + { + fprintf (stderr, "files %s and %s have differently invalid ACLs, errno = %d vs. %d\n", + file1, file2, errno1, errno2); + return 1; + } + } + } + } + else + { + fprintf (stderr, "file %s has an ACL, but file %s has no ACL\n", + file1, file2); + return 1; + } + } + else + { + if (acl2 != (acl_t)NULL) + { + fprintf (stderr, "file %s has no ACL, but file %s has an ACL\n", + file1, file2); + return 1; + } + } } -#elif HAVE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ +#elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ int count1; int count2; @@ -251,7 +244,7 @@ main (int argc, char *argv[]) if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", - file1, file2, count1, count2); + file1, file2, count1, count2); return 1; } else @@ -261,38 +254,38 @@ main (int argc, char *argv[]) int i; if (acl (file1, GETACL, count1, entries1) < count1) - { - fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } if (acl (file2, GETACL, count2, entries2) < count1) - { - fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } for (i = 0; i < count1; i++) - { - if (entries1[i].a_type != entries2[i].a_type) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", - file1, file2, i, entries1[i].a_type, entries2[i].a_type); - return 1; - } - if (entries1[i].a_id != entries2[i].a_id) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", - file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); - return 1; - } - if (entries1[i].a_perm != entries2[i].a_perm) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", - file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); - return 1; - } - } + { + if (entries1[i].a_type != entries2[i].a_type) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", + file1, file2, i, entries1[i].a_type, entries2[i].a_type); + return 1; + } + if (entries1[i].a_id != entries2[i].a_id) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", + file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); + return 1; + } + if (entries1[i].a_perm != entries2[i].a_perm) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", + file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); + return 1; + } + } } # ifdef ACE_GETACL count1 = acl (file1, ACE_GETACLCNT, 0, NULL); @@ -316,7 +309,7 @@ main (int argc, char *argv[]) if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACE-ACLs: %d and %d\n", - file1, file2, count1, count2); + file1, file2, count1, count2); return 1; } else if (count1 > 0) @@ -326,44 +319,44 @@ main (int argc, char *argv[]) int i; if (acl (file1, ACE_GETACL, count1, entries1) < count1) - { - fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file1); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } if (acl (file2, ACE_GETACL, count2, entries2) < count1) - { - fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file2); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } for (i = 0; i < count1; i++) - { - if (entries1[i].a_type != entries2[i].a_type) - { - fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different types %d and %d\n", - file1, file2, i, entries1[i].a_type, entries2[i].a_type); - return 1; - } - if (entries1[i].a_who != entries2[i].a_who) - { - fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different ids %d and %d\n", - file1, file2, i, (int)entries1[i].a_who, (int)entries2[i].a_who); - return 1; - } - if (entries1[i].a_access_mask != entries2[i].a_access_mask) - { - fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different access masks %03o and %03o\n", - file1, file2, i, (unsigned int) entries1[i].a_access_mask, (unsigned int) entries2[i].a_access_mask); - return 1; - } - if (entries1[i].a_flags != entries2[i].a_flags) - { - fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different flags 0x%x and 0x%x\n", - file1, file2, i, (unsigned int) entries1[i].a_flags, (unsigned int) entries2[i].a_flags); - return 1; - } - } + { + if (entries1[i].a_type != entries2[i].a_type) + { + fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different types %d and %d\n", + file1, file2, i, entries1[i].a_type, entries2[i].a_type); + return 1; + } + if (entries1[i].a_who != entries2[i].a_who) + { + fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different ids %d and %d\n", + file1, file2, i, (int)entries1[i].a_who, (int)entries2[i].a_who); + return 1; + } + if (entries1[i].a_access_mask != entries2[i].a_access_mask) + { + fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different access masks %03o and %03o\n", + file1, file2, i, (unsigned int) entries1[i].a_access_mask, (unsigned int) entries2[i].a_access_mask); + return 1; + } + if (entries1[i].a_flags != entries2[i].a_flags) + { + fprintf (stderr, "files %s and %s: different ACE-ACL entry #%d: different flags 0x%x and 0x%x\n", + file1, file2, i, (unsigned int) entries1[i].a_flags, (unsigned int) entries2[i].a_flags); + return 1; + } + } } # endif #elif HAVE_GETACL /* HP-UX */ @@ -371,10 +364,12 @@ main (int argc, char *argv[]) int count2; count1 = getacl (file1, 0, NULL); - if (count1 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP)) + if (count1 < 0 + && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)) count1 = 0; count2 = getacl (file2, 0, NULL); - if (count2 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP)) + if (count2 < 0 + && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)) count2 = 0; if (count1 < 0) @@ -392,7 +387,7 @@ main (int argc, char *argv[]) if (count1 != count2) { fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", - file1, file2, count1, count2); + file1, file2, count1, count2); return 1; } else if (count1 > 0) @@ -402,50 +397,126 @@ main (int argc, char *argv[]) int i; if (getacl (file1, count1, entries1) < count1) - { - fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } if (getacl (file2, count2, entries2) < count1) - { - fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); - fflush (stderr); - abort (); - } + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } + for (i = 0; i < count1; i++) + { + if (entries1[i].uid != entries2[i].uid) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different uids %d and %d\n", + file1, file2, i, (int)entries1[i].uid, (int)entries2[i].uid); + return 1; + } + if (entries1[i].gid != entries2[i].gid) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different gids %d and %d\n", + file1, file2, i, (int)entries1[i].gid, (int)entries2[i].gid); + return 1; + } + if (entries1[i].mode != entries2[i].mode) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", + file1, file2, i, (unsigned int) entries1[i].mode, (unsigned int) entries2[i].mode); + return 1; + } + } + } + +# if HAVE_ACLV_H /* HP-UX >= 11.11 */ + { + struct acl dummy_entries[NACLVENTRIES]; + + count1 = acl ((char *) file1, ACL_CNT, NACLVENTRIES, dummy_entries); + if (count1 < 0 + && (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL)) + count1 = 0; + count2 = acl ((char *) file2, ACL_CNT, NACLVENTRIES, dummy_entries); + if (count2 < 0 + && (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL)) + count2 = 0; + } + + if (count1 < 0) + { + fprintf (stderr, "error accessing the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } + if (count2 < 0) + { + fprintf (stderr, "error accessing the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } + if (count1 != count2) + { + fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", + file1, file2, count1, count2); + return 1; + } + else if (count1 > 0) + { + struct acl *entries1 = XNMALLOC (count1, struct acl); + struct acl *entries2 = XNMALLOC (count2, struct acl); + int i; + + if (acl ((char *) file1, ACL_GET, count1, entries1) < count1) + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } + if (acl ((char *) file2, ACL_GET, count2, entries2) < count1) + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } for (i = 0; i < count1; i++) - { - if (entries1[i].uid != entries2[i].uid) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different uids %d and %d\n", - file1, file2, i, (int)entries1[i].uid, (int)entries2[i].uid); - return 1; - } - if (entries1[i].gid != entries2[i].gid) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different gids %d and %d\n", - file1, file2, i, (int)entries1[i].gid, (int)entries2[i].gid); - return 1; - } - if (entries1[i].mode != entries2[i].mode) - { - fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", - file1, file2, i, (unsigned int) entries1[i].mode, (unsigned int) entries2[i].mode); - return 1; - } - } + { + if (entries1[i].a_type != entries2[i].a_type) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", + file1, file2, i, entries1[i].a_type, entries2[i].a_type); + return 1; + } + if (entries1[i].a_id != entries2[i].a_id) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", + file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); + return 1; + } + if (entries1[i].a_perm != entries2[i].a_perm) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", + file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); + return 1; + } + } } +# endif #elif HAVE_ACLX_GET /* AIX */ acl_type_t type1; char acl1[1000]; size_t aclsize1 = sizeof (acl1); mode_t mode1; char text1[1000]; + size_t textsize1 = sizeof (text1); acl_type_t type2; char acl2[1000]; size_t aclsize2 = sizeof (acl2); mode_t mode2; char text2[1000]; + size_t textsize2 = sizeof (text2); /* The docs say that type1 being 0 is equivalent to ACL_ANY, but it is not true, in AIX 5.3. */ @@ -456,14 +527,14 @@ main (int argc, char *argv[]) fflush (stderr); abort (); } - if (aclx_printStr (text1, sizeof (text1), acl1, aclsize1, type1, file1, 0) < 0) + if (aclx_printStr (text1, &textsize1, acl1, aclsize1, type1, file1, 0) < 0) { fprintf (stderr, "cannot convert the ACLs of file %s to text\n", file1); fflush (stderr); abort (); } - /* The docs say that type1 being 0 is equivalent to ACL_ANY, but it is not + /* The docs say that type2 being 0 is equivalent to ACL_ANY, but it is not true, in AIX 5.3. */ type2.u64 = ACL_ANY; if (aclx_get (file2, 0, &type2, acl2, &aclsize2, &mode2) < 0) @@ -472,7 +543,7 @@ main (int argc, char *argv[]) fflush (stderr); abort (); } - if (aclx_printStr (text2, sizeof (text2), acl2, aclsize2, type2, file2, 0) < 0) + if (aclx_printStr (text2, &textsize2, acl2, aclsize2, type2, file2, 0) < 0) { fprintf (stderr, "cannot convert the ACLs of file %s to text\n", file2); fflush (stderr); @@ -482,7 +553,7 @@ main (int argc, char *argv[]) if (strcmp (text1, text2) != 0) { fprintf (stderr, "files %s and %s have different ACLs:\n%s\n%s\n", - file1, file2, text1, text2); + file1, file2, text1, text2); return 1; } #elif HAVE_STATACL /* older AIX */ @@ -506,13 +577,13 @@ main (int argc, char *argv[]) if (acl1.a.acl_len != acl2.a.acl_len) { fprintf (stderr, "files %s and %s have different ACL lengths: %u and %u\n", - file1, file2, acl1.a.acl_len, acl2.a.acl_len); + file1, file2, acl1.a.acl_len, acl2.a.acl_len); return 1; } if (acl1.a.acl_mode != acl2.a.acl_mode) { fprintf (stderr, "files %s and %s have different ACL modes: %03o and %03o\n", - file1, file2, acl1.a.acl_mode, acl2.a.acl_mode); + file1, file2, acl1.a.acl_mode, acl2.a.acl_mode); return 1; } if (acl1.a.u_access != acl2.a.u_access @@ -520,17 +591,82 @@ main (int argc, char *argv[]) || acl1.a.o_access != acl2.a.o_access) { fprintf (stderr, "files %s and %s have different ACL access masks: %03o %03o %03o and %03o %03o %03o\n", - file1, file2, - acl1.a.u_access, acl1.a.g_access, acl1.a.o_access, - acl2.a.u_access, acl2.a.g_access, acl2.a.o_access); + file1, file2, + acl1.a.u_access, acl1.a.g_access, acl1.a.o_access, + acl2.a.u_access, acl2.a.g_access, acl2.a.o_access); return 1; } if (memcmp (acl1.a.acl_ext, acl2.a.acl_ext, acl1.a.acl_len) != 0) { fprintf (stderr, "files %s and %s have different ACL entries\n", - file1, file2); + file1, file2); return 1; } +#elif HAVE_ACLSORT /* NonStop Kernel */ + int count1; + int count2; + + count1 = acl ((char *) file1, ACL_CNT, NACLENTRIES, NULL); + count2 = acl ((char *) file2, ACL_CNT, NACLENTRIES, NULL); + + if (count1 < 0) + { + fprintf (stderr, "error accessing the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } + if (count2 < 0) + { + fprintf (stderr, "error accessing the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } + if (count1 != count2) + { + fprintf (stderr, "files %s and %s have different number of ACLs: %d and %d\n", + file1, file2, count1, count2); + return 1; + } + else if (count1 > 0) + { + struct acl *entries1 = XNMALLOC (count1, struct acl); + struct acl *entries2 = XNMALLOC (count2, struct acl); + int i; + + if (acl ((char *) file1, ACL_GET, count1, entries1) < count1) + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file1); + fflush (stderr); + abort (); + } + if (acl ((char *) file2, ACL_GET, count2, entries2) < count1) + { + fprintf (stderr, "error retrieving the ACLs of file %s\n", file2); + fflush (stderr); + abort (); + } + for (i = 0; i < count1; i++) + { + if (entries1[i].a_type != entries2[i].a_type) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different types %d and %d\n", + file1, file2, i, entries1[i].a_type, entries2[i].a_type); + return 1; + } + if (entries1[i].a_id != entries2[i].a_id) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different ids %d and %d\n", + file1, file2, i, (int)entries1[i].a_id, (int)entries2[i].a_id); + return 1; + } + if (entries1[i].a_perm != entries2[i].a_perm) + { + fprintf (stderr, "files %s and %s: different ACL entry #%d: different permissions %03o and %03o\n", + file1, file2, i, (unsigned int) entries1[i].a_perm, (unsigned int) entries2[i].a_perm); + return 1; + } + } + } #endif }