changeset 31242:ee3d0e88d72c

Fix test-file-has-acl on FreeBSD.
author David Bartley <dtbartle@csclub.uwaterloo.ca>
date Mon, 04 May 2009 12:19:25 +0200
parents e18a26c808bd
children edca8eec383a
files ChangeLog modules/acl-tests tests/test-file-has-acl.c tests/test-file-has-acl.sh
diffstat 4 files changed, 28 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon May 04 11:50:43 2009 +0200
+++ b/ChangeLog	Mon May 04 12:19:25 2009 +0200
@@ -1,3 +1,13 @@
+2009-05-04  David Bartley  <dtbartle@csclub.uwaterloo.ca>
+            Bruno Haible  <bruno@clisp.org>
+
+	Fix test-file-has-acl on FreeBSD.
+	* tests/test-file-has-acl.sh: Also test a directory. On FreeBSD, the
+	mask is implicitly added.
+	* tests/test-file-has-acl.c: Include <signal.h>.
+	(main): Terminate the test after 5 seconds.
+	* modules/acl-tests (configure.ac): Check for alarm function.
+
 2009-05-04  Bruno Haible  <bruno@clisp.org>
 
 	Exploit new semantics of AC_DEFUN_ONCE available since 2009-01-26.
--- a/modules/acl-tests	Mon May 04 11:50:43 2009 +0200
+++ b/modules/acl-tests	Mon May 04 12:19:25 2009 +0200
@@ -14,6 +14,7 @@
 xalloc
 
 configure.ac:
+AC_CHECK_DECLS_ONCE([alarm])
 
 Makefile.am:
 TESTS += test-file-has-acl.sh test-set-mode-acl.sh test-copy-acl.sh
--- a/tests/test-file-has-acl.c	Mon May 04 11:50:43 2009 +0200
+++ b/tests/test-file-has-acl.c	Mon May 04 12:19:25 2009 +0200
@@ -1,5 +1,5 @@
 /* Test for presence of ACL.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008-2009 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
@@ -20,6 +20,7 @@
 
 #include "acl.h"
 
+#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -54,6 +55,14 @@
       exit (EXIT_FAILURE);
     }
 
+  /* Check against possible infinite loop in file_has_acl.  */
+#if HAVE_DECL_ALARM
+  /* Declare failure if test takes too long, by using default abort
+     caused by SIGALRM.  */
+  signal (SIGALRM, SIG_DFL);
+  alarm (5);
+#endif
+
 #if USE_ACL
   {
     int ret = file_has_acl (file, &statbuf);
--- a/tests/test-file-has-acl.sh	Mon May 04 11:50:43 2009 +0200
+++ b/tests/test-file-has-acl.sh	Mon May 04 12:19:25 2009 +0200
@@ -183,6 +183,9 @@
 
   func_test_has_acl tmpfile0 no
 
+  mkdir tmpdir0
+  func_test_has_acl tmpdir0 no
+
   if test $acl_flavor != none; then
     # Use a user and group id different from the current one, to avoid
     # redundant/ambiguous ACLs.
@@ -208,11 +211,11 @@
             *)       setfacl -d user:$auid:1 tmpfile0 ;;
           esac
 
-          # On Linux, the ACL for the mask is implicitly added.
+          # On Linux and FreeBSD, the ACL for the mask is implicitly added.
           # On Solaris, it is always there.
           case $acl_flavor in
-            linux) func_test_has_acl tmpfile0 yes ;;
-            *)     func_test_has_acl tmpfile0 no ;;
+            linux | freebsd) func_test_has_acl tmpfile0 yes ;;
+            *)               func_test_has_acl tmpfile0 no ;;
           esac
 
           # Remove the ACL for the mask, if it was implicitly added.
@@ -328,6 +331,7 @@
   fi
 
   rm -f tmpfile[0-9] tmp.err
+  rm -rf tmpdir0
 ) || exit 1
 
 rm -rf "$tmp"