Imported GNU Classpath 0.92

2006-08-14  Mark Wielaard  <mark@klomp.org>

       Imported GNU Classpath 0.92
       * HACKING: Add more importing hints. Update automake version
       requirement.

       * configure.ac (gconf-peer): New enable AC argument.
       Add --disable-gconf-peer and --enable-default-preferences-peer
       to classpath configure when gconf is disabled.
       * scripts/makemake.tcl: Set gnu/java/util/prefs/gconf and
       gnu/java/awt/dnd/peer/gtk to bc. Classify
       gnu/java/security/Configuration.java as generated source file.

       * gnu/java/lang/management/VMGarbageCollectorMXBeanImpl.java,
       gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java,
       gnu/java/lang/management/VMClassLoadingMXBeanImpl.java,
       gnu/java/lang/management/VMRuntimeMXBeanImpl.java,
       gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java,
       gnu/java/lang/management/VMThreadMXBeanImpl.java,
       gnu/java/lang/management/VMMemoryMXBeanImpl.java,
       gnu/java/lang/management/VMCompilationMXBeanImpl.java: New VM stub
       classes.
       * java/lang/management/VMManagementFactory.java: Likewise.
       * java/net/VMURLConnection.java: Likewise.
       * gnu/java/nio/VMChannel.java: Likewise.

       * java/lang/Thread.java (getState): Add stub implementation.
       * java/lang/Class.java (isEnum): Likewise.
       * java/lang/Class.h (isEnum): Likewise.

       * gnu/awt/xlib/XToolkit.java (getClasspathTextLayoutPeer): Removed.

       * javax/naming/spi/NamingManager.java: New override for StackWalker
       functionality.

       * configure, sources.am, Makefile.in, gcj/Makefile.in,
       include/Makefile.in, testsuite/Makefile.in: Regenerated.

