//
// Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
//
// This code is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License version 2 only, as
// published by the Free Software Foundation.
//
// This code 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
// version 2 for more details (a copy is included in the LICENSE file that
// accompanied this code).
//
// You should have received a copy of the GNU General Public License version
// 2 along with this work; if not, write to the Free Software Foundation,
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
//
// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
// or visit www.oracle.com if you need additional information or have any
// questions.
//

grant {
    permission java.net.URLPermission "http://127.0.0.1:12567/*", "GET:X-Foo";
    permission java.net.URLPermission "https://127.0.0.1:12568/*", "POST:X-Fob";

    // needed for HttpServer
    permission "java.net.SocketPermission" "localhost:1024-", "listen,resolve,accept";
    permission "java.util.PropertyPermission" "test.src", "read";
    permission java.io.FilePermission "${test.src}/../../../com/sun/net/httpserver/testkeys", "read";

    //permission "java.util.logging.LoggingPermission" "control";
    //permission "java.io.FilePermission" "/tmp/-", "read,write";
    permission "java.lang.RuntimePermission" "modifyThread";
    permission "java.lang.RuntimePermission" "setFactory";
};

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

grant codeBase "file:///export/repos/jdk8/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image/jre/lib/rt.jar" {
        permission java.security.AllPermission;
};

