package org.jacorb.demo.sas; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.security.Principal; import java.security.PrivilegedAction; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; import org.omg.CORBA.ORB; /** * This is the client side of the sas demo. It just calls the single * operation "printCert()" of the server. As you can see, sas is fully * transparent. * * @author Nicolas Noffke */ public class KerberosClient { private static Principal myPrincipal = null; private static Subject mySubject = null; private static ORB orb = null; public KerberosClient(String args[]) { try { // initialize the ORB. orb = ORB.init(args, null); // get the server File f = new File(args[0]); if (!f.exists()) { System.out.println("File " + args[0] + " does not exist."); System.exit(-1); } if (f.isDirectory()) { System.out.println("File " + args[0] + " is a directory."); System.exit(-1); } BufferedReader br = new BufferedReader(new FileReader(f)); org.omg.CORBA.Object obj = orb.string_to_object(br.readLine()); br.close(); SASDemo demo = SASDemoHelper.narrow(obj); //call single operation demo.printSAS(); demo.printSAS(); demo.printSAS(); System.out.println("Call to server succeeded"); demo.shutdown(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String args[]) { if (args.length != 3) { System.out.println("Usage: java demo.sas.KerberosClient <ior_file> <username> <password>"); System.exit(1); } // login - with Kerberos LoginContext loginContext = null; try { JaasTxtCalbackHandler txtHandler = new JaasTxtCalbackHandler(); txtHandler.setMyUsername(args[1]); txtHandler.setMyPassword(args[2].toCharArray()); loginContext = new LoginContext("KerberosClient", txtHandler); loginContext.login(); } catch (LoginException le) { System.out.println("Login error: " + le); System.exit(1); } mySubject = loginContext.getSubject(); myPrincipal = (Principal) mySubject.getPrincipals().iterator().next(); System.out.println("Found principal " + myPrincipal.getName()); // run in privileged mode final String[] finalArgs = args; try { Subject.doAs(mySubject, new PrivilegedAction() { public Object run() { try { KerberosClient client = new KerberosClient(finalArgs); } catch (Exception e) { System.out.println("Error running program: "+e); } System.out.println("Exiting privileged operation"); return null; } }); } catch (Exception e) { System.out.println("Error running privileged: "+e); } } }