Re: JAVA file permissions
From: ddf <oratune_at_msn.com>
Date: Tue, 7 Jul 2009 08:24:21 -0700 (PDT)
Message-ID: <73489ffa-e698-44b8-a61b-a12a34024541_at_32g2000yqj.googlegroups.com>
On Jul 7, 10:07 am, CenturionX <darwinbaldr..._at_gmail.com> wrote:
> Hello,
>
> I'm working with ORACLE 10.2.0.4.0 on windows server 2003 R2.
>
> I need to execute a DOS batch file. I used some code i found in the
> web (see the code below).
>
> When i try to give permission to execut ethe file:
> EXEC DBMS_JAVA.grant_permission('CMS',
> 'SYS.java.io.FilePermission', 'K:\Mesr\DBP_EXEC_FROM_ORA\',
> 'read ,write, execute');
>
> I get this error:
>
> ORA-29532: Java call terminated by uncaught Java exception:
> java.lang.ClassNotFoundException: sys/java/io/filepermission
> ORA-06512: at "SYS.DBMS_JAVA", line 313
> ORA-06512: at line 1
>
> Somebody has a good idea on this.
>
> THANKS.
>
> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" AS
> import java.io.*;
> public class Host {
> public static void executeCommand(String command) {
> try {
> String[] finalCommand;
> if (isWindows()) {
> finalCommand = new String[4];
> // Use the appropriate path for your windows version.
> finalCommand[0] = "C:\\windows\\system32\\cmd.exe"; //
> Windows XP/2003
> //finalCommand[0] = "C:\\winnt\\system32\\cmd.exe"; //
> Windows NT/2000
> finalCommand[1] = "/y";
> finalCommand[2] = "/c";
> finalCommand[3] = command;
> }
> else {
> finalCommand = new String[3];
> finalCommand[0] = "/bin/sh";
> finalCommand[1] = "-c";
> finalCommand[2] = command;
> }
>
> final Process pr = Runtime.getRuntime().exec(finalCommand);
> pr.waitFor();
>
> new Thread(new Runnable(){
> public void run() {
> BufferedReader br_in = null;
> try {
> br_in = new BufferedReader(new InputStreamReader
> (pr.getInputStream()));
> String buff = null;
> while ((buff = br_in.readLine()) != null) {
> System.out.println("Process out :" + buff);
> try {Thread.sleep(100); } catch(Exception e) {}
> }
> br_in.close();
> }
> catch (IOException ioe) {
> System.out.println("Exception caught printing process
> output.");
> ioe.printStackTrace();
> }
> finally {
> try {
> br_in.close();
> } catch (Exception ex) {}
> }
> }
> }).start();
>
> new Thread(new Runnable(){
> public void run() {
> BufferedReader br_err = null;
> try {
> br_err = new BufferedReader(new InputStreamReader
> (pr.getErrorStream()));
> String buff = null;
> while ((buff = br_err.readLine()) != null) {
> System.out.println("Process err :" + buff);
> try {Thread.sleep(100); } catch(Exception e) {}
> }
> br_err.close();
> }
> catch (IOException ioe) {
> System.out.println("Exception caught printing process
> error.");
> ioe.printStackTrace();
> }
> finally {
> try {
> br_err.close();
> } catch (Exception ex) {}
> }
> }
> }).start();
> }
> catch (Exception ex) {
> System.out.println(ex.getLocalizedMessage());
> }
> }
>
> public static boolean isWindows() {
> if (System.getProperty("os.name").toLowerCase().indexOf
> ("windows") != -1)
> return true;
> else
> return false;
> }
>
> };
>
> /
> show errors java source "Host"
>
> CREATE OR REPLACE PROCEDURE host_command (p_command IN VARCHAR2)
> AS LANGUAGE JAVA
> NAME 'Host.executeCommand (java.lang.String)';
> /
> show errors
>
> EXEC DBMS_JAVA.grant_permission('CMS', 'SYS.java.io.FilePermission',
> 'K:\Mesr\DBP_EXEC_FROM_ORA\', 'read ,write, execute');
> EXEC Dbms_Java.Grant_Permission('CMS',
> 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
> EXEC Dbms_Java.Grant_Permission('CMS',
> 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
Date: Tue, 7 Jul 2009 08:24:21 -0700 (PDT)
Message-ID: <73489ffa-e698-44b8-a61b-a12a34024541_at_32g2000yqj.googlegroups.com>
On Jul 7, 10:07 am, CenturionX <darwinbaldr..._at_gmail.com> wrote:
> Hello,
>
> I'm working with ORACLE 10.2.0.4.0 on windows server 2003 R2.
>
> I need to execute a DOS batch file. I used some code i found in the
> web (see the code below).
>
> When i try to give permission to execut ethe file:
> EXEC DBMS_JAVA.grant_permission('CMS',
> 'SYS.java.io.FilePermission', 'K:\Mesr\DBP_EXEC_FROM_ORA\',
> 'read ,write, execute');
>
> I get this error:
>
> ORA-29532: Java call terminated by uncaught Java exception:
> java.lang.ClassNotFoundException: sys/java/io/filepermission
> ORA-06512: at "SYS.DBMS_JAVA", line 313
> ORA-06512: at line 1
>
> Somebody has a good idea on this.
>
> THANKS.
>
> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" AS
> import java.io.*;
> public class Host {
> public static void executeCommand(String command) {
> try {
> String[] finalCommand;
> if (isWindows()) {
> finalCommand = new String[4];
> // Use the appropriate path for your windows version.
> finalCommand[0] = "C:\\windows\\system32\\cmd.exe"; //
> Windows XP/2003
> //finalCommand[0] = "C:\\winnt\\system32\\cmd.exe"; //
> Windows NT/2000
> finalCommand[1] = "/y";
> finalCommand[2] = "/c";
> finalCommand[3] = command;
> }
> else {
> finalCommand = new String[3];
> finalCommand[0] = "/bin/sh";
> finalCommand[1] = "-c";
> finalCommand[2] = command;
> }
>
> final Process pr = Runtime.getRuntime().exec(finalCommand);
> pr.waitFor();
>
> new Thread(new Runnable(){
> public void run() {
> BufferedReader br_in = null;
> try {
> br_in = new BufferedReader(new InputStreamReader
> (pr.getInputStream()));
> String buff = null;
> while ((buff = br_in.readLine()) != null) {
> System.out.println("Process out :" + buff);
> try {Thread.sleep(100); } catch(Exception e) {}
> }
> br_in.close();
> }
> catch (IOException ioe) {
> System.out.println("Exception caught printing process
> output.");
> ioe.printStackTrace();
> }
> finally {
> try {
> br_in.close();
> } catch (Exception ex) {}
> }
> }
> }).start();
>
> new Thread(new Runnable(){
> public void run() {
> BufferedReader br_err = null;
> try {
> br_err = new BufferedReader(new InputStreamReader
> (pr.getErrorStream()));
> String buff = null;
> while ((buff = br_err.readLine()) != null) {
> System.out.println("Process err :" + buff);
> try {Thread.sleep(100); } catch(Exception e) {}
> }
> br_err.close();
> }
> catch (IOException ioe) {
> System.out.println("Exception caught printing process
> error.");
> ioe.printStackTrace();
> }
> finally {
> try {
> br_err.close();
> } catch (Exception ex) {}
> }
> }
> }).start();
> }
> catch (Exception ex) {
> System.out.println(ex.getLocalizedMessage());
> }
> }
>
> public static boolean isWindows() {
> if (System.getProperty("os.name").toLowerCase().indexOf
> ("windows") != -1)
> return true;
> else
> return false;
> }
>
> };
>
> /
> show errors java source "Host"
>
> CREATE OR REPLACE PROCEDURE host_command (p_command IN VARCHAR2)
> AS LANGUAGE JAVA
> NAME 'Host.executeCommand (java.lang.String)';
> /
> show errors
>
> EXEC DBMS_JAVA.grant_permission('CMS', 'SYS.java.io.FilePermission',
> 'K:\Mesr\DBP_EXEC_FROM_ORA\', 'read ,write, execute');
> EXEC Dbms_Java.Grant_Permission('CMS',
> 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
> EXEC Dbms_Java.Grant_Permission('CMS',
> 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
Normally the \ is an escape character; have you given thought to possibly changing the string to this:
EXEC DBMS_JAVA.grant_permission('CMS', 'SYS.java.io.FilePermission', 'K:\\Mesr\\DBP_EXEC_FROM_ORA\\', 'read ,write, execute');
David Fitzjarrell Received on Tue Jul 07 2009 - 10:24:21 CDT