
org.globus.tools.ProxyInfo Maven / Gradle / Ivy
The newest version!
/*
* Copyright 1999-2010 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
*
* See the License for the specific language governing permissions and limitations under the License.
*/
package org.globus.tools;
import org.globus.gsi.util.CertificateUtil;
import org.globus.gsi.util.ProxyCertificateUtil;
import org.globus.gsi.GSIConstants;
import org.globus.gsi.CertUtil;
import org.globus.gsi.GlobusCredential;
import org.globus.util.Util;
import org.globus.common.CoGProperties;
import org.globus.common.Version;
import java.security.cert.X509Certificate;
/** Retruns information about the proxy.
*
* Syntax: java ProxyInfo [options]
* java ProxyInfo -help
* Options
* -help | -usage
* Displays usage
* -f | -file
* Non-standard location of proxy
* [printoptions]
* Prints information about proxy
* -exists [options] | -e [options]
* Returns 0 if valid proxy exists, 1 otherwise
* -globus
* Prints information in globus format
* [printoptions]
* -subject Distinguished name (DN) of subject
* -issuer DN of issuer (certificate signer)
* -type Type of proxy (full or limited)
* -timeleft Time (in seconds) until proxy expires
* -strength Key size (in bits)
* -all All above options in a human readable format
"
* [options to -exists] (if none are given, H = B = 0 are assumed)
* -hours H (-h) time requirement for proxy to be valid
* -bits B (-b) strength requirement for proxy to be valid
*
*/
public class ProxyInfo {
private static final int SUBJECT = 2;
private static final int ISSUER = 4;
private static final int TYPE = 8;
private static final int TIME = 16;
private static final int STRENGTH = 32;
private static final int TEXT = 64;
private static final int IDENTITY = 128;
private static final int PATH = 256;
private static final int PATH_LENGTH = 512;
private static final String message =
"\n" +
"Syntax: java ProxyInfo [options]\n" +
" java ProxyInfo -help\n\n" +
"\tOptions:\n" +
"\t-help | usage\n" +
"\t\tDisplays usage.\n" +
"\t-file (-f)\n" +
"\t\tNon-standard location of proxy.\n" +
"\t[printoptions]\n" +
"\t\tPrints information about proxy.\n" +
"\t-exists [options] (-e) \n" +
"\t\tReturns 0 if valid proxy exists, 1 otherwise.\n" +
"\t-globus \n" +
"\t\tPrints information in globus format\n\n" +
"\t[printoptions]\n" +
"\t-subject\n" +
"\t\tDistinguished name (DN) of subject.\n" +
"\t-issuer\n" +
"\t\tDN of issuer (certificate signer).\n" +
"\t-identity \n" +
"\t\tDN of the identity represented by the proxy.\n" +
"\t-type \n" +
"\t\tType of proxy.\n" +
"\t-timeleft\n" +
"\t\tTime (in seconds) until proxy expires.\n" +
"\t-strength\n" +
"\t\tKey size (in bits)\n " +
"\t-all\n" +
"\t\tAll above options in a human readable format.\n" +
"\t-text\n" +
"\t\tAll of the certificate.\n" +
"\t-path\n" +
"\t\tPathname of proxy file.\n" +
"\n" +
"\t[options to -exists] (if none are given, H = B = 0 are assumed)\n" +
"\t-hours H (-h) \n" +
"\t\ttime requirement for proxy to be valid.\n" +
"\t-bits B (-b) \n" +
"\t\tstrength requirement for proxy to be valid\n" +
"\t-length\n" +
"\t\tpath length of the proxy\n\n";
public static void main(String args[]) {
String file = null;
int options = 0;
int bits = 0;
int hours = 0;
boolean globusStyle = false;
boolean exists = false;
boolean debug = false;
for (int i = 0; i < args.length; i++) {
if (args[i].equalsIgnoreCase("-f") ||
args[i].equalsIgnoreCase("-file")) {
if (i+1 >= args.length) {
error("-file argument missing");
}
file = args[++i];
} else if (args[i].equalsIgnoreCase("-subject")) {
options |= SUBJECT;
} else if (args[i].equalsIgnoreCase("-issuer")) {
options |= ISSUER;
} else if (args[i].equalsIgnoreCase("-identity")) {
options |= IDENTITY;
} else if (args[i].equalsIgnoreCase("-type")) {
options |= TYPE;
} else if (args[i].equalsIgnoreCase("-timeleft")) {
options |= TIME;
} else if (args[i].equalsIgnoreCase("-strength")) {
options |= STRENGTH;
} else if (args[i].equalsIgnoreCase("-text")) {
options |= TEXT;
} else if (args[i].equalsIgnoreCase("-path")) {
options |= PATH;
} else if (args[i].equalsIgnoreCase("-length")) {
options |= PATH_LENGTH;
} else if (args[i].equalsIgnoreCase("-all")) {
options |= Integer.MAX_VALUE;
options ^= TEXT;
} else if (args[i].equalsIgnoreCase("-globus")) {
globusStyle = true;
} else if (args[i].equalsIgnoreCase("-exists")) {
exists = true;
} else if (args[i].equalsIgnoreCase("-bits")) {
if (i+1 >= args.length) {
error("-bits argument missing");
}
bits = Integer.parseInt(args[++i]);
} else if (args[i].equalsIgnoreCase("-hours")) {
if (i+1 >= args.length) {
error("-hours argument missing");
}
hours = Integer.parseInt(args[++i]);
} else if (args[i].equalsIgnoreCase("-version")) {
System.err.println(Version.getVersion());
System.exit(1);
} else if (args[i].equalsIgnoreCase("-help") ||
args[i].equalsIgnoreCase("-usage")) {
System.err.println(message);
System.exit(1);
} else {
error("Argument not recognized : " + args[i]);
break;
}
}
GlobusCredential proxy = null;
try {
if (file == null) {
file = CoGProperties.getDefault().getProxyFile();
}
proxy = new GlobusCredential(file);
} catch(Exception e) {
System.err.println("Unable to load the user proxy : " + e.getMessage());
System.exit(1);
}
if (exists) {
if (bits > 0 && proxy.getStrength() < bits) System.exit(1);
if (hours > 0 && (proxy.getTimeLeft()/3600) < hours) System.exit(1);
System.exit(0);
}
if (options == 0) {
options |= Integer.MAX_VALUE;
options ^= TEXT;
options ^= PATH;
}
if ((options & SUBJECT) != 0) {
String dn = (globusStyle) ?
CertificateUtil.toGlobusID(proxy.getCertificateChain()[0].getSubjectDN()) :
proxy.getSubject();
System.out.println("subject : " + dn);
}
if ((options & ISSUER) != 0) {
String dn = (globusStyle) ?
CertificateUtil.toGlobusID(proxy.getCertificateChain()[0].getIssuerDN()) :
proxy.getIssuer();
System.out.println("issuer : " + dn);
}
if ((options & IDENTITY) != 0) {
String dn = null;
if (globusStyle) {
dn = proxy.getIdentity();
} else {
X509Certificate cert = proxy.getIdentityCertificate();
dn = (cert == null) ?
"failed to determine certificate identity" :
cert.getSubjectDN().toString();
}
System.out.println("identity : " + dn);
}
if ((options & TYPE) != 0) {
GSIConstants.CertificateType type = GSIConstants.CertificateType.get(proxy.getProxyType());
String typeStr = (type == GSIConstants.CertificateType.UNDEFINED) ?
"failed to determine certificate type" :
ProxyCertificateUtil.getProxyTypeAsString(type);
System.out.println("type : " + typeStr);
}
if ((options & STRENGTH) != 0) {
System.out.println("strength : " + proxy.getStrength() + " bits");
}
if ((options & PATH) != 0) {
System.out.println("path : " + file);
}
if ((options & TIME) != 0) {
String tm = (globusStyle) ?
formatTimeSecGlobus(proxy.getTimeLeft()) :
Util.formatTimeSec(proxy.getTimeLeft());
System.out.println("timeleft : " + tm);
}
if ((options & TEXT) != 0) {
System.out.println(proxy.getCertificateChain()[0]);
}
if ((options & PATH_LENGTH) != 0) {
int pathLength = proxy.getPathConstraint();
if (pathLength == Integer.MAX_VALUE) {
System.out.println("path length: infinity");
} else {
System.out.println("path length: " + pathLength);
}
}
}
private static void error(String error) {
System.err.println("Error: " + error);
System.err.println();
System.err.println("Usage: java ProxyInfo [-help][-f proxyfile][-subject]...");
System.err.println();
System.err.println("Use -help to display full usage");
System.exit(1);
}
private static String formatTimeSecGlobus(long time) {
StringBuffer str = new StringBuffer();
long tt;
tt = (time / 3600);
if (tt == 0) {
str.append("00");
} else {
if (tt < 10) str.append("0");
str.append(tt);
time -= tt*3600;
}
str.append(":");
tt = (time / 60);
if (tt == 0) {
str.append("00");
} else {
if (tt < 10) str.append("0");
str.append(tt);
time -= tt*60;
}
str.append(":");
if (tt == 0) {
str.append("00");
} else {
if (time < 10) str.append("0");
str.append(time);
}
return str.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy