From eac19a279d6da826351c76d8335ece83e1c48856 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 7 Aug 2012 16:06:28 -0700 Subject: [PATCH 1/5] adding files to make the build work ant failed for missing files folders. --- Source/JNA/waffle-http/src-test/.gitkeep | 0 Source/JNA/waffle-mock/src-test/.gitkeep | 0 Source/JNA/waffle-tomcat7/build.xml | 51 +++++++++--------- Source/ThirdParty/tomcat7/lib/tomcat-juli.jar | Bin 0 -> 32277 bytes 4 files changed, 24 insertions(+), 27 deletions(-) create mode 100644 Source/JNA/waffle-http/src-test/.gitkeep create mode 100644 Source/JNA/waffle-mock/src-test/.gitkeep create mode 100644 Source/ThirdParty/tomcat7/lib/tomcat-juli.jar diff --git a/Source/JNA/waffle-http/src-test/.gitkeep b/Source/JNA/waffle-http/src-test/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Source/JNA/waffle-mock/src-test/.gitkeep b/Source/JNA/waffle-mock/src-test/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Source/JNA/waffle-tomcat7/build.xml b/Source/JNA/waffle-tomcat7/build.xml index fe56c655c4..ec3adbd13e 100644 --- a/Source/JNA/waffle-tomcat7/build.xml +++ b/Source/JNA/waffle-tomcat7/build.xml @@ -1,27 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/ThirdParty/tomcat7/lib/tomcat-juli.jar b/Source/ThirdParty/tomcat7/lib/tomcat-juli.jar new file mode 100644 index 0000000000000000000000000000000000000000..07571768cafb3948f98eb0b1d3ac5fa01393875d GIT binary patch literal 32277 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
    };r00jzS+ZNgdV8R_29==LR+3e{QXF|# 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 literal 0 HcmV?d00001 From eb6a524083274fe88b1819a41a1d3a5cfbccd8a4 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 7 Aug 2012 16:26:28 -0700 Subject: [PATCH 2/5] adding source java spec to - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2a287b17f3de259f175944fda973b72233462f09 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 7 Aug 2012 16:32:28 -0700 Subject: [PATCH 3/5] Adding Implementaion-Version to manifest This lets you get the version information with getPackage().getImplemenationXXX() --- Source/JNA/build/build.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/JNA/build/build.xml b/Source/JNA/build/build.xml index 214d7358f3..1aae5a1445 100644 --- a/Source/JNA/build/build.xml +++ b/Source/JNA/build/build.xml @@ -157,7 +157,9 @@ - + + + From e4fa49511ffd66f3880aac6d53a7965be9cff452 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 7 Aug 2012 16:38:53 -0700 Subject: [PATCH 4/5] Adding WaffleInfo utility An XML document that shows waffle system setup --- Source/JNA/demo/waffle-filter/WEB-INF/web.xml | 105 +++++---- .../src-test/waffle/util/AllUtilTests.java | 74 +++--- .../src-test/waffle/util/WaffleInfoTests.java | 47 ++++ .../src/waffle/util/WaffleInfo.java | 215 ++++++++++++++++++ .../src/waffle/servlet/WaffleInfoServlet.java | 118 ++++++++++ 5 files changed, 475 insertions(+), 84 deletions(-) create mode 100644 Source/JNA/waffle-core/src-test/waffle/util/WaffleInfoTests.java create mode 100644 Source/JNA/waffle-core/src/waffle/util/WaffleInfo.java create mode 100644 Source/JNA/waffle-servlet/src/waffle/servlet/WaffleInfoServlet.java diff --git a/Source/JNA/demo/waffle-filter/WEB-INF/web.xml b/Source/JNA/demo/waffle-filter/WEB-INF/web.xml index 2021caa7d3..f2d8ac9ed5 100644 --- a/Source/JNA/demo/waffle-filter/WEB-INF/web.xml +++ b/Source/JNA/demo/waffle-filter/WEB-INF/web.xml @@ -1,47 +1,58 @@ - - - - - - SecurityFilter - waffle.servlet.NegotiateSecurityFilter - - principalFormat - fqn - - - roleFormat - both - - - allowGuestLogin - true - - - securityFilterProviders - - waffle.servlet.spi.NegotiateSecurityFilterProvider - waffle.servlet.spi.BasicSecurityFilterProvider - - - - waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols - - Negotiate - NTLM - - - - waffle.servlet.spi.BasicSecurityFilterProvider/realm - WaffleFilterDemo - - - - SecurityFilter - /* - - - + + + + + + SecurityFilter + waffle.servlet.NegotiateSecurityFilter + + principalFormat + fqn + + + roleFormat + both + + + allowGuestLogin + true + + + securityFilterProviders + + waffle.servlet.spi.NegotiateSecurityFilterProvider + waffle.servlet.spi.BasicSecurityFilterProvider + + + + waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols + + Negotiate + NTLM + + + + waffle.servlet.spi.BasicSecurityFilterProvider/realm + WaffleFilterDemo + + + + SecurityFilter + /* + + + + + WaffleInfo + waffle.servlet.WaffleInfoServlet + 1 + + + WaffleInfo + /waffle + + + diff --git a/Source/JNA/waffle-core/src-test/waffle/util/AllUtilTests.java b/Source/JNA/waffle-core/src-test/waffle/util/AllUtilTests.java index 7523191878..8271a39fd3 100644 --- a/Source/JNA/waffle-core/src-test/waffle/util/AllUtilTests.java +++ b/Source/JNA/waffle-core/src-test/waffle/util/AllUtilTests.java @@ -1,37 +1,37 @@ -/******************************************************************************* - * Waffle (https://github.com/dblock/waffle) - * - * Copyright (c) 2010 Application Security, Inc. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Application Security, Inc. - *******************************************************************************/ -package waffle.util; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -@RunWith(Suite.class) -@SuiteClasses({ Base64Tests.class, NtlmMessageTests.class }) -public class AllUtilTests { - - @BeforeClass - public static void setUpClass() { - System.out.println("Master Util setup"); - - } - - @AfterClass - public static void tearDownClass() { - System.out.println("Master Util tearDown"); - } - -} +/******************************************************************************* + * Waffle (https://github.com/dblock/waffle) + * + * Copyright (c) 2010 Application Security, Inc. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Application Security, Inc. + *******************************************************************************/ +package waffle.util; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ Base64Tests.class, NtlmMessageTests.class, WaffleInfoTests.class }) +public class AllUtilTests { + + @BeforeClass + public static void setUpClass() { + System.out.println("Master Util setup"); + + } + + @AfterClass + public static void tearDownClass() { + System.out.println("Master Util tearDown"); + } + +} diff --git a/Source/JNA/waffle-core/src-test/waffle/util/WaffleInfoTests.java b/Source/JNA/waffle-core/src-test/waffle/util/WaffleInfoTests.java new file mode 100644 index 0000000000..ff7ec6632a --- /dev/null +++ b/Source/JNA/waffle-core/src-test/waffle/util/WaffleInfoTests.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Waffle (https://github.com/dblock/waffle) + * + * Copyright (c) 2010 Application Security, Inc. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Application Security, Inc. + *******************************************************************************/ +package waffle.util; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import waffle.windows.auth.IWindowsAuthProvider; +import waffle.windows.auth.IWindowsComputer; +import waffle.windows.auth.impl.WindowsAuthProviderImpl; + +import junit.framework.TestCase; + +/** + */ +public class WaffleInfoTests extends TestCase { + public void testWaffleInfo() throws Exception { + Document info = new WaffleInfo().getSystemInfo(); + + Node elem = info.getDocumentElement() // waffle + .getFirstChild() // auth + .getFirstChild() // currentUser + .getNextSibling(); // computer + + assertEquals("computer", elem.getNodeName() ); + + IWindowsAuthProvider auth = new WindowsAuthProviderImpl(); + IWindowsComputer computer = auth.getCurrentComputer(); + + NodeList nodes = elem.getChildNodes(); + assertEquals(computer.getComputerName(), nodes.item(0).getTextContent()); + assertEquals(computer.getMemberOf(), nodes.item(1).getTextContent()); + assertEquals(computer.getJoinStatus(), nodes.item(2).getTextContent()); + } +} diff --git a/Source/JNA/waffle-core/src/waffle/util/WaffleInfo.java b/Source/JNA/waffle-core/src/waffle/util/WaffleInfo.java new file mode 100644 index 0000000000..d2ab0de467 --- /dev/null +++ b/Source/JNA/waffle-core/src/waffle/util/WaffleInfo.java @@ -0,0 +1,215 @@ +/******************************************************************************* + * Waffle (https://github.com/dblock/waffle) + * + * Copyright (c) 2010 Application Security, Inc. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Application Security, Inc. + *******************************************************************************/ +package waffle.util; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import waffle.windows.auth.IWindowsAccount; +import waffle.windows.auth.IWindowsAuthProvider; +import waffle.windows.auth.IWindowsComputer; +import waffle.windows.auth.IWindowsDomain; +import waffle.windows.auth.impl.WindowsAccountImpl; +import waffle.windows.auth.impl.WindowsAuthProviderImpl; + +/** + * A Utility class to read system info to help troubleshoot WAFFLE system configuration + */ +public class WaffleInfo { + static final Logger log = LoggerFactory.getLogger(WaffleInfo.class); + + /** + * @return The WAFFLE Implementation Version + */ + public static String getVersion() { + return WaffleInfo.class.getPackage().getImplementationVersion(); + } + + /** + * Get a Document with basic system information + * + * This uses the builtin javax.xml package even though the API is quite verbose + */ + public Document getSystemInfo() throws Exception { + DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + + //create the root element and add it to the document + Element root = doc.createElement("waffle"); + root.setAttribute("version", getVersion()); + doc.appendChild(root); + + root.appendChild( getAuthProviderInfo(doc) ); + + return doc; + } + + + private Element getAuthProviderInfo(Document doc) { + IWindowsAuthProvider auth = new WindowsAuthProviderImpl(); + + Element node = doc.createElement("auth"); + node.setAttribute("class", auth.getClass().getName() ); + Element wrap = node; + + // Current User + try { + Element child = wrap = doc.createElement("currentUser"); + node.appendChild(child); + + String currentUsername = WindowsAccountImpl.getCurrentUsername(); + IWindowsAccount account = new WindowsAccountImpl(currentUsername); + + Element value = doc.createElement("Name"); + value.setTextContent(account.getName()); + child.appendChild(value); + + value = doc.createElement("FQN"); + value.setTextContent(account.getFqn()); + child.appendChild(value); + + value = doc.createElement("Domain"); + value.setTextContent(account.getDomain()); + child.appendChild(value); + + value = doc.createElement("SID"); + value.setTextContent(account.getSidString()); + child.appendChild(value); + } + catch(Throwable ex) { + wrap.appendChild(getException(doc, ex)); + } + + // Computer + try { + Element child = wrap = doc.createElement("computer"); + node.appendChild(child); + + IWindowsComputer c = auth.getCurrentComputer(); + Element value = doc.createElement("computerName"); + value.setTextContent(c.getComputerName()); + child.appendChild(value); + + value = doc.createElement("memberOf"); + value.setTextContent(c.getMemberOf()); + child.appendChild(value); + + value = doc.createElement("joinStatus"); + value.setTextContent(c.getJoinStatus()); + child.appendChild(value); + + value = doc.createElement("groups"); + for(String s : c.getGroups()) { + Element g = doc.createElement("group"); + g.setTextContent(s); + value.appendChild(g); + } + child.appendChild(value); + } + catch(Throwable ex) { + wrap.appendChild(getException(doc, ex)); + } + + // Domains + // TODO? skip if the computer is in a workgroup? + try { + Element child = wrap = doc.createElement("domains"); + node.appendChild(child); + + for(IWindowsDomain domain : auth.getDomains()) { + Element d = doc.createElement("domain"); + node.appendChild(d); + + Element value = doc.createElement("FQN"); + value.setTextContent(domain.getFqn()); + child.appendChild(value); + + value = doc.createElement("TrustTypeString"); + value.setTextContent(domain.getTrustTypeString()); + child.appendChild(value); + + value = doc.createElement("TrustDirectionString"); + value.setTextContent(domain.getTrustDirectionString()); + child.appendChild(value); + } + } + catch(Throwable ex) { + wrap.appendChild(getException(doc, ex)); + } + return node; + } + + public static Element getException(Document doc, Throwable t) { + Element node = doc.createElement("exception"); + node.setAttribute("class", t.getClass().getName() ); + + Element value = doc.createElement("message"); + if(t.getMessage()!=null) { + value.setTextContent(t.getMessage()); + node.appendChild(value); + } + + value = doc.createElement("trace"); + Writer result = new StringWriter(); + PrintWriter printWriter = new PrintWriter(result); + t.printStackTrace(printWriter); + value.setTextContent(result.toString()); + node.appendChild(value); + return node; + } + + public static String toPrettyXML(Document doc) throws Exception { + //set up a transformer + TransformerFactory transfac = TransformerFactory.newInstance(); + Transformer trans = transfac.newTransformer(); + trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + trans.setOutputProperty(OutputKeys.INDENT, "yes"); + + //create string from xml tree + StringWriter sw = new StringWriter(); + StreamResult result = new StreamResult(sw); + DOMSource source = new DOMSource(doc); + trans.transform(source, result); + return sw.toString(); + } + + /** + * Print system information + */ + public static void main(String[] args) { + WaffleInfo helper = new WaffleInfo(); + try { + Document info = helper.getSystemInfo(); + System.out.println(toPrettyXML(info)); + } + catch(Exception ex) { + ex.printStackTrace(); + } + } +} diff --git a/Source/JNA/waffle-servlet/src/waffle/servlet/WaffleInfoServlet.java b/Source/JNA/waffle-servlet/src/waffle/servlet/WaffleInfoServlet.java new file mode 100644 index 0000000000..6bb1e53165 --- /dev/null +++ b/Source/JNA/waffle-servlet/src/waffle/servlet/WaffleInfoServlet.java @@ -0,0 +1,118 @@ +/******************************************************************************* + * Waffle (https://github.com/dblock/waffle) + * + * Copyright (c) 2010 Application Security, Inc. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Application Security, Inc. + *******************************************************************************/ +package waffle.servlet; + +import java.io.IOException; +import java.security.Principal; +import java.util.Enumeration; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import waffle.util.WaffleInfo; + +/** + * A servlet that returns Waffle info as XML + */ +public class WaffleInfoServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + WaffleInfo info = new WaffleInfo(); + try { + Document doc = info.getSystemInfo(); + Element root = doc.getDocumentElement(); + + // Add the Request Information Here + Element http = getRequestInfo(doc,request); + root.insertBefore(http, root.getFirstChild()); + + //Write the XML Response + TransformerFactory transfac = TransformerFactory.newInstance(); + Transformer trans = transfac.newTransformer(); + trans.setOutputProperty(OutputKeys.INDENT, "yes"); + + StreamResult result = new StreamResult(response.getWriter()); + DOMSource source = new DOMSource(doc); + trans.transform(source, result); + response.setContentType("application/xml"); + } + catch (Exception e) { + throw new ServletException(e); + } + } + + /** + * Delegate POST to GET + */ + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException + { + doGet(request,response); + } + + public Element getRequestInfo(Document doc, HttpServletRequest request) { + Element node = doc.createElement("request"); + + + Element value = doc.createElement("AuthType"); + value.setTextContent(request.getAuthType()); + node.appendChild(value); + + Principal p = request.getUserPrincipal(); + if(p!=null) { + Element child = doc.createElement("principal"); + child.setAttribute("class", p.getClass().getName()); + + value = doc.createElement("name"); + value.setTextContent(p.getName()); + child.appendChild(value); + + value = doc.createElement("string"); + value.setTextContent(p.toString()); + child.appendChild(value); + + node.appendChild(child); + } + + Enumeration headers = request.getHeaderNames(); + if(headers.hasMoreElements()) { + Element child = doc.createElement("headers"); + while(headers.hasMoreElements()) { + String name = headers.nextElement(); + + value = doc.createElement(name); + value.setTextContent(request.getHeader(name)); + child.appendChild(value); + } + node.appendChild(child); + } + return node; + } +} + From 7238ca547025ecf6cafc316d8be6b73641d5f1a4 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 7 Aug 2012 23:13:17 -0700 Subject: [PATCH 5/5] add date, time, git revision to manifest this beefs up the manifet and puts the same info in both src and bin --- Source/JNA/build/build.xml | 436 +++++++++++++++++++------------------ 1 file changed, 229 insertions(+), 207 deletions(-) diff --git a/Source/JNA/build/build.xml b/Source/JNA/build/build.xml index 1aae5a1445..b56a3a6c99 100644 --- a/Source/JNA/build/build.xml +++ b/Source/JNA/build/build.xml @@ -1,207 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +