import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.servlet.*; import javax.servlet.http.*; public class KerberosTicket extends HttpServlet { private String UserName; private String Display; private String Kerb_ticket; private String cmd; private String Kerb_directory; private String action; boolean Kerberos_ticket = false; public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // first, set the "content type" header of the response res.setContentType("text/html"); //Get the response's PrintWriter to return text to the client. PrintWriter toClient = res.getWriter(); UserName = req.getParameter("UserContext"); Display = req.getParameter("DISPLAY"); Kerb_ticket = req.getParameter("Tickets"); Kerb_directory = "/project/webflow/users/cyoun/Kerberos/krb5-1.0.6/bin/"; if(UserName.equals("webflow")) { if(Kerb_ticket.equals("Kinit")) { Kerberos_kinit(); kerberos_ticket_checking(); kerberos_ticket_have_it_or_not(); if (Kerberos_ticket) { kerberosResultDelete(); toClient.println(""); toClient.println(""); toClient.println("
"); toClient.println("Try the Kerberized services......"); toClient.println(" Restart "); toClient.println("
"); toClient.println(""); toClient.println(""); toClient.close(); } else { kerberosResultDelete(); toClient.println(""); toClient.println(""); toClient.println("
"); toClient.println("Password incorrect !!!!!"); toClient.println("

Please try it again......"); toClient.println(" Generating Kerberos Ticket "); toClient.println("

"); toClient.println(""); toClient.println(""); toClient.close(); } } else { Kerberos_kdestroy(); toClient.println(""); toClient.println(""); toClient.println("
"); toClient.println("Deleting the Kerberos ticket......"); toClient.println(" Generating the Kerberos ticket "); toClient.println("
"); toClient.println(""); toClient.println(""); toClient.close(); } } else { toClient.println(""); toClient.println(""); toClient.println("
"); toClient.println("Try it again......"); toClient.println("

"); toClient.println("You are not eligible to generate the Kerberos ticket."); toClient.println(" Restart "); toClient.println("

"); toClient.println(""); toClient.println(""); toClient.close(); } } public void Kerberos_kinit() { cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"kinit -f "+UserName; try{ Process Kerberos_kinitExec = Runtime.getRuntime().exec(cmd); Kerberos_kinitExec.waitFor(); } catch (Exception ex) { System.err.println("Error in generating Kerberos ticket :"+ex); } } public void Kerberos_kdestroy() { cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"kdestroy"; try{ Process Kerberos_kdestroyExec = Runtime.getRuntime().exec(cmd); Kerberos_kdestroyExec.waitFor(); } catch (Exception ex) { System.err.println("Error in deleting Kerberos ticket :"+ex); } } public void kerberos_ticket_checking() { cmd = " "+Kerb_directory+"klist > /npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosresult_ticket"; String Kerberosscript = "/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosscript_ticket"; String FileContents = new String("#!/bin/sh -f\n"); FileContents += cmd+"\n"; int scriptsize = FileContents.length(); byte[] scriptbuf = new byte[scriptsize]; FileContents.getBytes(0, scriptsize, scriptbuf, 0); File to_file = new File(Kerberosscript); FileOutputStream to = null; try{ to = new FileOutputStream(to_file); to.write(scriptbuf, 0, scriptsize); } catch(IOException exc){;} finally{ if(to != null) try{ to.close(); } catch(IOException exc) {;} } try{ Process KerberosEnv = Runtime.getRuntime().exec("chmod 777 "+Kerberosscript); KerberosEnv.waitFor(); Process KerberosExec = Runtime.getRuntime().exec(Kerberosscript); KerberosExec.waitFor(); } catch (Exception ex) { System.err.println("Error: " + ex.toString()); } } public void kerberos_ticket_have_it_or_not() { File f = new File("/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosresult_ticket"); int size = (int) f.length(); int bytes_read = 0; String tem_data; try{ FileInputStream in = new FileInputStream(f); byte[] data = new byte[size]; while(bytes_read < size) bytes_read += in.read(data, bytes_read, size-bytes_read); tem_data = new String(data); int indexNum = tem_data.indexOf("Default principal: "); if (indexNum == -1) Kerberos_ticket = false; else { action = tem_data.substring(indexNum+19); if (action.startsWith(UserName)) { int indexDate = tem_data.indexOf("krbtgt"); String ExpireDate = tem_data.substring(indexDate-19, indexDate-1); String ExpireDateMonth = ExpireDate.substring(0,2); String ExpireDateDate = ExpireDate.substring(3,5); String ExpireDateYear = ExpireDate.substring(6,8); String ExpireDateHour = ExpireDate.substring(9,11); String ExpireDateMin = ExpireDate.substring(12,14); String ExpireDateSec = ExpireDate.substring(15,17); int Emonth = Integer.parseInt(ExpireDateMonth); int Edate = Integer.parseInt(ExpireDateDate); int Eyear = Integer.parseInt(ExpireDateYear); int Ehour = Integer.parseInt(ExpireDateHour); int Emin = Integer.parseInt(ExpireDateMin); int Esec = Integer.parseInt(ExpireDateSec); if( Eyear == (new Date()).getYear()){ if( Emonth == ((new Date()).getMonth()+1)) { if( Edate == (new Date()).getDate()) { if(Ehour == (new Date()).getHours()) { if(Emin == (new Date()).getMinutes()){ if(Esec == (new Date()).getSeconds()) Kerberos_ticket = true; else if(Esec > (new Date()).getSeconds()) Kerberos_ticket = true; else Kerberos_ticket = false; } /* Emin -- then */ else if(Emin > (new Date()).getMinutes()) Kerberos_ticket = true; else Kerberos_ticket = false; } /* Ehour -- then */ else if(Ehour > (new Date()).getHours()) Kerberos_ticket = true; else Kerberos_ticket = false; } /* Edate -- then */ else if(Edate > (new Date()).getDate()) Kerberos_ticket = true; else Kerberos_ticket = false; } /* Emonth -- then */ else if( Emonth > ((new Date()).getMonth()+1)) Kerberos_ticket = true; else Kerberos_ticket = false; } /* Eyear -- then */ else if( Eyear > (new Date()).getYear()) Kerberos_ticket = true; else Kerberos_ticket = false; } else Kerberos_ticket = false; } } catch (IOException e) { System.err.println("Error: " + e.toString()); } } public void kerberosResultDelete() { String Kerberosresult = "/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosresult_ticket"; String Kerberosscript = "/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosscript_ticket"; try{ Process KerberosDelete = Runtime.getRuntime().exec("rm -r "+Kerberosresult); KerberosDelete.waitFor(); Process KerberosSDelete = Runtime.getRuntime().exec("rm -r "+Kerberosscript); KerberosSDelete.waitFor(); } catch (Exception ex1) { System.err.println("Error: " + ex1.toString()); } } public String getServletInfo() { return "Checking access as Kerberos Security Servlet"; } }