Adding configuration file editor utilities.
This commit is contained in:
parent
18646f81b2
commit
89e9889865
@ -43,6 +43,8 @@ WEBAPP_NAME = CasaAuthTokenSvc
|
|||||||
WEBAPP_EXT = war
|
WEBAPP_EXT = war
|
||||||
MODULE_NAME = CasaAuthToken
|
MODULE_NAME = CasaAuthToken
|
||||||
MODULE_EXT = jar
|
MODULE_EXT = jar
|
||||||
|
UTIL_MODULE_NAME = CasaAuthTokenUtil
|
||||||
|
UTIL_MODULE_EXT = jar
|
||||||
|
|
||||||
JAVAFILES = src/com/novell/casa/authtoksvc/ProtoDefs.java \
|
JAVAFILES = src/com/novell/casa/authtoksvc/ProtoDefs.java \
|
||||||
src/com/novell/casa/authtoksvc/AuthMechConfig.java \
|
src/com/novell/casa/authtoksvc/AuthMechConfig.java \
|
||||||
@ -69,7 +71,13 @@ JAVAFILES = src/com/novell/casa/authtoksvc/ProtoDefs.java \
|
|||||||
src/com/novell/casa/authtoksvc/GetAuthTokReqMsg.java \
|
src/com/novell/casa/authtoksvc/GetAuthTokReqMsg.java \
|
||||||
src/com/novell/casa/authtoksvc/GetAuthTokRespMsg.java \
|
src/com/novell/casa/authtoksvc/GetAuthTokRespMsg.java \
|
||||||
src/com/novell/casa/authtoksvc/Krb5Authenticate.java \
|
src/com/novell/casa/authtoksvc/Krb5Authenticate.java \
|
||||||
src/com/novell/casa/authtoksvc/PwdAuthenticate.java
|
src/com/novell/casa/authtoksvc/PwdAuthenticate.java \
|
||||||
|
src/com/novell/casa/authtoksvc/IVerifySetting.java \
|
||||||
|
src/com/novell/casa/authtoksvc/SettingsFileUtil.java \
|
||||||
|
src/com/novell/casa/authtoksvc/AuthPolicyEditor.java \
|
||||||
|
src/com/novell/casa/authtoksvc/AuthTokenSettingsEditor.java \
|
||||||
|
src/com/novell/casa/authtoksvc/IdenTokenSettingsEditor.java \
|
||||||
|
src/com/novell/casa/authtoksvc/SvcSettingsEditor.java
|
||||||
|
|
||||||
BUILDDIR = build
|
BUILDDIR = build
|
||||||
|
|
||||||
@ -77,6 +85,8 @@ WEBAPP = $(WEBAPP_NAME).$(WEBAPP_EXT)
|
|||||||
|
|
||||||
AUTHTOKEN_FILES = -C $(BUILDDIR)/webapp/WEB-INF/classes com
|
AUTHTOKEN_FILES = -C $(BUILDDIR)/webapp/WEB-INF/classes com
|
||||||
|
|
||||||
|
AUTHTOKEN_UTIL_FILES = -C $(BUILDDIR)/webapp/WEB-INF/classes com
|
||||||
|
|
||||||
CLASSES = $(addprefix $(BUILDDIR)/, $(JAVAFILES:%.java=%.class))
|
CLASSES = $(addprefix $(BUILDDIR)/, $(JAVAFILES:%.java=%.class))
|
||||||
|
|
||||||
#AXIS_LIBS = $(AXIS_JARS_DIR)/axis.jar:$(AXIS_JARS_DIR)/axis-ant.jar:$(AXIS_JARS_DIR)/commons-discovery-0.2.jar:$(AXIS_JARS_DIR)/commons-logging-1.0.4.jar:$(AXIS_JARS_DIR)/commons-logging-api.jar:$(AXIS_JARS_DIR)/jaxrpc.jar:$(AXIS_JARS_DIR)/log4j-1.2.8.jar:$(AXIS_JARS_DIR)/saaj.jar:$(AXIS_JARS_DIR)/wsdl4j-1.5.1.jar:$(AXIS_JARS_DIR)/wss4j-1.5.0.jar:$(AXIS_JARS_DIR)/xalan.jar:$(AXIS_JARS_DIR)/xercesImpl.jar:$(AXIS_JARS_DIR)/xml-apis.jar:$(AXIS_JARS_DIR)/xmlsec-1.2.1.jar
|
#AXIS_LIBS = $(AXIS_JARS_DIR)/axis.jar:$(AXIS_JARS_DIR)/axis-ant.jar:$(AXIS_JARS_DIR)/commons-discovery-0.2.jar:$(AXIS_JARS_DIR)/commons-logging-1.0.4.jar:$(AXIS_JARS_DIR)/commons-logging-api.jar:$(AXIS_JARS_DIR)/jaxrpc.jar:$(AXIS_JARS_DIR)/log4j-1.2.8.jar:$(AXIS_JARS_DIR)/saaj.jar:$(AXIS_JARS_DIR)/wsdl4j-1.5.1.jar:$(AXIS_JARS_DIR)/wss4j-1.5.0.jar:$(AXIS_JARS_DIR)/xalan.jar:$(AXIS_JARS_DIR)/xercesImpl.jar:$(AXIS_JARS_DIR)/xml-apis.jar:$(AXIS_JARS_DIR)/xmlsec-1.2.1.jar
|
||||||
@ -88,7 +98,7 @@ CLASSPATH = $(AXIS_LIBS):$(IDENT_ABSTRACTION_DIR)/identity-abstraction.jar:$(LIB
|
|||||||
|
|
||||||
CUR_DIR := $(shell pwd)
|
CUR_DIR := $(shell pwd)
|
||||||
|
|
||||||
all: $(BUILDDIR)/$(WEBAPP) $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT)
|
all: $(BUILDDIR)/$(WEBAPP) $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT) $(BUILDDIR)/$(UTIL_MODULE_NAME).$(UTIL_MODULE_EXT)
|
||||||
|
|
||||||
$(BUILDDIR)/%.class: %.java
|
$(BUILDDIR)/%.class: %.java
|
||||||
@echo [======== Compiling $@ ========]
|
@echo [======== Compiling $@ ========]
|
||||||
@ -117,6 +127,11 @@ $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT): $(BUILDDIR) $(CLASSES)
|
|||||||
jar cvf $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT) $(AUTHTOKEN_FILES)
|
jar cvf $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT) $(AUTHTOKEN_FILES)
|
||||||
cp $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT) $(LIBDIR)/java/
|
cp $(BUILDDIR)/$(MODULE_NAME).$(MODULE_EXT) $(LIBDIR)/java/
|
||||||
|
|
||||||
|
$(BUILDDIR)/$(UTIL_MODULE_NAME).$(UTIL_MODULE_EXT): $(BUILDDIR) $(CLASSES)
|
||||||
|
@echo [======== Jarring $@ ========]
|
||||||
|
jar cvf $(BUILDDIR)/$(UTIL_MODULE_NAME).$(UTIL_MODULE_EXT) $(AUTHTOKEN_UTIL_FILES)
|
||||||
|
cp $(BUILDDIR)/$(UTIL_MODULE_NAME).$(UTIL_MODULE_EXT) $(LIBDIR)/java/
|
||||||
|
|
||||||
$(BUILDDIR):
|
$(BUILDDIR):
|
||||||
[ -d $(BUILDDIR) ] || mkdir -p $(BUILDDIR)
|
[ -d $(BUILDDIR) ] || mkdir -p $(BUILDDIR)
|
||||||
[ -d $(BUILDDIR)/webapp ] || mkdir -p $(BUILDDIR)/webapp
|
[ -d $(BUILDDIR)/webapp ] || mkdir -p $(BUILDDIR)/webapp
|
||||||
|
@ -0,0 +1,871 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
import org.apache.xerces.parsers.DOMParser;
|
||||||
|
import org.apache.xml.serialize.OutputFormat;
|
||||||
|
import org.apache.xml.serialize.XMLSerializer;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Formatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Class for the creation and editing of auth.policy files.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
public class AuthPolicyEditor
|
||||||
|
{
|
||||||
|
private static final String usage =
|
||||||
|
"java auth_policy_editor -op [-entry realm:mechanismName[:mechanismInfo]] [-refentry realm:mechanismName] -file policyFilePath\n\n" +
|
||||||
|
" where:\n" +
|
||||||
|
" -op - Corresponds to one of the following operations:\n" +
|
||||||
|
" -create - Create new auth policy file\n" +
|
||||||
|
" -list - List auth source entries\n" +
|
||||||
|
" -prepend - Insert auth source entry at the head\n" +
|
||||||
|
" -append - Insert auth source entry at the tail\n" +
|
||||||
|
" -insert - Insert auth source entry after specified reference entry\n" +
|
||||||
|
" -remove - Remove auth source entry\n" +
|
||||||
|
" -file - Path the the auth policy file\n" +
|
||||||
|
" -entry - Auth source entry to be inserted or removed. Must be followed by\n" +
|
||||||
|
" a string formated as follows:\n" +
|
||||||
|
" insert operations format: realm:mechanismName or realm:mechanismName:mechanismInfo\n" +
|
||||||
|
" remove operations format: realm:mechanismName\n" +
|
||||||
|
" -refentry - Reference auth source entry. Must be followed by a string formated\n" +
|
||||||
|
" as follows: realm:mechanismName\n";
|
||||||
|
|
||||||
|
private static final String initialPolicy =
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||||
|
"<auth_policy>\n" +
|
||||||
|
"</auth_policy>\n";
|
||||||
|
|
||||||
|
private final static String AuthSourceElementName = "auth_source";
|
||||||
|
private final static String RealmElementName = "realm";
|
||||||
|
private final static String MechanismElementName = "mechanism";
|
||||||
|
private final static String MechanismInfoElementName = "mechanism_info";
|
||||||
|
private final static String Krb5Mechanism = "Krb5Authenticate";
|
||||||
|
private final static String PwdMechanism = "PwdAuthenticate";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the formal mechanism name if well known
|
||||||
|
*
|
||||||
|
* @param mechName Name of mechanism.
|
||||||
|
* @return Mechanism formal name.
|
||||||
|
*/
|
||||||
|
private static String mechFormalName(String mechName)
|
||||||
|
{
|
||||||
|
String formalName;
|
||||||
|
|
||||||
|
if (mechName.compareToIgnoreCase(Krb5Mechanism) == 0)
|
||||||
|
formalName = Krb5Mechanism;
|
||||||
|
else if (mechName.compareToIgnoreCase(PwdMechanism) == 0)
|
||||||
|
formalName = PwdMechanism;
|
||||||
|
else
|
||||||
|
formalName = mechName;
|
||||||
|
|
||||||
|
return formalName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the contents of the specified file with the provided
|
||||||
|
* policy document.
|
||||||
|
*
|
||||||
|
* @param filePath Path to policy file to be updated.
|
||||||
|
* @param doc Policy document.
|
||||||
|
* @return True if successful.
|
||||||
|
*/
|
||||||
|
private static boolean updateFile(String filePath, Document doc)
|
||||||
|
{
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
// Update the file with the specified document
|
||||||
|
// after removing the text nodes.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Remove text nodes
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node child;
|
||||||
|
Node next = (Node) root.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.TEXT_NODE)
|
||||||
|
{
|
||||||
|
// Remove the node
|
||||||
|
root.removeChild(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update file
|
||||||
|
File f = new File(filePath);
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
OutputFormat format = new OutputFormat(doc);
|
||||||
|
XMLSerializer serializer = new XMLSerializer(out, format);
|
||||||
|
serializer.serialize(doc.getDocumentElement());
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Error writing to file " + filePath + ", exception: " + e.toString());
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("SecurityException writting to file " + filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets document for the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @return Document representation of the policy file.
|
||||||
|
*/
|
||||||
|
private static Document getPolicyFileDoc(String filePath)
|
||||||
|
{
|
||||||
|
Document doc = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Get an input stream to read from policy file
|
||||||
|
File f = new File(filePath);
|
||||||
|
FileInputStream inStream = new FileInputStream(f);
|
||||||
|
InputSource source = new InputSource(inStream);
|
||||||
|
|
||||||
|
DOMParser parser = new DOMParser();
|
||||||
|
parser.parse(source);
|
||||||
|
doc = parser.getDocument();
|
||||||
|
|
||||||
|
inStream.close();
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException e)
|
||||||
|
{
|
||||||
|
System.err.println("Policy file " + filePath + " not found");
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.err.println("SecurityException accessing " + filePath);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.err.println("IOException accessing " + filePath + " Exception=" + e.toString());
|
||||||
|
}
|
||||||
|
catch (SAXException e)
|
||||||
|
{
|
||||||
|
System.err.println("Policy file " + filePath + " format error");
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a starting policy document
|
||||||
|
*
|
||||||
|
* @return Starting policy document.
|
||||||
|
*/
|
||||||
|
private static Document getPolicyDoc()
|
||||||
|
{
|
||||||
|
Document doc = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StringReader reader = new StringReader(initialPolicy);
|
||||||
|
InputSource source = new InputSource(reader);
|
||||||
|
|
||||||
|
DOMParser parser = new DOMParser();
|
||||||
|
parser.parse(source);
|
||||||
|
doc = parser.getDocument();
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("Program error, exception: " + e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List the auth_source entries in the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performListOperation(String filePath)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// List the auth sources present in the policy file
|
||||||
|
Document doc = getPolicyFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node auth_source_node;
|
||||||
|
Node next_auth_source_node = root.getFirstChild();
|
||||||
|
while ((auth_source_node = next_auth_source_node) != null)
|
||||||
|
{
|
||||||
|
next_auth_source_node = auth_source_node.getNextSibling();
|
||||||
|
if (auth_source_node.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& auth_source_node.getLocalName().compareToIgnoreCase("auth_source") == 0)
|
||||||
|
{
|
||||||
|
System.out.println("Auth_Source: ");
|
||||||
|
|
||||||
|
// We are dealing with an auth_source, display its children.
|
||||||
|
Node child;
|
||||||
|
Node next = auth_source_node.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
if (child.getLocalName().compareToIgnoreCase("realm") == 0)
|
||||||
|
{
|
||||||
|
System.out.println(" Identity source: " + child.getTextContent());
|
||||||
|
}
|
||||||
|
else if (child.getLocalName().compareToIgnoreCase("mechanism") == 0)
|
||||||
|
{
|
||||||
|
System.out.println(" Authentication Mechanism: " + child.getTextContent());
|
||||||
|
}
|
||||||
|
else if (child.getLocalName().compareToIgnoreCase("mechanism_info") == 0)
|
||||||
|
{
|
||||||
|
System.out.println(" Authentication Mechanism Info: " + child.getTextContent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performCreateOperation(String filePath)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// create a policy file
|
||||||
|
Document doc = getPolicyDoc();
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File f = new File(filePath);
|
||||||
|
boolean createStatus = f.createNewFile();
|
||||||
|
if (createStatus == true)
|
||||||
|
{
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
OutputFormat format = new OutputFormat(doc);
|
||||||
|
XMLSerializer serializer = new XMLSerializer(out, format);
|
||||||
|
serializer.serialize(doc.getDocumentElement());
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("File " + filePath + " already exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Error creating file " + filePath + ", exception: " + e.toString());
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("SecurityException creating " + filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepend the auth_source entry to the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @param entry Auth_source entry to be prepended. Entry is formated as
|
||||||
|
* follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
* is optional).
|
||||||
|
* @return True if operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performPrependOperation(String filePath, String entry)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Prepend auth source entry to the policy file
|
||||||
|
Document doc = getPolicyFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Parse the entry into its components. Entry is formated as
|
||||||
|
// follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
// is optional).
|
||||||
|
String[] entryComponents = entry.split(":");
|
||||||
|
if (entryComponents.length >= 2
|
||||||
|
&& entryComponents.length <= 3)
|
||||||
|
{
|
||||||
|
// Create and prepend the entry elements
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Element auth_source_element = doc.createElement(AuthSourceElementName);
|
||||||
|
Element realm_element = doc.createElement(RealmElementName);
|
||||||
|
realm_element.setTextContent(entryComponents[0]);
|
||||||
|
auth_source_element.appendChild(realm_element);
|
||||||
|
Element mechanism_element = doc.createElement(MechanismElementName);
|
||||||
|
mechanism_element.setTextContent(mechFormalName(entryComponents[1]));
|
||||||
|
auth_source_element.appendChild(mechanism_element);
|
||||||
|
if (entryComponents.length == 3)
|
||||||
|
{
|
||||||
|
Element mechanism_info_element = doc.createElement(MechanismInfoElementName);
|
||||||
|
mechanism_info_element.setTextContent(mechFormalName(entryComponents[2]));
|
||||||
|
auth_source_element.appendChild(mechanism_info_element);
|
||||||
|
}
|
||||||
|
|
||||||
|
Element firstEntry = null;
|
||||||
|
Node child;
|
||||||
|
Node next = (Node) root.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
// This is the first entry
|
||||||
|
firstEntry = (Element) child;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (firstEntry != null)
|
||||||
|
root.insertBefore(auth_source_element, firstEntry);
|
||||||
|
else
|
||||||
|
root.appendChild(auth_source_element);
|
||||||
|
|
||||||
|
// Update the file
|
||||||
|
opPerformed = updateFile(filePath, doc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("Invalid entry format");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append the auth_source entry to the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @param entry Auth_source entry to be appended. Entry is formated as
|
||||||
|
* follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
* is optional).
|
||||||
|
* @return True if operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performAppendOperation(String filePath, String entry)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Append auth source entry to the policy file
|
||||||
|
Document doc = getPolicyFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Parse the entry into its components. Entry is formated as
|
||||||
|
// follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
// is optional).
|
||||||
|
String[] entryComponents = entry.split(":");
|
||||||
|
if (entryComponents.length >= 2
|
||||||
|
&& entryComponents.length <= 3)
|
||||||
|
{
|
||||||
|
// Create and append the entry elements
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Element auth_source_element = doc.createElement(AuthSourceElementName);
|
||||||
|
Element realm_element = doc.createElement(RealmElementName);
|
||||||
|
realm_element.setTextContent(entryComponents[0]);
|
||||||
|
auth_source_element.appendChild(realm_element);
|
||||||
|
Element mechanism_element = doc.createElement(MechanismElementName);
|
||||||
|
mechanism_element.setTextContent(mechFormalName(entryComponents[1]));
|
||||||
|
auth_source_element.appendChild(mechanism_element);
|
||||||
|
if (entryComponents.length == 3)
|
||||||
|
{
|
||||||
|
Element mechanism_info_element = doc.createElement(MechanismInfoElementName);
|
||||||
|
mechanism_info_element.setTextContent(mechFormalName(entryComponents[2]));
|
||||||
|
auth_source_element.appendChild(mechanism_info_element);
|
||||||
|
}
|
||||||
|
root.appendChild(auth_source_element);
|
||||||
|
|
||||||
|
// Update the file
|
||||||
|
opPerformed = updateFile(filePath, doc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("Invalid entry format");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert the auth_source entry to the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @param entry Auth_source entry to be inserted. Entry is formated as
|
||||||
|
* follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
* is optional).
|
||||||
|
* @param refEntry Reference auth_source entry (New entry is inserted after
|
||||||
|
* it). Entry is formated as follows: realm:mech.
|
||||||
|
* @return True if operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performInsertOperation(String filePath, String entry, String refEntry)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Remove auth sources present in the policy file
|
||||||
|
Document doc = getPolicyFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Parse the entries into their components. Entry is formated as
|
||||||
|
// follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
// is optional).
|
||||||
|
String[] entryComponents = entry.split(":");
|
||||||
|
String[] refEntryComponents = refEntry.split(":");
|
||||||
|
if (refEntryComponents.length == 2
|
||||||
|
&& entryComponents.length >= 2
|
||||||
|
&& entryComponents.length <= 3)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node curr_auth_source_node;
|
||||||
|
Node next_auth_source_node = root.getFirstChild();
|
||||||
|
while ((curr_auth_source_node = next_auth_source_node) != null)
|
||||||
|
{
|
||||||
|
next_auth_source_node = curr_auth_source_node.getNextSibling();
|
||||||
|
if (curr_auth_source_node.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& curr_auth_source_node.getLocalName().compareToIgnoreCase("auth_source") == 0)
|
||||||
|
{
|
||||||
|
// We are dealing with an auth_source, check if this is the
|
||||||
|
// reference entry.
|
||||||
|
boolean realmMatch = false;
|
||||||
|
boolean mechanismMatch = false;
|
||||||
|
|
||||||
|
Node child;
|
||||||
|
Node next = curr_auth_source_node.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
if (child.getLocalName().compareToIgnoreCase(RealmElementName) == 0)
|
||||||
|
{
|
||||||
|
// Compare the realm name
|
||||||
|
if (child.getTextContent().compareToIgnoreCase(refEntryComponents[0]) == 0)
|
||||||
|
realmMatch = true;
|
||||||
|
}
|
||||||
|
else if (child.getLocalName().compareToIgnoreCase(MechanismElementName) == 0)
|
||||||
|
{
|
||||||
|
// Compare the realm name
|
||||||
|
if (child.getTextContent().compareToIgnoreCase(mechFormalName(refEntryComponents[1])) == 0)
|
||||||
|
mechanismMatch = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert entry after current entry if we have a match for the reference entry
|
||||||
|
if (realmMatch && mechanismMatch)
|
||||||
|
{
|
||||||
|
Element auth_source_element = doc.createElement(AuthSourceElementName);
|
||||||
|
Element realm_element = doc.createElement(RealmElementName);
|
||||||
|
realm_element.setTextContent(entryComponents[0]);
|
||||||
|
auth_source_element.appendChild(realm_element);
|
||||||
|
Element mechanism_element = doc.createElement(MechanismElementName);
|
||||||
|
mechanism_element.setTextContent(mechFormalName(entryComponents[1]));
|
||||||
|
auth_source_element.appendChild(mechanism_element);
|
||||||
|
if (entryComponents.length == 3)
|
||||||
|
{
|
||||||
|
Element mechanism_info_element = doc.createElement(MechanismInfoElementName);
|
||||||
|
mechanism_info_element.setTextContent(mechFormalName(entryComponents[2]));
|
||||||
|
auth_source_element.appendChild(mechanism_info_element);
|
||||||
|
}
|
||||||
|
curr_auth_source_node.getNextSibling();
|
||||||
|
Element nextEntry = null;
|
||||||
|
next = (Node) curr_auth_source_node.getNextSibling();;
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
// This is the next entry
|
||||||
|
nextEntry = (Element) child;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nextEntry != null)
|
||||||
|
root.insertBefore(auth_source_element, nextEntry);
|
||||||
|
else
|
||||||
|
root.appendChild(auth_source_element);
|
||||||
|
|
||||||
|
// Update the file
|
||||||
|
opPerformed = updateFile(filePath, doc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("Invalid entry format");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the auth_source entry from the specified policy file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the policy file.
|
||||||
|
* @param entry Auth_source entry to be removed. Entry is formated as
|
||||||
|
* follows: realm:mech.
|
||||||
|
* @return True if operation is successfully performed.
|
||||||
|
*/
|
||||||
|
private static boolean performRemoveOperation(String filePath, String entry)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Remove auth sources present in the policy file
|
||||||
|
Document doc = getPolicyFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Parse the entry into its components. Entry is formated as
|
||||||
|
// follows: realm:mech:mechinfo (Note that the mechinfo
|
||||||
|
// is optional).
|
||||||
|
String[] entryComponents = entry.split(":");
|
||||||
|
if (entryComponents.length == 2)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node auth_source_node;
|
||||||
|
Node next_auth_source_node = root.getFirstChild();
|
||||||
|
while ((auth_source_node = next_auth_source_node) != null)
|
||||||
|
{
|
||||||
|
next_auth_source_node = auth_source_node.getNextSibling();
|
||||||
|
if (auth_source_node.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& auth_source_node.getLocalName().compareToIgnoreCase("auth_source") == 0)
|
||||||
|
{
|
||||||
|
// We are dealing with an auth_source, check if this is the entry
|
||||||
|
// that must be removed.
|
||||||
|
boolean realmMatch = false;
|
||||||
|
boolean mechanismMatch = false;
|
||||||
|
|
||||||
|
Node child;
|
||||||
|
Node next = auth_source_node.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
if (child.getLocalName().compareToIgnoreCase(RealmElementName) == 0)
|
||||||
|
{
|
||||||
|
// Compare the realm name
|
||||||
|
if (child.getTextContent().compareToIgnoreCase(entryComponents[0]) == 0)
|
||||||
|
realmMatch = true;
|
||||||
|
}
|
||||||
|
else if (child.getLocalName().compareToIgnoreCase(MechanismElementName) == 0)
|
||||||
|
{
|
||||||
|
// Compare the realm name
|
||||||
|
if (child.getTextContent().compareToIgnoreCase(mechFormalName(entryComponents[1])) == 0)
|
||||||
|
mechanismMatch = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove current entry if it matches
|
||||||
|
if (realmMatch && mechanismMatch)
|
||||||
|
{
|
||||||
|
System.out.println("RemovingChild");
|
||||||
|
root.removeChild(auth_source_node);
|
||||||
|
|
||||||
|
// Update the file
|
||||||
|
opPerformed = updateFile(filePath, doc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("Invalid entry format");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applications Entry Point
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
String op = null;
|
||||||
|
boolean opPerformed = false;
|
||||||
|
boolean argumentsError = false;
|
||||||
|
String filePath = null;
|
||||||
|
String entry = null;
|
||||||
|
String refEntry = null;
|
||||||
|
|
||||||
|
// Process the command line arguments
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
{
|
||||||
|
// Proceed based on the command
|
||||||
|
if (args[i].compareToIgnoreCase("-list") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "list";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-create") == 0)
|
||||||
|
{
|
||||||
|
// Create operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "create";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-prepend") == 0)
|
||||||
|
{
|
||||||
|
// Prepend operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "prepend";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-append") == 0)
|
||||||
|
{
|
||||||
|
// Append operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "append";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-insert") == 0)
|
||||||
|
{
|
||||||
|
// Insert operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "insert";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-remove") == 0)
|
||||||
|
{
|
||||||
|
// Remove operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "remove";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-entry") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the entry information
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
entry = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-refentry") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the reference entry information
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
refEntry = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-file") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the filepath
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
filePath = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed based on the specified parameters
|
||||||
|
if (argumentsError == false)
|
||||||
|
{
|
||||||
|
if (filePath != null && op != null)
|
||||||
|
{
|
||||||
|
System.out.println("Dealing with policy file: " + filePath);
|
||||||
|
|
||||||
|
// Proceed based on the operation requested
|
||||||
|
if (op.compareTo("list") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = performListOperation(filePath);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("create") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = performCreateOperation(filePath);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("prepend") == 0)
|
||||||
|
{
|
||||||
|
// Verify that the required parameters were specified
|
||||||
|
if (entry != null)
|
||||||
|
{
|
||||||
|
opPerformed = performPrependOperation(filePath, entry);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (op.compareTo("append") == 0)
|
||||||
|
{
|
||||||
|
// Verify that the required parameters were specified
|
||||||
|
if (entry != null)
|
||||||
|
{
|
||||||
|
opPerformed = performAppendOperation(filePath, entry);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (op.compareTo("insert") == 0)
|
||||||
|
{
|
||||||
|
// Verify that the required parameters were specified
|
||||||
|
if (entry != null && refEntry != null)
|
||||||
|
{
|
||||||
|
opPerformed = performInsertOperation(filePath, entry, refEntry);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (op.compareTo("remove") == 0)
|
||||||
|
{
|
||||||
|
// Verify that the required parameters were specified
|
||||||
|
if (entry != null)
|
||||||
|
{
|
||||||
|
opPerformed = performRemoveOperation(filePath, entry);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.err.println("Tool error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the usage string if we encountered an error with the
|
||||||
|
// command line arguments.
|
||||||
|
if (argumentsError)
|
||||||
|
System.out.print(usage);
|
||||||
|
|
||||||
|
// Set the exit code appropriatedly
|
||||||
|
if (opPerformed)
|
||||||
|
System.exit(0);
|
||||||
|
else
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,324 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Class for the creation and editing of authtoken.settings files.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
public class AuthTokenSettingsEditor implements IVerifySetting
|
||||||
|
{
|
||||||
|
private static final String usage =
|
||||||
|
"java authtoken_settings_editor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
|
||||||
|
" where:\n" +
|
||||||
|
" -op - Corresponds to one of the following operations:\n" +
|
||||||
|
" -create - Create new authtoken settings file\n" +
|
||||||
|
" -list - List settings\n" +
|
||||||
|
" -get - Get settings, must be followed by settingName parameter\n" +
|
||||||
|
" -set - Set settings, must be followed by settingName and settingValue parameters\n" +
|
||||||
|
" -remove - Remove settings\n" +
|
||||||
|
" -file - Path the the authtoken settings file\n" +
|
||||||
|
" settingName - Name of the setting being retrieved or set\n" +
|
||||||
|
" settingValue - Value of the setting being set\n\n" +
|
||||||
|
" The following settings are valid:\n" +
|
||||||
|
" TokenLifetime\n" +
|
||||||
|
" LifetimeShorter\n";
|
||||||
|
|
||||||
|
private static final String settings =
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||||
|
"<settings>\n" +
|
||||||
|
"</settings>\n";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @return True if the specified setting is valid.
|
||||||
|
*/
|
||||||
|
public boolean validSetting(String setting)
|
||||||
|
{
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(AuthTokenConfig.TokenLifetime) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(AuthTokenConfig.LifetimeShorter) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(AuthTokenConfig.IdentityTokenType) == 0)
|
||||||
|
result = true;
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid in conjunction
|
||||||
|
* with the specified value.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @param value The value of the specified setting.
|
||||||
|
* @return The formal name of the setting if found to be valid.
|
||||||
|
*/
|
||||||
|
public String validSettingNameAndValue(String setting,
|
||||||
|
String value)
|
||||||
|
{
|
||||||
|
String validSetting = null;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(AuthTokenConfig.TokenLifetime) == 0)
|
||||||
|
{
|
||||||
|
// Verify that we are dealing with a numeric value
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer.valueOf(value);
|
||||||
|
|
||||||
|
// Good
|
||||||
|
validSetting = AuthTokenConfig.TokenLifetime;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
System.out.println("Invalid setting value specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(AuthTokenConfig.LifetimeShorter) == 0)
|
||||||
|
{
|
||||||
|
// Verify that we are dealing with a numeric value
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer.valueOf(value);
|
||||||
|
|
||||||
|
// Good
|
||||||
|
validSetting = AuthTokenConfig.LifetimeShorter;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
System.out.println("Invalid setting value specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(AuthTokenConfig.IdentityTokenType) == 0)
|
||||||
|
{
|
||||||
|
// Always succeed
|
||||||
|
validSetting = AuthTokenConfig.IdentityTokenType;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return validSetting;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applications Entry Point
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
String op = null;
|
||||||
|
boolean opPerformed = false;
|
||||||
|
boolean argumentsError = false;
|
||||||
|
String filePath = null;
|
||||||
|
String setting = null;
|
||||||
|
String value = null;
|
||||||
|
authtoken_settings_editor editor = new authtoken_settings_editor();
|
||||||
|
|
||||||
|
// Process the command line arguments
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
{
|
||||||
|
// Proceed based on the command
|
||||||
|
if (args[i].compareToIgnoreCase("-file") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the filepath
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
filePath = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-list") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "list";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-create") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "create";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-get") == 0)
|
||||||
|
{
|
||||||
|
// Get setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "get";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-set") == 0)
|
||||||
|
{
|
||||||
|
// Set setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "set";
|
||||||
|
|
||||||
|
// The next two arguments should contain the setting name
|
||||||
|
// and the setting value.
|
||||||
|
if (args.length > (i + 2))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
value = args[i + 2];
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-remove") == 0)
|
||||||
|
{
|
||||||
|
// Remove setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "remove";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed based on the specified parameters
|
||||||
|
if (argumentsError == false)
|
||||||
|
{
|
||||||
|
if (filePath != null && op != null)
|
||||||
|
{
|
||||||
|
System.out.println("Dealing with settings file: " + filePath);
|
||||||
|
|
||||||
|
// Proceed based on the operation requested
|
||||||
|
if (op.compareTo("list") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performListOperation(filePath);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("create") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performCreateOperation(filePath, settings);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("get") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performGetOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("set") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performSetOperation(filePath, setting, value, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("remove") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performRemoveOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.err.println("Tool error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the usage string if we encountered an error with the
|
||||||
|
// command line arguments.
|
||||||
|
if (argumentsError)
|
||||||
|
System.out.print(usage);
|
||||||
|
|
||||||
|
// Set the exit code appropriatedly
|
||||||
|
if (opPerformed)
|
||||||
|
System.exit(0);
|
||||||
|
else
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Interface exported by users of the SettingsFileUtil class.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IVerifySetting
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @return True if the specified setting is valid.
|
||||||
|
*/
|
||||||
|
boolean validSetting(String setting);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid in conjunction
|
||||||
|
* with the specified value.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @param value The value of the specified setting.
|
||||||
|
* @return The formal name of the setting if found to be valid.
|
||||||
|
*/
|
||||||
|
String validSettingNameAndValue(String setting,
|
||||||
|
String value);
|
||||||
|
}
|
@ -0,0 +1,297 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Class for the creation and editing of identtoken.settings files.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
public class IdenTokenSettingsEditor implements IVerifySetting
|
||||||
|
{
|
||||||
|
private static final String usage =
|
||||||
|
"java identoken_settings_editor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
|
||||||
|
" where:\n" +
|
||||||
|
" -op - Corresponds to one of the following operations:\n" +
|
||||||
|
" -create - Create new identoken settings file\n" +
|
||||||
|
" -list - List settings\n" +
|
||||||
|
" -get - Get settings, must be followed by settingName parameter\n" +
|
||||||
|
" -set - Set settings, must be followed by settingName and settingValue parameters\n" +
|
||||||
|
" -remove - Remove settings\n" +
|
||||||
|
" -file - Path the the identoken settings file\n" +
|
||||||
|
" settingName - Name of the setting being retrieved or set\n" +
|
||||||
|
" settingValue - Value of the setting being set\n\n" +
|
||||||
|
" The following settings are valid:\n" +
|
||||||
|
" Attributes\n";
|
||||||
|
|
||||||
|
private static final String settings =
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||||
|
"<settings>\n" +
|
||||||
|
"</settings>\n";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @return True if the specified setting is valid.
|
||||||
|
*/
|
||||||
|
public boolean validSetting(String setting)
|
||||||
|
{
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(IdenTokenConfig.EncryptAttributes) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(IdenTokenConfig.Attributes) == 0)
|
||||||
|
result = true;
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid in conjunction
|
||||||
|
* with the specified value.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @param value The value of the specified setting.
|
||||||
|
* @return The formal name of the setting if found to be valid.
|
||||||
|
*/
|
||||||
|
public String validSettingNameAndValue(String setting,
|
||||||
|
String value)
|
||||||
|
{
|
||||||
|
String validSetting = null;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(IdenTokenConfig.EncryptAttributes) == 0)
|
||||||
|
{
|
||||||
|
// Always succeed
|
||||||
|
validSetting = IdenTokenConfig.EncryptAttributes;
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(IdenTokenConfig.Attributes) == 0)
|
||||||
|
{
|
||||||
|
// Always succeed
|
||||||
|
validSetting = IdenTokenConfig.Attributes;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return validSetting;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applications Entry Point
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
String op = null;
|
||||||
|
boolean opPerformed = false;
|
||||||
|
boolean argumentsError = false;
|
||||||
|
String filePath = null;
|
||||||
|
String setting = null;
|
||||||
|
String value = null;
|
||||||
|
identoken_settings_editor editor = new identoken_settings_editor();
|
||||||
|
|
||||||
|
// Process the command line arguments
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
{
|
||||||
|
// Proceed based on the command
|
||||||
|
if (args[i].compareToIgnoreCase("-file") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the filepath
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
filePath = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-list") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "list";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-create") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "create";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-get") == 0)
|
||||||
|
{
|
||||||
|
// Get setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "get";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-set") == 0)
|
||||||
|
{
|
||||||
|
// Set setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "set";
|
||||||
|
|
||||||
|
// The next two arguments should contain the setting name
|
||||||
|
// and the setting value.
|
||||||
|
if (args.length > (i + 2))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
value = args[i + 2];
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-remove") == 0)
|
||||||
|
{
|
||||||
|
// Remove setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "remove";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed based on the specified parameters
|
||||||
|
if (argumentsError == false)
|
||||||
|
{
|
||||||
|
if (filePath != null && op != null)
|
||||||
|
{
|
||||||
|
System.out.println("Dealing with settings file: " + filePath);
|
||||||
|
|
||||||
|
// Proceed based on the operation requested
|
||||||
|
if (op.compareTo("list") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performListOperation(filePath);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("create") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performCreateOperation(filePath, settings);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("get") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performGetOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("set") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performSetOperation(filePath, setting, value, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("remove") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performRemoveOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.err.println("Tool error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the usage string if we encountered an error with the
|
||||||
|
// command line arguments.
|
||||||
|
if (argumentsError)
|
||||||
|
System.out.print(usage);
|
||||||
|
|
||||||
|
// Set the exit code appropriatedly
|
||||||
|
if (opPerformed)
|
||||||
|
System.exit(0);
|
||||||
|
else
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
@ -49,7 +49,13 @@ JAVAFILES = ProtoDefs.java \
|
|||||||
Krb5Authenticate.java \
|
Krb5Authenticate.java \
|
||||||
PwdAuthenticate.java \
|
PwdAuthenticate.java \
|
||||||
SessionToken.java \
|
SessionToken.java \
|
||||||
WSSecurity.java
|
WSSecurity.java \
|
||||||
|
AuthPolicyEditor.java \
|
||||||
|
AuthTokenSettingsEditor.java \
|
||||||
|
IdenTokenSettingsEditor.java \
|
||||||
|
IVerifySetting.java \
|
||||||
|
SettingsFileUtil.java \
|
||||||
|
SvcSettingsEditor.java
|
||||||
|
|
||||||
EXTRA_DIST = $(JAVAFILES) \
|
EXTRA_DIST = $(JAVAFILES) \
|
||||||
Krb5_mechanism.settings \
|
Krb5_mechanism.settings \
|
||||||
|
@ -0,0 +1,429 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
import org.apache.xerces.parsers.DOMParser;
|
||||||
|
import org.apache.xml.serialize.OutputFormat;
|
||||||
|
import org.apache.xml.serialize.XMLSerializer;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Class for the creation and editing of settings files.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
public class SettingsFileUtil
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Gets document for the specified settings file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @return Document representation of the settings file.
|
||||||
|
*/
|
||||||
|
private static Document getSettingsFileDoc(String filePath)
|
||||||
|
{
|
||||||
|
Document doc = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Get an input stream to read from settings file
|
||||||
|
File f = new File(filePath);
|
||||||
|
FileInputStream inStream = new FileInputStream(f);
|
||||||
|
InputSource source = new InputSource(inStream);
|
||||||
|
|
||||||
|
DOMParser parser = new DOMParser();
|
||||||
|
parser.parse(source);
|
||||||
|
doc = parser.getDocument();
|
||||||
|
|
||||||
|
inStream.close();
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException e)
|
||||||
|
{
|
||||||
|
System.err.println("Settings file " + filePath + " not found");
|
||||||
|
doc = null;
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.err.println("SecurityException accessing " + filePath);
|
||||||
|
doc = null;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.err.println("IOException accessing " + filePath + " Exception=" + e.toString());
|
||||||
|
doc = null;
|
||||||
|
}
|
||||||
|
catch (SAXException e)
|
||||||
|
{
|
||||||
|
System.err.println("Settings file " + filePath + " format error");
|
||||||
|
doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a starting settings document
|
||||||
|
*
|
||||||
|
* @param settings String with starting settings document.
|
||||||
|
* @return Starting settings document.
|
||||||
|
*/
|
||||||
|
private static Document getSettingsDoc(String settings)
|
||||||
|
{
|
||||||
|
Document doc = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
StringReader reader = new StringReader(settings);
|
||||||
|
InputSource source = new InputSource(reader);
|
||||||
|
|
||||||
|
DOMParser parser = new DOMParser();
|
||||||
|
parser.parse(source);
|
||||||
|
doc = parser.getDocument();
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("Program error, exception: " + e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List all of the settings present in the specified file.
|
||||||
|
*
|
||||||
|
* @param filePath` Path to the settings file.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
public static boolean performListOperation(String filePath)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// List the settings present in the file
|
||||||
|
Document doc = getSettingsFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node child;
|
||||||
|
Node next = root.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE)
|
||||||
|
{
|
||||||
|
System.out.println(child.getLocalName() + "=" + child.getTextContent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create settings file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @param settings String containing an settings document.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
public static boolean performCreateOperation(String filePath,
|
||||||
|
String settings)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// create a settings file
|
||||||
|
Document doc = getSettingsDoc(settings);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File f = new File(filePath);
|
||||||
|
boolean createStatus = f.createNewFile();
|
||||||
|
if (createStatus == true)
|
||||||
|
{
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
OutputFormat format = new OutputFormat(doc);
|
||||||
|
XMLSerializer serializer = new XMLSerializer(out, format);
|
||||||
|
serializer.serialize(doc.getDocumentElement());
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println("File " + filePath + " already exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Error creating file " + filePath + ", exception: " + e.toString());
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("SecurityException creating " + filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets value of the specified setting in the specified settings file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @param setting Name of the setting being queried.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
public static boolean performGetOperation(String filePath,
|
||||||
|
String setting,
|
||||||
|
IVerifySetting settingVerifier)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Validate the setting name specified
|
||||||
|
if (settingVerifier.validSetting(setting))
|
||||||
|
{
|
||||||
|
// Get settings present in the file
|
||||||
|
Document doc = getSettingsFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document until
|
||||||
|
// we find the one specified.
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node child;
|
||||||
|
Node next = root.getFirstChild();
|
||||||
|
boolean settingFound = false;
|
||||||
|
while ((child = next) != null
|
||||||
|
&& settingFound == false)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& child.getLocalName().compareToIgnoreCase(setting) == 0)
|
||||||
|
{
|
||||||
|
System.out.println(child.getLocalName() + "=" + child.getTextContent());
|
||||||
|
settingFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settingFound == false)
|
||||||
|
System.out.println("Not set");
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the specified setting in the specified settings file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @param setting`` Name of the setting to be set.
|
||||||
|
* @param value Value to be assigned to the setting.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
public static boolean performSetOperation(String filePath,
|
||||||
|
String setting,
|
||||||
|
String value,
|
||||||
|
IVerifySetting settingVerifier)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Validate specified setting name and value
|
||||||
|
String formalSetting;
|
||||||
|
if ((formalSetting = settingVerifier.validSettingNameAndValue(setting, value)) != null)
|
||||||
|
{
|
||||||
|
// Get settings present in the file
|
||||||
|
Document doc = getSettingsFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document until
|
||||||
|
// we find the one specified.
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node child;
|
||||||
|
Node next = (Node) root.getFirstChild();
|
||||||
|
boolean settingFound = false;
|
||||||
|
while ((child = next) != null
|
||||||
|
&& settingFound == false)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& child.getLocalName().compareToIgnoreCase(setting) == 0)
|
||||||
|
{
|
||||||
|
// Change the value of the setting
|
||||||
|
child.setTextContent(value);
|
||||||
|
settingFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settingFound == false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Element element = doc.createElement(formalSetting);
|
||||||
|
element.setTextContent(value);
|
||||||
|
root.appendChild(element);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
System.err.println("Exception caught " + e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the file after removing the text nodes
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Remove text nodes
|
||||||
|
next = (Node) root.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.TEXT_NODE)
|
||||||
|
{
|
||||||
|
// Remove the node
|
||||||
|
root.removeChild(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update file
|
||||||
|
File f = new File(filePath);
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
OutputFormat format = new OutputFormat(doc);
|
||||||
|
XMLSerializer serializer = new XMLSerializer(out, format);
|
||||||
|
serializer.serialize(doc.getDocumentElement());
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Error writing to file " + filePath + ", exception: " + e.toString());
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("SecurityException writting to file " + filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove specified setting from the specified settings file.
|
||||||
|
*
|
||||||
|
* @param filePath Path to the settings file.
|
||||||
|
* @param setting Name of the setting to be removed.
|
||||||
|
* @return True if the operation is successfully performed.
|
||||||
|
*/
|
||||||
|
public static boolean performRemoveOperation(String filePath,
|
||||||
|
String setting,
|
||||||
|
IVerifySetting settingVerifier)
|
||||||
|
{
|
||||||
|
boolean opPerformed = false;
|
||||||
|
|
||||||
|
// Validate specified setting name
|
||||||
|
if (settingVerifier.validSetting(setting))
|
||||||
|
{
|
||||||
|
// Get settings present in the file
|
||||||
|
Document doc = getSettingsFileDoc(filePath);
|
||||||
|
if (doc != null)
|
||||||
|
{
|
||||||
|
// Go through the elements of the document until
|
||||||
|
// we find the one specified.
|
||||||
|
Element root = doc.getDocumentElement();
|
||||||
|
Node child;
|
||||||
|
Node next = (Node) root.getFirstChild();
|
||||||
|
boolean settingFound = false;
|
||||||
|
while ((child = next) != null
|
||||||
|
&& settingFound == false)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
&& child.getLocalName().compareToIgnoreCase(setting) == 0)
|
||||||
|
{
|
||||||
|
// Remove the element from the document
|
||||||
|
root.removeChild(child);
|
||||||
|
settingFound = true;
|
||||||
|
|
||||||
|
// Update the file after removing the text nodes
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Remove text nodes
|
||||||
|
next = (Node) root.getFirstChild();
|
||||||
|
while ((child = next) != null)
|
||||||
|
{
|
||||||
|
next = child.getNextSibling();
|
||||||
|
if (child.getNodeType() == Node.TEXT_NODE)
|
||||||
|
{
|
||||||
|
// Remove the node
|
||||||
|
root.removeChild(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update file
|
||||||
|
File f = new File(filePath);
|
||||||
|
FileOutputStream out = new FileOutputStream(f);
|
||||||
|
OutputFormat format = new OutputFormat(doc);
|
||||||
|
XMLSerializer serializer = new XMLSerializer(out, format);
|
||||||
|
serializer.serialize(doc.getDocumentElement());
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Error writing to file " + filePath + ", exception: " + e.toString());
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("SecurityException writting to file " + filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settingFound == false)
|
||||||
|
{
|
||||||
|
// Succeed anyway
|
||||||
|
opPerformed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return opPerformed;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,374 @@
|
|||||||
|
/***********************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; version 2.1
|
||||||
|
* of the License.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, Novell, Inc.
|
||||||
|
*
|
||||||
|
* To contact Novell about this file by physical or electronic mail,
|
||||||
|
* you may find current contact information at www.novell.com.
|
||||||
|
*
|
||||||
|
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
package com.novell.casa.authtoksvc;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Class for the creation and editing of svc.settings files.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
public class SvcSettingsEditor implements IVerifySetting
|
||||||
|
{
|
||||||
|
private static final String usage =
|
||||||
|
"java svc_settings_editor -op [settingName [settingValue]] -file settingsFilePath\n\n" +
|
||||||
|
" where:\n" +
|
||||||
|
" -op - Corresponds to one of the following operations:\n" +
|
||||||
|
" -create - Create new svc settings file\n" +
|
||||||
|
" -list - List settings\n" +
|
||||||
|
" -get - Get settings, must be followed by settingName parameter\n" +
|
||||||
|
" -set - Set settings, must be followed by settingName and settingValue parameters\n" +
|
||||||
|
" -remove - Remove settings\n" +
|
||||||
|
" -file - Path the the svc settings file\n" +
|
||||||
|
" settingName - Name of the setting being retrieved or set\n" +
|
||||||
|
" settingValue - Value of the setting being set\n\n" +
|
||||||
|
" The following settings are valid:\n" +
|
||||||
|
" SessionTokenLifetime\n" +
|
||||||
|
" LifetimeShorter\n" +
|
||||||
|
" IAConfigFile\n" +
|
||||||
|
" ReconfigureInterval\n" +
|
||||||
|
" KeyStoreUser\n" +
|
||||||
|
" KeyStorePwd\n";
|
||||||
|
|
||||||
|
private static final String settings =
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||||
|
"<settings>\n" +
|
||||||
|
" <IAConfigFile>/etc/CASA/authtoken/svc/iaRealms.xml</IAConfigFile>\n" +
|
||||||
|
"</settings>\n";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @return True if the specified setting is valid.
|
||||||
|
*/
|
||||||
|
public boolean validSetting(String setting)
|
||||||
|
{
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(SvcConfig.SessionTokenLifetime) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.LifetimeShorter) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.IdentityAbstractionConfigFile) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.ReconfigureInterval) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.KeyStoreUser) == 0)
|
||||||
|
result = true;
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.KeyStorePwd) == 0)
|
||||||
|
result = true;
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the specified setting is valid in conjunction
|
||||||
|
* with the specified value.
|
||||||
|
*
|
||||||
|
* @param setting The name of the setting being checked.
|
||||||
|
* @param value The value of the specified setting.
|
||||||
|
* @return The formal name of the setting if found to be valid.
|
||||||
|
*/
|
||||||
|
public String validSettingNameAndValue(String setting,
|
||||||
|
String value)
|
||||||
|
{
|
||||||
|
String validSetting = null;
|
||||||
|
|
||||||
|
if (setting.compareToIgnoreCase(SvcConfig.SessionTokenLifetime) == 0)
|
||||||
|
{
|
||||||
|
// Verify that we are dealing with a numeric value
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer.valueOf(value);
|
||||||
|
|
||||||
|
// Good
|
||||||
|
validSetting = SvcConfig.SessionTokenLifetime;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
System.out.println("Invalid setting value specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.LifetimeShorter) == 0)
|
||||||
|
{
|
||||||
|
// Verify that we are dealing with a numeric value
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer.valueOf(value);
|
||||||
|
|
||||||
|
// Good
|
||||||
|
validSetting = SvcConfig.LifetimeShorter;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
System.out.println("Invalid setting value specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.IdentityAbstractionConfigFile) == 0)
|
||||||
|
{
|
||||||
|
// Output a warning if the specified file does not exist
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File f = new File(value);
|
||||||
|
if (f.exists() == false)
|
||||||
|
{
|
||||||
|
System.out.println("Warning: File " + value + " does not exist");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SecurityException e)
|
||||||
|
{
|
||||||
|
System.out.println("Warning: Not able to access file " + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always succeed
|
||||||
|
validSetting = SvcConfig.IdentityAbstractionConfigFile;
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.ReconfigureInterval) == 0)
|
||||||
|
{
|
||||||
|
// Verify that we are dealing with a numeric value
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Integer.valueOf(value);
|
||||||
|
|
||||||
|
// Good
|
||||||
|
validSetting = SvcConfig.ReconfigureInterval;
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e)
|
||||||
|
{
|
||||||
|
System.out.println("Invalid setting value specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.KeyStoreUser) == 0)
|
||||||
|
{
|
||||||
|
validSetting = SvcConfig.KeyStoreUser;
|
||||||
|
}
|
||||||
|
else if (setting.compareToIgnoreCase(SvcConfig.KeyStorePwd) == 0)
|
||||||
|
{
|
||||||
|
validSetting = SvcConfig.KeyStorePwd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
System.out.println("Invalid setting specified");
|
||||||
|
|
||||||
|
return validSetting;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applications Entry Point
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
String op = null;
|
||||||
|
boolean opPerformed = false;
|
||||||
|
boolean argumentsError = false;
|
||||||
|
String filePath = null;
|
||||||
|
String setting = null;
|
||||||
|
String value = null;
|
||||||
|
svc_settings_editor editor = new svc_settings_editor();
|
||||||
|
|
||||||
|
// Process the command line arguments
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
{
|
||||||
|
// Proceed based on the command
|
||||||
|
if (args[i].compareToIgnoreCase("-file") == 0)
|
||||||
|
{
|
||||||
|
// The next argument should contain the filepath
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
filePath = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-list") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "list";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-create") == 0)
|
||||||
|
{
|
||||||
|
// List operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "create";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-get") == 0)
|
||||||
|
{
|
||||||
|
// Get setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "get";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-set") == 0)
|
||||||
|
{
|
||||||
|
// Set setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "set";
|
||||||
|
|
||||||
|
// The next two arguments should contain the setting name
|
||||||
|
// and the setting value.
|
||||||
|
if (args.length > (i + 2))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
value = args[i + 2];
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args[i].compareToIgnoreCase("-remove") == 0)
|
||||||
|
{
|
||||||
|
// Remove setting operation requested
|
||||||
|
if (op == null)
|
||||||
|
{
|
||||||
|
op = "remove";
|
||||||
|
|
||||||
|
// The next argument should contain the setting name
|
||||||
|
if (args.length > (i + 1))
|
||||||
|
{
|
||||||
|
setting = args[i + 1];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proceed based on the specified parameters
|
||||||
|
if (argumentsError == false)
|
||||||
|
{
|
||||||
|
if (filePath != null && op != null)
|
||||||
|
{
|
||||||
|
System.out.println("Dealing with settings file: " + filePath);
|
||||||
|
|
||||||
|
// Proceed based on the operation requested
|
||||||
|
if (op.compareTo("list") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performListOperation(filePath);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("create") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performCreateOperation(filePath, settings);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("get") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performGetOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("set") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performSetOperation(filePath, setting, value, editor);
|
||||||
|
}
|
||||||
|
else if (op.compareTo("remove") == 0)
|
||||||
|
{
|
||||||
|
opPerformed = SettingsFileUtil.performRemoveOperation(filePath, setting, editor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.err.println("Tool error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argumentsError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the usage string if we encountered an error with the
|
||||||
|
// command line arguments.
|
||||||
|
if (argumentsError)
|
||||||
|
System.out.print(usage);
|
||||||
|
|
||||||
|
// Set the exit code appropriatedly
|
||||||
|
if (opPerformed)
|
||||||
|
System.exit(0);
|
||||||
|
else
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user