From-SVN: r116139
This commit is contained in:
Mark Wielaard
2006-08-14 23:12:35 +00:00
parent abab460491
commit ac1ed908de
1294 changed files with 99479 additions and 35933 deletions
+31 -9
View File
@@ -26,8 +26,9 @@ endif
## gcc/libjava/Makefile.am.
# if CREATE_WRAPPERS
# bin_SCRIPTS =
# bin_PROGRAMS = gappletviewer gjarsigner gkeytool
# bin_PROGRAMS = gappletviewer gjarsigner gkeytool \
# gjar gnative2ascii gserialver
#
# if FOUND_GCJ
# LIBJVM = -lgcj
# else
@@ -37,34 +38,55 @@ endif
# LIBJVM =
# endif
# endif
#
# AM_CPPFLAGS = -Wall \
# -I$(top_srcdir)/include \
# -DTOOLS_ZIP="\"$(TOOLSdir)/$(TOOLS_ZIP)\""
#
# gappletviewer_SOURCES = toolwrapper.c
# gappletviewer_CFLAGS = \
# -DTOOLPACKAGE="\"appletviewer\"" \
# -DTOOLNAME="\"gappletviewer\""
# gappletviewer_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gjarsigner_SOURCES = toolwrapper.c
# gjarsigner_CFLAGS = \
# -DTOOLPACKAGE="\"jarsigner\"" \
# -DTOOLNAME="\"gjarsigner\""
# gjarsigner_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gkeytool_SOURCES = toolwrapper.c
# gkeytool_CFLAGS = \
# -DTOOLPACKAGE="\"keytool\"" \
# -DTOOLNAME="\"gkeytool\""
# gkeytool_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gjar_SOURCES = toolwrapper.c
# gjar_CFLAGS = \
# -DTOOLPACKAGE="\"jar\"" \
# -DTOOLNAME="\"gjar\""
# gjar_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gnative2ascii_SOURCES = toolwrapper.c
# gnative2ascii_CFLAGS = \
# -DTOOLPACKAGE="\"native2ascii\"" \
# -DTOOLNAME="\"gnative2ascii\""
# gnative2ascii_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gserialver_SOURCES = toolwrapper.c
# gserialver_CFLAGS = \
# -DTOOLPACKAGE="\"serialver\"" \
# -DTOOLNAME="\"gserialver\""
# gserialver_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# else
# bin_SCRIPTS = gappletviewer gjarsigner gkeytool
# bin_SCRIPTS = gappletviewer gjarsigner gkeytool \
# gjar gnative2ascii gserialver
# bin_PROGRAMS =
# endif
EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in
## END GCJ LOCAL
EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in \
gjar.in gnative2ascii.in gserialver.in
# All our example java source files
TOOLS_JAVA_FILES = $(srcdir)/gnu/classpath/tools/*.java $(srcdir)/gnu/classpath/tools/*/*.java $(srcdir)/gnu/classpath/tools/*/*/*.java
+59 -11
View File
@@ -39,7 +39,10 @@ host_triplet = @host@
target_triplet = @target@
subdir = tools
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/appletviewer.in $(srcdir)/jarsigner.in \
$(srcdir)/appletviewer.in $(srcdir)/gappletviewer.in \
$(srcdir)/gjar.in $(srcdir)/gjarsigner.in \
$(srcdir)/gkeytool.in $(srcdir)/gnative2ascii.in \
$(srcdir)/gserialver.in $(srcdir)/jarsigner.in \
$(srcdir)/keytool.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
@@ -53,7 +56,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/include/config.h
CONFIG_CLEAN_FILES = appletviewer jarsigner keytool
CONFIG_CLEAN_FILES = gappletviewer gjarsigner gkeytool gjar \
gnative2ascii gserialver appletviewer jarsigner keytool
SOURCES =
DIST_SOURCES =
DATA = $(noinst_DATA)
@@ -88,6 +92,8 @@ CREATE_CORE_JNI_LIBRARIES_FALSE = @CREATE_CORE_JNI_LIBRARIES_FALSE@
CREATE_CORE_JNI_LIBRARIES_TRUE = @CREATE_CORE_JNI_LIBRARIES_TRUE@
CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
CREATE_GCONF_PEER_LIBRARIES_FALSE = @CREATE_GCONF_PEER_LIBRARIES_FALSE@
CREATE_GCONF_PEER_LIBRARIES_TRUE = @CREATE_GCONF_PEER_LIBRARIES_TRUE@
CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
CREATE_GTK_PEER_LIBRARIES_TRUE = @CREATE_GTK_PEER_LIBRARIES_TRUE@
CREATE_JNI_HEADERS_FALSE = @CREATE_JNI_HEADERS_FALSE@
@@ -108,6 +114,7 @@ CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATE = @DATE@
DEFAULT_PREFS_PEER = @DEFAULT_PREFS_PEER@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
@@ -138,6 +145,10 @@ FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
FREETYPE2_LIBS = @FREETYPE2_LIBS@
GCJ = @GCJ@
GCJX = @GCJX@
GCONF_CFLAGS = @GCONF_CFLAGS@
GCONF_LIBS = @GCONF_LIBS@
GDK_CFLAGS = @GDK_CFLAGS@
GDK_LIBS = @GDK_LIBS@
GJDOC = @GJDOC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
@@ -188,6 +199,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@
PANGOFT2_LIBS = @PANGOFT2_LIBS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TO_ESCHER = @PATH_TO_ESCHER@
PATH_TO_GLIBJ_ZIP = @PATH_TO_GLIBJ_ZIP@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
@@ -208,6 +220,8 @@ USER_SPECIFIED_CLASSLIB_FALSE = @USER_SPECIFIED_CLASSLIB_FALSE@
USER_SPECIFIED_CLASSLIB_TRUE = @USER_SPECIFIED_CLASSLIB_TRUE@
USER_SPECIFIED_JAVAH_FALSE = @USER_SPECIFIED_JAVAH_FALSE@
USER_SPECIFIED_JAVAH_TRUE = @USER_SPECIFIED_JAVAH_TRUE@
USE_ESCHER_FALSE = @USE_ESCHER_FALSE@
USE_ESCHER_TRUE = @USE_ESCHER_TRUE@
USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
@@ -282,8 +296,9 @@ GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
# if CREATE_WRAPPERS
# bin_SCRIPTS =
# bin_PROGRAMS = gappletviewer gjarsigner gkeytool
# bin_PROGRAMS = gappletviewer gjarsigner gkeytool \
# gjar gnative2ascii gserialver
#
# if FOUND_GCJ
# LIBJVM = -lgcj
# else
@@ -293,34 +308,55 @@ GLIBJ_CLASSPATH = '$(top_builddir)/lib':'$(top_builddir)/lib/glibj.zip'
# LIBJVM =
# endif
# endif
#
# AM_CPPFLAGS = -Wall \
# -I$(top_srcdir)/include \
# -DTOOLS_ZIP="\"$(TOOLSdir)/$(TOOLS_ZIP)\""
#
# gappletviewer_SOURCES = toolwrapper.c
# gappletviewer_CFLAGS = \
# -DTOOLPACKAGE="\"appletviewer\"" \
# -DTOOLNAME="\"gappletviewer\""
# gappletviewer_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gjarsigner_SOURCES = toolwrapper.c
# gjarsigner_CFLAGS = \
# -DTOOLPACKAGE="\"jarsigner\"" \
# -DTOOLNAME="\"gjarsigner\""
# gjarsigner_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gkeytool_SOURCES = toolwrapper.c
# gkeytool_CFLAGS = \
# -DTOOLPACKAGE="\"keytool\"" \
# -DTOOLNAME="\"gkeytool\""
# gkeytool_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gjar_SOURCES = toolwrapper.c
# gjar_CFLAGS = \
# -DTOOLPACKAGE="\"jar\"" \
# -DTOOLNAME="\"gjar\""
# gjar_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gnative2ascii_SOURCES = toolwrapper.c
# gnative2ascii_CFLAGS = \
# -DTOOLPACKAGE="\"native2ascii\"" \
# -DTOOLNAME="\"gnative2ascii\""
# gnative2ascii_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# gserialver_SOURCES = toolwrapper.c
# gserialver_CFLAGS = \
# -DTOOLPACKAGE="\"serialver\"" \
# -DTOOLNAME="\"gserialver\""
# gserialver_LDFLAGS = -L$(libdir) $(LIBJVM)
#
# else
# bin_SCRIPTS = gappletviewer gjarsigner gkeytool
# bin_SCRIPTS = gappletviewer gjarsigner gkeytool \
# gjar gnative2ascii gserialver
# bin_PROGRAMS =
# endif
EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in
EXTRA_DIST = toolwrapper.c gappletviewer.in gjarsigner.in gkeytool.in \
gjar.in gnative2ascii.in gserialver.in
# All our example java source files
TOOLS_JAVA_FILES = $(srcdir)/gnu/classpath/tools/*.java $(srcdir)/gnu/classpath/tools/*/*.java $(srcdir)/gnu/classpath/tools/*/*/*.java
@@ -383,6 +419,18 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
gappletviewer: $(top_builddir)/config.status $(srcdir)/gappletviewer.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
gjarsigner: $(top_builddir)/config.status $(srcdir)/gjarsigner.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
gkeytool: $(top_builddir)/config.status $(srcdir)/gkeytool.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
gjar: $(top_builddir)/config.status $(srcdir)/gjar.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
gnative2ascii: $(top_builddir)/config.status $(srcdir)/gnative2ascii.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
gserialver: $(top_builddir)/config.status $(srcdir)/gserialver.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
appletviewer: $(top_builddir)/config.status $(srcdir)/appletviewer.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
jarsigner: $(top_builddir)/config.status $(srcdir)/jarsigner.in
+46
View File
@@ -0,0 +1,46 @@
#!/bin/sh
## Copyright (C) 2006 Free Software Foundation, Inc.
##
## This file is a part of GNU Classpath.
##
## GNU Classpath is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or (at
## your option) any later version.
##
## GNU Classpath 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with GNU Classpath; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
## USA.
##
## Linking this library statically or dynamically with other modules is
## making a combined work based on this library. Thus, the terms and
## conditions of the GNU General Public License cover the whole
## combination.
##
## As a special exception, the copyright holders of this library give you
## permission to link this library with independent modules to produce an
## executable, regardless of the license terms of these independent
## modules, and to copy and distribute the resulting executable under
## terms of your choice, provided that you also meet, for each linked
## independent module, the terms and conditions of the license of that
## module. An independent module is a module which is not derived from
## or based on this library. If you modify this library, you may extend
## this exception to your version of the library, but you are not
## obligated to do so. If you do not wish to do so, delete this
## exception statement from your version.
##
## A simple shell script to launch the GNU Classpath appletviewer tool.
##
prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.appletviewer.Main "$@"
+47
View File
@@ -0,0 +1,47 @@
#!/bin/sh
## Copyright (C) 2006 Free Software Foundation, Inc.
##
## This file is a part of GNU Classpath.
##
## GNU Classpath is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or (at
## your option) any later version.
##
## GNU Classpath 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with GNU Classpath; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
## USA.
##
## Linking this library statically or dynamically with other modules is
## making a combined work based on this library. Thus, the terms and
## conditions of the GNU General Public License cover the whole
## combination.
##
## As a special exception, the copyright holders of this library give you
## permission to link this library with independent modules to produce an
## executable, regardless of the license terms of these independent
## modules, and to copy and distribute the resulting executable under
## terms of your choice, provided that you also meet, for each linked
## independent module, the terms and conditions of the license of that
## module. An independent module is a module which is not derived from
## or based on this library. If you modify this library, you may extend
## this exception to your version of the library, but you are not
## obligated to do so. If you do not wish to do so, delete this
## exception statement from your version.
##
##
## A simple shell script to launch the GNU Classpath jar tool.
##
prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.jar.Main "$@"
@@ -44,20 +44,4 @@ prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
# find the java executable...
if [ -z "${JAVA}" ] ; then
if [ -n "${JAVA_HOME}" ] ; then
if [ -x "${JAVA_HOME}/jre/sh/java" ] ; then
JAVA="${JAVA_HOME}/jre/sh/java"
else
JAVA="${JAVA_HOME}/bin/java"
fi
else
JAVA=`which java 2> /dev/null `
if [ -z "${JAVA}" ] ; then
JAVA=java
fi
fi
fi
exec "${JAVA}" -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.jarsigner.Main $@
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.jarsigner.Main "$@"
@@ -44,20 +44,4 @@ prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
# find the java executable...
if [ -z "${JAVA}" ] ; then
if [ -n "${JAVA_HOME}" ] ; then
if [ -x "${JAVA_HOME}/jre/sh/java" ] ; then
JAVA="${JAVA_HOME}/jre/sh/java"
else
JAVA="${JAVA_HOME}/bin/java"
fi
else
JAVA=`which java 2> /dev/null `
if [ -z "${JAVA}" ] ; then
JAVA=java
fi
fi
fi
exec "${JAVA}" -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.keytool.Main $@
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.keytool.Main "$@"
+47
View File
@@ -0,0 +1,47 @@
#!/bin/sh
## Copyright (C) 2006 Free Software Foundation, Inc.
##
## This file is a part of GNU Classpath.
##
## GNU Classpath is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or (at
## your option) any later version.
##
## GNU Classpath 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with GNU Classpath; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
## USA.
##
## Linking this library statically or dynamically with other modules is
## making a combined work based on this library. Thus, the terms and
## conditions of the GNU General Public License cover the whole
## combination.
##
## As a special exception, the copyright holders of this library give you
## permission to link this library with independent modules to produce an
## executable, regardless of the license terms of these independent
## modules, and to copy and distribute the resulting executable under
## terms of your choice, provided that you also meet, for each linked
## independent module, the terms and conditions of the license of that
## module. An independent module is a module which is not derived from
## or based on this library. If you modify this library, you may extend
## this exception to your version of the library, but you are not
## obligated to do so. If you do not wish to do so, delete this
## exception statement from your version.
##
##
## A simple shell script to launch the GNU Classpath native2ascii tool.
##
prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.native2ascii.Main "$@"
@@ -199,7 +199,7 @@ class StandaloneAppletWindow
menuApplet.add(closeItem);
menuApplet.add(quitItem);
setMenuBar(menuBar);
setTitle("GCJ Applet Viewer: " + tag.code);
setTitle("GNU Classpath Applet Viewer: " + tag.code);
AppletContext context = (AppletContext) contexts.get(tag.codebase);
((StandaloneAppletContext) context).addApplet(applet);
@@ -316,6 +316,9 @@ public class Parser
int eq = option.indexOf('=');
if (eq != - 1)
justName = option.substring(0, eq);
char shortName = 0;
if (justName.length() == 1)
shortName = justName.charAt(0);
Option found = null;
for (int i = options.size() - 1; i >= 0; --i)
{
@@ -325,6 +328,11 @@ public class Parser
found = opt;
break;
}
if (shortName != 0 && opt.getShortName() == shortName)
{
found = opt;
break;
}
}
if (found == null)
{
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import gnu.java.security.hash.Sha160;
import gnu.java.security.util.Base64;
import gnu.java.util.jar.JarUtils;
@@ -76,9 +77,9 @@ class HashUtils
sha.update(buffer, 0, n);
count += n;
}
byte[] hash = sha.digest();
log.finest("Hashed " + count + " byte(s)");
if (Configuration.DEBUG)
log.finest("Hashed " + count + " byte(s)");
String result = Base64.encode(hash);
return result;
}
@@ -92,7 +93,8 @@ class HashUtils
{
sha.update(ba);
byte[] hash = sha.digest();
log.finest("Hashed " + ba.length + " byte(s)");
if (Configuration.DEBUG)
log.finest("Hashed " + ba.length + " byte(s)");
String result = Base64.encode(hash);
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.java.util.jar.JarUtils;
@@ -69,8 +70,8 @@ public class JarSigner
void start() throws Exception
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
JarFile jarFile = new JarFile(main.getJarFileName());
SFHelper sfHelper = new SFHelper(jarFile);
@@ -119,19 +120,22 @@ public class JarSigner
String signaturesFileName = main.getSigFileName();
String sfFileName = JarUtils.META_INF + signaturesFileName
+ JarUtils.SF_SUFFIX;
log.finest("Processing " + sfFileName); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Processing " + sfFileName); //$NON-NLS-1$
JarEntry sfEntry = new JarEntry(sfFileName);
sfEntry.setTime(System.currentTimeMillis());
outSignedJarFile.putNextEntry(sfEntry);
sfHelper.writeSF(outSignedJarFile);
log.finer("Created .SF file"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Created .SF file"); //$NON-NLS-1$
if (main.isVerbose())
System.out.println(Messages.getString("JarSigner.8") + sfFileName); //$NON-NLS-1$
// 4. create the .DSA file
String dsaFileName = JarUtils.META_INF + signaturesFileName
+ JarUtils.DSA_SUFFIX;
log.finest("Processing " + dsaFileName); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Processing " + dsaFileName); //$NON-NLS-1$
JarEntry dsaEntry = new JarEntry(dsaFileName);
dsaEntry.setTime(System.currentTimeMillis());
outSignedJarFile.putNextEntry(dsaEntry);
@@ -139,7 +143,8 @@ public class JarSigner
main.getSignerPrivateKey(),
main.getSignerCertificateChain(),
main.isInternalSF());
log.finer("Created .DSA file"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Created .DSA file"); //$NON-NLS-1$
if (main.isVerbose())
System.out.println(Messages.getString("JarSigner.8") + dsaFileName); //$NON-NLS-1$
@@ -147,12 +152,13 @@ public class JarSigner
outSignedJarFile.close();
fos.close();
signedJarFile.renameTo(new File(main.getSignedJarFileName()));
log.finer("Renamed signed JAR file"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Renamed signed JAR file"); //$NON-NLS-1$
if (main.isVerbose())
System.out.println(SystemProperties.getProperty("line.separator") //$NON-NLS-1$
+ Messages.getString("JarSigner.14")); //$NON-NLS-1$
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
private void copyFromTo(InputStream in, JarOutputStream out)
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import gnu.java.security.OID;
import gnu.java.security.Registry;
import gnu.java.security.pkcs.PKCS7SignedData;
@@ -94,8 +95,8 @@ public class JarVerifier
void start() throws Exception
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
String jarFileName = main.getJarFileName();
jarFile = new JarFile(jarFileName);
@@ -144,8 +145,8 @@ public class JarVerifier
System.out.println(Messages.getFormattedString("JarVerifier.7", //$NON-NLS-1$
Integer.valueOf(limit)));
}
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
/**
@@ -162,9 +163,11 @@ public class JarVerifier
private boolean verifySF(String sigFileName) throws CRLException,
CertificateException, ZipException, IOException
{
log.entering(this.getClass().getName(), "verifySF"); //$NON-NLS-1$
log.finest("About to verify signature of " + sigFileName + "..."); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
{
log.entering(this.getClass().getName(), "verifySF"); //$NON-NLS-1$
log.fine("About to verify signature of " + sigFileName + "..."); //$NON-NLS-1$ //$NON-NLS-2$
}
// 1. find the corresponding .DSA file for this .SF file
JarEntry dsaEntry = jarFile.getJarEntry(JarUtils.META_INF + sigFileName
+ JarUtils.DSA_SUFFIX);
@@ -186,12 +189,14 @@ public class JarVerifier
if (encryptedDigest == null)
throw new SecurityException(Messages.getString("JarVerifier.16")); //$NON-NLS-1$
log.finest("\n" + Util.dumpString(encryptedDigest, "--- signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("\n" + Util.dumpString(encryptedDigest, "--- signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
// 5. get the signer public key
Certificate cert = pkcs7SignedData.getCertificates()[0];
PublicKey verifierKey = cert.getPublicKey();
log.finest("--- verifier public key = " + verifierKey); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("--- verifier public key = " + verifierKey); //$NON-NLS-1$
// 6. verify the signature file signature
OID digestEncryptionAlgorithmOID = signerInfo.getDigestEncryptionAlgorithmId();
@@ -225,10 +230,12 @@ public class JarVerifier
signatureAlgorithm.update(buffer, 0, n);
boolean result = signatureAlgorithm.verify(herSignature);
log.finer("Signature block [" + sigFileName + "] is " //$NON-NLS-1$ //$NON-NLS-2$
+ (result ? "" : "NOT ") + "OK"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
log.exiting(this.getClass().getName(), "verifySF", Boolean.valueOf(result)); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("Signature block [" + sigFileName + "] is " //$NON-NLS-1$ //$NON-NLS-2$
+ (result ? "" : "NOT ") + "OK"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
log.exiting(this.getClass().getName(), "verifySF", Boolean.valueOf(result)); //$NON-NLS-1$
}
return result;
}
@@ -250,8 +257,8 @@ public class JarVerifier
*/
private boolean verifySFEntries(String alias) throws IOException
{
log.entering(this.getClass().getName(), "verifySFEntries"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "verifySFEntries"); //$NON-NLS-1$
// 1. read the signature file
JarEntry jarEntry = jarFile.getJarEntry(JarUtils.META_INF + alias
+ JarUtils.SF_SUFFIX);
@@ -291,8 +298,9 @@ public class JarVerifier
break;
}
log.exiting(this.getClass().getName(), "verifySFEntries",
Boolean.valueOf(result)); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "verifySFEntries", //$NON-NLS-1$
Boolean.valueOf(result));
return result;
}
@@ -319,7 +327,8 @@ public class JarVerifier
{
String expectedValue = getEntryHash(JarFile.MANIFEST_NAME);
boolean result = expectedValue.equalsIgnoreCase(hash);
log.finest("Is " + name + " OK? " + result); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("Is " + name + " OK? " + result); //$NON-NLS-1$ //$NON-NLS-2$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.classpath.tools.common.CallbackUtil;
import gnu.classpath.tools.common.ProviderUtil;
@@ -131,8 +132,8 @@ public class Main
public static final void main(String[] args)
{
log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
Main tool = new Main();
int result = 1;
try
@@ -143,20 +144,22 @@ public class Main
}
catch (SecurityException x)
{
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
System.err.println(Messages.getString("Main.7") + x.getMessage()); //$NON-NLS-1$
}
catch (Exception x)
{
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
System.err.println(Messages.getString("Main.9") + x); //$NON-NLS-1$
}
finally
{
tool.teardown();
}
log.exiting(Main.class.getName(), "main", Integer.valueOf(result)); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(Main.class.getName(), "main", Integer.valueOf(result)); //$NON-NLS-1$
System.exit(result);
}
@@ -171,8 +174,8 @@ public class Main
*/
private void processArgs(String[] args) throws Exception
{
log.entering(this.getClass().getName(), "processArgs", args); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "processArgs", args); //$NON-NLS-1$
cmdLineParser = new ToolParser();
cmdLineParser.initializeParser();
cmdLineParser.parse(args, new ToolParserCallback());
@@ -180,36 +183,41 @@ public class Main
setupCommonParams();
if (verify)
{
log.finer("Will verify with the following parameters:"); //$NON-NLS-1$
log.finer(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer("Options:"); //$NON-NLS-1$
log.finer(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" verbose ? " + verbose); //$NON-NLS-1$
log.finer(" certs ? " + certs); //$NON-NLS-1$
log.finer(" internalsf ? " + internalSF); //$NON-NLS-1$
log.finer(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("Will verify with the following parameters:"); //$NON-NLS-1$
log.fine(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine("Options:"); //$NON-NLS-1$
log.fine(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" verbose ? " + verbose); //$NON-NLS-1$
log.fine(" certs ? " + certs); //$NON-NLS-1$
log.fine(" internalsf ? " + internalSF); //$NON-NLS-1$
log.fine(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
}
}
else // sign
{
setupSigningParams();
log.finer("Will sign with the following parameters:"); //$NON-NLS-1$
log.finer(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" alias = '" + alias + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer("Options:"); //$NON-NLS-1$
log.finer(" keystore = '" + ksURL + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" storetype = '" + ksType + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" storepass = '" + ksPassword + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" keypass = '" + password + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" sigfile = '" + sigFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" signedjar = '" + signedJarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.finer(" verbose ? " + verbose); //$NON-NLS-1$
log.finer(" internalsf ? " + internalSF); //$NON-NLS-1$
log.finer(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("Will sign with the following parameters:"); //$NON-NLS-1$
log.fine(" jar-file = '" + jarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" alias = '" + alias + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine("Options:"); //$NON-NLS-1$
log.fine(" keystore = '" + ksURL + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" storetype = '" + ksType + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" storepass = '" + ksPassword + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" keypass = '" + password + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" sigfile = '" + sigFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" signedjar = '" + signedJarFileName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" provider = '" + providerClassName + "'"); //$NON-NLS-1$ //$NON-NLS-2$
log.fine(" verbose ? " + verbose); //$NON-NLS-1$
log.fine(" internalsf ? " + internalSF); //$NON-NLS-1$
log.fine(" sectionsonly ? " + sectionsOnly); //$NON-NLS-1$
}
}
log.exiting(this.getClass().getName(), "processArgs"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "processArgs"); //$NON-NLS-1$
}
/**
@@ -222,8 +230,8 @@ public class Main
*/
private void start() throws Exception
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (verify)
{
JarVerifier jv = new JarVerifier(this);
@@ -234,8 +242,8 @@ public class Main
JarSigner js = new JarSigner(this);
js.start();
}
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
/**
@@ -249,12 +257,13 @@ public class Main
*/
private void teardown()
{
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (providerInstalled)
ProviderUtil.removeProvider(provider.getName());
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
}
/**
@@ -279,8 +288,8 @@ public class Main
private void setupCommonParams() throws InstantiationException,
IllegalAccessException, ClassNotFoundException, IOException
{
log.entering(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
File jar = new File(jarFileName);
if (! jar.exists())
throw new FileNotFoundException(jarFileName);
@@ -298,18 +307,23 @@ public class Main
String providerName = provider.getName();
Provider installedProvider = Security.getProvider(providerName);
if (installedProvider != null)
log.finer("Provider " + providerName + " is already installed"); //$NON-NLS-1$ //$NON-NLS-2$
{
if (Configuration.DEBUG)
log.finer("Provider " + providerName + " is already installed"); //$NON-NLS-1$ //$NON-NLS-2$
}
else // install it
installNewProvider();
}
if (! verbose && certs)
{
log.fine("Option <certs> is set but <verbose> is not. Ignored"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Option <certs> is set but <verbose> is not. Ignored"); //$NON-NLS-1$
certs = false;
}
log.exiting(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "setupCommonParams"); //$NON-NLS-1$
}
/**
@@ -319,11 +333,11 @@ public class Main
*/
private void installNewProvider()
{
log.entering(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
providerInstalled = ProviderUtil.addProvider(provider) != -1;
log.exiting(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "installNewProvider"); //$NON-NLS-1$
}
/**
@@ -349,8 +363,8 @@ public class Main
NoSuchAlgorithmException, CertificateException,
UnsupportedCallbackException, UnrecoverableKeyException
{
log.entering(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
if (ksURL == null || ksURL.trim().length() == 0)
{
String userHome = SystemProperties.getProperty("user.home"); //$NON-NLS-1$
@@ -424,7 +438,8 @@ public class Main
signerPrivateKey = (PrivateKey) key;
signerCertificateChain = store.getCertificateChain(alias);
log.finest(String.valueOf(signerCertificateChain));
if (Configuration.DEBUG)
log.fine(String.valueOf(signerCertificateChain));
if (sigFileName == null)
sigFileName = alias;
@@ -449,7 +464,8 @@ public class Main
if (signedJarFileName == null)
signedJarFileName = jarFileName;
log.exiting(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "setupSigningParams"); //$NON-NLS-1$
}
boolean isVerbose()
@@ -547,7 +563,8 @@ public class Main
if (! verify) // must have an ALIAS. use "mykey" if undefined
if (fileAndAlias.size() < 2)
{
log.finer("Missing ALIAS argument. Will use [mykey] instead"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Missing ALIAS argument. Will use [mykey] instead"); //$NON-NLS-1$
alias = "mykey"; //$NON-NLS-1$
}
else
@@ -38,6 +38,8 @@
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
@@ -99,8 +101,9 @@ class Messages
}
catch (IllegalArgumentException x)
{
log.fine("Exception while rendering a message format keyed by ["
+ key + "]: " + mf.toPattern());
if (Configuration.DEBUG)
log.fine("Exception while rendering a message format keyed by ["
+ key + "]: " + mf.toPattern());
return constructMessage(mf.toPattern(), args);
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.jarsigner;
import gnu.classpath.Configuration;
import gnu.java.security.OID;
import gnu.java.security.Registry;
import gnu.java.security.der.DER;
@@ -62,10 +63,13 @@ import java.security.PrivateKey;
import java.security.cert.CRLException;
import java.security.cert.Certificate;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509CRL;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.RSAPrivateKey;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -142,7 +146,8 @@ public class SFHelper
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JarUtils.writeSFManifest(sfMainAttributes, sfEntries, baos);
sfBytes = baos.toByteArray();
log.finest("\n" + Util.dumpString(sfBytes, "+++ sfBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("\n" + Util.dumpString(sfBytes, "+++ sfBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
jar.write(sfBytes);
jar.flush();
@@ -216,7 +221,8 @@ public class SFHelper
if (this.state != SF_GENERATED)
throw new IllegalStateException(Messages.getString("SFHelper.4")); //$NON-NLS-1$
log.finest("+++ signer private key = " + signerKey); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("+++ signer private key = " + signerKey); //$NON-NLS-1$
ISignature signatureAlgorithm;
ISignatureCodec signatureCodec;
OID digestEncryptionAlgorithmOID;
@@ -241,7 +247,8 @@ public class SFHelper
signatureAlgorithm.update(sfBytes, 0, sfBytes.length);
Object signature = signatureAlgorithm.sign();
byte[] signedSFBytes = signatureCodec.encodeSignature(signature);
log.finest("\n" + Util.dumpString(signedSFBytes, "+++ signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("\n" + Util.dumpString(signedSFBytes, "+++ signedSFBytes ")); //$NON-NLS-1$ //$NON-NLS-2$
Set digestAlgorithms = new HashSet();
List digestAlgorithm = new ArrayList(2);
@@ -261,6 +268,30 @@ public class SFHelper
Set signerInfos = new HashSet();
X509Certificate cert = (X509Certificate) certificates[0];
try
{
cert.checkValidity();
}
catch (CertificateExpiredException x)
{
String issuerName = getIssuerName(cert);
String subjectName = getSubjectName(cert);
Date notAfterDate = getNotAfterDate(cert);
System.out.println(Messages.getFormattedString("SFHelper.0", //$NON-NLS-1$
new Object[] { issuerName,
subjectName,
notAfterDate }));
}
catch (CertificateNotYetValidException x)
{
String issuerName = getIssuerName(cert);
String subjectName = getSubjectName(cert);
Date notBeforeDate = getNotBeforeDate(cert);
System.out.println(Messages.getFormattedString("SFHelper.11", //$NON-NLS-1$
new Object[] { issuerName,
subjectName,
notBeforeDate }));
}
X500Principal issuer = cert.getIssuerX500Principal();
BigInteger serialNumber = cert.getSerialNumber();
byte[] authenticatedAttributes = null;
@@ -322,7 +353,8 @@ public class SFHelper
String name = entry.getName();
InputStream jeis = jar.getInputStream(entry);
String hash = util.hashStream(jeis);
log.finer("Hash of " + name + " = " + hash); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("Hash of " + name + " = " + hash); //$NON-NLS-1$ //$NON-NLS-2$
Attributes mainfestAttributes = manifest.getAttributes(name);
if (mainfestAttributes == null)
@@ -344,9 +376,12 @@ public class SFHelper
}
sfAttributes.putValue(Main.DIGEST, sfHash);
log.finest("Name: " + name); //$NON-NLS-1$
log.finest(Main.DIGEST + ": " + sfHash); //$NON-NLS-1$
log.finest(""); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("Name: " + name); //$NON-NLS-1$
log.fine(Main.DIGEST + ": " + sfHash); //$NON-NLS-1$
log.fine(""); //$NON-NLS-1$
}
}
/**
@@ -365,9 +400,106 @@ public class SFHelper
manifest.write(baos);
baos.flush();
String manifestHash = util.hashByteArray(baos.toByteArray());
log.fine("Hashed Manifest " + manifestHash); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Hashed Manifest " + manifestHash); //$NON-NLS-1$
sfMainAttributes.putValue(Main.DIGEST_MANIFEST, manifestHash);
this.state = FINISHED;
}
/**
* Given an X.509 certificate this method returns the string representation of
* the Issuer Distinguished Name.
*
* @param cert an X.509 certificate.
* @return the string representation of the Issuer's DN.
*/
private String getIssuerName(X509Certificate cert)
{
X500Principal xp = cert.getIssuerX500Principal();
if (xp == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has null Issuer. Return [unknown]"); //$NON-NLS-1$
return Messages.getString("SFHelper.14"); //$NON-NLS-1$
}
String result = xp.getName();
if (result == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has an Issuer with null DN. Return [unnamed]"); //$NON-NLS-1$
return Messages.getString("SFHelper.17"); //$NON-NLS-1$
}
return result;
}
/**
* Given an X.509 certificate this method returns the string representation of
* the Subject Distinguished Name.
*
* @param cert an X.509 certificate.
* @return the string representation of the Subject's DN.
*/
private String getSubjectName(X509Certificate cert)
{
X500Principal xp = cert.getSubjectX500Principal();
if (xp == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has null Subject. Return [unknown]"); //$NON-NLS-1$
return Messages.getString("SFHelper.14"); //$NON-NLS-1$
}
String result = xp.getName();
if (result == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has a Subject with null DN. Return [unnamed]"); //$NON-NLS-1$
return Messages.getString("SFHelper.17"); //$NON-NLS-1$
}
return result;
}
/**
* Given an X.509 certificate this method returns the end validity date of
* this certificate.
*
* @param cert an X.509 certificate.
* @return the date when this certificate stops being valid.
*/
private Date getNotAfterDate(X509Certificate cert)
{
Date result = cert.getNotAfter();
if (result == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has null start-validity date. Return epoch"); //$NON-NLS-1$
return new Date(0);
}
return result;
}
/**
* Given an X.509 certificate this method returns the start validity date of
* this certificate.
*
* @param cert an X.509 certificate.
* @return the date when this certificate starts being valid.
*/
private Date getNotBeforeDate(X509Certificate cert)
{
Date result = cert.getNotBefore();
if (result == null)
{
if (Configuration.DEBUG)
log.fine("Certiticate, with serial number " + cert.getSerialNumber() //$NON-NLS-1$
+ ", has null end-validity date. Return epoch"); //$NON-NLS-1$
return new Date(0);
}
return result;
}
}
@@ -0,0 +1,313 @@
/* CACertCmd.java -- GNU specific cacert handler
Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath 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
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
import gnu.classpath.tools.getopt.OptionGroup;
import gnu.classpath.tools.getopt.Parser;
import java.io.File;
import java.io.IOException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.util.logging.Logger;
/**
* The <code>-cacert</code> keytol command handler is used to import a CA
* trusted X.509 certificate into a key store.
* <p>
* Possible options for this command are:
* <p>
* <dl>
* <dt>-file FILE_NAME</dt>
* <dd>The fully qualified path of the file containing the trusted CA
* certificate to import. If omitted, the tool will process STDIN.
* <p></dd>
*
* <dt>-storetype STORE_TYPE</dt>
* <dd>Use this option to specify the type of the key store to use. The
* default value, if this option is omitted, is that of the property
* <code>keystore.type</code> in the security properties file, which is
* obtained by invoking the {@link java.security.KeyStore#getDefaultType()}
* static method.
* <p></dd>
*
* <dt>-keystore URL</dt>
* <dd>Use this option to specify the location of the key store to use.
* The default value is a file {@link java.net.URL} referencing the file
* named <code>.keystore</code> located in the path returned by the call to
* {@link java.lang.System#getProperty(String)} using <code>user.home</code>
* as argument.
* <p>
* If a URL was specified, but was found to be malformed --e.g. missing
* protocol element-- the tool will attempt to use the URL value as a file-
* name (with absolute or relative path-name) of a key store --as if the
* protocol was <code>file:</code>.
* <p></dd>
*
* <dt>-storepass PASSWORD</dt>
* <dd>Use this option to specify the password protecting the key store. If
* this option is omitted from the command line, you will be prompted to
* provide a password.
* <p></dd>
*
* <dt>-provider PROVIDER_CLASS_NAME</dt>
* <dd>A fully qualified class name of a Security Provider to add to the
* current list of Security Providers already installed in the JVM in-use.
* If a provider class is specified with this option, and was successfully
* added to the runtime --i.e. it was not already installed-- then the tool
* will attempt to removed this Security Provider before exiting.
* <p></dd>
*
* <dt>-v</dt>
* <dd>Use this option to enable more verbose output.</dd>
* </dl>
*/
public class CACertCmd
extends Command
{
private static final Logger log = Logger.getLogger(CACertCmd.class.getName());
/** Pathname of the file containing the CA certificate to import. */
protected String _certFileName;
/** Type of the key store to use. */
protected String _ksType;
/** The URL to the keystore where the trusted certificates will be added. */
protected String _ksURL;
/** The password protecting the keystore. */
protected String _ksPassword;
/** Class name of a security provider to use. */
protected String _providerClassName;
/** Reference to the X.509 factory. */
private CertificateFactory x509Factory;
// default 0-arguments constructor
// public setters -----------------------------------------------------------
/** @param pathName the fully qualified path name of the file to process. */
public void setFile(String pathName)
{
this._certFileName = pathName;
}
/** @param type the key-store type to use. */
public void setStoretype(String type)
{
this._ksType = type;
}
/** @param url the key-store URL to use. */
public void setKeystore(String url)
{
this._ksURL = url;
}
/** @param password the key-store password to use. */
public void setStorepass(String password)
{
this._ksPassword = password;
}
/** @param className a security provider fully qualified class name to use. */
public void setProvider(String className)
{
this._providerClassName = className;
}
// life-cycle methods -------------------------------------------------------
/* (non-Javadoc)
* @see gnu.classpath.tools.keytool.Command#setup()
*/
void setup() throws Exception
{
setInputStreamParam(_certFileName);
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
if (Configuration.DEBUG)
{
log.fine("-cacert handler will use the following options:"); //$NON-NLS-1$
log.fine(" -file=" + _certFileName); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws CertificateException, KeyStoreException,
NoSuchAlgorithmException, IOException
{
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
alias = getAliasFromFileName(_certFileName);
if (store.containsAlias(alias))
throw new IllegalArgumentException(Messages.getFormattedString("CACertCmd.0", //$NON-NLS-1$
alias));
x509Factory = CertificateFactory.getInstance("X.509"); //$NON-NLS-1$
Certificate certificate = x509Factory.generateCertificate(inStream);
if (Configuration.DEBUG)
log.fine("certificate = " + certificate); //$NON-NLS-1$
store.setCertificateEntry(alias, certificate);
saveKeyStore();
if (verbose)
System.out.println(Messages.getFormattedString("CACertCmd.1", //$NON-NLS-1$
new Object[] { _certFileName,
alias }));
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
/* (non-Javadoc)
* @see gnu.classpath.tools.keytool.Command#getParser()
*/
Parser getParser()
{
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.CACERT_CMD, true);
result.setHeader(Messages.getString("CACertCmd.2")); //$NON-NLS-1$
result.setFooter(Messages.getString("CACertCmd.3")); //$NON-NLS-1$
OptionGroup options = new OptionGroup(Messages.getString("CACertCmd.4")); //$NON-NLS-1$
options.add(new Option(Main.FILE_OPT,
Messages.getString("CACertCmd.5"), //$NON-NLS-1$
Messages.getString("CACertCmd.6")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
_certFileName = argument;
}
});
options.add(new Option(Main.STORETYPE_OPT,
Messages.getString("CACertCmd.7"), //$NON-NLS-1$
Messages.getString("CACertCmd.8")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
_ksType = argument;
}
});
options.add(new Option(Main.KEYSTORE_OPT,
Messages.getString("CACertCmd.9"), //$NON-NLS-1$
Messages.getString("CACertCmd.10")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
_ksURL = argument;
}
});
options.add(new Option(Main.STOREPASS_OPT,
Messages.getString("CACertCmd.11"), //$NON-NLS-1$
Messages.getString("CACertCmd.12")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
_ksPassword = argument;
}
});
options.add(new Option(Main.PROVIDER_OPT,
Messages.getString("CACertCmd.13"), //$NON-NLS-1$
Messages.getString("CACertCmd.14")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
_providerClassName = argument;
}
});
options.add(new Option(Main.VERBOSE_OPT,
Messages.getString("CACertCmd.15")) //$NON-NLS-1$
{
public void parsed(String argument) throws OptionException
{
verbose = true;
}
});
result.add(options);
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
/**
* Construct an Alias string from the name of the file containing the
* certificate to import. This method first removes the last dot (".")
* character and any subsequent characters from the input name, and then
* replaces any space and dot characters with underscores. For example the
* input string <code>brasil.gov.br.cert</code> will result in
* <code>brasil_gov_br</code> as its alias.
*
* @param fileName the name of the file containing the CA certificate
* @return a string which can, and will, be used as the Alias of this CA
* certificate.
*/
private String getAliasFromFileName(String fileName)
{
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getAliasFromFileName", fileName); //$NON-NLS-1$
// get the basename
fileName = new File(fileName).getName();
// remove '.' if at start
if (fileName.startsWith(".")) //$NON-NLS-1$
fileName = fileName.substring(1);
// remove last \..+
int ndx = fileName.lastIndexOf('.');
if (ndx > 0)
fileName = fileName.substring(0, ndx);
// replace spaces and dots with underscores
char[] chars = fileName.toCharArray();
for (int i = 0; i < chars.length; i++)
{
char c = chars[i];
if (c == ' ' || c == '.')
chars[i] = '_';
}
String result = new String(chars);
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getAliasFromFileName", result); //$NON-NLS-1$
return result;
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -258,24 +259,26 @@ class CertReqCmd extends Command
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setAliasParam(_alias);
setKeyPasswordNoPrompt(_password);
log.finer("-certreq handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -sigalg=" + _sigAlgorithm); //$NON-NLS-1$
log.finer(" -file=" + _certReqFileName); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
log.finer(" -attributes=" + nullAttributes); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-certreq handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -sigalg=" + _sigAlgorithm); //$NON-NLS-1$
log.fine(" -file=" + _certReqFileName); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
log.fine(" -attributes=" + nullAttributes); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
UnsupportedCallbackException, UnrecoverableKeyException,
InvalidKeyException, SignatureException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
// 1. get the key entry and certificate chain associated to alias
Key privateKey = getAliasPrivateKey();
Certificate[] chain = store.getCertificateChain(alias);
@@ -305,16 +308,16 @@ class CertReqCmd extends Command
}
writer.close();
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.CERTREQ_CMD, true);
result.setHeader(Messages.getString("CertReqCmd.25")); //$NON-NLS-1$
result.setFooter(Messages.getString("CertReqCmd.24")); //$NON-NLS-1$
@@ -408,8 +411,8 @@ class CertReqCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.classpath.tools.common.CallbackUtil;
import gnu.classpath.tools.common.ProviderUtil;
@@ -242,12 +243,12 @@ abstract class Command
*/
String[] processArgs(String[] args)
{
log.entering(this.getClass().getName(), "processArgs", args); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "processArgs", args); //$NON-NLS-1$
Parser cmdOptionsParser = getParser();
String[] result = cmdOptionsParser.parse(args);
log.exiting(this.getClass().getName(), "processArgs", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "processArgs", result); //$NON-NLS-1$
return result;
}
@@ -312,8 +313,8 @@ abstract class Command
*/
void teardown()
{
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (storeStream != null)
try
{
@@ -321,8 +322,9 @@ abstract class Command
}
catch (IOException ignored)
{
log.fine("Exception while closing key store URL stream. Ignored: " //$NON-NLS-1$
+ ignored);
if (Configuration.DEBUG)
log.fine("Exception while closing key store URL stream. Ignored: " //$NON-NLS-1$
+ ignored);
}
if (outStream != null)
@@ -357,7 +359,8 @@ abstract class Command
if (providerNdx > 0)
ProviderUtil.removeProvider(provider.getName());
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
}
// parameter setup and validation methods -----------------------------------
@@ -371,6 +374,11 @@ abstract class Command
/**
* Convenience method to setup the key store given its type, its password, its
* location and portentially a specialized security provider.
* <p>
* Calls the method with the same name and 5 arguments passing
* <code>false</code> to the first argument implying that no attempt to
* create the keystore will be made if one was not found at the designated
* location.
*
* @param className the potentially null fully qualified class name of a
* security provider to add at runtime, if no installed provider is
@@ -384,11 +392,32 @@ abstract class Command
String password, String url)
throws IOException, UnsupportedCallbackException, KeyStoreException,
NoSuchAlgorithmException, CertificateException
{
setKeyStoreParams(false, className, type, password, url);
}
/**
* Convenience method to setup the key store given its type, its password, its
* location and portentially a specialized security provider.
*
* @param createIfNotFound if <code>true</code> then create the keystore if
* it was not found; otherwise do not.
* @param className the potentially null fully qualified class name of a
* security provider to add at runtime, if no installed provider is
* able to provide a key store implementation of the desired type.
* @param type the potentially null type of the key store to request from the
* key store factory.
* @param password the potentially null password protecting the key store.
* @param url the URL of the key store.
*/
protected void setKeyStoreParams(boolean createIfNotFound, String className,
String type, String password, String url)
throws IOException, UnsupportedCallbackException, KeyStoreException,
NoSuchAlgorithmException, CertificateException
{
setProviderClassNameParam(className);
setKeystoreTypeParam(type);
setKeystorePasswordParam(password);
setKeystoreURLParam(url);
setKeystoreURLParam(createIfNotFound, url, password);
}
/**
@@ -399,17 +428,20 @@ abstract class Command
* security provider to add, if it is not already installed, to the
* set of available providers.
*/
protected void setProviderClassNameParam(String className)
private void setProviderClassNameParam(String className)
{
log.finest("setProviderClassNameParam(" + className + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("setProviderClassNameParam(" + className + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (className != null && className.trim().length() > 0)
{
className = className.trim();
SecurityProviderInfo spi = ProviderUtil.addProvider(className);
provider = spi.getProvider();
if (provider == null)
log.fine("Was unable to add provider from class " + className);
{
if (Configuration.DEBUG)
log.fine("Was unable to add provider from class " + className);
}
providerNdx = spi.getPosition();
}
}
@@ -424,9 +456,10 @@ abstract class Command
* For GNU Classpath this is <i>gkr</i> which stands for the "Gnu
* KeyRing" specifications.
*/
protected void setKeystoreTypeParam(String type)
private void setKeystoreTypeParam(String type)
{
log.finest("setKeystoreTypeParam(" + type + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("setKeystoreTypeParam(" + type + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (type == null || type.trim().length() == 0)
storeType = KeyStore.getDefaultType();
else
@@ -484,7 +517,7 @@ abstract class Command
* @throws SecurityException if no password is available, even after prompting
* the user.
*/
protected void setKeyPasswordParam() throws IOException,
private void setKeyPasswordParam() throws IOException,
UnsupportedCallbackException
{
String prompt = Messages.getFormattedString("Command.21", alias); //$NON-NLS-1$
@@ -496,7 +529,7 @@ abstract class Command
throw new SecurityException(Messages.getString("Command.23")); //$NON-NLS-1$
}
protected void setKeystorePasswordParam(String password) throws IOException,
private void setKeystorePasswordParam(String password) throws IOException,
UnsupportedCallbackException
{
if (password != null)
@@ -514,18 +547,25 @@ abstract class Command
/**
* Set the key store URL to use.
*
* @param url
* @param createIfNotFound when <code>true</code> an attempt to create a
* keystore at the designated location will be made. If
* <code>false</code> then no file creation is carried out, which
* may cause an exception to be thrown later.
* @param url the full, or partial, URL to the keystore location.
* @param password an eventually null string to use when loading the keystore.
* @throws IOException
* @throws KeyStoreException
* @throws UnsupportedCallbackException
* @throws NoSuchAlgorithmException
* @throws CertificateException
*/
protected void setKeystoreURLParam(String url) throws IOException,
private void setKeystoreURLParam(boolean createIfNotFound, String url,
String password) throws IOException,
KeyStoreException, UnsupportedCallbackException, NoSuchAlgorithmException,
CertificateException
{
log.finest("setKeystoreURLParam(" + url + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("setKeystoreURLParam(" + url + ")"); //$NON-NLS-1$ //$NON-NLS-2$
if (url == null || url.trim().length() == 0)
{
String userHome = SystemProperties.getProperty("user.home"); //$NON-NLS-1$
@@ -533,16 +573,19 @@ abstract class Command
throw new InvalidParameterException(Messages.getString("Command.36")); //$NON-NLS-1$
url = userHome.trim() + "/.keystore"; //$NON-NLS-1$
// if it does not exist create it
new File(url).createNewFile();
// if it does not exist create it if required
if (createIfNotFound)
new File(url).createNewFile();
url = "file:" + url; //$NON-NLS-1$
}
else
{
url = url.trim();
if (url.indexOf(":") == -1) // if it does not exist create it //$NON-NLS-1$
new File(url).createNewFile();
{
if (createIfNotFound)
new File(url).createNewFile();
}
url = "file:" + url; //$NON-NLS-1$
}
@@ -551,7 +594,8 @@ abstract class Command
storeStream = storeURL.openStream();
if (storeStream.available() == 0)
{
log.fine("Store is empty. Will use <null> when loading, to create it"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Store is empty. Will use <null> when loading, to create it"); //$NON-NLS-1$
newKeyStore = true;
}
@@ -564,8 +608,9 @@ abstract class Command
if (provider != null)
throw x;
log.fine("Exception while getting key store with default provider(s)." //$NON-NLS-1$
+ " Will prompt user for another provider and continue"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Exception while getting key store with default provider(s)." //$NON-NLS-1$
+ " Will prompt user for another provider and continue"); //$NON-NLS-1$
String prompt = Messages.getString("Command.40"); //$NON-NLS-1$
NameCallback ncb = new NameCallback(prompt);
getCallbackHandler().handle(new Callback[] { ncb });
@@ -580,6 +625,8 @@ abstract class Command
store = KeyStore.getInstance(storeType, provider);
}
setKeystorePasswordParam(password);
// now we have a KeyStore instance. load it
// KeyStore public API claims: "...In order to create an empty keystore,
// you pass null as the InputStream argument to the load method.
@@ -596,8 +643,9 @@ abstract class Command
}
catch (IOException x)
{
log.fine("Exception while closing the key store input stream: " + x //$NON-NLS-1$
+ ". Ignore"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Exception while closing the key store input stream: " + x //$NON-NLS-1$
+ ". Ignore"); //$NON-NLS-1$
}
}
@@ -818,9 +866,9 @@ abstract class Command
PrivateKey privateKey)
throws IOException, SignatureException, InvalidKeyException
{
log.entering(this.getClass().getName(), "getSelfSignedCertificate", //$NON-NLS-1$
new Object[] { distinguishedName, publicKey, privateKey });
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getSelfSignedCertificate", //$NON-NLS-1$
new Object[] { distinguishedName, publicKey, privateKey });
byte[] versionBytes = new DERValue(DER.INTEGER, BigInteger.ZERO).getEncoded();
DERValue derVersion = new DERValue(DER.CONSTRUCTED | DER.CONTEXT | 0,
versionBytes.length, versionBytes, null);
@@ -901,8 +949,8 @@ abstract class Command
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DERWriter.write(baos, derCertificate);
byte[] result = baos.toByteArray();
log.exiting(this.getClass().getName(), "getSelfSignedCertificate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getSelfSignedCertificate"); //$NON-NLS-1$
return result;
}
@@ -992,8 +1040,8 @@ abstract class Command
protected void saveKeyStore(char[] password) throws IOException,
KeyStoreException, NoSuchAlgorithmException, CertificateException
{
log.entering(this.getClass().getName(), "saveKeyStore"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "saveKeyStore"); //$NON-NLS-1$
URLConnection con = storeURL.openConnection();
con.setDoOutput(true);
con.setUseCaches(false);
@@ -1004,8 +1052,8 @@ abstract class Command
store.store(out, password);
out.flush();
out.close();
log.exiting(this.getClass().getName(), "saveKeyStore"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "saveKeyStore"); //$NON-NLS-1$
}
/**
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -158,33 +159,35 @@ class DeleteCmd extends Command
{
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setTheAlias(_alias);
log.finer("-delete handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-delete handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException,
CertificateException, IOException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
ensureStoreContainsAlias();
store.deleteEntry(alias);
saveKeyStore();
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.DELETE_CMD, true);
result.setHeader(Messages.getString("DeleteCmd.18")); //$NON-NLS-1$
result.setFooter(Messages.getString("DeleteCmd.17")); //$NON-NLS-1$
@@ -243,8 +246,8 @@ class DeleteCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -188,32 +189,36 @@ class ExportCmd extends Command
setOutputStreamParam(_certFileName);
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setAliasParam(_alias);
log.finer("-export handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -file=" + _certFileName); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -rfc=" + rfc); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-export handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -file=" + _certFileName); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -rfc=" + rfc); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, CertificateEncodingException,
IOException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
ensureStoreContainsAlias();
Certificate certificate;
if (store.isCertificateEntry(alias))
{
log.finer("Alias [" + alias + "] is a trusted certificate"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("Alias [" + alias + "] is a trusted certificate"); //$NON-NLS-1$ //$NON-NLS-2$
certificate = store.getCertificate(alias);
}
else
{
log.finer("Alias [" + alias + "] is a key entry"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("Alias [" + alias + "] is a key entry"); //$NON-NLS-1$ //$NON-NLS-2$
Certificate[] chain = store.getCertificateChain(alias);
certificate = chain[0];
}
@@ -231,15 +236,16 @@ class ExportCmd extends Command
outStream.write(derBytes);
// stream is closed in Command.teardown()
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.EXPORT_CMD, true);
result.setHeader(Messages.getString("ExportCmd.17")); //$NON-NLS-1$
result.setFooter(Messages.getString("ExportCmd.18")); //$NON-NLS-1$
@@ -315,8 +321,8 @@ class ExportCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -302,68 +303,76 @@ class GenKeyCmd extends Command
void setup() throws Exception
{
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setKeyStoreParams(true, _providerClassName, _ksType, _ksPassword, _ksURL);
setAliasParam(_alias);
setKeyPasswordParam(_password);
setAlgorithmParams(_keyAlgorithm, _sigAlgorithm);
setKeySize(_keySizeStr);
setDName(_dName);
setValidityParam(_validityStr);
log.finer("-genkey handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -keyalg=" + keyPairGenerator.getAlgorithm()); //$NON-NLS-1$
log.finer(" -keysize=" + keySize); //$NON-NLS-1$
log.finer(" -sigalg=" + signatureAlgorithm.getAlgorithm()); //$NON-NLS-1$
log.finer(" -dname=" + distinguishedName); //$NON-NLS-1$
log.finer(" -validity=" + validityInDays); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-genkey handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -keyalg=" + keyPairGenerator.getAlgorithm()); //$NON-NLS-1$
log.fine(" -keysize=" + keySize); //$NON-NLS-1$
log.fine(" -sigalg=" + signatureAlgorithm.getAlgorithm()); //$NON-NLS-1$
log.fine(" -dname=" + distinguishedName); //$NON-NLS-1$
log.fine(" -validity=" + validityInDays); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws CertificateException, KeyStoreException,
InvalidKeyException, SignatureException, IOException,
NoSuchAlgorithmException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
log.fine("About to generate key-pair..."); //$NON-NLS-1$
}
// 1. generate a new key-pair
log.finer("About to generate key-pair..."); //$NON-NLS-1$
keyPairGenerator.initialize(keySize);
KeyPair kp = keyPairGenerator.generateKeyPair();
PublicKey publicKey = kp.getPublic();
PrivateKey privateKey = kp.getPrivate();
// 2. generate a self-signed certificate
log.finer("About to generate a self-signed certificate..."); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("About to generate a self-signed certificate..."); //$NON-NLS-1$
byte[] derBytes = getSelfSignedCertificate(distinguishedName,
publicKey,
privateKey);
log.finest(Util.dumpString(derBytes, "derBytes ")); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine(Util.dumpString(derBytes, "derBytes ")); //$NON-NLS-1$
CertificateFactory x509Factory = CertificateFactory.getInstance(Main.X_509);
ByteArrayInputStream bais = new ByteArrayInputStream(derBytes);
Certificate certificate = x509Factory.generateCertificate(bais);
log.finest("certificate = " + certificate); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("certificate = " + certificate); //$NON-NLS-1$
// 3. store it, w/ its private key, associating them to alias
Certificate[] chain = new Certificate[] { certificate };
log.finest("About to store newly generated material in key store..."); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("About to store newly generated material in key store..."); //$NON-NLS-1$
store.setKeyEntry(alias, privateKey, keyPasswordChars, chain);
// 4. persist the key store
saveKeyStore();
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.GENKEY_CMD, true);
result.setHeader(Messages.getString("GenKeyCmd.57")); //$NON-NLS-1$
result.setFooter(Messages.getString("GenKeyCmd.58")); //$NON-NLS-1$
@@ -476,8 +485,8 @@ class GenKeyCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -574,8 +583,8 @@ class GenKeyCmd extends Command
name = sb.toString().trim();
}
log.fine("dName=[" + name + "]"); //$NON-NLS-1$ //$NON-NLS-2$
if (Configuration.DEBUG)
log.fine("dName=[" + name + "]"); //$NON-NLS-1$ //$NON-NLS-2$
distinguishedName = new X500DistinguishedName(name);
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -148,22 +149,24 @@ class IdentityDBCmd extends Command
void setup() throws Exception
{
setInputStreamParam(_idbFileName);
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
log.finer("-identitydb handler will use the following options:"); //$NON-NLS-1$
log.finer(" -file=" + _idbFileName); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
setKeyStoreParams(true, _providerClassName, _ksType, _ksPassword, _ksURL);
if (Configuration.DEBUG)
{
log.fine("-identitydb handler will use the following options:"); //$NON-NLS-1$
log.fine(" -file=" + _idbFileName); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.IDENTITYDB_CMD, true);
result.setHeader(Messages.getString("IdentityDBCmd.7")); //$NON-NLS-1$
result.setFooter(Messages.getString("IdentityDBCmd.8")); //$NON-NLS-1$
@@ -222,8 +225,8 @@ class IdentityDBCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
@@ -291,27 +292,29 @@ class ImportCmd extends Command
void setup() throws Exception
{
setInputStreamParam(_certFileName);
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setKeyStoreParams(true, _providerClassName, _ksType, _ksPassword, _ksURL);
setAliasParam(_alias);
setKeyPasswordNoPrompt(_password);
log.finer("-import handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -file=" + _certFileName); //$NON-NLS-1$
log.finer(" -noprompt=" + noPrompt); //$NON-NLS-1$
log.finer(" -trustcacerts=" + trustCACerts); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-import handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -file=" + _certFileName); //$NON-NLS-1$
log.fine(" -noprompt=" + noPrompt); //$NON-NLS-1$
log.fine(" -trustcacerts=" + trustCACerts); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws CertificateException, KeyStoreException, IOException,
UnsupportedCallbackException, NoSuchAlgorithmException,
CertPathValidatorException, UnrecoverableKeyException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (trustCACerts)
{
String fs = SystemProperties.getProperty("file.separator"); //$NON-NLS-1$
@@ -336,16 +339,16 @@ class ImportCmd extends Command
ensureAliasIsKeyEntry();
importCertificateReply();
}
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.IMPORT_CMD, true);
result.setHeader(Messages.getString("ImportCmd.27")); //$NON-NLS-1$
result.setFooter(Messages.getString("ImportCmd.26")); //$NON-NLS-1$
@@ -438,8 +441,8 @@ class ImportCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -480,10 +483,11 @@ class ImportCmd extends Command
UnsupportedCallbackException, CertPathValidatorException,
UnrecoverableKeyException
{
log.entering(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
Certificate certificate = x509Factory.generateCertificate(inStream);
log.finest("certificate = " + certificate); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("certificate = " + certificate); //$NON-NLS-1$
LinkedList orderedReply = new LinkedList();
orderedReply.addLast(certificate);
@@ -495,8 +499,8 @@ class ImportCmd extends Command
}
else
System.out.println(Messages.getString("ImportCmd.28")); //$NON-NLS-1$
log.exiting(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "importNewTrustedCertificate"); //$NON-NLS-1$
}
/**
@@ -525,8 +529,8 @@ class ImportCmd extends Command
NoSuchAlgorithmException, CertPathValidatorException,
UnrecoverableKeyException
{
log.entering(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
Collection certificates = x509Factory.generateCertificates(inStream);
ensureReplyIsOurs(certificates);
// we now have established that the public keys are the same.
@@ -535,8 +539,8 @@ class ImportCmd extends Command
importCertificate((Certificate) certificates.iterator().next());
else
importChain(certificates);
log.exiting(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "importCertificateReply"); //$NON-NLS-1$
}
/**
@@ -564,8 +568,8 @@ class ImportCmd extends Command
KeyStoreException, UnrecoverableKeyException, IOException,
UnsupportedCallbackException, CertificateException
{
log.entering(this.getClass().getName(), "importCertificate", certificate); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "importCertificate", certificate); //$NON-NLS-1$
LinkedList reply = new LinkedList();
reply.addLast(certificate);
@@ -576,8 +580,8 @@ class ImportCmd extends Command
Key privateKey = getAliasPrivateKey();
store.setKeyEntry(alias, privateKey, keyPasswordChars, newChain);
saveKeyStore();
log.exiting(this.getClass().getName(), "importCertificate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "importCertificate"); //$NON-NLS-1$
}
/**
@@ -608,8 +612,8 @@ class ImportCmd extends Command
CertPathValidatorException, KeyStoreException, UnrecoverableKeyException,
IOException, UnsupportedCallbackException, CertificateException
{
log.entering(this.getClass().getName(), "importChain", chain); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "importChain", chain); //$NON-NLS-1$
LinkedList reply = orderChain(chain);
if (findTrustAndUpdate(reply, ! noPrompt))
{
@@ -618,8 +622,8 @@ class ImportCmd extends Command
store.setKeyEntry(alias, privateKey, keyPasswordChars, newChain);
saveKeyStore();
}
log.exiting(this.getClass().getName(), "importChain"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "importChain"); //$NON-NLS-1$
}
/**
@@ -638,10 +642,11 @@ class ImportCmd extends Command
private void ensureReplyIsOurs(Collection certificates) throws IOException,
UnsupportedCallbackException, KeyStoreException
{
log.entering(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
Certificate certificate = (Certificate) certificates.iterator().next();
log.finest("certificate = " + certificate); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("certificate = " + certificate); //$NON-NLS-1$
Certificate[] chain = store.getCertificateChain(alias);
if (chain == null)
throw new IllegalArgumentException(Messages.getFormattedString("ImportCmd.37", //$NON-NLS-1$
@@ -673,8 +678,8 @@ class ImportCmd extends Command
anchorPublicKey.getClass().getName() }));
if (! sameKey)
throw new IllegalArgumentException(Messages.getString("ImportCmd.41")); //$NON-NLS-1$
log.exiting(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "ensureReplyIsOurs"); //$NON-NLS-1$
}
private boolean areEqual(DSAPublicKey pk1, DSAPublicKey pk2)
@@ -726,7 +731,8 @@ class ImportCmd extends Command
*/
private LinkedList orderChain(Collection chain)
{
log.entering(this.getClass().getName(), "orderChain"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "orderChain"); //$NON-NLS-1$
LinkedList in = new LinkedList(chain);
int initialCount = in.size();
LinkedList result = new LinkedList();
@@ -750,7 +756,8 @@ class ImportCmd extends Command
new Object[] { Integer.valueOf(result.size()),
Integer.valueOf(initialCount) }));
}
log.entering(this.getClass().getName(), "orderChain", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "orderChain", result); //$NON-NLS-1$
return result;
}
@@ -786,7 +793,8 @@ class ImportCmd extends Command
KeyStoreException, UnrecoverableKeyException, UnsupportedCallbackException,
CertificateEncodingException
{
log.entering(this.getClass().getName(), "findTrustAndUpdate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "findTrustAndUpdate"); //$NON-NLS-1$
CertPathValidator validator = CertPathValidator.getInstance("PKIX"); //$NON-NLS-1$
X509CertPath certPath = new X509CertPath(reply);
PKIXCertPathValidatorResult cpvr = findTrustInStore(certPath, validator);
@@ -824,16 +832,17 @@ class ImportCmd extends Command
reply.addLast(trustedCert);
result = true;
}
log.entering(this.getClass().getName(), "findTrustAndUpdate", //$NON-NLS-1$
Boolean.valueOf(result));
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "findTrustAndUpdate", //$NON-NLS-1$
Boolean.valueOf(result));
return result;
}
private PKIXCertPathValidatorResult findTrustInStore(X509CertPath certPath,
CertPathValidator validator)
{
log.entering(this.getClass().getName(), "findTrustInStore"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "findTrustInStore"); //$NON-NLS-1$
PKIXCertPathValidatorResult result;
try
{
@@ -847,8 +856,8 @@ class ImportCmd extends Command
x);
result = null;
}
log.exiting(this.getClass().getName(), "findTrustInStore", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "findTrustInStore", result); //$NON-NLS-1$
return result;
}
@@ -864,8 +873,9 @@ class ImportCmd extends Command
*/
private PKIXParameters getCertPathParameters(String type, String pathName)
{
log.entering(this.getClass().getName(), "getCertPathParameters", //$NON-NLS-1$
new Object[] { type, pathName });
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getCertPathParameters", //$NON-NLS-1$
new Object[] { type, pathName });
FileInputStream stream = null;
PKIXParameters result = null;
try
@@ -877,7 +887,8 @@ class ImportCmd extends Command
}
catch (Exception x)
{
log.log(Level.FINE, "Exception in getCertPathParameters(). Ignore", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.log(Level.FINE, "Exception in getCertPathParameters(). Ignore", x); //$NON-NLS-1$
}
finally
{
@@ -890,7 +901,8 @@ class ImportCmd extends Command
{
}
}
log.exiting(this.getClass().getName(), "getCertPathParameters", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getCertPathParameters", result); //$NON-NLS-1$
return result;
}
@@ -898,7 +910,8 @@ class ImportCmd extends Command
X509CertPath certPath,
PKIXParameters params)
{
log.entering(this.getClass().getName(), "validate"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "validate"); //$NON-NLS-1$
PKIXCertPathValidatorResult result = null;
if (params != null)
try
@@ -908,9 +921,11 @@ class ImportCmd extends Command
}
catch (Exception x)
{
log.log(Level.FINE, "Exception in validate(). Ignore", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.log(Level.FINE, "Exception in validate(). Ignore", x); //$NON-NLS-1$
}
log.exiting(this.getClass().getName(), "validate", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "validate", result); //$NON-NLS-1$
return result;
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -209,22 +210,24 @@ class KeyCloneCmd extends Command
setAliasParam(_alias);
setKeyPasswordNoPrompt(_password);
setDestinationAlias(_destAlias);
log.finer("-keyclone handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -dest=" + destinationAlias); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-keyclone handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -dest=" + destinationAlias); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
UnsupportedCallbackException, UnrecoverableKeyException,
CertificateException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (store.containsAlias(destinationAlias))
throw new SecurityException(Messages.getString("KeyCloneCmd.23")); //$NON-NLS-1$
@@ -236,16 +239,16 @@ class KeyCloneCmd extends Command
store.setKeyEntry(destinationAlias, privateKey, newKeyPasswordChars, chain);
saveKeyStore();
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.KEYCLONE_CMD, true);
result.setHeader(Messages.getString("KeyCloneCmd.22")); //$NON-NLS-1$
result.setFooter(Messages.getString("KeyCloneCmd.21")); //$NON-NLS-1$
@@ -331,8 +334,8 @@ class KeyCloneCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
@@ -195,22 +196,24 @@ class KeyPasswdCmd extends Command
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setAliasParam(_alias);
setKeyPasswordNoPrompt(_password);
log.finer("-keypasswd handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -new=" + _newPassword); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-keypasswd handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -new=" + _newPassword); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException, IOException,
UnsupportedCallbackException, UnrecoverableKeyException,
CertificateException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
// 1. get the key entry and certificate chain associated to alias
Key privateKey = getAliasPrivateKey();
Certificate[] chain = store.getCertificateChain(alias);
@@ -221,16 +224,16 @@ class KeyPasswdCmd extends Command
// 3. persist the key store
saveKeyStore();
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.KEYPASSWD_CMD, true);
result.setHeader(Messages.getString("KeyPasswdCmd.23")); //$NON-NLS-1$
result.setFooter(Messages.getString("KeyPasswdCmd.22")); //$NON-NLS-1$
@@ -307,8 +310,8 @@ class KeyPasswdCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -181,32 +182,36 @@ class ListCmd extends Command
if (verbose & rfc)
{
log.warning("Both -v and -rfc options were found on the command line. " //$NON-NLS-1$
+ "Only the former will be considered"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("Both -v and -rfc options were found on the command line. " //$NON-NLS-1$
+ "Only the former will be considered"); //$NON-NLS-1$
rfc = false;
}
log.finer("-list handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
log.finer(" -rfc=" + rfc); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-list handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
log.fine(" -rfc=" + rfc); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, CertificateEncodingException,
IOException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
PrintWriter writer = new PrintWriter(outStream, true);
writer.println(Messages.getFormattedString("ListCmd.21", store.getType())); //$NON-NLS-1$
writer.println(Messages.getFormattedString("ListCmd.22", //$NON-NLS-1$
store.getProvider().getName()));
if (all)
{
log.finest("About to list all aliases in key store..."); //$NON-NLS-1$
if (Configuration.DEBUG)
log.fine("About to list all aliases in key store..."); //$NON-NLS-1$
writer.println();
writer.println(Messages.getFormattedString("ListCmd.24", //$NON-NLS-1$
Integer.valueOf(store.size())));
@@ -219,16 +224,16 @@ class ListCmd extends Command
}
else
list1Alias(alias, writer);
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.LIST_CMD, true);
result.setHeader(Messages.getString("ListCmd.20")); //$NON-NLS-1$
result.setFooter(Messages.getString("ListCmd.19")); //$NON-NLS-1$
@@ -295,8 +300,8 @@ class ListCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -314,12 +319,12 @@ class ListCmd extends Command
private void list1Alias(String anAlias, PrintWriter writer)
throws KeyStoreException, CertificateEncodingException, IOException
{
log.entering(this.getClass().getName(), "list1Alias", anAlias); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "list1Alias", anAlias); //$NON-NLS-1$
writer.println();
writer.println(Messages.getFormattedString("ListCmd.30", anAlias)); //$NON-NLS-1$
writer.println(Messages.getFormattedString("ListCmd.31", store.getCreationDate(anAlias))); //$NON-NLS-1$
writer.println(Messages.getFormattedString("ListCmd.31", //$NON-NLS-1$
store.getCreationDate(anAlias)));
if (store.isCertificateEntry(anAlias))
{
writer.println(Messages.getString("ListCmd.32")); //$NON-NLS-1$
@@ -335,7 +340,8 @@ class ListCmd extends Command
else
throw new IllegalArgumentException(Messages.getFormattedString("ListCmd.34", //$NON-NLS-1$
anAlias));
log.exiting(this.getClass().getName(), "list1Alias"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "list1Alias"); //$NON-NLS-1$
}
/**
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.common.ProviderUtil;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
@@ -74,6 +75,7 @@ public class Main
static final String STOREPASSWD_CMD = "storepasswd"; //$NON-NLS-1$
static final String KEYPASSWD_CMD = "keypasswd"; //$NON-NLS-1$
static final String DELETE_CMD = "delete"; //$NON-NLS-1$
static final String CACERT_CMD = "cacert"; //$NON-NLS-1$
static final String _GENKEY = "-" + GENKEY_CMD; //$NON-NLS-1$
static final String _IMPORT = "-" + IMPORT_CMD; //$NON-NLS-1$
@@ -88,6 +90,7 @@ public class Main
static final String _KEYPASSWD = "-" + KEYPASSWD_CMD; //$NON-NLS-1$
static final String _DELETE = "-" + DELETE_CMD; //$NON-NLS-1$
static final String _HELP = "-help"; //$NON-NLS-1$
static final String _CACERT = "-" + CACERT_CMD; //$NON-NLS-1$
static final String ALIAS_OPT = "alias"; //$NON-NLS-1$
static final String SIGALG_OPT = "sigalg"; //$NON-NLS-1$
@@ -119,16 +122,20 @@ public class Main
private int gnuCallbacksNdx = -2;
/** The command line parser. */
private Parser cmdLineParser;
/** The shutdown hook. */
private ShutdownHook shutdownThread;
private Main()
{
super();
shutdownThread = new ShutdownHook();
Runtime.getRuntime().addShutdownHook(shutdownThread);
}
public static final void main(String[] args)
{
log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(Main.class.getName(), "main", args); //$NON-NLS-1$
Main tool = new Main();
int result = 1;
try
@@ -145,21 +152,25 @@ public class Main
}
catch (SecurityException x)
{
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
System.err.println(Messages.getFormattedString("Main.6", //$NON-NLS-1$
x.getMessage()));
}
catch (Exception x)
{
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
if (Configuration.DEBUG)
log.throwing(Main.class.getName(), "main", x); //$NON-NLS-1$
System.err.println(Messages.getFormattedString("Main.8", x)); //$NON-NLS-1$
}
finally
{
tool.teardown();
if (tool.shutdownThread != null)
Runtime.getRuntime().removeShutdownHook(tool.shutdownThread);
}
log.exiting(Main.class.getName(), "main", Integer.valueOf(result)); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(Main.class.getName(), "main", Integer.valueOf(result)); //$NON-NLS-1$
System.exit(result);
}
@@ -167,19 +178,19 @@ public class Main
private void setup()
{
log.entering(this.getClass().getName(), "setup"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "setup"); //$NON-NLS-1$
cmdLineParser = getParser();
gnuCryptoProviderNdx = ProviderUtil.addProvider(new GnuCrypto());
gnuCallbacksNdx = ProviderUtil.addProvider(new GnuCallbacks());
log.exiting(this.getClass().getName(), "setup"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "setup"); //$NON-NLS-1$
}
private void start(String[] args) throws Exception
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (args == null || args.length == 0)
throw new OptionException(""); //$NON-NLS-1$
@@ -213,6 +224,8 @@ public class Main
cmd = new KeyPasswdCmd();
else if (_DELETE.equals(opt))
cmd = new DeleteCmd();
else if (_CACERT.equals(opt))
cmd = new CACertCmd();
else if (_HELP.equals(opt))
throw new OptionException(""); //$NON-NLS-1$
else
@@ -224,14 +237,14 @@ public class Main
args = cmd.processArgs(cmdArgs);
cmd.doCommand();
}
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "start"); //$NON-NLS-1$
}
private Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(KEYTOOL_TOOL, true);
result.setHeader(Messages.getString("Main.19")); //$NON-NLS-1$
result.setFooter(Messages.getString("Main.20")); //$NON-NLS-1$
@@ -260,16 +273,18 @@ public class Main
Messages.getString("Main.32"))); //$NON-NLS-1$
cmdGroup.add(new NoParseOption(DELETE_CMD,
Messages.getString("Main.33"))); //$NON-NLS-1$
cmdGroup.add(new NoParseOption(CACERT_CMD,
Messages.getString("Main.5"))); //$NON-NLS-1$
result.add(cmdGroup);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
private void teardown()
void teardown()
{
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "teardown"); //$NON-NLS-1$
// if we added our own providers remove them
if (gnuCryptoProviderNdx > 0)
ProviderUtil.removeProvider(Registry.GNU_CRYPTO);
@@ -277,7 +292,8 @@ public class Main
if (gnuCallbacksNdx > 0)
ProviderUtil.removeProvider("GNU-CALLBACKS"); //$NON-NLS-1$
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "teardown"); //$NON-NLS-1$
}
private void printHelp()
@@ -309,4 +325,13 @@ public class Main
// do nothing
}
}
private class ShutdownHook
extends Thread
{
public void run()
{
teardown();
}
}
}
@@ -38,6 +38,8 @@
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
@@ -99,8 +101,9 @@ class Messages
}
catch (IllegalArgumentException x)
{
log.fine("Exception while rendering a message format keyed by ["
+ key + "]: " + mf.toPattern());
if (Configuration.DEBUG)
log.fine("Exception while rendering a message format keyed by ["
+ key + "]: " + mf.toPattern());
return constructMessage(mf.toPattern(), args);
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -86,31 +87,33 @@ class PrintCertCmd extends Command
void setup() throws Exception
{
setInputStreamParam(_certFileName);
log.finer("-printcert handler will use the following options:"); //$NON-NLS-1$
log.finer(" -file=" + _certFileName); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-printcert handler will use the following options:"); //$NON-NLS-1$
log.fine(" -file=" + _certFileName); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws CertificateException
{
log.entering(getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(getClass().getName(), "start"); //$NON-NLS-1$
CertificateFactory x509Factory = CertificateFactory.getInstance(Main.X_509);
Certificate certificate = x509Factory.generateCertificate(inStream);
PrintWriter writer = new PrintWriter(System.out, true);
writer.println();
printVerbose(certificate, writer);
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.PRINTCERT_CMD, true);
result.setHeader(Messages.getString("PrintCertCmd.5")); //$NON-NLS-1$
result.setFooter(Messages.getString("PrintCertCmd.6")); //$NON-NLS-1$
@@ -133,8 +136,8 @@ class PrintCertCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
import gnu.classpath.tools.getopt.OptionException;
@@ -264,24 +265,26 @@ class SelfCertCmd extends Command
setAliasParam(_alias);
setKeyPasswordNoPrompt(_password);
setValidityParam(_validityStr);
log.finer("-selfcert handler will use the following options:"); //$NON-NLS-1$
log.finer(" -alias=" + alias); //$NON-NLS-1$
log.finer(" -sigalg=" + _sigAlgorithm); //$NON-NLS-1$
log.finer(" -dname=" + _dName); //$NON-NLS-1$
log.finer(" -validity=" + validityInDays); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-selfcert handler will use the following options:"); //$NON-NLS-1$
log.fine(" -alias=" + alias); //$NON-NLS-1$
log.fine(" -sigalg=" + _sigAlgorithm); //$NON-NLS-1$
log.fine(" -dname=" + _dName); //$NON-NLS-1$
log.fine(" -validity=" + validityInDays); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException,
UnrecoverableKeyException, IOException, UnsupportedCallbackException,
InvalidKeyException, SignatureException, CertificateException
{
log.entering(getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(getClass().getName(), "start"); //$NON-NLS-1$
// 1. get the key entry and certificate chain associated to alias
Key privateKey = getAliasPrivateKey();
Certificate[] chain = store.getCertificateChain(alias);
@@ -310,16 +313,16 @@ class SelfCertCmd extends Command
// 7. persist the key store
saveKeyStore();
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.SELFCERT_CMD, true);
result.setHeader(Messages.getString("SelfCertCmd.14")); //$NON-NLS-1$
result.setFooter(Messages.getString("SelfCertCmd.15")); //$NON-NLS-1$
@@ -414,8 +417,8 @@ class SelfCertCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.classpath.tools.keytool;
import gnu.classpath.Configuration;
import gnu.classpath.SystemProperties;
import gnu.classpath.tools.getopt.ClasspathToolParser;
import gnu.classpath.tools.getopt.Option;
@@ -159,30 +160,32 @@ class StorePasswdCmd extends Command
{
setKeyStoreParams(_providerClassName, _ksType, _ksPassword, _ksURL);
setNewKeystorePassword(_newPassword);
log.finer("-storepasswd handler will use the following options:"); //$NON-NLS-1$
log.finer(" -storetype=" + storeType); //$NON-NLS-1$
log.finer(" -keystore=" + storeURL); //$NON-NLS-1$
log.finer(" -provider=" + provider); //$NON-NLS-1$
log.finer(" -v=" + verbose); //$NON-NLS-1$
if (Configuration.DEBUG)
{
log.fine("-storepasswd handler will use the following options:"); //$NON-NLS-1$
log.fine(" -storetype=" + storeType); //$NON-NLS-1$
log.fine(" -keystore=" + storeURL); //$NON-NLS-1$
log.fine(" -provider=" + provider); //$NON-NLS-1$
log.fine(" -v=" + verbose); //$NON-NLS-1$
}
}
void start() throws KeyStoreException, NoSuchAlgorithmException,
CertificateException, IOException
{
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "start"); //$NON-NLS-1$
saveKeyStore(newStorePasswordChars);
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(getClass().getName(), "start"); //$NON-NLS-1$
}
// own methods --------------------------------------------------------------
Parser getParser()
{
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
if (Configuration.DEBUG)
log.entering(this.getClass().getName(), "getParser"); //$NON-NLS-1$
Parser result = new ClasspathToolParser(Main.STOREPASSWD_CMD, true);
result.setHeader(Messages.getString("StorePasswdCmd.18")); //$NON-NLS-1$
result.setFooter(Messages.getString("StorePasswdCmd.17")); //$NON-NLS-1$
@@ -241,8 +244,8 @@ class StorePasswdCmd extends Command
}
});
result.add(options);
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
if (Configuration.DEBUG)
log.exiting(this.getClass().getName(), "getParser", result); //$NON-NLS-1$
return result;
}
+47
View File
@@ -0,0 +1,47 @@
#!/bin/sh
## Copyright (C) 2006 Free Software Foundation, Inc.
##
## This file is a part of GNU Classpath.
##
## GNU Classpath is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or (at
## your option) any later version.
##
## GNU Classpath 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with GNU Classpath; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
## USA.
##
## Linking this library statically or dynamically with other modules is
## making a combined work based on this library. Thus, the terms and
## conditions of the GNU General Public License cover the whole
## combination.
##
## As a special exception, the copyright holders of this library give you
## permission to link this library with independent modules to produce an
## executable, regardless of the license terms of these independent
## modules, and to copy and distribute the resulting executable under
## terms of your choice, provided that you also meet, for each linked
## independent module, the terms and conditions of the license of that
## module. An independent module is a module which is not derived from
## or based on this library. If you modify this library, you may extend
## this exception to your version of the library, but you are not
## obligated to do so. If you do not wish to do so, delete this
## exception statement from your version.
##
##
## A simple shell script to launch the GNU Classpath serialver tool.
##
prefix=@prefix@
tools_dir=@datadir@/@PACKAGE@
tools_cp=${tools_dir}/tools.zip
exec @VM_BINARY@ -Xbootclasspath/p:"${tools_cp}" gnu.classpath.tools.serialver.Main "$@"