import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
import java.lang.Integer;
import javax.servlet.*;
import javax.servlet.http.*;
public class KerberosServices extends HttpServlet {
private String UserName;
private String Display;
private String Kerb_services;
private String host;
private String Rsh_option;
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_services = req.getParameter("Services");
host = req.getParameter("HOST");
Rsh_option = req.getParameter("rsh_options");
Kerb_directory = "/project/webflow/users/cyoun/Kerberos/krb5-1.0.6/bin/";
if(Rsh_option.equals("Webflow server")) Rsh_option = "/npac/home/webflow/WebFlow_Server";
if(UserName.equals("webflow"))
{
kerberos_ticket_checking();
kerberos_ticket_have_it_or_not();
if (Kerberos_ticket) {
kerberosResultDelete();
makingandexecutingScript();
toClient.println("");
toClient.println("
");
toClient.println("");
toClient.println("Try the Kerberized another services......");
toClient.println(" Restart ");
toClient.println("");
toClient.println("");
toClient.println("");
toClient.close();
}
else {
kerberosResultDelete();
toClient.println("");
toClient.println("");
toClient.println("");
toClient.println("Please get a kerberos ticket......");
toClient.println(" Generating 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 use the Kerberos services.");
toClient.println(" Restart ");
toClient.println("
");
toClient.println("");
toClient.println("");
toClient.close();
}
}
public void kerberos_ticket_checking()
{
cmd = " "+Kerb_directory+"klist > /npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosresult";
String Kerberosscript = "/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosscript";
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");
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";
String Kerberosscript = "/npac/home/webflow/WEBFLOW/JIGSAW/Jigsaw/WWW/servlets/kerberosscript";
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 void makingandexecutingScript()
{
if(Kerb_services.equals("rlogin"))
cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"rlogin "+host+" -x";
else if(Kerb_services.equals("telnet"))
cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"ktelnet -a -x "+host+" 3000";
else if(Kerb_services.equals("ftp"))
cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"kftp "+host+" 3001";
else if(Kerb_services.equals("rsh"))
cmd = "xterm -sb -d "+Display+" -title "+UserName+" -e "+Kerb_directory+"rsh "+host+" -l "+UserName+" -x "+Rsh_option;
else System.err.println("There is no such services in Kerberos");
try{
Process KerberosExec = Runtime.getRuntime().exec(cmd);
// KerberosExec.waitFor();
}
catch (Exception ex) {
System.err.println("Error in executing Kerberos services :"+ex);
}
}
public String getServletInfo() {
return "Checking access as Kerberos Security Servlet";
}
}