import java.sql.*; import java.io.*; import java.util.*; import java.security.*; import java.text.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*; public class OracleSetPass { public static void writeFile(String filename,String content) { BufferedWriter bw = null; FileWriter fw = null; try { //String content = "This is the content to write into file\n"; fw = new FileWriter(filename); bw = new BufferedWriter(fw); bw.write(content); System.out.println("Done"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bw != null) bw.close(); if (fw != null) fw.close(); } catch (IOException ex) { ex.printStackTrace(); } } } public static String readFile(String filename) { String content = null; File file = new File(filename); //for ex foo.txt FileReader reader = null; try { reader = new FileReader(file); char[] chars = new char[(int) file.length()]; reader.read(chars); content = new String(chars); reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(reader !=null){ reader.close(); } } catch (IOException e) { e.printStackTrace(); } } return content; } public static String replaceString(String ConnectionString,String pass_new,String f1,String f2 ){ try { int p1 = ConnectionString.indexOf(f1); //System.out.println(p1); int p2 = (ConnectionString.substring(p1)).indexOf(f2); //System.out.println(p2); String pass = ConnectionString.substring(p1, p1+p2).replaceAll (f1, "") ; //System.out.println(pass); //System.out.println(ConnectionString.replaceAll ("Password=" + pass, "Password=" + pass_new)); return ConnectionString.replaceAll ("Password=" + pass, "Password=" + pass_new); } catch (Exception e) { e.printStackTrace(); return ConnectionString ; } } public static String MD5(String md5) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); byte[] array = md.digest(md5.getBytes()); StringBuffer sb = new StringBuffer(); for (int i = 0; i < array.length; ++i) { sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3)); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } public static String tracelogs=""; public static void addTraceLogs(String content){ tracelogs+=new java.util.Date().toString()+":"+content+"\r\n"; } public static void resetTraceLogs(){ tracelogs=""; } public static void main(String[] argv) { String target_user=argv[3],target_userpass_old=argv[4],target_userpass_new=argv[5],mode=argv[6]; int index=0; resetTraceLogs(); try{ index=Integer.parseInt(argv[7]); }catch(Exception e) { e.printStackTrace(); } System.out.println("-------- Oracle JDBC Connection Testing ------"); try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { System.out.println("Where is your Oracle JDBC Driver?"); e.printStackTrace(); return; } System.out.println("Oracle JDBC Driver Registered!"); Connection connection = null; Statement stmt = null; try { connection = DriverManager.getConnection( "jdbc:oracle:thin:@"+argv[0], argv[1]+" as sysdba ", argv[2]); addTraceLogs("jdbc:oracle:thin:@"+argv[0]+","+argv[1]+" as sysdba ,"+ argv[2]); stmt = connection.createStatement(); String sql="alter user "+target_user+" identified by "+target_userpass_new+" ACCOUNT UNLOCK "; if(mode.equals("F")) sql="alter user "+target_user+" identified by "+ target_userpass_new+" ACCOUNT UNLOCK "; if(mode.equals("R")) sql="alter user "+target_user+" identified by "+ new StringBuilder(target_userpass_old).reverse().toString()+" ACCOUNT UNLOCK "; if(mode.equals("A")){ java.util.Date date = new java.util.Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); target_userpass_new=target_user+sdf.format(date); sql="alter user "+target_user+" identified by \""+ target_userpass_new+"\""; } if(mode.equals("E")){ java.util.Date date = new java.util.Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); target_userpass_new=OracleSetPass.MD5(sdf.format(date)).substring(0,target_user.length()); sql="alter user "+target_user+" identified by \""+ target_userpass_new+"\""; } addTraceLogs("Run Mode:"+mode); System.out.println("sql : "+sql); addTraceLogs(sql); stmt.execute(sql); System.out.println("sql : "+sql +" Successfull"); stmt.close(); connection.close(); addTraceLogs(" Successfull"); } catch (SQLException e) { System.out.println("Connection Failed! Check output console"); e.printStackTrace(); addTraceLogs(" Fail "+e.toString()); return; } writeFile(System.getenv("WINDIR") + "\\0.OracleSetPass.log",tracelogs); if (connection != null) { System.out.println("You made it, take control your database now!"); } else { System.out.println("Failed to make connection!"); } try{ String filename=new File("").getAbsolutePath()+"\\server.connection_string.xml"; File xmlFile=new File(filename); XmlParserFile xml =new XmlParserFile(xmlFile); String connection_string = xml.getItemString(index, "connection_string"); System.out.println("Read "+filename+" successful"); System.out.println("Read data "+index+":"+connection_string+" "); String f1="Password="; String f2=";"; connection_string=replaceString(connection_string,target_userpass_new,f1,f2); System.out.println("data "+connection_string+" "); boolean status=xml.setItemString(index, "connection_string",connection_string); connection_string = xml.getItemString(index, "connection_string"); System.out.println("write data "+index+":"+connection_string+" successful"); xml.zerialize(); System.out.println("write "+filename+" successful"); }catch(Exception e){ e.printStackTrace(); } } } class XmlParserFile { private File xml; private Document doc; private NodeList nList; public XmlParserFile(String xml) throws Exception { this.doc = loadXMLFromString(xml); String tagRowName = doc.getFirstChild().getChildNodes().item(1).getNodeName(); nList = doc.getElementsByTagName(tagRowName); } public XmlParserFile(File xml) throws Exception { this.xml=xml; this.doc = loadXMLFromFile(xml); String tagRowName = doc.getFirstChild().getChildNodes().item(1).getNodeName(); nList = doc.getElementsByTagName(tagRowName); } public void zerialize() { try{ // write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(this.doc); StreamResult result = new StreamResult(this.xml); transformer.transform(source, result); }catch(Exception e){ e.printStackTrace(); } //return data.toString(); } public String getItemString(int row, String column) { try { Node n = nList.item(row); for (int i = 0; i < n.getChildNodes().getLength(); i++) { if (n.getChildNodes().item(i).getNodeName().toLowerCase().trim().equals(column.trim())) { return n.getChildNodes().item(i).getTextContent(); } } } catch (Exception ex) { } return ""; } public boolean setItemString(int row, String column,String value) { try { Node n = nList.item(row); for (int i = 0; i < n.getChildNodes().getLength(); i++) { if (n.getChildNodes().item(i).getNodeName().toLowerCase().trim().equals(column.trim())) { n.getChildNodes().item(i).setTextContent(value); doc.getFirstChild().getChildNodes().item(i).setTextContent(value); return true; } } } catch (Exception ex) { } return false; } public int getRowCount() { return nList.getLength(); } private Document loadXMLFromString(String xml) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(xml)); return builder.parse(is); } private Document loadXMLFromFile(File xml) throws Exception { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); return dBuilder.parse(xml); } }