All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.globus.util.ConfigUtil 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.util;

import java.io.IOException;
import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ConfigUtil {

    public static final int UNDEFINED_OS = -1;
    public static final int WINDOWS_OS   = 0;
    public static final int UNIX_OS      = 1;
    public static final int MAC_OS       = 2;
    public static final int OTHER_OS     = 3;

    private static int osType = UNDEFINED_OS;

    private static final String PROXY_NAME = "x509up_u";

    private static final String SOLARIS_ID_EXEC =
        "/usr/xpg4/bin/id";

    public static String globus_dir = null;

    static {
        globus_dir = System.getProperty("user.home") +
            File.separator +
            ".globus" +
            File.separator;
    }

    /** Returns default PKCS11 library name */
    public static String discoverPKCS11LibName() {
        return "dspkcs"; // use the ibutton library as the default for now
    }

    /** Returns default location of user cert file */
    public static String discoverUserCertLocation() {
        String location = null;
        location = globus_dir + "usercert.pem";
        return location;
    }

    /** Returns default location of user key file */
    public static String discoverUserKeyLocation() {
        String location = null;
        location = globus_dir + "userkey.pem";
        return location;
    }

    /**
     * Tries to discover user proxy location.
     * If a UID system property is set, and running on a Unix machine it
     * returns /tmp/x509up_u${UID}. If any other machine then Unix, it returns
     * ${tempdir}/x509up_u${UID}, where tempdir is a platform-specific
     * temporary directory as indicated by the java.io.tmpdir system property.
     * If a UID system property is not set, the username will be used instead
     * of the UID. That is, it returns ${tempdir}/x509up_u_${username}
     */
    public static String discoverProxyLocation() {

        String dir = null;

        if (getOS() == UNIX_OS) {
            dir = "/tmp/";
        } else {
            String tmpDir = System.getProperty("java.io.tmpdir");
            dir = (tmpDir == null) ? globus_dir : tmpDir;
        }

        String uid = System.getProperty("UID");

        if (uid != null) {
            return getLocation(dir, PROXY_NAME + uid);
        } else if (getOS() == UNIX_OS) {
            try {
                return getLocation(dir, PROXY_NAME + getUID());
            } catch (IOException e) {
            }
        }

        /* If all else fails use username */
        String suffix = System.getProperty("user.name");
        if (suffix != null) {
            suffix = suffix.toLowerCase();
        } else {
            suffix = "nousername";
        }

        return getLocation(dir, PROXY_NAME + "_" + suffix);
    }

    private static String getLocation(String dir, String file) {
        File f = new File(dir, file);
        return f.getAbsolutePath();
    }

    /**
     * Returns the user id. The user id is obtained by executing 'id -u'
     * external program.
     * 

Note: * Under some circumstances, this function executes an external program; * thus, its behavior is influenced by environment variables such as the * caller's PATH and the environment variables that control dynamic * loading. Care should be used if calling this function from a program * that will be run as a Unix setuid program, or in any other manner in * which the owner of the Unix process does not completely control its * runtime environment. * * * @throws IOException if unable to determine the user id. * @return the user id */ public static String getUID() throws IOException { String exec = "id"; String osname = System.getProperty("os.name"); if (osname != null) { osname = osname.toLowerCase(); if ((osname.indexOf("solaris") != -1) || (osname.indexOf("sunos") != -1)) { if ((new File(SOLARIS_ID_EXEC).exists())) { exec = SOLARIS_ID_EXEC; } } else if (osname.indexOf("windows") != -1) { throw new IOException("Unable to determine the user id"); } } Runtime runTime = Runtime.getRuntime(); Process process = null; BufferedReader buffInReader = null; String s = null; StringBuffer output = new StringBuffer(); int exitValue = -1; try { process = runTime.exec(exec + " -u"); buffInReader = new BufferedReader ( new InputStreamReader(process.getInputStream()) ); while ((s = buffInReader.readLine()) != null) { output.append(s); } exitValue = process.waitFor(); } catch (Exception e) { throw new IOException("Unable to execute 'id -u'"); } finally { if (buffInReader != null) { try { buffInReader.close(); } catch (IOException e) {} } if (process != null) { try { process.getErrorStream().close(); } catch (IOException e) {} try { process.getOutputStream().close(); } catch (IOException e) {} } } if (exitValue != 0) { throw new IOException("Unable to perform 'id -u'"); } return output.toString().trim(); } /** * Discovers location of CA certificates directory. * First the ${user.home}/.globus/certificates directory is checked. * If the directory does not exist, and on a Unix machine, the * /etc/grid-security/certificates directory is checked next. * If that directory does not exist and GLOBUS_LOCATION * system property is set then the ${GLOBUS_LOCATION}/share/certificates * directory is checked. Otherwise, null is returned. * This indicates that the certificates directory could * not be found. */ public static String discoverCertDirLocation() { String location = null; location = getDir(globus_dir + "certificates"); if (location != null) return location; if (getOS() == UNIX_OS) { location = getDir( "/etc/grid-security/certificates"); if (location != null) return location; } String suffix = File.separator + "share" + File.separator + "certificates"; location = getDir(System.getProperty("GLOBUS_LOCATION") + suffix); if (location != null) return location; return null; } public static int getOS() { if (osType != UNDEFINED_OS) { return osType; } String osname = System.getProperty("os.name"); if (osname != null) { osname = osname.toLowerCase(); if (osname.indexOf("windows") != -1) { osType = WINDOWS_OS; } else if ( (osname.indexOf("solaris") != -1) || (osname.indexOf("sunos") != -1) || (osname.indexOf("linux") != -1) || (osname.indexOf("aix") != -1) || (osname.indexOf("hp-ux") != -1) || (osname.indexOf("compaq's digital unix") != -1) || (osname.indexOf("osf1") != -1) || (osname.indexOf("mac os x") != -1) || (osname.indexOf("netbsd") != -1) || (osname.indexOf("freebsd") != -1) || (osname.indexOf("irix") != -1) ) { osType = UNIX_OS; } else if (osname.indexOf("mac") != -1) { osType = MAC_OS; } else { osType = OTHER_OS; } } else { osType = OTHER_OS; } return osType; } private static String getDir(String directory) { if (directory == null) return null; File f = new File(directory); if (f.isDirectory() && f.canRead()) { return f.getAbsolutePath(); } else { return null; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy