Mar 27

To use anonymous access for an LDAP search or query set the value of Context.SECURITY_AUTHENTICATION to “none” in the environment used to create the initial context.

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, providerUrl);

// Use 'none' for anonymous access
env.put(Context.SECURITY_AUTHENTICATION, "none");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

written by objects \\ tags: , , ,

Mar 24

You need to read any output from standard output or standard error when running a process using Runtime.exec(). If you don’t the buffers may fill up causing the process to lock up.

The following code can be used to handle reading the process output, and the linked article provides a lot of great insight into the correct usage of Runtime.exec().

/** code copied from
 *  http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
 *  When Runtime.exec() won't: Navigate yourself around pitfalls
 *  related to the Runtime.exec() method
 *  @author Michael Daconta
 */
import java.util.*;
import java.io.*;

class StreamGobbler extends Thread
{
    InputStream is;
    String type;
    OutputStream os;
    
    StreamGobbler(InputStream is, String type)
    {
        this(is, type, null);
    }

    StreamGobbler(InputStream is, String type, OutputStream redirect)
    {
        this.is = is;
        this.type = type;
        this.os = redirect;
    }
    
    /** creates readers to handle the text created by the external program
    */		
    public void run()
    {
        try
        {
            PrintWriter pw = null;
            if (os != null)
                pw = new PrintWriter(os);
                
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ( (line = br.readLine()) != null)
            {
                if (pw != null)
                    pw.println(line);
                System.out.println(type + ">" + line);    
            }
            if (pw != null)
                pw.flush();
        } catch (IOException ioe)
            {
            ioe.printStackTrace();  
            }
    }
}

written by objects \\ tags: , , , , , , ,

Mar 14

If you have code that needs to perform a privileged operation (eg. an applet accessing the local disk) then it needs to be done from trusted code. You can make code trusted by making the call from a privileged block as shown in the following example.


AccessController.doPrivileged(new PrivilegedAction() {
   public Object run() {
        // add your privileged code here
        return null;
   }
});

written by objects \\ tags: , , ,