From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10514 invoked by alias); 22 Mar 2006 10:48:18 -0000 Received: (qmail 10501 invoked by uid 22791); 22 Mar 2006 10:48:16 -0000 X-Spam-Check-By: sourceware.org Received: from gbenson.demon.co.uk (HELO gbenson.demon.co.uk) (80.177.220.214) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 22 Mar 2006 10:48:15 +0000 Received: from slippy.wire.rat ([192.168.1.1]) by gbenson.demon.co.uk with esmtp (Exim 3.36 #1) id 1FM0su-0001VG-00 for mauve-patches@sources.redhat.com; Wed, 22 Mar 2006 10:48:12 +0000 Received: from slippy.wire.rat (localhost.localdomain [127.0.0.1]) by slippy.wire.rat (8.13.1/8.13.1) with ESMTP id k2MAmCBQ012973 for ; Wed, 22 Mar 2006 10:48:12 GMT Received: (from gary@localhost) by slippy.wire.rat (8.13.1/8.13.1/Submit) id k2MAmCSI012972 for mauve-patches@sources.redhat.com; Wed, 22 Mar 2006 10:48:12 GMT Date: Wed, 22 Mar 2006 10:48:00 -0000 From: Gary Benson To: mauve-patches@sources.redhat.com Subject: FYI: FilePermission symlink handling test Message-ID: <20060322104812.GC12530@redhat.com> Mail-Followup-To: mauve-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="XF85m9dhOBO43t/C" Content-Disposition: inline X-IsSubscribed: yes Mailing-List: contact mauve-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: mauve-patches-owner@sourceware.org X-SW-Source: 2006/txt/msg00256.txt.bz2 --XF85m9dhOBO43t/C Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 215 Hi all, My last commit adds a test to check FilePermission's handling of symbolic links. Both proprietary JVMs I tried passed this test, but Classpath does not. Now to figure out how to fix this... Cheers, Gary --XF85m9dhOBO43t/C Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=patch Content-length: 5300 Index: ChangeLog =================================================================== RCS file: /cvs/mauve/mauve/ChangeLog,v retrieving revision 1.1562 diff -u -r1.1562 ChangeLog --- ChangeLog 21 Mar 2006 19:59:15 -0000 1.1562 +++ ChangeLog 22 Mar 2006 10:41:39 -0000 @@ -1,3 +1,7 @@ +2006-03-22 Gary Benson + + * gnu/testlet/java/io/FilePermission/traversal.java: New test. + 2006-03-21 Tom Tromey * gnu/testlet/java/text/Bidi/reorderVisually.java: New file. Index: gnu/testlet/java/io/FilePermission/traversal.java =================================================================== RCS file: gnu/testlet/java/io/FilePermission/traversal.java diff -N gnu/testlet/java/io/FilePermission/traversal.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/testlet/java/io/FilePermission/traversal.java 22 Mar 2006 10:41:39 -0000 @@ -0,0 +1,135 @@ +// Copyright (C) 2006 Red Hat, Inc. +// Written by Gary Benson + +// This file is part of Mauve. + +// Mauve is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// Mauve is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Mauve; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +package gnu.testlet.java.io.FilePermission; + +import java.io.File; +import java.io.FilePermission; +import java.util.LinkedList; + +import gnu.testlet.Testlet; +import gnu.testlet.TestHarness; + +public class traversal implements Testlet +{ + public void test (TestHarness harness) + { + try { + harness.checkPoint("setup"); + + String[] items_to_access = new String[] { + "file", // a file in the directory + "rlink", // a relative link to a file outside the directory + "alink"}; // an absolute link to a file outside the directory + + String[] ways_to_access = new String[] { + "dir", // via the directory + "rlink", // via a relative link to the directory + "alink"}; // via an absolute link to the directory + + String[] item_states = new String[] { + "present", // the file exists + "absent"}; // the file does not exist + + LinkedList cleanup = new LinkedList(); + try { + File tempdir = new File(harness.getTempDirectory(), "mauve-testdir"); + harness.check(tempdir.isDirectory() || tempdir.mkdir()); + cleanup.add(tempdir); + + File testdir = new File(tempdir, "dir"); + harness.check(testdir.isDirectory() || testdir.mkdir()); + cleanup.add(testdir); + + File link = new File(tempdir, "rlink"); + harness.check(Runtime.getRuntime().exec(new String[] { + "ln", "-s", testdir.getName(), link.getPath() + }).waitFor() == 0); + cleanup.add(link); + + link = new File(tempdir, "alink"); + harness.check(Runtime.getRuntime().exec(new String[] { + "ln", "-s", testdir.getPath(), link.getPath() + }).waitFor() == 0); + cleanup.add(link); + + File[] dirs = new File[] {testdir, tempdir}; + for (int i = 0; i < dirs.length; i++) { + File file = new File(dirs[i], "file-present"); + harness.check(file.isFile() || file.createNewFile()); + cleanup.add(file); + + file = new File(dirs[i], "file-absent"); + harness.check(!file.exists()); + } + + for (int i = 0; i < item_states.length; i++) { + File file = new File(tempdir, "file-" + item_states[i]); + + link = new File(testdir, "rlink-" + item_states[i]); + harness.check(Runtime.getRuntime().exec(new String[] { + "ln", "-s", new File("..",file.getName()).getPath(), link.getPath() + }).waitFor() == 0); + cleanup.add(link); + + link = new File(testdir, "alink-" + item_states[i]); + harness.check(Runtime.getRuntime().exec(new String[] { + "ln", "-s", file.getPath(), link.getPath() + }).waitFor() == 0); + cleanup.add(link); + } + + harness.checkPoint("test"); + for (int i = 0; i < items_to_access.length; i++) { + String item_to_access = items_to_access[i]; + for (int j = 0; j < ways_to_access.length; j++) { + String how_to_access = ways_to_access[j]; + for (int k = 0; k < ways_to_access.length; k++) { + String how_permitted = ways_to_access[k]; + for (int l = 0; l < item_states.length; l++) { + String item_state = item_states[l]; + String item = item_to_access + "-" + item_state; + + FilePermission a = new FilePermission(new File( + new File(tempdir, how_permitted), item).getPath(), "read"); + + FilePermission b = new FilePermission(new File( + new File(tempdir, how_to_access), item).getPath(), "read"); + + harness.debug("\na = " + a); + harness.debug("b = " + b); + + harness.check(a.implies(b)); + } + } + } + } + } + finally { + for (int i = cleanup.size() - 1; i >= 0; i--) + ((File) cleanup.get(i)).delete(); + } + } + catch (Throwable ex) { + harness.debug(ex); + harness.check(false, "Unexpected exception"); + } + } +} --XF85m9dhOBO43t/C--