/*
 * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

// App-client EE permissions
grant codebase "file:/module/Car" {

    permission java.awt.AWTPermission "accessClipboard";
    permission java.awt.AWTPermission "accessEventQueue";
    permission java.awt.AWTPermission "showWindowWithoutWarningBanner";

    permission java.lang.RuntimePermission "loadLibrary.*";
    permission java.lang.RuntimePermission "exitVM";
    permission java.lang.RuntimePermission "queuePrintJob";

    permission java.net.SocketPermission "*", "connect"; 
    permission java.net.SocketPermission "localhost:1024-", "accept,listen";
    permission java.io.FilePermission "<<ALL FILES>>", "read,write";
    permission java.util.PropertyPermission "*", "read";

};

// Applet-client EE permissions
grant codebase "file:/module/Applet-Client" {

    permission java.net.SocketPermission "*", "connect"; 
    permission java.util.PropertyPermission "*", "read";
  
};


// EJB EE permissions
grant codebase "file:/module/Ejb" {
    permission java.lang.RuntimePermission "loadLibrary"; 
    permission java.lang.RuntimePermission "queuePrintJob"; 
    permission java.net.SocketPermission "*", "connect"; 
    permission java.io.FilePermission "*", "read,write";
    permission java.util.PropertyPermission "*", "read";
};



// Web EE permissions
grant codebase "file:/module/Web" {
    permission java.lang.RuntimePermission "loadLibrary"; 
    permission java.lang.RuntimePermission "queuePrintJob"; 
    permission java.net.SocketPermission "*", "connect";
    permission java.io.FilePermission "*", "read,write"; 
    permission java.io.FilePermission "SERVLET-CONTEXT-TEMPDIR", "read,write";
    permission java.util.PropertyPermission "*", "read";
    permission java.lang.RuntimePermission "accessClassInPackage.com.sun.jndi.ldap";
};

// Resource adapter EE permissions
grant codebase "file:/module/Rar" {
    permission java.lang.RuntimePermission "loadLibrary"; 
    permission java.lang.RuntimePermission "queuePrintJob"; 
    permission java.net.SocketPermission "*", "connect"; 
    permission java.io.FilePermission "*", "read,write";
    permission java.util.PropertyPermission "*", "read";
};
