rpms/voms/EL-5 import.log, NONE, 1.1 voms-distribution-globus.patch, NONE, 1.1 voms-extra-vomses-java.patch, NONE, 1.1 voms-fix-enable-glite.patch, NONE, 1.1 voms-gcj.patch, NONE, 1.1 voms-initscript.patch, NONE, 1.1 voms-install-db.patch, NONE, 1.1 voms-jar-perms.patch, NONE, 1.1 voms-java-clone-cast.patch, NONE, 1.1 voms-javadoc.patch, NONE, 1.1 voms-nolib64.patch, NONE, 1.1 voms-notknown-msg.patch, NONE, 1.1 voms-openssl.patch, NONE, 1.1 voms-pipe-buf.patch, NONE, 1.1 voms-portability.patch, NONE, 1.1 voms-shell-syntax.patch, NONE, 1.1 voms.INSTALL, NONE, 1.1 voms.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2

Mattias Ellert ellert at fedoraproject.org
Thu Sep 10 02:39:26 UTC 2009


Author: ellert

Update of /cvs/pkgs/rpms/voms/EL-5
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv21246/EL-5

Modified Files:
	.cvsignore sources 
Added Files:
	import.log voms-distribution-globus.patch 
	voms-extra-vomses-java.patch voms-fix-enable-glite.patch 
	voms-gcj.patch voms-initscript.patch voms-install-db.patch 
	voms-jar-perms.patch voms-java-clone-cast.patch 
	voms-javadoc.patch voms-nolib64.patch voms-notknown-msg.patch 
	voms-openssl.patch voms-pipe-buf.patch voms-portability.patch 
	voms-shell-syntax.patch voms.INSTALL voms.spec 
Log Message:
* Mon Sep 07 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.11-4
- Fix building with openssl 1.0



--- NEW FILE import.log ---
voms-1_9_11-4_el5:EL-5:voms-1.9.11-4.el5.src.rpm:1252550329

voms-distribution-globus.patch:
 acinclude.m4 |   26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)

--- NEW FILE voms-distribution-globus.patch ---
diff -ur voms-1.9.8.1.orig/project/acinclude.m4 voms-1.9.8.1/project/acinclude.m4
--- voms-1.9.8.1.orig/project/acinclude.m4	2009-04-07 11:05:28.000000000 +0200
+++ voms-1.9.8.1/project/acinclude.m4	2009-06-30 09:04:36.933377506 +0200
@@ -66,11 +66,6 @@
 # ---------------------------------------------
 AC_DEFUN([AC_OPENSSL],
 [
-  AC_ARG_WITH(openssl_prefix,
-              [ --with-openssl-prefix=PFX    prefix where OpenSSL (non-globus) is installed. (/usr)],
-              [with_openssl_prefix="$withval"],
-              [with_openssl_prefix=/usr])
-
   AC_ARG_WITH(openssl_libs,
               [ --with-openssl-libs do you want OpenSSL only libs? (yes)],
               [ with_openssl_libs="$withval"],
@@ -80,16 +75,11 @@
      AC_MSG_ERROR([Value of --with-openssl-libs must be either "yes" or "no"])
   fi  
 
-  SAVE_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
-  LD_LIBRARY_PATH="$with_openssl_prefix/lib"
-
-  AC_LANG_PUSH(C)
-  AC_CHECK_LIB(crypto, CRYPTO_num_locks, [found=yes], [found=no])
-  AC_LANG_POP(C) 
+  PKG_CHECK_MODULES(OPENSSL, [openssl], [
+  NO_GLOBUS_FLAGS=$OPENSSL_CFLAGS
+  found=yes], [found=no])
 
   if test "x$found" = "xyes"; then
-    NO_GLOBUS_FLAGS="-I$with_openssl_prefix/include"
-    OPENSSL_LIBS="-L$with_openssl_prefix/lib -lcrypto -lssl"
     AC_SUBST(NO_GLOBUS_FLAGS)
     AC_SUBST(OPENSSL_LIBS)
     AC_MSG_CHECKING([for system OpenSSL version])
@@ -105,11 +95,10 @@
 #include <openssl/opensslv.h>
 OPENSSL_VERSION_TEXT
 HERE
-    openssl_version=`$CPP -I$NO_GLOBUS_FLAGS -o - -P conftest.h`
+    openssl_version=`$CPP $NO_GLOBUS_FLAGS -o - -P conftest.h`
     AC_MSG_RESULT($openssl_version)
     rm -f conftest.h
   fi
-  LD_LIBRARY_PATH="$SAVE_LD_LIBRARY_PATH"
 ])
 
 # AC_GLOBUS checks globus prefix, looks for globus 
@@ -119,6 +108,11 @@
 # -------------------------------------------------------
 AC_DEFUN([AC_GLOBUS],
 [
+    PKG_CHECK_MODULES(GLOBUS_GSS, [globus-gssapi-gsi globus-gss-assist], [
+    GLOBUS_CFLAGS=$GLOBUS_GSS_CFLAGS
+    PKG_CHECK_MODULES(GLOBUS_GSS_API, [openssl])
+    ], [
+
     AC_ARG_WITH(globus_prefix,
 	[  --with-globus-prefix=PFX     prefix where GLOBUS is installed. (/opt/globus)],
 	[with_globus_prefix="$withval"],
@@ -165,6 +159,8 @@
 
     AC_MSG_RESULT([found $GLOBUS_FLAVORS ($with_globus_flavor selected)])
 
+    ])
+
     if test "x$with_globus_flavor" = "x" ; then
       if test "x$USE_OLDGAA_LIB" = "x"; then
         USE_OLDGAA_LIB="liboldgaa.la"

voms-extra-vomses-java.patch:
 VOMSESFileParser.java |   12 ++++++++++++
 1 file changed, 12 insertions(+)

--- NEW FILE voms-extra-vomses-java.patch ---
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSESFileParser.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSESFileParser.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSESFileParser.java	2007-11-19 16:05:23.000000000 +0100
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSESFileParser.java	2009-07-01 15:06:24.328378870 +0200
@@ -62,6 +62,12 @@
 
         List list = new ArrayList();
 
+        File defaultLocFile = new File( File.separator + "etc"
+                + File.separator + "vomses" );
+
+        if ( defaultLocFile.exists() )
+            list.add( defaultLocFile );
+
         if ( gliteLoc != null ) {
             File gliteLocFile = new File( gliteLoc + File.separator + "etc"
                     + File.separator + "vomses" );
@@ -97,6 +103,12 @@
         if ( gliteVomses.exists() )
             list.add( gliteVomses );
 
+        File vomsVomses = new File( System.getProperty( "user.home" )
+                + File.separator + ".voms" + File.separator + "vomses" );
+
+        if ( vomsVomses.exists() )
+            list.add( vomsVomses );
+
         vomsesPaths = list;
 
     }

voms-fix-enable-glite.patch:
 acinclude.m4 |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

--- NEW FILE voms-fix-enable-glite.patch ---
diff -ur voms-1.9.8.1.orig/project/acinclude.m4 voms-1.9.8.1/project/acinclude.m4
--- voms-1.9.8.1.orig/project/acinclude.m4	2009-04-07 11:05:28.000000000 +0200
+++ voms-1.9.8.1/project/acinclude.m4	2009-07-01 13:03:05.768376649 +0200
@@ -587,12 +587,18 @@
 [
     AC_ARG_ENABLE(glite,
         [  --enable-glite     enable gLite  ],
-        [ac_enable_glite="yes"],
-        [ac_enable_glite="no"])
+        [
+          case "$enableval" in
+          yes) glite="yes" ;;
+          no) glite="no" ;;
+          *) AC_MSG_ERROR(bad value $(enableval) for --enable-glite) ;;
+          esac
+        ],
+        [glite="yes"])
 
-    AM_CONDITIONAL(ENABLE_GLITE, test x$ac_enable_glite = xyes)
+    AM_CONDITIONAL(ENABLE_GLITE, test x$glite = xyes)
 
-    if test "x$ac_enable_glite" = "xno"; then
+    if test "x$glite" = "xno"; then
     	DISTTAR=$WORKDIR
     	AC_SUBST(DISTTAR)
 #	EDG_SET_RPM_TOPDIR
@@ -601,7 +607,7 @@
     	AC_SUBST(VAR_LOCATION_ENV, "VOMS_LOCATION_VAR")
     	AC_DEFINE(LOCATION_ENV, "VOMS_LOCATION", [Environment variable name])
     	AC_DEFINE_UNQUOTED(LOCATION_DIR, "$prefix", [Location of system directory])
-    	AC_DEFINE(USER_DIR, ".edg", [Location of user directory])
+    	AC_DEFINE(USER_DIR, ".voms", [Location of user directory])
     else
     	AC_MSG_RESULT([Preparing for gLite environment])
     	AC_GLITE

voms-gcj.patch:
 BasicVOMSTrustStore.java |  682 -----------------------------------------------
 DirectoryList.java       |  142 +++++++++
 FileCertReader.java      |  492 +++++++++++++++++++++++++++++++++
 FileEndingIterator.java  |  137 +++++++++
 4 files changed, 771 insertions(+), 682 deletions(-)

--- NEW FILE voms-gcj.patch ---
diff -Nur voms-1.9.11.orig/src/api/java/org/glite/voms/BasicVOMSTrustStore.java voms-1.9.11/src/api/java/org/glite/voms/BasicVOMSTrustStore.java
--- voms-1.9.11.orig/src/api/java/org/glite/voms/BasicVOMSTrustStore.java	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/api/java/org/glite/voms/BasicVOMSTrustStore.java	2009-08-29 07:52:08.000000000 +0200
@@ -13,69 +13,11 @@
  * follows.
  *
  *********************************************************************/
-/*
- * Copyright (c) Members of the EGEE Collaboration. 2004.
- * See http://eu-egee.org/partners/ for details on the copyright holders.
- * For license conditions see the license file or http://eu-egee.org/license.html
- */
-
-/*
- * Copyright (c) 2002 on behalf of the EU DataGrid Project:
- * The European Organization for Nuclear Research (CERN),
- * the Particle Physics and Astronomy Research Council (PPARC),
- * the Helsinki Institute of Physics and
- * the Swedish Research Council (SRC). All rights reserved.
- * see LICENSE file for details
- *
- * DirectoryList.java
- *
- * @author  Joni Hahkala
- * Created on December 10, 2001, 6:50 PM
- */
-/*
- * Copyright (c) 2002 on behalf of the EU DataGrid Project:
- * The European Organization for Nuclear Research (CERN),
- * the Particle Physics and Astronomy Research Council (PPARC),
- * the Helsinki Institute of Physics and
- * the Swedish Research Council (SRC). All rights reserved.
- * see LICENSE file for details
- *
- * FileEndingIterator.java
- *
- * @author  Joni Hahkala
- * Created on December 3, 2001, 9:16 AM
- */
-/*
- * Copyright (c) 2002 on behalf of the EU DataGrid Project:
- * The European Organization for Nuclear Research (CERN),
- * the Particle Physics and Astronomy Research Council (PPARC),
- * the Helsinki Institute of Physics and
- * the Swedish Research Council (SRC). All rights reserved.
- * see LICENSE file for details
- *
- * FileCertReader.java
- *
- * @author  Joni Hahkala
- * Created on March 27, 2002, 8:24 PM
- */
 
 package org.glite.voms;
 
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.security.Provider;
-import java.security.Security;
-import java.security.PrivateKey;
-import java.security.cert.CRLException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509CRL;
 import java.security.cert.X509Certificate;
-import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -86,632 +28,8 @@
 import javax.security.auth.x500.X500Principal;
 
 import org.apache.log4j.Logger;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
-import org.bouncycastle.asn1.ASN1InputStream;
 import org.glite.voms.ac.ACTrustStore;
 
-/** Lists all the files in the given directory that end with
- * a certain ending.
- */
-class FileEndingIterator {
-    static Logger logger = Logger.getLogger(FileEndingIterator.class.getName());
-
-    /** The file ending.
-     */
-    protected String ending;
-
-    /** A flag to show that there are more files that match.
-     */
-    protected boolean nextFound = false;
-
-    /** The list of files in the directory.
-     */
-    protected File[] fileList;
-
-    /** The index of the next match in the fileList.
-     */
-    protected int index = 0;
-
-    /** Creates new FileIterator and searches the first match.
-     * @param path The directory used for the file search.
-     * @param ending The file ending to search for.
-     */
-    public FileEndingIterator(String path, String ending) {
-        this.ending = ending;
-
-        try {
-            // open the directory
-            File directory = (path.length() != 0) ? new File(path) : new File(".").getAbsoluteFile();
-
-            // list the files and dirs inside
-            fileList = directory.listFiles();
-
-            // find the first match for the ending
-            nextFound = findNext();
-        } catch (Exception e) {
-            logger.error("no files found from \"" + path + "\" error: " + e.getMessage());
-
-            //            e.printStackTrace();
-            return;
-        }
-    }
-
-    /** Used to get the next matching file.
-     * @return Returns the next matching file.
-     */
-    public File next() {
-        if (nextFound == false) {
-            return null;
-        }
-
-        File current = fileList[index++];
-
-        nextFound = findNext();
-
-        return current;
-    }
-
-    /** Used to check that there are more matching files to get
-     * using next().
-     * @return Returns true if there are more matching files.
-     */
-    public boolean hasNext() {
-        return nextFound;
-    }
-
-    /** Finds the next matching file in the list of files.
-     * @return Returns true if a matching file was found.
-     */
-    protected boolean findNext() {
-        try {
-            // search the next file with proper ending
-            while ((index < fileList.length) &&
-                    (fileList[index].isDirectory() || !fileList[index].getName().endsWith(ending))) {
-                //               System.out.println("FileIterator::next: Skipping file " + fileList[index].getName());
-                index++;
-            }
-        } catch (Exception e) {
-            logger.error("Error while reading directory " + e.getMessage());
-
-            //            e.printStackTrace(System.out);
-            return false;
-        }
-
-        // check if the loop ended because of a match or because running out of choices.
-        if (index < fileList.length) {
-            return true;
-        }
-
-        return false;
-    }
-}
-
-/** Reads all certificates from given files, accepts binary form of DER encoded certs and
- * the Base64 form of the DER encoded certs (PEM). The base64 certs can contain garbage in front of
- * the actual certificate that has to begin with "-----BEGIN".
- * Should accept multiple certs in one file, not tested!
- */
-class FileCertReader {
-    static Logger logger = Logger.getLogger(FileCertReader.class.getName());
-    static final int BUF_LEN = 1000;
-    static final byte CARR = '\r';
-    static final byte NL = '\n';
-
-    /** The type for TrustAnchor
-     */
-    static final int TYPE_ANCHOR = 100;
-
-    /** The type for certificate revocation list
-     */
-    static final int TYPE_CRL = 101;
-
-    /** the type for X509 certificate
-     */
-    static final int TYPE_CERT = 102;
-
-    static {
-        if (Security.getProvider("BC") == null) {
-            Security.addProvider(new BouncyCastleProvider());
-        }
-    }
-
-    CertificateFactory certFactory;
-
-    /** Creates a new instance of CertReader. */
-    public FileCertReader() throws CertificateException {
-        try {
-            certFactory = CertificateFactory.getInstance("X.509", "BC");
-        } catch (Exception e) {
-            logger.error("Error while creating a FileCertReader: " + e.getMessage());
-            throw new CertificateException("Error while creating a FileCertReader: " +
-                e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a new instance of CertReader with the
-     * specified provider.
-     *
-     * @param provider   the provider to be used in creating the
-     *                   certificates etc.
-     */
-    public FileCertReader(Provider provider) throws CertificateException {
-        try {
-            certFactory = CertificateFactory.getInstance("X.509", provider);
-        } catch (Exception e) {
-            logger.error("Error while creating a FileCertReader: " + e.getMessage());
-            throw new CertificateException("Error while creating a FileCertReader: " +
-                e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a new instance of CertReader with the
-     * specified provider
-     *
-     * @param provider   the provider to be used in creating the
-     *                   certificates etc.
-     */
-    public FileCertReader(String provider) throws CertificateException {
-        try {
-            certFactory = CertificateFactory.getInstance("X.509", provider);
-        } catch (Exception e) {
-            logger.error("Error while creating a FileCertReader: " + e.getMessage());
-            throw new CertificateException("Error while creating a FileCertReader: " +
-                e.getMessage());
-        }
-    }
-
-    /** Reads the certificates from the files defined in the
-     * argument. See DirectoryList for file definition format.
-     * @param files The file definition.
-     * @throws Exception Thrown if certificate reading from the files
-     * fails.
-     * @return Returns the Vector of certificates read.
-     * @see org.glite.security.util.DirectoryList
-     */
-    public Vector readCerts(String files) throws IOException, CertificateException {
-        Vector certs = readFiles(files, TYPE_CERT);
-
-        Iterator certIter = certs.iterator();
-
-        logger.debug("read certs: ");
-
-        while (certIter.hasNext()) {
-            X509Certificate cert = (X509Certificate) certIter.next();
-            logger.debug("Read cert: " + cert.getSubjectDN().toString());
-        }
-
-        return certs;
-    }
-
-    public PrivateKey readPrivateKey(String file) throws IOException {
-        File keyfile = new File(file);
-
-        BufferedInputStream fis = new BufferedInputStream(new FileInputStream(keyfile));
-        skipToKeyBeginning(fis);
-
-        return (PrivateKey) PrivateKeyInfo.getInstance(new ASN1InputStream(fis).readObject()).getPrivateKey();
-    }
-
-    /** Reads the certificates from the files defined in the
-     * argument and makes TrustAnchors from them. See
-     * DirectoryList for file definition format.
-     * @param files The file definition.
-     * @throws Exception Thrown if the certificate reading fails.
-     * @return Returns a Vector of TrustAnchors read from the
-     * files.
-     * @see org.glite.security.util.DirectoryList
-     */
-    public Vector readAnchors(String files) throws IOException, CertificateException {
-        Vector anchors = readFiles(files, TYPE_ANCHOR);
-
-        Iterator anchorIter = anchors.iterator();
-
-        logger.debug("read TrustAnchors: ");
-
-        while (anchorIter.hasNext()) {
-            TrustAnchor anchor = (TrustAnchor) anchorIter.next();
-            logger.debug("Read TrustAnchor: " + anchor.getTrustedCert().getSubjectDN().toString());
-        }
-
-        return anchors;
-    }
-
-    /** Reads the certificate revocation lists (CRLs) from the
-     * files defined in the argument. See DirectoryList for
-     * file definition format.
-     * @param files The file definition.
-     * @throws Exception Thrown if the CRL reading failed.
-     * @return Returns a vector of CRLs read from the files.
-     * @see org.glite.security.util.DirectoryList
-     */
-    public Vector readCRLs(String files) throws IOException, CertificateException {
-        Vector crls = readFiles(files, TYPE_CRL);
-
-        Iterator crlIter = crls.iterator();
-
-        logger.debug("read CRLs: ");
-
-        while (crlIter.hasNext()) {
-            X509CRL crl = (X509CRL) crlIter.next();
-            logger.debug("Read CRL: " + crl.getIssuerDN().toString());
-        }
-
-        return crls;
-    }
-
-    /** Reads the certificates or CRLs from the files defined by
-     * the first argument, see DirectoryList for file definition
-     * format.
-     * @param files The file definition.
-     * @param type The type of things to read from the files.
-     * Currently supported are TYPE_ANCHOR,
-     * TYPE_CRL and TYPE_CERT defined in this class.
-     * @throws CertificateException Thrown if the reading of files fails.
-     * @return Returns a Vector of objects of type given that
-     * were read from the files given.
-     * @see org.glite.security.util.DirectoryList
-     */
-    private Vector readFiles(String files, int type) throws CertificateException {
-        Vector storeVector = new Vector();
-
-        try {
-            // load CA certificates
-            DirectoryList dir = new DirectoryList(files); // get the list of files matching CAFiles
-
-            Iterator CAFileIter = dir.getListing().iterator();
-
-            // go through the files
-            while (CAFileIter.hasNext()) { // go through the files reading the certificates
-
-                File nextFile = (File) CAFileIter.next();
-
-                storeVector.addAll(readFile(nextFile, type));
-            }
-        } catch (IOException e) {
-            logger.fatal("Error while reading certificates or CRLs: " + e.getMessage());
-
-            throw new CertificateException("Error while reading certificates or CRLs: " +
-                e.getMessage());
-        }
-
-        return storeVector;
-    }
-
-    /** Reads the objects of given type from the File.
-     * @param certFile The file to read.
-     * @param type The type of objects to read form the file.
-     * @throws IOException Thrown if the reading of objects of given type
-     * fails.
-     * @return Returns the Vector of objects read form the file.
-     */
-    public Vector readFile(File certFile, int type) throws IOException {
-        BufferedInputStream binStream = null;
-        Vector objects = new Vector();
-
-        try {
-            // get the buffered stream to facilitate marking
-            binStream = new BufferedInputStream(new FileInputStream(certFile));
-
-            while (binStream.available() > 0) {
-                Object obj = objectReader(binStream, type);
-
-                if (obj != null) {
-                    objects.add(obj);
-                }
-
-                skipEmptyLines(binStream);
-            }
-        } catch (Exception e) {
-            logger.fatal("Error while reading certificates or crls from file " +
-                certFile.toString() + "error was: " + e.getMessage());
-
-            throw new IOException("Error while reading certificates or crls from file " +
-                certFile.toString() + "error was: " + e.getMessage());
-        } finally {
-            if (binStream != null) {
-                binStream.close();
-            }
-        }
-
-        return objects;
-    }
-
-    /** Reads a certificate or a CRL from the stream, doing some
-     * error correction.
-     * @param binStream The stream to read the object from.
-     * @param type The type of object to read from the stream.
-     * @throws CertificateException Thrown if an error occurs while reading the object.
-     * @throws IOException Thrown if an error occurs while reading the object.
-     * @return Returns the object read.
-     */
-    public Object objectReader(BufferedInputStream binStream, int type)
-        throws CertificateException, IOException {
-        Object object = null;
-        int errors = 0; // no errors in the beginning
-        binStream.mark(10000);
-
-        do { // try twice, first with plain file (reads binary and plain Base64 certificates,
-             // second with skipping possible garbage in the beginning.
-
-            try {
-                if (errors == 1) { // if the first try failed, try if it was because of garbage in the beginning
-                    // before the actual base64 encoded certificate
-                    errors = 2; // if this try fails, don't try anymore
-
-                    skipToCertBeginning(binStream); // skip the garbage
-                }
-
-                binStream.mark(100000);
-
-                binStream.reset();
-
-                object = readObject(binStream, type);
-            } catch (Exception e) {
-                if (errors != 0) { // if the error persists after first pass, fail
-                    logger.error("Certificate or CRL reading failed: " + e.getMessage());
-                    throw new CertificateException("Certificate or CRL reading failed: " +
-                        e.getMessage());
-                }
-
-                errors = 1; // first try failed, try again with skipping
-                binStream.reset(); // rewind the file to the beginning of this try
-            }
-        } while (errors == 1); // try again after first try
-
-        return object;
-    }
-
-    /** Does the actual reading of the object.
-     * @param binStream The stream to read the object from.
-     * @param type The type of the object.
-     * @throws CertificateException Thrown if there is a problem reading the object.
-     * @return Returns the object read or null if no object was found.
-     */
-    public Object readObject(BufferedInputStream binStream, int type)
-        throws CertificateException {
-        Object obj;
-
-        if (type == TYPE_CRL) { // reading certificate revocation lists
-
-            try {
-                obj = certFactory.generateCRL(binStream);
-            } catch (CRLException e) {
-                logger.error("CRL loading failed: " + e.getMessage());
-                throw new CertificateException(e.getMessage());
-            }
-        } else { // reading certs or trust anchors
-
-            X509Certificate cert = (X509Certificate) certFactory.generateCertificate(binStream); // try to read the certificate
-
-            if (cert == null) {
-                return null;
-            }
-
-            if (type == TYPE_ANCHOR) {
-                // add the certificate to trustanchors, no name contstraints (should add the nameconstraints!)
-                obj = new TrustAnchor(cert, null);
-            } else {
-                if (type == TYPE_CERT) {
-                    obj = cert;
-                } else {
-                    logger.fatal("Internal error: Invalid data type " + type +
-                        " when trying to read certificate");
-                    throw new CertificateParsingException("Internal error: Invalid data type " +
-                        type + " when trying to read certificate");
-                }
-            }
-        }
-
-        return obj;
-    }
-
-    /** Skips everything in front of "-----BEGIN" in the stream.
-     * @param stream The stream to read and skip.
-     * @throws IOException Thrown if there is a problem skipping.
-     */
-    static public void skipToCertBeginning(BufferedInputStream stream)
-        throws IOException {
-        byte[] b = new byte[BUF_LEN]; // the byte buffer
-        stream.mark(BUF_LEN + 2); // mark the beginning
-
-        while (stream.available() > 0) { // check that there are still something to read
-
-            int num = stream.read(b); // read bytes from the file to the byte buffer
-            String buffer = new String(b, 0, num); // generate a string from the byte buffer
-            int index = buffer.indexOf("----BEGIN"); // check if the certificate beginning is in the chars read this time
-
-            if (index == -1) { // not found
-                stream.reset(); // rewind the file to the beginning of the last read
-                stream.skip(BUF_LEN - 100); // skip only part of the way as the "----BEGIN" can be in the transition of two 1000 char block
-                stream.mark(BUF_LEN + 2); // mark the new position
-            } else { // found
-
-                while ((buffer.charAt(index - 1) == '-') && (index > 0)) { // search the beginnig of the ----BEGIN tag
-                    index--;
-
-                    if (index == 0) { // prevent charAt test when reaching the beginning of buffer
-
-                        break;
-                    }
-                }
-
-                stream.reset(); // rewind to the beginning of the last read
-                stream.skip(index); // skip to the beginning of the tag
-                stream.mark(10000); // mark the position
-
-                return;
-            }
-        }
-    }
-
-    static public void skipToKeyBeginning(BufferedInputStream stream)
-        throws IOException {
-        byte[] b = new byte[BUF_LEN]; // the byte buffer
-        stream.mark(BUF_LEN + 2); // mark the beginning
-
-        while (stream.available() > 0) { // check that there are still something to read
-
-            int num = stream.read(b); // read bytes from the file to the byte buffer
-            String buffer = new String(b, 0, num); // generate a string from the byte buffer
-            int index = buffer.indexOf("----BEGIN PRIVATE"); // check if the certificate beginning is in the chars read this time
-
-            if (index == -1)
-                index = buffer.indexOf("----BEGIN ENCRYPTED");
-
-            if (index == -1) { // not found
-                stream.reset(); // rewind the file to the beginning of the last read
-                stream.skip(BUF_LEN - 100); // skip only part of the way as the "----BEGIN" can be in the transition of two 1000 char block
-                stream.mark(BUF_LEN + 2); // mark the new position
-            } else { // found
-
-                while ((buffer.charAt(index - 1) == '-') && (index > 0)) { // search the beginnig of the ----BEGIN tag
-                    index--;
-
-                    if (index == 0) { // prevent charAt test when reaching the beginning of buffer
-
-                        break;
-                    }
-                }
-
-                stream.reset(); // rewind to the beginning of the last read
-                stream.skip(index); // skip to the beginning of the tag
-                stream.mark(10000); // mark the position
-
-                return;
-            }
-        }
-    }
-
-    /** Skips empty lines in the stream.
-     * @param stream The stream possibly containing empty lines.
-     * @throws IOException Thrown if a problem occurs.
-     */
-    static public void skipEmptyLines(BufferedInputStream stream)
-        throws IOException {
-        byte[] b = new byte[BUF_LEN]; // the byte buffer
-        stream.mark(BUF_LEN + 2); // mark the beginning
-
-        while (stream.available() > 0) { // check that there are still something to read
-
-            int num = stream.read(b); // read bytes from the file to the byte buffer
-
-            int i = 0;
-
-            while ((i < num) && ((b[i] == CARR) || (b[i] == NL))) {
-                i++;
-            }
-
-            stream.reset();
-            stream.skip(i);
-
-            if (i < num) {
-                stream.mark(10000);
-
-                return;
-            } else {
-                stream.mark(BUF_LEN);
-            }
-        }
-    }
-}
-
-/** This class lists all the files defined in the constructor.
- * The definitions can be in three forms.
- * 1. absolute file (/tmp/test.txt)
- * 2. absolute path (/tmp)
- * 3. a wildcard file (/tmp/*.txt)
- *
- * In case 1. only the file is returned.
- * In case 2. all files in the directory are returned
- * In case 3. all the files in the directory tmp having
- * the .txt ending are returned.
- *
- * The returning means the return of the getListing method.
- */
-class DirectoryList {
-    static Logger logger = Logger.getLogger(DirectoryList.class.getName());
-    List files = null;
-
-    /** Creates a new instance of DirectoryList
-     * @param path The file definition, see class description above.
-     * @throws Exception Thrown if the path was invalid
-     */
-    public DirectoryList(String path) throws IOException {
-        // splits the absolute? filename from the wildcard
-        String[] parts = path.split("\\*");
-
-        // accept only one wildcard, so file is of the form /tmp/*.x or /tmp/a.x
-        if ((parts.length < 1) || (parts.length > 2)) {
-            return;
-        }
-
-        // check whether the first and only part is a file or directory
-        if (parts.length == 1) {
-            // open the directory or file
-            File fileOrDir = new File(parts[0]);
-
-            // if the path given was fully specified filename
-            if (fileOrDir.isFile()) {
-                // set the file as the only member in the vector and finish
-                files = new Vector();
-                files.add(fileOrDir);
-
-                return;
-            }
-
-            // the path defined a directory, so get all files
-            File[] fileDirArray;
-
-            // list the files and dirs inside
-            fileDirArray = fileOrDir.listFiles();
-
-            if (fileDirArray == null) {
-                logger.error("No files found matching " + path);
-                throw new IOException("No files found matching " + path);
-            }
-
-            // get the array containing all the files and directories
-            Iterator filesAndDirs = Arrays.asList(fileDirArray).iterator();
-
-            files = new Vector();
-
-            // add all the files to the files list and finish
-            while (filesAndDirs.hasNext()) {
-                File nextFile = (File) filesAndDirs.next();
-
-                if (nextFile.isFile()) {
-                    files.add(nextFile);
-                }
-            }
-
-            return;
-        } else {
-            // this is a directory+ending combination
-            files = new Vector();
-
-            // get all the files matching the definition.
-            FileEndingIterator iterator = new FileEndingIterator(parts[0], parts[1]);
-
-            while (iterator.hasNext()) {
-                files.add(iterator.next());
-            }
-
-            return;
-        }
-    }
-
-    /** Used to get the file listing, the list of files matching
-     * the definition in constructor.
-     * @return Returns the list of files matching the definition
-     * given in the constructor.
-     */
-    public List getListing() {
-        return files;
-    }
-}
 
 /**
  * @deprecated  This class does not expose the necessary information. Use
diff -Nur voms-1.9.11.orig/src/api/java/org/glite/voms/DirectoryList.java voms-1.9.11/src/api/java/org/glite/voms/DirectoryList.java
--- voms-1.9.11.orig/src/api/java/org/glite/voms/DirectoryList.java	1970-01-01 01:00:00.000000000 +0100
+++ voms-1.9.11/src/api/java/org/glite/voms/DirectoryList.java	2009-08-29 07:22:01.000000000 +0200
@@ -0,0 +1,142 @@
+/*********************************************************************
+ *
+ * Authors: Vincenzo Ciaschini - Vincenzo.Ciaschini at cnaf.infn.it 
+ *          Valerio Venturi    - Valerio.Venturi at cnaf.infn.it
+ *
+ * Copyright (c) 2002-2009 INFN-CNAF on behalf of the EU DataGrid
+ * and EGEE I, II and III
+ * For license conditions see LICENSE file or
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ * Parts of this code may be based upon or even include verbatim pieces,
+ * originally written by other people, in which case the original header
+ * follows.
+ *
+ *********************************************************************/
+/*
+ * Copyright (c) Members of the EGEE Collaboration. 2004.
+ * See http://eu-egee.org/partners/ for details on the copyright holders.
+ * For license conditions see the license file or http://eu-egee.org/license.html
+ */
+
+/*
+ * Copyright (c) 2002 on behalf of the EU DataGrid Project:
+ * The European Organization for Nuclear Research (CERN),
+ * the Particle Physics and Astronomy Research Council (PPARC),
+ * the Helsinki Institute of Physics and
+ * the Swedish Research Council (SRC). All rights reserved.
+ * see LICENSE file for details
+ *
+ * DirectoryList.java
+ *
+ * @author  Joni Hahkala
+ * Created on December 10, 2001, 6:50 PM
+ */
+
+package org.glite.voms;
+
+import org.apache.log4j.Logger;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+
+/** This class lists all the files defined in the constructor.
+ * The definitions can be in three forms.
+ * 1. absolute file (/tmp/test.txt)
+ * 2. absolute path (/tmp)
+ * 3. a wildcard file (/tmp/*.txt)
+ *
+ * In case 1. only the file is returned.
+ * In case 2. all files in the directory are returned
+ * In case 3. all the files in the directory tmp having
+ * the .txt ending are returned.
+ *
+ * The returning means the return of the getListing method.
+ */
+class DirectoryList {
+    static Logger logger = Logger.getLogger(DirectoryList.class.getName());
+    List files = null;
+
+    /** Creates a new instance of DirectoryList
+     * @param path The file definition, see class description above.
+     * @throws Exception Thrown if the path was invalid
+     */
+    public DirectoryList(String path) throws IOException {
+        // splits the absolute? filename from the wildcard
+        String[] parts = path.split("\\*");
+
+        // accept only one wildcard, so file is of the form /tmp/*.x or /tmp/a.x
+        if ((parts.length < 1) || (parts.length > 2)) {
+            return;
+        }
+
+        // check whether the first and only part is a file or directory
+        if (parts.length == 1) {
+            // open the directory or file
+            File fileOrDir = new File(parts[0]);
+
+            // if the path given was fully specified filename
+            if (fileOrDir.isFile()) {
+                // set the file as the only member in the vector and finish
+                files = new Vector();
+                files.add(fileOrDir);
+
+                return;
+            }
+
+            // the path defined a directory, so get all files
+            File[] fileDirArray;
+
+            // list the files and dirs inside
+            fileDirArray = fileOrDir.listFiles();
+
+            if (fileDirArray == null) {
+                logger.error("No files found matching " + path);
+                throw new IOException("No files found matching " + path);
+            }
+
+            // get the array containing all the files and directories
+            Iterator filesAndDirs = Arrays.asList(fileDirArray).iterator();
+
+            files = new Vector();
+
+            // add all the files to the files list and finish
+            while (filesAndDirs.hasNext()) {
+                File nextFile = (File) filesAndDirs.next();
+
+                if (nextFile.isFile()) {
+                    files.add(nextFile);
+                }
+            }
+
+            return;
+        } else {
+            // this is a directory+ending combination
+            files = new Vector();
+
+            // get all the files matching the definition.
+            FileEndingIterator iterator = new FileEndingIterator(parts[0], parts[1]);
+
+            while (iterator.hasNext()) {
+                files.add(iterator.next());
+            }
+
+            return;
+        }
+    }
+
+    /** Used to get the file listing, the list of files matching
+     * the definition in constructor.
+     * @return Returns the list of files matching the definition
+     * given in the constructor.
+     */
+    public List getListing() {
+        return files;
+    }
+}
diff -Nur voms-1.9.11.orig/src/api/java/org/glite/voms/FileCertReader.java voms-1.9.11/src/api/java/org/glite/voms/FileCertReader.java
--- voms-1.9.11.orig/src/api/java/org/glite/voms/FileCertReader.java	1970-01-01 01:00:00.000000000 +0100
+++ voms-1.9.11/src/api/java/org/glite/voms/FileCertReader.java	2009-08-29 07:55:09.000000000 +0200
@@ -0,0 +1,492 @@
+/*********************************************************************
+ *
+ * Authors: Vincenzo Ciaschini - Vincenzo.Ciaschini at cnaf.infn.it 
+ *          Valerio Venturi    - Valerio.Venturi at cnaf.infn.it
+ *
+ * Copyright (c) 2002-2009 INFN-CNAF on behalf of the EU DataGrid
+ * and EGEE I, II and III
+ * For license conditions see LICENSE file or
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ * Parts of this code may be based upon or even include verbatim pieces,
+ * originally written by other people, in which case the original header
+ * follows.
+ *
+ *********************************************************************/
+/*
+ * Copyright (c) Members of the EGEE Collaboration. 2004.
+ * See http://eu-egee.org/partners/ for details on the copyright holders.
+ * For license conditions see the license file or http://eu-egee.org/license.html
+ */
+
+/*
+ * Copyright (c) 2002 on behalf of the EU DataGrid Project:
+ * The European Organization for Nuclear Research (CERN),
+ * the Particle Physics and Astronomy Research Council (PPARC),
+ * the Helsinki Institute of Physics and
+ * the Swedish Research Council (SRC). All rights reserved.
+ * see LICENSE file for details
+ *
+ * FileCertReader.java
+ *
+ * @author  Joni Hahkala
+ * Created on March 27, 2002, 8:24 PM
+ */
+
+package org.glite.voms;
+
+import org.apache.log4j.Logger;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.Security;
+import java.security.cert.CRLException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.CertificateParsingException;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509CRL;
+import java.security.cert.X509Certificate;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+import org.bouncycastle.asn1.ASN1InputStream;
+
+/** Reads all certificates from given files, accepts binary form of DER encoded certs and
+ * the Base64 form of the DER encoded certs (PEM). The base64 certs can contain garbage in front of
+ * the actual certificate that has to begin with "-----BEGIN".
+ * Should accept multiple certs in one file, not tested!
+ */
+class FileCertReader {
+    static Logger logger = Logger.getLogger(FileCertReader.class.getName());
+    static final int BUF_LEN = 1000;
+    static final byte CARR = '\r';
+    static final byte NL = '\n';
+
+    /** The type for TrustAnchor
+     */
+    static final int TYPE_ANCHOR = 100;
+
+    /** The type for certificate revocation list
+     */
+    static final int TYPE_CRL = 101;
+
+    /** the type for X509 certificate
+     */
+    static final int TYPE_CERT = 102;
+
+    static {
+        if (Security.getProvider("BC") == null) {
+            Security.addProvider(new BouncyCastleProvider());
+        }
+    }
+
+    CertificateFactory certFactory;
+
+    /** Creates a new instance of CertReader. */
+    public FileCertReader() throws CertificateException {
+        try {
+            certFactory = CertificateFactory.getInstance("X.509", "BC");
+        } catch (Exception e) {
+            logger.error("Error while creating a FileCertReader: " + e.getMessage());
+            throw new CertificateException("Error while creating a FileCertReader: " +
+                e.getMessage());
+        }
+    }
+
+    /**
+     * Creates a new instance of CertReader with the
+     * specified provider.
+     *
+     * @param provider   the provider to be used in creating the
+     *                   certificates etc.
+     */
+    public FileCertReader(Provider provider) throws CertificateException {
+        try {
+            certFactory = CertificateFactory.getInstance("X.509", provider);
+        } catch (Exception e) {
+            logger.error("Error while creating a FileCertReader: " + e.getMessage());
+            throw new CertificateException("Error while creating a FileCertReader: " +
+                e.getMessage());
+        }
+    }
+
+    /**
+     * Creates a new instance of CertReader with the
+     * specified provider
+     *
+     * @param provider   the provider to be used in creating the
+     *                   certificates etc.
+     */
+    public FileCertReader(String provider) throws CertificateException {
+        try {
+            certFactory = CertificateFactory.getInstance("X.509", provider);
+        } catch (Exception e) {
+            logger.error("Error while creating a FileCertReader: " + e.getMessage());
+            throw new CertificateException("Error while creating a FileCertReader: " +
+                e.getMessage());
+        }
+    }
+
+    /** Reads the certificates from the files defined in the
+     * argument. See DirectoryList for file definition format.
+     * @param files The file definition.
+     * @throws Exception Thrown if certificate reading from the files
+     * fails.
+     * @return Returns the Vector of certificates read.
+     * @see org.glite.voms.DirectoryList
+     */
+    public Vector readCerts(String files) throws IOException, CertificateException {
+        Vector certs = readFiles(files, TYPE_CERT);
+
+        Iterator certIter = certs.iterator();
+
+        logger.debug("read certs: ");
+
+        while (certIter.hasNext()) {
+            X509Certificate cert = (X509Certificate) certIter.next();
+            logger.debug("Read cert: " + cert.getSubjectDN().toString());
+        }
+
+        return certs;
+    }
+
+    public PrivateKey readPrivateKey(String file) throws IOException {
+        File keyfile = new File(file);
+
+        BufferedInputStream fis = new BufferedInputStream(new FileInputStream(keyfile));
+        skipToKeyBeginning(fis);
+
+        return (PrivateKey) PrivateKeyInfo.getInstance(new ASN1InputStream(fis).readObject()).getPrivateKey();
+    }
+
+    /** Reads the certificates from the files defined in the
+     * argument and makes TrustAnchors from them. See
+     * DirectoryList for file definition format.
+     * @param files The file definition.
+     * @throws Exception Thrown if the certificate reading fails.
+     * @return Returns a Vector of TrustAnchors read from the
+     * files.
+     * @see org.glite.voms.DirectoryList
+     */
+    public Vector readAnchors(String files) throws IOException, CertificateException {
+        Vector anchors = readFiles(files, TYPE_ANCHOR);
+
+        Iterator anchorIter = anchors.iterator();
+
+        logger.debug("read TrustAnchors: ");
+
+        while (anchorIter.hasNext()) {
+            TrustAnchor anchor = (TrustAnchor) anchorIter.next();
+            logger.debug("Read TrustAnchor: " + anchor.getTrustedCert().getSubjectDN().toString());
+        }
+
+        return anchors;
+    }
+
+    /** Reads the certificate revocation lists (CRLs) from the
+     * files defined in the argument. See DirectoryList for
+     * file definition format.
+     * @param files The file definition.
+     * @throws Exception Thrown if the CRL reading failed.
+     * @return Returns a vector of CRLs read from the files.
+     * @see org.glite.voms.DirectoryList
+     */
+    public Vector readCRLs(String files) throws IOException, CertificateException {
+        Vector crls = readFiles(files, TYPE_CRL);
+
+        Iterator crlIter = crls.iterator();
+
+        logger.debug("read CRLs: ");
+
+        while (crlIter.hasNext()) {
+            X509CRL crl = (X509CRL) crlIter.next();
+            logger.debug("Read CRL: " + crl.getIssuerDN().toString());
+        }
+
+        return crls;
+    }
+
+    /** Reads the certificates or CRLs from the files defined by
+     * the first argument, see DirectoryList for file definition
+     * format.
+     * @param files The file definition.
+     * @param type The type of things to read from the files.
+     * Currently supported are TYPE_ANCHOR,
+     * TYPE_CRL and TYPE_CERT defined in this class.
+     * @throws CertificateException Thrown if the reading of files fails.
+     * @return Returns a Vector of objects of type given that
+     * were read from the files given.
+     * @see org.glite.voms.DirectoryList
+     */
+    private Vector readFiles(String files, int type) throws CertificateException {
+        Vector storeVector = new Vector();
+
+        try {
+            // load CA certificates
+            DirectoryList dir = new DirectoryList(files); // get the list of files matching CAFiles
+
+            Iterator CAFileIter = dir.getListing().iterator();
+
+            // go through the files
+            while (CAFileIter.hasNext()) { // go through the files reading the certificates
+
+                File nextFile = (File) CAFileIter.next();
+
+                storeVector.addAll(readFile(nextFile, type));
+            }
+        } catch (IOException e) {
+            logger.fatal("Error while reading certificates or CRLs: " + e.getMessage());
+
+            throw new CertificateException("Error while reading certificates or CRLs: " +
+                e.getMessage());
+        }
+
+        return storeVector;
+    }
+
+    /** Reads the objects of given type from the File.
+     * @param certFile The file to read.
+     * @param type The type of objects to read form the file.
+     * @throws IOException Thrown if the reading of objects of given type
+     * fails.
+     * @return Returns the Vector of objects read form the file.
+     */
+    public Vector readFile(File certFile, int type) throws IOException {
+        BufferedInputStream binStream = null;
+        Vector objects = new Vector();
+
+        try {
+            // get the buffered stream to facilitate marking
+            binStream = new BufferedInputStream(new FileInputStream(certFile));
+
+            while (binStream.available() > 0) {
+                Object obj = objectReader(binStream, type);
+
+                if (obj != null) {
+                    objects.add(obj);
+                }
+
+                skipEmptyLines(binStream);
+            }
+        } catch (Exception e) {
+            logger.fatal("Error while reading certificates or crls from file " +
+                certFile.toString() + "error was: " + e.getMessage());
+
+            throw new IOException("Error while reading certificates or crls from file " +
+                certFile.toString() + "error was: " + e.getMessage());
+        } finally {
+            if (binStream != null) {
+                binStream.close();
+            }
+        }
+
+        return objects;
+    }
+
+    /** Reads a certificate or a CRL from the stream, doing some
+     * error correction.
+     * @param binStream The stream to read the object from.
+     * @param type The type of object to read from the stream.
+     * @throws CertificateException Thrown if an error occurs while reading the object.
+     * @throws IOException Thrown if an error occurs while reading the object.
+     * @return Returns the object read.
+     */
+    public Object objectReader(BufferedInputStream binStream, int type)
+        throws CertificateException, IOException {
+        Object object = null;
+        int errors = 0; // no errors in the beginning
+        binStream.mark(10000);
+
+        do { // try twice, first with plain file (reads binary and plain Base64 certificates,
+             // second with skipping possible garbage in the beginning.
+
+            try {
+                if (errors == 1) { // if the first try failed, try if it was because of garbage in the beginning
+                    // before the actual base64 encoded certificate
+                    errors = 2; // if this try fails, don't try anymore
+
+                    skipToCertBeginning(binStream); // skip the garbage
+                }
+
+                binStream.mark(100000);
+
+                binStream.reset();
+
+                object = readObject(binStream, type);
+            } catch (Exception e) {
+                if (errors != 0) { // if the error persists after first pass, fail
+                    logger.error("Certificate or CRL reading failed: " + e.getMessage());
+                    throw new CertificateException("Certificate or CRL reading failed: " +
+                        e.getMessage());
+                }
+
+                errors = 1; // first try failed, try again with skipping
+                binStream.reset(); // rewind the file to the beginning of this try
+            }
+        } while (errors == 1); // try again after first try
+
+        return object;
+    }
+
+    /** Does the actual reading of the object.
+     * @param binStream The stream to read the object from.
+     * @param type The type of the object.
+     * @throws CertificateException Thrown if there is a problem reading the object.
+     * @return Returns the object read or null if no object was found.
+     */
+    public Object readObject(BufferedInputStream binStream, int type)
+        throws CertificateException {
+        Object obj;
+
+        if (type == TYPE_CRL) { // reading certificate revocation lists
+
+            try {
+                obj = certFactory.generateCRL(binStream);
+            } catch (CRLException e) {
+                logger.error("CRL loading failed: " + e.getMessage());
+                throw new CertificateException(e.getMessage());
+            }
+        } else { // reading certs or trust anchors
+
+            X509Certificate cert = (X509Certificate) certFactory.generateCertificate(binStream); // try to read the certificate
+
+            if (cert == null) {
+                return null;
+            }
+
+            if (type == TYPE_ANCHOR) {
+                // add the certificate to trustanchors, no name contstraints (should add the nameconstraints!)
+                obj = new TrustAnchor(cert, null);
+            } else {
+                if (type == TYPE_CERT) {
+                    obj = cert;
+                } else {
+                    logger.fatal("Internal error: Invalid data type " + type +
+                        " when trying to read certificate");
+                    throw new CertificateParsingException("Internal error: Invalid data type " +
+                        type + " when trying to read certificate");
+                }
+            }
+        }
+
+        return obj;
+    }
+
+    /** Skips everything in front of "-----BEGIN" in the stream.
+     * @param stream The stream to read and skip.
+     * @throws IOException Thrown if there is a problem skipping.
+     */
+    static public void skipToCertBeginning(BufferedInputStream stream)
+        throws IOException {
+        byte[] b = new byte[BUF_LEN]; // the byte buffer
+        stream.mark(BUF_LEN + 2); // mark the beginning
+
+        while (stream.available() > 0) { // check that there are still something to read
+
+            int num = stream.read(b); // read bytes from the file to the byte buffer
+            String buffer = new String(b, 0, num); // generate a string from the byte buffer
+            int index = buffer.indexOf("----BEGIN"); // check if the certificate beginning is in the chars read this time
+
+            if (index == -1) { // not found
+                stream.reset(); // rewind the file to the beginning of the last read
+                stream.skip(BUF_LEN - 100); // skip only part of the way as the "----BEGIN" can be in the transition of two 1000 char block
+                stream.mark(BUF_LEN + 2); // mark the new position
+            } else { // found
+
+                while ((buffer.charAt(index - 1) == '-') && (index > 0)) { // search the beginnig of the ----BEGIN tag
+                    index--;
+
+                    if (index == 0) { // prevent charAt test when reaching the beginning of buffer
+
+                        break;
+                    }
+                }
+
+                stream.reset(); // rewind to the beginning of the last read
+                stream.skip(index); // skip to the beginning of the tag
+                stream.mark(10000); // mark the position
+
+                return;
+            }
+        }
+    }
+
+    static public void skipToKeyBeginning(BufferedInputStream stream)
+        throws IOException {
+        byte[] b = new byte[BUF_LEN]; // the byte buffer
+        stream.mark(BUF_LEN + 2); // mark the beginning
+
+        while (stream.available() > 0) { // check that there are still something to read
+
+            int num = stream.read(b); // read bytes from the file to the byte buffer
+            String buffer = new String(b, 0, num); // generate a string from the byte buffer
+            int index = buffer.indexOf("----BEGIN PRIVATE"); // check if the certificate beginning is in the chars read this time
+
+            if (index == -1)
+                index = buffer.indexOf("----BEGIN ENCRYPTED");
+
+            if (index == -1) { // not found
+                stream.reset(); // rewind the file to the beginning of the last read
+                stream.skip(BUF_LEN - 100); // skip only part of the way as the "----BEGIN" can be in the transition of two 1000 char block
+                stream.mark(BUF_LEN + 2); // mark the new position
+            } else { // found
+
+                while ((buffer.charAt(index - 1) == '-') && (index > 0)) { // search the beginnig of the ----BEGIN tag
+                    index--;
+
+                    if (index == 0) { // prevent charAt test when reaching the beginning of buffer
+
+                        break;
+                    }
+                }
+
+                stream.reset(); // rewind to the beginning of the last read
+                stream.skip(index); // skip to the beginning of the tag
+                stream.mark(10000); // mark the position
+
+                return;
+            }
+        }
+    }
+
+    /** Skips empty lines in the stream.
+     * @param stream The stream possibly containing empty lines.
+     * @throws IOException Thrown if a problem occurs.
+     */
+    static public void skipEmptyLines(BufferedInputStream stream)
+        throws IOException {
+        byte[] b = new byte[BUF_LEN]; // the byte buffer
+        stream.mark(BUF_LEN + 2); // mark the beginning
+
+        while (stream.available() > 0) { // check that there are still something to read
+
+            int num = stream.read(b); // read bytes from the file to the byte buffer
+
+            int i = 0;
+
+            while ((i < num) && ((b[i] == CARR) || (b[i] == NL))) {
+                i++;
+            }
+
+            stream.reset();
+            stream.skip(i);
+
+            if (i < num) {
+                stream.mark(10000);
+
+                return;
+            } else {
+                stream.mark(BUF_LEN);
+            }
+        }
+    }
+}
diff -Nur voms-1.9.11.orig/src/api/java/org/glite/voms/FileEndingIterator.java voms-1.9.11/src/api/java/org/glite/voms/FileEndingIterator.java
--- voms-1.9.11.orig/src/api/java/org/glite/voms/FileEndingIterator.java	1970-01-01 01:00:00.000000000 +0100
+++ voms-1.9.11/src/api/java/org/glite/voms/FileEndingIterator.java	2009-08-29 07:24:52.000000000 +0200
@@ -0,0 +1,137 @@
+/*********************************************************************
+ *
+ * Authors: Vincenzo Ciaschini - Vincenzo.Ciaschini at cnaf.infn.it 
+ *          Valerio Venturi    - Valerio.Venturi at cnaf.infn.it
+ *
+ * Copyright (c) 2002-2009 INFN-CNAF on behalf of the EU DataGrid
+ * and EGEE I, II and III
+ * For license conditions see LICENSE file or
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ * Parts of this code may be based upon or even include verbatim pieces,
+ * originally written by other people, in which case the original header
+ * follows.
+ *
+ *********************************************************************/
+/*
+ * Copyright (c) Members of the EGEE Collaboration. 2004.
+ * See http://eu-egee.org/partners/ for details on the copyright holders.
+ * For license conditions see the license file or http://eu-egee.org/license.html
+ */
+
+/*
+ * Copyright (c) 2002 on behalf of the EU DataGrid Project:
+ * The European Organization for Nuclear Research (CERN),
+ * the Particle Physics and Astronomy Research Council (PPARC),
+ * the Helsinki Institute of Physics and
+ * the Swedish Research Council (SRC). All rights reserved.
+ * see LICENSE file for details
+ *
+ * FileEndingIterator.java
+ *
+ * @author  Joni Hahkala
+ * Created on December 3, 2001, 9:16 AM
+ */
+
+package org.glite.voms;
+
+import org.apache.log4j.Logger;
+
+import java.io.File;
+
+
+/** Lists all the files in the given directory that end with
+ * a certain ending.
+ */
+class FileEndingIterator {
+    static Logger logger = Logger.getLogger(FileEndingIterator.class.getName());
+
+    /** The file ending.
+     */
+    protected String ending;
+
+    /** A flag to show that there are more files that match.
+     */
+    protected boolean nextFound = false;
+
+    /** The list of files in the directory.
+     */
+    protected File[] fileList;
+
+    /** The index of the next match in the fileList.
+     */
+    protected int index = 0;
+
+    /** Creates new FileIterator and searches the first match.
+     * @param path The directory used for the file search.
+     * @param ending The file ending to search for.
+     */
+    public FileEndingIterator(String path, String ending) {
+        this.ending = ending;
+
+        try {
+            // open the directory
+            File directory = (path.length() != 0) ? new File(path) : new File(".").getAbsoluteFile();
+
+            // list the files and dirs inside
+            fileList = directory.listFiles();
+
+            // find the first match for the ending
+            nextFound = findNext();
+        } catch (Exception e) {
+            logger.error("no files found from \"" + path + "\" error: " + e.getMessage());
+
+            //            e.printStackTrace();
+            return;
+        }
+    }
+
+    /** Used to get the next matching file.
+     * @return Returns the next matching file.
+     */
+    public File next() {
+        if (nextFound == false) {
+            return null;
+        }
+
+        File current = fileList[index++];
+
+        nextFound = findNext();
+
+        return current;
+    }
+
+    /** Used to check that there are more matching files to get
+     * using next().
+     * @return Returns true if there are more matching files.
+     */
+    public boolean hasNext() {
+        return nextFound;
+    }
+
+    /** Finds the next matching file in the list of files.
+     * @return Returns true if a matching file was found.
+     */
+    protected boolean findNext() {
+        try {
+            // search the next file with proper ending
+            while ((index < fileList.length) &&
+                    (fileList[index].isDirectory() || !fileList[index].getName().endsWith(ending))) {
+                //               System.out.println("FileIterator::next: Skipping file " + fileList[index].getName());
+                index++;
+            }
+        } catch (Exception e) {
+            logger.error("Error while reading directory " + e.getMessage());
+
+            //            e.printStackTrace(System.out);
+            return false;
+        }
+
+        // check if the loop ended because of a match or because running out of choices.
+        if (index < fileList.length) {
+            return true;
+        }
+
+        return false;
+    }
+}

voms-initscript.patch:
 voms.start.in |  186 ++++++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 122 insertions(+), 64 deletions(-)

--- NEW FILE voms-initscript.patch ---
diff -ur voms-1.9.11.orig/src/install/voms.start.in voms-1.9.11/src/install/voms.start.in
--- voms-1.9.11.orig/src/install/voms.start.in	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/install/voms.start.in	2009-09-03 10:10:17.574074641 +0200
@@ -19,9 +19,19 @@
 #	voms servers.
 #
 # chkconfig: 2345 95 05
-# description: VOMS stands for Virtual Organization Membership System.
+# description: Virtual Organization Membership Service
 # processname: voms
 # pidfile: /var/run/voms.pid
+#
+### BEGIN INIT INFO
+# Provides:          voms
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Virtual Organization Membership Service
+# Description:       Virtual Organization Membership Service
+### END INIT INFO
 
 # Source networking configuration and check that networking is up.
 if [ -r /etc/sysconfig/network ] ; then
@@ -31,9 +41,16 @@
 
 # Default prefix
 @LOCATION_ENV@=${@LOCATION_ENV@:- at LOCATION_DIR@}
- at VAR_LOCATION_ENV@=${@VAR_LOCATION_ENV@:-$@LOCATION_ENV@/var}
 
-# check whether $@VAR_LOCATION_ENV@/var/lock/subsys exists
+if [ -z "$@VAR_LOCATION_ENV@" ] ; then
+    if [ "$@LOCATION_ENV@" = "/usr" ] ; then
+        @VAR_LOCATION_ENV@=/var
+    else
+        @VAR_LOCATION_ENV@=$@LOCATION_ENV@/var
+    fi
+fi
+
+# check whether $@VAR_LOCATION_ENV@/lock/subsys exists
 if ! test -d $@VAR_LOCATION_ENV@/lock/subsys ; then
     mkdir -p $@VAR_LOCATION_ENV@/lock/subsys
 fi
@@ -41,19 +58,38 @@
 # Default path
 basepath=$@LOCATION_ENV@
 binpath=${basepath}/sbin
-etcpath=${basepath}/etc
 
-# Source an auxiliary profile file if we have one, and pick up VOMS_OPTIONS and VOMS_USER
-if [ -r ${etcpath}/profile.d/voms.sh ] ; then
-    . ${etcpath}/profile.d/voms.sh
+if [ "$basepath" = "/usr" ] ; then
+    etcpath=/etc
+else
+    etcpath=${basepath}/etc
+fi
+
+RUN=yes
+
+# Source an auxiliary profile file if we have one and pick up VOMS_USER and RUN
+if [ -r ${etcpath}/default/voms ] ; then
+    . ${etcpath}/default/voms
+fi
+if [ -r ${etcpath}/sysconfig/voms ] ; then
+    . ${etcpath}/sysconfig/voms
+fi
+
+# Don't run until configuration is done
+if [ "x$RUN" != "xyes" ] ; then
+    echo "voms disabled, please adjust the configuration to your needs "
+    echo "and then set RUN to 'yes' in /etc/default/voms to enable it."
+    exit 0
 fi
 
 # add lib directory to LD_LIBRARY_PATH
-export LD_LIBRARY_PATH="$@LOCATION_ENV@/lib:$LD_LIBRARY_PATH"
+if [ "$@LOCATION_ENV@" != "/usr" ] ; then
+    export LD_LIBRARY_PATH="$@LOCATION_ENV@/lib:$LD_LIBRARY_PATH"
+fi
 
-voms=${binpath}/edg-voms
+voms=${binpath}/voms
 if !(test -x ${voms}) ; then
-    echo "Cannot find edg-voms." 
+    echo "Cannot find voms."
     exit 0
 fi
 
@@ -64,18 +100,22 @@
     # Start daemons.
     prog=`basename ${voms}`
     if test -z $1; then
-        vos=`ls $@LOCATION_ENV@/etc/voms`
+        vos=`ls ${etcpath}/voms`
+        if test -z "$vos" ; then
+            echo "No VOMS servers configured."
+            return 0
+        fi
     else
         vos=$1
     fi
 
     for vo in $vos ; do
 
-        if test -f $@LOCATION_ENV@/etc/voms/$vo/voms.conf ; then
+        if test -f ${etcpath}/voms/$vo/voms.conf ; then
             echo -n "Starting $prog($vo): "
 
-            if test -f $@LOCATION_ENV@/etc/voms/$vo/tnsnames.ora ; then
-                tnsvalue=$@LOCATION_ENV@/etc/voms/$vo
+            if test -f ${etcpath}/voms/$vo/tnsnames.ora ; then
+                tnsvalue=${etcpath}/voms/$vo
             else
                 tnsvalue="$TNS_ADMIN"
             fi
@@ -84,21 +124,21 @@
                 read pid < $@VAR_LOCATION_ENV@/lock/subsys/voms.$vo
                 if test "x$pid" != "x"; then
                     if checkpid $pid; then
-                        echo "VOMS ($pid) is already running" && failure
+                        echo "VOMS ($pid) is already running"
                         continue;
                     fi
                 fi
             fi
 
             if [ -n "$VOMS_USER" ]; then
-                su -c "TNS_ADMIN=\"$tnsvalue\" ${voms} --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" -s /bin/bash $VOMS_USER
+                su -c "TNS_ADMIN=\"$tnsvalue\" ${voms} --conf ${etcpath}/voms/$vo/voms.conf" -s /bin/bash $VOMS_USER
             else
-                TNS_ADMIN="$tnsvalue" ${voms} --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf
+                TNS_ADMIN="$tnsvalue" ${voms} --conf ${etcpath}/voms/$vo/voms.conf
             fi
 
-	          # get process id
-            pid=$(ps axo pid,args | grep "${voms} --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | cut -f 1 -d '/'|head -1)
-            pids=`ps -efww | grep "$@LOCATION_ENV@/sbin/edg-voms --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
+            # get process id
+            pid=$(ps axo pid,args | grep "${voms} --conf ${etcpath}/voms/$vo/voms.conf" | grep -v grep | cut -f 1 -d '/'|head -1)
+            pids=`ps -efww | grep "${binpath}/voms --conf ${etcpath}/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
             NUM=$(($pid))
             if test $NUM -eq 0; then
                 RETVAL=1
@@ -110,12 +150,17 @@
                 RETGLOB=$(($RETGLOB + 1 ))
             fi
             [ "$RETVAL" -eq 0 ] && success || failure 
+            echo
         fi
     done
     
     return $RETGLOB
 }
 
+if [ -r /etc/init.d/functions ] ; then
+    . /etc/init.d/functions
+else
+
 success()
 {
     echo $1
@@ -151,6 +196,8 @@
     return $rc
 }
 
+fi
+
 checkpid() 
 {
     ps --pid $1 >> /dev/null
@@ -164,14 +211,14 @@
 # A function to stop a program.
 killprocs() {
     RC=0
-	# Test syntax.
+    # Test syntax.
     if [ "$#" -eq 0 ]; then
         echo $"Usage: killproc {pids} [signal]"
         return 1
     fi
     
     notset=0
-	# check for second arg to be kill level
+    # check for second arg to be kill level
     if [ "$2" != "" ] ; then
         killlevel=$2
     else
@@ -179,15 +226,15 @@
         killlevel="-9"
     fi
 
-        # Find pid.
+    # Find pid.
     pid=$1
 
-        # Kill it.
+    # Kill it.
     if [ -n "${pid:-}" ] ; then
         [ "$BOOTUP" = "verbose" -a -z "$LSB" ] && echo -n "$base "
         if [ "$notset" -eq "1" ] ; then
             if checkpid $pid 2>&1; then
-			   # TERM first, then KILL if not dead
+                # TERM first, then KILL if not dead
                 kill -TERM $pid
                 sleep 0.1
                 if checkpid $pid && sleep 1 &&
@@ -196,14 +243,14 @@
                     kill -KILL $pid
                     sleep 0.1
                 fi
-		        fi
+            fi
             checkpid $pid
             RC=$?
             [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
             RC=$((! $RC))
-		# use specified level only
-		else
-		        if checkpid $pid >/dev/null 2>&1; then
+        else
+            # use specified level only
+            if checkpid $pid >/dev/null 2>&1; then
                 kill $killlevel $pid
                 RC=$?
                 [ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"
@@ -214,7 +261,7 @@
         RC=1
     fi
     
-        # Remove pid file if any.
+    # Remove pid file if any.
     if [ "$notset" = "1" ]; then
         rm -f /var/run/$base.pid
     fi
@@ -226,18 +273,21 @@
     # Stop daemons.
     prog=`basename ${voms}`
     if test -z $1; then
-        vos=`ls $@LOCATION_ENV@/etc/voms`
+        vos=`ls ${etcpath}/voms`
+        if test -z "$vos" ; then
+            echo "No VOMS servers configured."
+            return 0
+        fi
     else
         vos=$1
     fi
 
     for vo in $vos ; do
-        if test -f $@LOCATION_ENV@/etc/voms/$vo/voms.conf ; then
+        if test -f ${etcpath}/voms/$vo/voms.conf ; then
             echo -n "Stopping $prog($vo): "
-#	    pids=$(ps axo pid,args | grep "${voms} --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | cut -f 1 -d '/')
-            pids=`ps -efww | grep "$@LOCATION_ENV@/sbin/edg-voms --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep|awk '{ print $2; }'|tr '\n' ' '`
-            dbname=`grep dbname $@LOCATION_ENV@/etc/voms/$vo/voms.conf | awk -F"=" '{ print $2; }'`
-            username=`grep username $@LOCATION_ENV@/etc/voms/$vo/voms.conf | awk -F"=" '{ print $2; }'`
+            pids=`ps -efww | grep "${binpath}/voms --conf ${etcpath}/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
+            dbname=`grep dbname ${etcpath}/voms/$vo/voms.conf | awk -F"=" '{ print $2; }'`
+            username=`grep username ${etcpath}/voms/$vo/voms.conf | awk -F"=" '{ print $2; }'`
             if test "x$username" = "x"; then
                 pids="";
                 pids2="";
@@ -255,16 +305,15 @@
                 fi
             fi
             if test -z "$pids"; then
-                failure; echo
-                RETVAL=1
+                echo "(already stopped)"
                 continue
             fi
             for pid in $pids; do
-                killprocs ${pid} ;
+                killprocs ${pid}
             done
             RETVAL=$?
             echo
-            [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/voms.$vo
+            [ $RETVAL -eq 0 ] && rm -f $@VAR_LOCATION_ENV@/lock/subsys/voms.$vo
             RETGLOB=$((RETGLOB + RETVAL))
         fi
     done
@@ -273,47 +322,53 @@
 }
 
 function condrestart() {
-    # Stop daemons.
+    RETGLOB=0
+    # Conditionally restart daemons.
     prog=`basename ${voms}`
     if test -z $1; then
-        vos=`ls $@LOCATION_ENV@/etc/voms`
+        vos=`ls ${etcpath}/voms`
+        if test -z "$vos" ; then
+            echo "No VOMS servers configured."
+            return 0
+        fi
     else
         vos=$1
     fi
     
     for vo in $vos ; do
-        if test -f $@LOCATION_ENV@/etc/voms/$vo/voms.conf ; then
-            echo -n "Condrestart $prog($vo): "
-#	    pids=$(ps axo pid,args | grep "${voms} --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | cut -f 1 -d '/')
-            pids=`ps -efww | grep "$@LOCATION_ENV@/sbin/edg-voms --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
-            if test -z "$pids"; then
-                echo; start $vo
-            else
-                failure; echo
-                RETVAL=1
+        if test -f ${etcpath}/voms/$vo/voms.conf ; then
+            pids=`ps -efww | grep "${binpath}/voms --conf ${etcpath}/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
+            if test -n "$pids"; then
+                $0 restart $vo
+                RETVAL=$?
+                RETGLOB=$((RETGLOB + RETVAL))
             fi
         fi
     done
 
     return $RETGLOB
-
 }
 
 function getstatus() {
-    # Stop daemons.
-    prog=`basename ${voms}`
-
-    # get vos
-    vos=${1:-`find $@LOCATION_ENV@/etc/voms/ -type d -printf "%f "`}
-
     value=0
+    # Get status.
+    prog=`basename ${voms}`
+    if test -z $1; then
+        vos=`ls ${etcpath}/voms`
+        if test -z "$vos" ; then
+            echo "No VOMS servers configured."
+            return 0
+        fi
+    else
+        vos=$1
+    fi
 
     for vo in $vos ; do
-        if test -f $@LOCATION_ENV@/etc/voms/$vo/voms.conf ; then
+        if test -f ${etcpath}/voms/$vo/voms.conf ; then
             echo -n "Status $prog($vo): "
-            pids=`ps -efww | grep "$@LOCATION_ENV@/sbin/edg-voms --conf $@LOCATION_ENV@/etc/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
+            pids=`ps -efww | grep "${binpath}/voms --conf ${etcpath}/voms/$vo/voms.conf" | grep -v grep | awk '{ print $2; }'`
             if test -z "$pids"; then
-                if [ -f /var/lock/subsys/voms.$vo ]; then
+                if [ -f $@VAR_LOCATION_ENV@/lock/subsys/voms.$vo ]; then
                     echo "dead but subsys locked"
                     value=$[$value < 2 ? 2 : $value]
                     continue
@@ -322,7 +377,8 @@
                 value=$[$value < 3 ? 3 : $value]
                 continue
             else
-                echo "(pid $pids) is running..."
+                echo -n "(pid $pids) is running..." | tr '\n' ' '
+                echo
                 value=$[$value < 0 ? 0 : $value]
                 continue
             fi
@@ -346,12 +402,14 @@
         getstatus $2
         RETVAL=$?
         ;;
-    restart)
+    restart | force-reload)
         stop $2
         start $2
         RETVAL=$?
         ;;
-    condrestart)
+    reload)
+        ;;
+    condrestart | try-restart)
         condrestart $2
         RETVAL=$?
         ;;

voms-install-db.patch:
 voms_install_db.in |   26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

--- NEW FILE voms-install-db.patch ---
diff -ur voms-1.9.11.orig/src/install/voms_install_db.in voms-1.9.11/src/install/voms_install_db.in
--- voms-1.9.11.orig/src/install/voms_install_db.in	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/install/voms_install_db.in	2009-08-26 17:45:39.608077295 +0200
@@ -4,7 +4,11 @@
 # Default prefix
 @LOCATION_ENV@=${@LOCATION_ENV@:- at LOCATION_DIR@}
 if test -z $@VAR_LOCATION_ENV@ ; then
-    @VAR_LOCATION_ENV@=$@LOCATION_ENV@/var
+    if [ "$@LOCATION_ENV@" = "/usr" ] ; then
+        @VAR_LOCATION_ENV@=/var
+    else
+        @VAR_LOCATION_ENV@=$@LOCATION_ENV@/var
+    fi
 fi
 
 # CERTDIR
@@ -37,7 +41,9 @@
 
 # Default path
 basepath=$@LOCATION_ENV@
-datapath=$@LOCATION_ENV@
+if [ "$@LOCATION_ENV@" != "/usr" ] ; then
+    datapath=$@LOCATION_ENV@
+fi
 
 # Default Suffix
 code=0
@@ -49,7 +55,7 @@
 logformat=""
 sqlloc=""
 help=""
-oldformat="no"
+newformat="yes"
 
 if test "x at with_mysqlconf@" != "x" ; then
     MYSQLCONF=" --defaults-file=@with_mysqlconf@ "
@@ -58,7 +64,7 @@
 fi
 
 
-TEMP=`getopt -o h --long mysql-home:,loglevel:,logtype:,logformat:,logdateformat:,oracle-home:,db:,port:,code:,voms-vo:,socktimeout:,db-type:,sqlloc:,db-admin:,db-pwd:,voms-name:,voms-pwd:,newformat,compat -n 'voms_install_db' -- "$@"`
+TEMP=`getopt -o h --long mysql-home:,loglevel:,logtype:,logformat:,logdateformat:,oracle-home:,db:,port:,code:,voms-vo:,socktimeout:,db-type:,sqlloc:,db-admin:,db-pwd:,voms-name:,voms-pwd:,oldformat,compat -n 'voms_install_db' -- "$@"`
 
 if [ $? != 0 ] ; then $ECHO "Terminating..." >&2 ; exit 1 ; fi
 
@@ -84,7 +90,7 @@
   --logtype)                logtype=$2                 ; shift 2 ;;
   --logformat)              logformat=$2               ; shift 2 ;;
   --logdateformat)          logdateformat=$2           ; shift 2 ;;
-  --newformat)              oldformat="yes"            ; shift 1 ;;
+  --oldformat)              newformat="no"             ; shift 1 ;;
   -h)                       help="yes"                 ; shift 1 ;;
 	--)                       shift                      ; break   ;;
 	*)                        $ECHO "$1: Internal Error!" >&2 ; exit 1  ;;
@@ -133,7 +139,7 @@
     $ECHO "    --logtype type          Specifies what to log. See the vomsd(8) man page for details."
     $ECHO "    --logformat format      See the vomsd(8) man page for details."
     $ECHO "    --logdateformat format  See the vomsd(8) man page for details."
-    $ECHO "    --newformat             Creates AC according to the old format."
+    $ECHO "    --oldformat             Creates AC according to the old format."
     $ECHO "    --help                  This output."
     exit 0;
 fi
@@ -261,8 +267,8 @@
 
 # Setting ownership and permission for voms_password_query file
 mkdir -p $datapath/etc/voms/$voms_vo
-mkdir -p $@LOCATION_ENV at _VAR/log
-#$datapath/log
+mkdir -p $@VAR_LOCATION_ENV@/log/voms
+
 $ECHO $voms_password_query > $datapath/etc/voms/$voms_vo/voms.pass
 chown root.voms $datapath/etc/voms/$voms_vo/voms.pass
 chmod 640 $datapath/etc/voms/$voms_vo/voms.pass
@@ -270,10 +276,10 @@
 if test -z $voms_vo ; then
     logname=voms
 else
-    logname=voms.$voms_vo
+    logname=$voms_vo
 fi
  
-$ECHO -en "--vo=$voms_vo\n--dbname=$voms_database\n--port=$port\n--username=$voms_username_query\n--passfile=$datapath/etc/voms/$voms_vo/voms.pass\n--sqlloc=$sqlloc\n--logfile=$@LOCATION_ENV at _VAR/log/$logname\n" > $datapath/etc/voms/$voms_vo/voms.conf
+$ECHO -en "--vo=$voms_vo\n--dbname=$voms_database\n--port=$port\n--username=$voms_username_query\n--passfile=$datapath/etc/voms/$voms_vo/voms.pass\n--sqlloc=$sqlloc\n--logfile=$@VAR_LOCATION_ENV@/log/voms/$logname\n" > $datapath/etc/voms/$voms_vo/voms.conf
 $ECHO -en "--socktimeout=$timeout\n--loglevel=$loglevel\n--logtype=$logtype\n" >>$datapath/etc/voms/$voms_vo/voms.conf
 
 if test "x$compat_mode" = "x-compat"; then

voms-jar-perms.patch:
 Makefile.am |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE voms-jar-perms.patch ---
diff -ur voms-1.9.11.orig/src/api/java/Makefile.am voms-1.9.11/src/api/java/Makefile.am
--- voms-1.9.11.orig/src/api/java/Makefile.am	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/api/java/Makefile.am	2009-08-14 20:54:18.599023487 +0200
@@ -70,7 +70,7 @@
 
 install-exec-hook:
 	$(mkinstalldirs) $(DESTDIR)/$(datadir)/java
-	$(INSTALL) $(top_builddir)/src/api/java/vomsjapi.jar $(DESTDIR)/$(datadir)/java
+	$(INSTALL) -m644 $(top_builddir)/src/api/java/vomsjapi.jar $(DESTDIR)/$(datadir)/java
 
 clean:
 	rm -f $(top_builddir)/src/api/java/vomsjapi.jar

voms-java-clone-cast.patch:
 VOMSValidator.java |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE voms-java-clone-cast.patch ---
diff -ur voms-1.9.11.orig/src/api/java/org/glite/voms/VOMSValidator.java voms-1.9.11/src/api/java/org/glite/voms/VOMSValidator.java
--- voms-1.9.11.orig/src/api/java/org/glite/voms/VOMSValidator.java	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/api/java/org/glite/voms/VOMSValidator.java	2009-08-15 20:12:49.855022959 +0200
@@ -159,7 +159,7 @@
         if (validatedChain == null)
             myValidatedChain = null; // allow null
         else
-            myValidatedChain = validatedChain.clone(); // allow null
+            myValidatedChain = (X509Certificate[])validatedChain.clone();
 
         if (acValidator == null) {
             if (theTrustStore == null) {
@@ -292,7 +292,7 @@
         if (validatedChain == null) 
             myValidatedChain = null;
         else
-            myValidatedChain = validatedChain.clone();
+            myValidatedChain = (X509Certificate[])validatedChain.clone();
         myVomsAttributes = new Vector();
         myFQANTree = null;
         isParsed = false;

voms-javadoc.patch:
 PathNamingScheme.java   |   14 +++++++-------
 UserCredentials.java    |   14 +++++++-------
 VOMSParser.java         |    2 +-
 VOMSProtocol.java       |    6 +++---
 VOMSProxyBuilder.java   |   16 ++++++++--------
 VOMSRequestOptions.java |   17 ++++-------------
 6 files changed, 30 insertions(+), 39 deletions(-)

--- NEW FILE voms-javadoc.patch ---
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/PathNamingScheme.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/PathNamingScheme.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/PathNamingScheme.java	2007-11-19 16:05:23.000000000 +0100
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/PathNamingScheme.java	2009-07-01 19:02:29.448373448 +0200
@@ -61,7 +61,7 @@
     /**
      * This methods checks that the string passed as argument complies with the voms FQAN syntax.
      *  
-     * @param containerName, the string that must be checked for compatibility with FQAN syntax. 
+     * @param containerName the string that must be checked for compatibility with FQAN syntax. 
      * @throws VOMSSyntaxException
      *         If there's an error in the FQAN syntax.
      */
@@ -81,7 +81,7 @@
      * This methods checks that the string passed as argument complies with the syntax used
      * by voms to identify groups.
      * 
-     * @param groupName, the string that has to be checked.
+     * @param groupName the string that has to be checked.
      * @throws VOMSSyntaxException
      *          If the string passed as argument doens not comply with the voms sytax.
      */
@@ -116,7 +116,7 @@
     /**
      * This methods checks that the FQAN passed as argument identifies a voms group.
      * 
-     * @param groupName, the string to check.
+     * @param groupName the string to check.
      * @return  <ul><li>true, if the string passed as argument identifies a voms group.
      *          <li>false, otherwise.
      *          </ul>
@@ -131,7 +131,7 @@
     /**
      * This methods checks that the FQAN passed as argument identifies a voms role.
      * 
-     * @param roleName, the string to check.
+     * @param roleName the string to check.
      * @return <ul><li>true, if the string passed as argument identifies a voms role.
      *          <li>false, otherwise.
      *          </ul>
@@ -147,7 +147,7 @@
      * This methods checks that the FQAN passed as argument identifies a qualified voms role, i.e.,
      * a role defined in the context of a voms group.
      * 
-     * @param roleName, the string to check.
+     * @param roleName the string to check.
      * @return <ul><li>true, if the string passed as argument identifies a qualified voms role.
      *          <li>false, otherwise.
      *          </ul>
@@ -163,7 +163,7 @@
     /**
      * This method extracts the role name information from the FQAN passed as argument.
      * 
-     * @param containerName, the FQAN
+     * @param containerName the FQAN
      * @return <ul><li>A string containing the role name, if found</li>
      *              <li>null, if no role information is contained in the FQAN passed as argument
      *         </ul>
@@ -190,7 +190,7 @@
     /**
      * This method extracts group name information from the FQAN passed as argument.
      * 
-     * @param containerName, the FQAN 
+     * @param containerName the FQAN 
      * @return <ul><li>A string containing the group name, if found</li>
      *              <li>null, if no group information is contained in the FQAN passed as argument
      *         </ul>
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/UserCredentials.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/UserCredentials.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/UserCredentials.java	2009-04-07 11:05:29.000000000 +0200
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/UserCredentials.java	2009-07-01 19:02:29.456372709 +0200
@@ -377,7 +377,7 @@
      * Static instance constructor for a {@link UserCredentials}.
      * For more info on the user credentials load procedure, see {@link #instance()}.
      *
-     * @param keyPassword, the password that is to be used to decrypt the user private key.
+     * @param keyPassword the password that is to be used to decrypt the user private key.
      * @return the loaded user credentials.
      *
      * @throws  VOMSException
@@ -396,9 +396,9 @@
      * This methods allows a user to bypass the default credentials search procedure (highlighted {@link #instance() here}),
      * by specifying the path to a PEM X509 user cert and private key.
      *
-     * @param userCertFile, the path to the PEM X509 user certificate.
-     * @param userKeyFile, the path to the PEM X509 private key.
-     * @param keyPassword, the password that is to be used to decrypt the user private key.
+     * @param userCertFile the path to the PEM X509 user certificate.
+     * @param userKeyFile the path to the PEM X509 private key.
+     * @param keyPassword the password that is to be used to decrypt the user private key.
      * @return the loaded user credentials.
      *
      * @throws  VOMSException
@@ -416,8 +416,8 @@
      * This methods allows a user to bypass the default credentials search procedure (highlighted {@link #instance() here}),
      * by specifying the path to a PEM X509 user cert and private key.
      *
-     * @param userCertFile, the path to the PEM X509 user certificate.
-     * @param userKeyFile, the path to the PEM X509 private key.
+     * @param userCertFile the path to the PEM X509 user certificate.
+     * @param userKeyFile the path to the PEM X509 private key.
      * @return the loaded user credentials.
      *
      * @throws  VOMSException
@@ -435,7 +435,7 @@
      * This methods allows a user to bypass the default credentials search procedure (highlighted {@link #instance() here}),
      * by specifying the path to a PEM X509 user cert and private key.
      *
-     * @param credentials, the GlobusCredentials object containing the user's own proxy
+     * @param credentials the GlobusCredentials object containing the user's own proxy
      * @return the loaded user credentials.
      *
      * @throws  VOMSException
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSParser.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSParser.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSParser.java	2007-11-19 16:05:23.000000000 +0100
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSParser.java	2009-07-01 19:02:29.465377247 +0200
@@ -61,7 +61,7 @@
     /**
      * 
      * Parses a voms response reading from a given input stream.
-     * @param is, the input stream.
+     * @param is the input stream.
      * @return a {@link VOMSResponse} object that represents the parsed response.
      */
     public VOMSResponse parseResponse(InputStream is){
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSProtocol.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSProtocol.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSProtocol.java	2007-11-19 16:05:23.000000000 +0100
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSProtocol.java	2009-07-01 19:02:29.468373182 +0200
@@ -97,8 +97,8 @@
      * 
      * This method is used to send a request to a VOMS server.
      *  
-     * @param requestOptions, the request options. See {@link VOMSRequestOptions}. 
-     * @param stream, an output stream.
+     * @param requestOptions the request options. See {@link VOMSRequestOptions}. 
+     * @param stream an output stream.
      */
     public void sendRequest(VOMSRequestOptions requestOptions, OutputStream stream){
         
@@ -154,7 +154,7 @@
     /**
      * This method is used to parse a VOMS response from an input stream.
      * 
-     * @param stream, the input stream from which the response will be parsed.
+     * @param stream the input stream from which the response will be parsed.
      * @return a {@link VOMSResponse} object.
      */
     public VOMSResponse getResponse(InputStream stream){
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSProxyBuilder.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSProxyBuilder.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSProxyBuilder.java	2009-07-01 19:36:38.729376985 +0200
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSProxyBuilder.java	2009-07-01 20:58:25.590377728 +0200
@@ -130,9 +130,9 @@
      *
      * This methods builds an {@link AttributeCertificate} (AC) object starting from an array of bytes.
      *
-     * @param acBytes, the byte array containing the attribute certificate.
+     * @param acBytes the byte array containing the attribute certificate.
      * @return the {@link AttributeCertificate} object
-     * @throws VOMSException, in case of parsing errors.
+     * @throws VOMSException in case of parsing errors.
      */
     public static AttributeCertificate buildAC(byte[] acBytes){
 
@@ -161,12 +161,12 @@
      * passed as arguments and including a list of {@link AttributeCertificate} objects that
      * will be included in the proxy.
      *
-     * @param cred, the {@link UserCredentials} from which the proxy must be created.
-     * @param ACs, the list of {@link AttributeCertificate} objects.
-     * @param lifetime, the lifetime in seconds of the generated proxy.
-     * @param version, the version of globus to which the proxy conforms
-     * @return a {@link GlobusCredential} object that represents the proxy.
-     * @throws {@link VOMSException}, if something goes wrong.
+     * @param cred the {@link UserCredentials} from which the proxy must be created.
+     * @param ACs the list of {@link AttributeCertificate} objects.
+     * @param lifetime the lifetime in seconds of the generated proxy.
+     * @param gtVersion the version of globus to which the proxy conforms
+     * @return a {@link UserCredentials} object that represents the proxy.
+     * @throws VOMSException if something goes wrong.
      *
      * @author Vincenzo Ciaschini
      * @author Andrea Ceccanti
diff -ur voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSRequestOptions.java voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSRequestOptions.java
--- voms-1.9.8.1.orig/src/api/java/org/glite/voms/contact/VOMSRequestOptions.java	2007-11-19 16:05:23.000000000 +0100
+++ voms-1.9.8.1/src/api/java/org/glite/voms/contact/VOMSRequestOptions.java	2009-07-01 19:08:10.252380084 +0200
@@ -75,9 +75,7 @@
 
     
     /**
-     * 
-     * Returns the ordering string of this {@link VOMSRequestOptions} object.
-     * @return
+     * @return the ordering string of this {@link VOMSRequestOptions} object.
      */
     public String getOrdering() {
 
@@ -99,10 +97,7 @@
 
     
     /**
-     * 
-     * Returs the list of the requested FQANs specified in this {@link VOMSRequestOptions} object.
-     * 
-     * @return
+     * @return the list of the requested FQANs specified in this {@link VOMSRequestOptions} object.
      */
     public List getRequestedFQANs() {
 
@@ -123,10 +118,8 @@
 
     
     /**
-     * Returns the list of targets (i.e., host where the requested ACs will be valid) for this
+     * @return the list of targets (i.e., host where the requested ACs will be valid) for this
      * {@link VOMSRequestOptions} object.
-     * 
-     * @return
      */
     public List getTargets() {
 
@@ -135,10 +128,8 @@
 
     
     /**
-     * Returns the list of targets (i.e., host where the requested ACs will be valid) for this
+     * @return the list of targets (i.e., host where the requested ACs will be valid) for this
      * {@link VOMSRequestOptions} object as a string containing a a comma-separated list of host names.
-     * 
-     * @return
      */
     public String getTargetsAsString() {
 

voms-nolib64.patch:
 configure.ac |    4 ----
 1 file changed, 4 deletions(-)

--- NEW FILE voms-nolib64.patch ---
diff -ur voms-1.9.8.1.orig/configure.ac voms-1.9.8.1/configure.ac
--- voms-1.9.8.1.orig/configure.ac	2009-04-16 15:57:03.000000000 +0200
+++ voms-1.9.8.1/configure.ac	2009-07-02 12:16:10.035379837 +0200
@@ -37,10 +37,6 @@
 
 AC_ENABLE_GLITE([], have_glite=yes, have_glite=no) # embed AC_GLITE
 
-if test "x$host_cpu" = "xx86_64"; then
-    AC_SUBST([libdir], ['${exec_prefix}/lib64'])
-fi
-
 AC_EXPAT([], have_expat=yes, have_expat=no)        # taken from org.glite
 AC_CPPUNIT([], have_cppunit=yes, have_cppunit=no)  # taken from org.glite
 AC_GLOBUS([], have_globus=yes, have_globus=no)

voms-notknown-msg.patch:
 vomsclient.cc |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- NEW FILE voms-notknown-msg.patch ---
diff -ur voms-1.9.11.orig/src/client/vomsclient.cc voms-1.9.11/src/client/vomsclient.cc
--- voms-1.9.11.orig/src/client/vomsclient.cc	2009-07-27 10:14:04.000000000 +0200
+++ voms-1.9.11/src/client/vomsclient.cc	2009-08-31 17:51:15.952071123 +0200
@@ -575,7 +575,9 @@
       std::vector<contactdata> servers;
       servers = v.FindByAlias(contact.vo().empty() ? contact.nick() : contact.vo());
       if (servers.empty()) {
-        std::cerr << "VOMS Server for " << contact.vo() << " not known!" << std::endl;
+        std::cerr << "VOMS Server for "
+		  << (contact.vo().empty() ? contact.nick() : contact.vo())
+		  << " not known!" << std::endl;
         exit(1);
       }
     

voms-openssl.patch:
 ac/Makefile.am        |    1 +
 api/ccapi/api_util.cc |    4 ++--
 include/acstack.h     |    2 +-
 socklib/Client.cpp    |    4 ++++
 utils/vomsfake.cc     |    1 +
 5 files changed, 9 insertions(+), 3 deletions(-)

--- NEW FILE voms-openssl.patch ---
diff -ur voms-1.9.11.orig/src/ac/Makefile.am voms-1.9.11/src/ac/Makefile.am
--- voms-1.9.11.orig/src/ac/Makefile.am	2009-07-16 15:10:39.000000000 +0200
+++ voms-1.9.11/src/ac/Makefile.am	2009-09-07 11:06:49.079471423 +0200
@@ -27,6 +27,7 @@
 	-DNOGLOBUS \
 	-I $(top_srcdir)/src/include \
 	-I $(top_builddir)/src/sslutils
+libattributes_nog_la_CXXFLAGS = $(libattributes_nog_la_CFLAGS)
 
 libattributes_nog_la_LIBADD = \
 	$(OPENSSL_LIBS)
diff -ur voms-1.9.11.orig/src/api/ccapi/api_util.cc voms-1.9.11/src/api/ccapi/api_util.cc
--- voms-1.9.11.orig/src/api/ccapi/api_util.cc	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/api/ccapi/api_util.cc	2009-09-07 11:06:49.080471703 +0200
@@ -415,9 +415,9 @@
   /* extract vo name from AC */
   
   AC * ac = (AC *)data;
-  STACK_OF(AC_ATTR) * atts = ac->acinfo->attrib;
+  const STACK_OF(AC_ATTR) * atts = ac->acinfo->attrib;
   int nid = OBJ_txt2nid("idatcap");
-  int pos = X509at_get_attr_by_NID(atts, nid, -1);
+  int pos = X509at_get_attr_by_NID((const STACK_OF(X509_ATTRIBUTE)*)atts, nid, -1);
 
   int nidc = OBJ_txt2nid("certseq");
   STACK_OF(X509_EXTENSION) *exts = ac->acinfo->exts;
diff -ur voms-1.9.11.orig/src/include/acstack.h voms-1.9.11/src/include/acstack.h
--- voms-1.9.11.orig/src/include/acstack.h	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/include/acstack.h	2009-09-07 11:06:49.081472345 +0200
@@ -79,7 +79,7 @@
 #endif
 
 #define DECL_STACK(type) \
-   DECLARE_STACK_OF(type) \
+   PREDECLARE_STACK_OF(type) \
    extern STACK_OF(type) *sk_##type##_new (int (*)(const type * const *, const type * const *)); \
    extern STACK_OF(type) *sk_##type##_new_null (); \
    extern void   sk_##type##_free (STACK_OF(type) *); \
diff -ur voms-1.9.11.orig/src/socklib/Client.cpp voms-1.9.11/src/socklib/Client.cpp
--- voms-1.9.11.orig/src/socklib/Client.cpp	2009-07-16 15:10:41.000000000 +0200
+++ voms-1.9.11/src/socklib/Client.cpp	2009-09-07 11:28:07.210471657 +0200
@@ -336,7 +336,11 @@
 bool 
 GSISocketClient::Open()
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+  const SSL_METHOD *meth = NULL;
+#else
   SSL_METHOD *meth = NULL;
+#endif
   int ret = -1, ret2 = -1;
   time_t starttime, curtime;
   long errorcode = 0;
diff -ur voms-1.9.11.orig/src/utils/vomsfake.cc voms-1.9.11/src/utils/vomsfake.cc
--- voms-1.9.11.orig/src/utils/vomsfake.cc	2009-07-16 15:10:41.000000000 +0200
+++ voms-1.9.11/src/utils/vomsfake.cc	2009-09-07 10:21:52.935470664 +0200
@@ -40,6 +40,7 @@
 #include "listfunc.h"
 #include "credentials.h"
 #include "parsertypes.h"
+#define YYTOKENTYPE
 #include "vomsparser.h"
 
 VOLIST *volist = NULL;

voms-pipe-buf.patch:
 log.c |    4 ++++
 1 file changed, 4 insertions(+)

--- NEW FILE voms-pipe-buf.patch ---
diff -ur voms-1.9.11.orig/src/log/log.c voms-1.9.11/src/log/log.c
--- voms-1.9.11.orig/src/log/log.c	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/log/log.c	2009-09-07 16:02:18.597470396 +0200
@@ -175,7 +175,11 @@
   if (*buffer) {
     while (offset < slen) {
       do {
+#ifdef PIPE_BUF
         readbytes = read(fd, *buffer + offset, (slen - offset > PIPE_BUF ? PIPE_BUF : slen - offset));
+#else
+        readbytes = read(fd, *buffer + offset, (slen - offset > fpathconf(fd, _PC_PIPE_BUF) ? fpathconf(fd, _PC_PIPE_BUF) : slen - offset));
+#endif
       } while (readbytes < 0 && (errno == EINTR
 #ifdef ERESTART
                                    || errno == ERESTART

voms-portability.patch:
 configure.ac              |    2 -
 project/acinclude.m4      |    8 +++++--
 src/api/ccapi/Makefile.am |   42 ++++++++++++++++++++---------------------
 src/socklib/Makefile.am   |   47 +++++++++++++++++++++++++++-------------------
 4 files changed, 56 insertions(+), 43 deletions(-)

--- NEW FILE voms-portability.patch ---
diff -ur voms-1.9.11.orig/configure.ac voms-1.9.11/configure.ac
--- voms-1.9.11.orig/configure.ac	2009-07-16 15:10:39.000000000 +0200
+++ voms-1.9.11/configure.ac	2009-09-08 14:13:33.244334250 +0200
@@ -1,6 +1,6 @@
 
 AC_INIT([GLite Security VOMS], [1.9.11])
-AC_PREREQ(2.59)
+AC_PREREQ(2.57)
 AC_CONFIG_AUX_DIR([./project])
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([src/utils/voms_proxy_destroy.cc])
diff -ur voms-1.9.11.orig/project/acinclude.m4 voms-1.9.11/project/acinclude.m4
--- voms-1.9.11.orig/project/acinclude.m4	2009-07-16 15:10:39.000000000 +0200
+++ voms-1.9.11/project/acinclude.m4	2009-09-08 14:13:33.246338019 +0200
@@ -904,12 +904,16 @@
 
 AC_DEFUN([PUT_PRIVATES],
 [
-        AH_BOTTOM([#ifdef __GNUC__
+        AH_BOTTOM([#if defined(__GNUC__)
+#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
 #define UNUSED(z)  z __attribute__ ((unused))
+#else
+#define UNUSED(z)  z
+#endif
 #define PRIVATE    __attribute__ ((visibility ("hidden")))
 #define PUBLIC     __attribute__ ((visibility ("default")))
 #else
-#define UNUSED
+#define UNUSED(z)  z
 #define PRIVATE
 #define PUBLIC
 #endif])])
diff -ur voms-1.9.11.orig/src/api/ccapi/Makefile.am voms-1.9.11/src/api/ccapi/Makefile.am
--- voms-1.9.11.orig/src/api/ccapi/Makefile.am	2009-07-16 15:10:40.000000000 +0200
+++ voms-1.9.11/src/api/ccapi/Makefile.am	2009-09-08 14:13:33.247337541 +0200
@@ -16,7 +16,7 @@
 libvomsapi_nog_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_nog_la_CPPFLAGS = \
+libvomsapi_nog_la_CXXFLAGS = \
 	$(NO_GLOBUS_FLAGS) \
 	-DNOGLOBUS \
 	$(API_INCLUDES)
@@ -41,7 +41,7 @@
 libvomsapi_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_la_CPPFLAGS = \
+libvomsapi_la_CXXFLAGS = \
 	$(NO_GLOBUS_FLAGS) \
 	-DNOGLOBUS \
 	$(API_INCLUDES)
@@ -70,7 +70,7 @@
 libvomsc_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_la_CPPFLAGS = \
+libvomsc_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_CFLAGS)
@@ -94,10 +94,10 @@
 #noinst_PROGRAMS = test ctest
 #test_SOURCES = test.cc
 #test_LDADD = libvomsapi.la
-#test_CPPFLAGS = -I$(top_srcdir)/src/include $(GLOBUS_CFLAGS)
+#test_CXXFLAGS = -I$(top_srcdir)/src/include $(GLOBUS_CFLAGS)
 #ctest_SOURCES = ctest.c
 #ctest_LDADD = libvomsc.la
-#ctest_CPPFLAGS = -I$(top_srcdir)/src/include $(GLOBUS_CFLAGS)
+#ctest_CFLAGS = -I$(top_srcdir)/src/include $(GLOBUS_CFLAGS)
 
 EXTRA_LTLIBRARIES = \
 	libvomsapi_gcc32.la \
@@ -123,7 +123,7 @@
 libvomsapi_gcc32_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc32_la_CPPFLAGS = \
+libvomsapi_gcc32_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32_CFLAGS)
@@ -139,7 +139,7 @@
 libvomsapi_gcc32dbg_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc32dbg_la_CPPFLAGS = \
+libvomsapi_gcc32dbg_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(GLOBUS_GCC32DBG_CFLAGS) \
 	$(API_INCLUDES)
@@ -155,7 +155,7 @@
 libvomsapi_gcc32pthr_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc32pthr_la_CPPFLAGS = \
+libvomsapi_gcc32pthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32PTHR_CFLAGS)
@@ -171,7 +171,7 @@
 libvomsapi_gcc32dbgpthr_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc32dbgpthr_la_CPPFLAGS = \
+libvomsapi_gcc32dbgpthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32DBGPTHR_CFLAGS)
@@ -187,7 +187,7 @@
 libvomsc_gcc32_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc32_la_CPPFLAGS = \
+libvomsc_gcc32_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32_CFLAGS)
@@ -203,7 +203,7 @@
 libvomsc_gcc32dbg_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc32dbg_la_CPPFLAGS = \
+libvomsc_gcc32dbg_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32DBG_CFLAGS)
@@ -219,7 +219,7 @@
 libvomsc_gcc32pthr_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc32pthr_la_CPPFLAGS = \
+libvomsc_gcc32pthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32PTHR_CFLAGS)
@@ -235,7 +235,7 @@
 libvomsc_gcc32dbgpthr_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc32dbgpthr_la_CPPFLAGS = \
+libvomsc_gcc32dbgpthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC32DBGPTHR_CFLAGS)
@@ -254,7 +254,7 @@
 libvomsapi_gcc64_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc64_la_CPPFLAGS = \
+libvomsapi_gcc64_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64_CFLAGS)
@@ -270,7 +270,7 @@
 libvomsapi_gcc64dbg_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc64dbg_la_CPPFLAGS = \
+libvomsapi_gcc64dbg_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64DBG_CFLAGS)
@@ -286,7 +286,7 @@
 libvomsapi_gcc64pthr_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc64pthr_la_CPPFLAGS = \
+libvomsapi_gcc64pthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64PTHR_CFLAGS)
@@ -302,7 +302,7 @@
 libvomsapi_gcc64dbgpthr_la_SOURCES = \
 	$(CCSOURCES)
 
-libvomsapi_gcc64dbgpthr_la_CPPFLAGS = \
+libvomsapi_gcc64dbgpthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64DBGPTHR_CFLAGS)
@@ -318,7 +318,7 @@
 libvomsc_gcc64_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc64_la_CPPFLAGS = \
+libvomsc_gcc64_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64_CFLAGS)
@@ -334,7 +334,7 @@
 libvomsc_gcc64dbg_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc64dbg_la_CPPFLAGS = \
+libvomsc_gcc64dbg_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64DBG_CFLAGS)
@@ -350,7 +350,7 @@
 libvomsc_gcc64pthr_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc64pthr_la_CPPFLAGS = \
+libvomsc_gcc64pthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64PTHR_CFLAGS)
@@ -367,7 +367,7 @@
 libvomsc_gcc64dbgpthr_la_SOURCES = \
 	$(CSOURCES)
 
-libvomsc_gcc64dbgpthr_la_CPPFLAGS = \
+libvomsc_gcc64dbgpthr_la_CXXFLAGS = \
 	-I$(top_srcdir)/src/include \
 	$(API_INCLUDES) \
 	$(GLOBUS_GCC64DBGPTHR_CFLAGS)
diff -ur voms-1.9.11.orig/src/socklib/Makefile.am voms-1.9.11/src/socklib/Makefile.am
--- voms-1.9.11.orig/src/socklib/Makefile.am	2009-07-16 15:10:41.000000000 +0200
+++ voms-1.9.11/src/socklib/Makefile.am	2009-09-08 14:16:29.063338874 +0200
@@ -12,7 +12,7 @@
 libsock_server_la_SOURCES = Server.cpp tokens.c globuswrap.c
 libsock_nog_la_SOURCES = Client.cpp
 
-libsock_nog_la_CPPFLAGS = \
+libsock_nog_la_CXXFLAGS = \
 	$(NO_GLOBUS_FLAGS) \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
@@ -21,17 +21,18 @@
 libsock_nog_la_LIBADD = \
 	-lcrypto -lssl
 
-libsock_server_la_CPPFLAGS = \
+libsock_server_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_CFLAGS)
+libsock_server_la_CFLAGS = $(libsock_server_la_CXXFLAGS)
 
 libsock_server_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils.la \
 	$(top_builddir)/src/common/libutilc.la \
 	$(GLOBUS_GSS_LIBS)
 
-libsock_la_CPPFLAGS = \
+libsock_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_CFLAGS)
@@ -68,10 +69,11 @@
 
 libsock_server_gcc32_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc32_la_CPPFLAGS = \
+libsock_server_gcc32_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32_CFLAGS)
+libsock_server_gcc32_la_CFLAGS = $(libsock_server_gcc32_la_CXXFLAGS)
 
 libsock_server_gcc32_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc32.la \
@@ -80,10 +82,11 @@
 
 libsock_server_gcc32dbg_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc32dbg_la_CPPFLAGS = \
+libsock_server_gcc32dbg_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32DBG_CFLAGS)
+libsock_server_gcc32dbg_la_CFLAGS = $(libsock_server_gcc32dbg_la_CXXFLAGS)
 
 libsock_server_gcc32dbg_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc32dbg.la \
@@ -92,10 +95,11 @@
 
 libsock_server_gcc32pthr_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc32pthr_la_CPPFLAGS = \
+libsock_server_gcc32pthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32PTHR_CFLAGS)
+libsock_server_gcc32pthr_la_CFLAGS = $(libsock_server_gcc32pthr_la_CXXFLAGS)
 
 libsock_server_gcc32pthr_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc32pthr.la \
@@ -104,10 +108,11 @@
 
 libsock_server_gcc32dbgpthr_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc32dbgpthr_la_CPPFLAGS = \
+libsock_server_gcc32dbgpthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32DBG_CFLAGS)
+libsock_server_gcc32dbgpthr_la_CFLAGS = $(libsock_server_gcc32dbgpthr_la_CXXFLAGS)
 
 libsock_server_gcc32dbgpthr_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc32dbgpthr.la \
@@ -116,10 +121,11 @@
 
 libsock_server_gcc64_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc64_la_CPPFLAGS = \
+libsock_server_gcc64_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64_CFLAGS)
+libsock_server_gcc64_la_CFLAGS = $(libsock_server_gcc64_la_CXXFLAGS)
 
 libsock_server_gcc64_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc64.la \
@@ -128,10 +134,11 @@
 
 libsock_server_gcc64dbg_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc64dbg_la_CPPFLAGS = \
+libsock_server_gcc64dbg_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64DBG_CFLAGS)
+libsock_server_gcc64dbg_la_CFLAGS = $(libsock_server_gcc64dbg_la_CXXFLAGS)
 
 libsock_server_gcc64dbg_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc64dbg.la \
@@ -140,10 +147,11 @@
 
 libsock_server_gcc64pthr_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc64pthr_la_CPPFLAGS = \
+libsock_server_gcc64pthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64PTHR_CFLAGS)
+libsock_server_gcc64pthr_la_CFLAGS = $(libsock_server_gcc64pthr_la_CXXFLAGS)
 
 libsock_server_gcc64pthr_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc64pthr.la \
@@ -152,10 +160,11 @@
 
 libsock_server_gcc64dbgpthr_la_SOURCES = Server.cpp tokens.c globuswrap.c
 
-libsock_server_gcc64dbgpthr_la_CPPFLAGS = \
+libsock_server_gcc64dbgpthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64DBG_CFLAGS)
+libsock_server_gcc64dbgpthr_la_CFLAGS = $(libsock_server_gcc64dbgpthr_la_CXXFLAGS)
 
 libsock_server_gcc64dbgpthr_la_LIBADD = \
 	$(top_builddir)/src/sslutils/libssl_utils_gcc64dbgpthr.la \
@@ -188,7 +197,7 @@
 libsock_gcc32_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc32_la_CPPFLAGS = \
+libsock_gcc32_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32_CFLAGS)
@@ -201,7 +210,7 @@
 libsock_gcc32dbg_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc32dbg_la_CPPFLAGS = \
+libsock_gcc32dbg_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32DBG_CFLAGS)
@@ -214,7 +223,7 @@
 libsock_gcc32pthr_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc32pthr_la_CPPFLAGS = \
+libsock_gcc32pthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32PTHR_CFLAGS)
@@ -227,7 +236,7 @@
 libsock_gcc32dbgpthr_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc32dbgpthr_la_CPPFLAGS = \
+libsock_gcc32dbgpthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC32DBG_CFLAGS)
@@ -240,7 +249,7 @@
 libsock_gcc64_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc64_la_CPPFLAGS = \
+libsock_gcc64_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64_CFLAGS)
@@ -253,7 +262,7 @@
 libsock_gcc64dbg_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc64dbg_la_CPPFLAGS = \
+libsock_gcc64dbg_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64DBG_CFLAGS)
@@ -266,7 +275,7 @@
 libsock_gcc64pthr_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc64pthr_la_CPPFLAGS = \
+libsock_gcc64pthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64PTHR_CFLAGS)
@@ -279,7 +288,7 @@
 libsock_gcc64dbgpthr_la_SOURCES = \
 	$(SOURCES)
 
-libsock_gcc64dbgpthr_la_CPPFLAGS = \
+libsock_gcc64dbgpthr_la_CXXFLAGS = \
 	-I $(top_srcdir)/src/include \
 	-I $(top_srcdir)/src/sslutils \
 	$(GLOBUS_GCC64DBG_CFLAGS)

voms-shell-syntax.patch:
 mysql2oracle.in |    2 +-
 voms-ping       |    5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

--- NEW FILE voms-shell-syntax.patch ---
diff -ur voms-1.9.8.1.orig/src/install/mysql2oracle.in voms-1.9.8.1/src/install/mysql2oracle.in
--- voms-1.9.8.1.orig/src/install/mysql2oracle.in	2005-09-27 16:23:56.000000000 +0200
+++ voms-1.9.8.1/src/install/mysql2oracle.in	2009-07-02 18:40:14.000000000 +0200
@@ -2,7 +2,7 @@
 #!/bin/sh
 #set -x
 
-function usage()
+function usage
 {
     echo
     echo "usage : mysql2oracle [OPTIONS]"
diff -ur voms-1.9.8.1.orig/src/install/voms-ping voms-1.9.8.1/src/install/voms-ping
--- voms-1.9.8.1.orig/src/install/voms-ping	2008-12-23 11:46:01.000000000 +0100
+++ voms-1.9.8.1/src/install/voms-ping	2009-07-02 18:42:24.000000000 +0200
@@ -25,7 +25,8 @@
   echo "  ]"
 }
 
-function test_vo {
+function test_vo
+{
    local voname="$1"
    local port=`cat $GLITE_LOCATION/etc/voms/$voname/voms.conf  | grep '^--port' | sed 's/^--port=//'`
    local dn=`openssl x509 -subject -noout -in /etc/grid-security/hostcert.pem|cut -d' ' -f2-`
@@ -41,7 +42,7 @@
 "$voname" "localhost" "$port" "$dn" "$voname"
 EOF
    rm -f /tmp/oo
-   /opt/glite/bin/voms-proxy-init --voms $vo --out /tmp/proxy --userconf=/tmp/vomses 2>/tmp/oo >/dev/null
+   ${GLITE_LOCATION:-/usr}/bin/voms-proxy-init --voms $vo --out /tmp/proxy --userconf=/tmp/vomses 2>/tmp/oo >/dev/null
    res=$?
    if test $res -ne 0; then
       grep "User unknown to this VO" /tmp/oo >/dev/null


--- NEW FILE voms.INSTALL ---
VOMS server configuration
-------------------------

In addition to the voms-server package a voms database plugin is needed.

Plugins exists for mysql and oracle. Since the oracle client libraries
are not open source software, only the mysql plugin is available in
Fedora. To install the voms-mysql-plugin issue the following command
as root:

	yum install voms-mysql-plugin

Before starting the server, you must create the databases used by
VOMS. It is possible to run more than one VOMS server on a single host
as long as they are configured to use different ports.

You should have the grid CA certificates installed in
/etc/grid-security/certificates before running the VOMS database
creation script.

To create the databases run the following command as root for each
VOMS server you want to run:

	/usr/share/voms/voms_install_db \
		--voms-vo=<voname> \
		--port=<portnumber> \
		--db-type=mysql \
		--db-admin=<mysqladminuser> \
		--db-pwd=<mysqladminpwd> \
		--sqlloc=/usr/lib/voms/libvomsmysql.so

If you are running on a 64 bit host use instead:
		--sqlloc=/usr/lib64/voms/libvomsmysql.so

The voms server is configured to run as a special voms user. This user
needs a copy of the host certificate and key:

	cp -p /etc/grid-security/hostcert.pem /etc/grid-security/voms
	cp -p /etc/grid-security/hostkey.pem /etc/grid-security/voms
	chown voms:voms /etc/grid-security/voms/host*.pem

After creating the databases, start the server by running the command:

	service voms start

If you want the server to be started automatically after each reboot run
the command:

	chkconfig voms on

To check that the server is running and is configured correctly, run
the following command:

	/usr/share/voms/voms-ping <voname>


--- NEW FILE voms.spec ---
Name:		voms
Version:	1.9.11
Release:	4%{?dist}
Summary:	Virtual Organization Membership Service

Group:		System Environment/Libraries
License:	ASL 2.0
URL:		http://glite.web.cern.ch/glite/
#		The source tarball is created from a CVS checkout:
#		cvs -d:pserver:anonymous:@glite.cvs.cern.ch:/cvs/glite co \
#		  -r glite-security-voms_R_1_9_11 \
#		  -d voms-1.9.11 org.glite.security.voms
#		tar -z -c --exclude CVS -f voms-1.9.11.tar.gz voms-1.9.11
Source:		%{name}-%{version}.tar.gz
#		Post-install setup instructions:
Source1:	%{name}.INSTALL
#		Build using Globus from Fedora/EPEL
#		https://savannah.cern.ch/bugs/?54427
Patch0:		%{name}-distribution-globus.patch
#		Fix the start-up script
#		https://savannah.cern.ch/bugs/?54428
Patch1:		%{name}-initscript.patch
#		Fix the --disable-glite configure option
#		https://savannah.cern.ch/bugs/?54429
Patch2:		%{name}-fix-enable-glite.patch
#		Remove lib64 hardcoding
#		https://savannah.cern.ch/bugs/?54430
Patch3:		%{name}-nolib64.patch
#		Make the Java API more compatible with the C API
#		https://savannah.cern.ch/bugs/?54432
Patch4:		%{name}-extra-vomses-java.patch
#		Missing casts after Java cloning
#		https://savannah.cern.ch/bugs/?54433
Patch5:		%{name}-java-clone-cast.patch
#		Fix permissions of installed jar
#		https://savannah.cern.ch/bugs/?54434
Patch6:		%{name}-jar-perms.patch
#		Fix javadoc warnings
#		https://savannah.cern.ch/bugs/?54435
Patch7:		%{name}-javadoc.patch
#		Fix syntax errors in shell scripts
#		https://savannah.cern.ch/bugs/?54436
Patch8:		%{name}-shell-syntax.patch
#		Fix the database install script
#		https://savannah.cern.ch/bugs/?54880
Patch9:		%{name}-install-db.patch
#		Error message glitch
#		https://savannah.cern.ch/bugs/?55113
Patch10:	%{name}-notknown-msg.patch
#		Make the Java API build with gcj
#		https://savannah.cern.ch/bugs/?55115
Patch11:	%{name}-gcj.patch
#		Support older autotools and older gcc
#		https://savannah.cern.ch/bugs/?55116
Patch12:	%{name}-portability.patch
#		Support openssl 1.0
#		https://savannah.cern.ch/bugs/?55390
Patch13:	%{name}-openssl.patch
#		Unconditional use of PIPE_BUF
#		https://savannah.cern.ch/bugs/?55405
Patch14:	%{name}-pipe-buf.patch
BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:	globus-gssapi-gsi-devel%{?_isa}
BuildRequires:	globus-gss-assist-devel%{?_isa}
BuildRequires:	openssl-devel%{?_isa}
BuildRequires:	expat-devel
BuildRequires:	libtool
BuildRequires:	pkgconfig
BuildRequires:	libxslt
BuildRequires:	docbook-style-xsl
BuildRequires:	doxygen
%if %{?fedora}%{!?fedora:0} >= 9 || %{?rhel}%{!?rhel:0} >= 6
BuildRequires:	tex(latex)
%else
BuildRequires:	tetex-latex
%endif

%description
In grid computing, and whenever the access to resources may be controlled
by parties external to the resource provider, users may be grouped to
Virtual Organizations (VOs). This package provides a VO Membership Service
(VOMS), which informs on that association between users and their VOs:
groups, roles and capabilities.

This package offers libraries that applications using the VOMS functionality
will bind to.

%package devel
Summary:	Virtual Organization Membership Service Development Files
Group:		Development/Libraries
Requires:	%{name}%{?_isa} = %{version}-%{release}
Requires:	openssl-devel%{?_isa}
Requires:	automake

%description devel
In grid computing, and whenever the access to resources may be controlled
by parties external to the resource provider, users may be grouped to
Virtual Organizations (VOs). This package provides a VO Membership Service
(VOMS), which informs on that association between users and their VOs:
groups, roles and capabilities.

This package offers header files for programming with the VOMS libraries.

%package doc
Summary:	Virtual Organization Membership Service Documentation
Group:		Documentation
%if %{?fedora}%{!?fedora:0} >= 10 || %{?rhel}%{!?rhel:0} >= 6
BuildArch:	noarch
%endif

%description doc
Documentation for the Virtual Organization Membership Service.

%package clients
Summary:	Virtual Organization Membership Service Clients
Group:		Applications/Internet
Requires:	%{name}%{?_isa} = %{version}-%{release}

%description clients
In grid computing, and whenever the access to resources may be controlled
by parties external to the resource provider, users may be grouped to
Virtual Organizations (VOs). This package provides a VO Membership Service
(VOMS), which informs on that association between users and their VOs:
groups, roles and capabilities.

This package provides command line applications to access the VOMS
services.

%package server
Summary:	Virtual Organization Membership Service Server
Group:		Applications/Internet
Requires:	%{name}%{?_isa} = %{version}-%{release}

Requires(pre):		shadow-utils
Requires(post):		chkconfig
Requires(preun):	chkconfig
Requires(preun):	initscripts
Requires(postun):	initscripts

%description server
In grid computing, and whenever the access to resources may be controlled
by parties external to the resource provider, users may be grouped to
Virtual Organizations (VOs). This package provides a VO Membership Service
(VOMS), which informs on that association between users and their VOs:
groups, roles and capabilities.

The service can be understood as an account database, which serves the
information in a special format (VOMS credential). The VO manager can
administrate it remotely using command line tools or a web interface.

%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1

# Fix bad permissions (which otherwise end up in the debuginfo package)
find . '(' -name '*.h' -o -name '*.c' -o -name '*.cpp' -o \
	   -name '*.cc' -o -name '*.java' ')' -exec chmod a-x {} ';'

# Fix location dir
sed -e 's/\(LOCATION_DIR.*\)"\$prefix"/\1""/g' -i project/acinclude.m4

# Fix default Globus location
sed -e 's!\(GLOBUS_LOCATION\)!{\1:-/usr}!' -i project/voms.m4

# Fix default vomses file location
sed -e 's!/opt/glite/etc/vomses!/etc/vomses!' -i src/api/ccapi/voms_api.cc

# Use pdflatex
sed -e 's!^\(USE_PDFLATEX *= *\)NO!\1YES!' -i src/api/ccapi/Makefile.am

# Touch to avoid rerunning bison and flex
touch -r src/utils/vomsfake.y src/utils/vomsparser.h
touch -r src/utils/vomsfake.y src/utils/lex.yy.c

# rebootstrap
./autogen.sh

install -m 644 %{SOURCE1} INSTALL.Fedora

%build
%configure --disable-glite --libexecdir=%{_datadir} --sysconfdir=%{_datadir} \
	   --disable-java

make %{?_smp_mflags}

( cd doc/apidoc/api/VOMS_C_API/latex ; make )
( cd doc/apidoc/api/VOMS_CC_API/latex ; make )

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT

rm -f $RPM_BUILD_ROOT%{_bindir}/edg-voms*
rm -f $RPM_BUILD_ROOT%{_sbindir}/edg-voms*
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/edg-voms*
rm -f $RPM_BUILD_ROOT%{_mandir}/man8/edg-voms*
rm -rf $RPM_BUILD_ROOT%{_mandir}/man3

rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la

mv $RPM_BUILD_ROOT%{_includedir}/glite/security/%{name} \
   $RPM_BUILD_ROOT%{_includedir}/%{name}
rm -rf $RPM_BUILD_ROOT%{_includedir}/glite

rm $RPM_BUILD_ROOT%{_includedir}/%{name}/voms_apic_nog.h
rm $RPM_BUILD_ROOT%{_mandir}/man1/testvoms.1*
rm $RPM_BUILD_ROOT%{_mandir}/man8/voms-install-replica.8*

mv $RPM_BUILD_ROOT%{_datadir}/vomses.template \
   $RPM_BUILD_ROOT%{_datadir}/%{name}

mv $RPM_BUILD_ROOT%{_datadir}/m4 $RPM_BUILD_ROOT%{_datadir}/aclocal

mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/grid-security/vomsdir
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/grid-security/%{name}
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name}

touch $RPM_BUILD_ROOT%{_sysconfdir}/vomses

sed -e 's!${datapath}/etc/voms/voms!${basepath}/share/voms/voms!' \
    -e 's/useradd/\#&/' -e 's/groupadd/\#&/' \
    -e 's/vomsd(8)/voms(8)/' \
    -i $RPM_BUILD_ROOT%{_datadir}/%{name}/voms_install_db

cat >> $RPM_BUILD_ROOT%{_datadir}/%{name}/voms_install_db << EOF
\$ECHO -en "--x509_user_cert=/etc/grid-security/voms/hostcert.pem\n" >> \$datapath/etc/voms/\$voms_vo/voms.conf
\$ECHO -en "--x509_user_key=/etc/grid-security/voms/hostkey.pem\n" >> \$datapath/etc/voms/\$voms_vo/voms.conf
EOF

# Turn off default enabling of the service
mkdir -p $RPM_BUILD_ROOT%{_initrddir}
sed -e 's/\(chkconfig: \)\w*/\1-/' \
    -e '/Default-Start/d' \
    -e 's/\(Default-Stop:\s*\).*/\10 1 2 3 4 5 6/' \
   $RPM_BUILD_ROOT%{_datadir}/init.d/%{name} > \
   $RPM_BUILD_ROOT%{_initrddir}/%{name}
chmod 755 $RPM_BUILD_ROOT%{_initrddir}/%{name}
rm -rf $RPM_BUILD_ROOT%{_datadir}/init.d

mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
echo VOMS_USER=voms > $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name}

mkdir -p VOMS_C_API
cp -pr doc/apidoc/api/VOMS_C_API/html VOMS_C_API
install -m 644 doc/apidoc/api/VOMS_C_API/latex/refman.pdf VOMS_C_API

mkdir -p VOMS_CC_API
cp -pr doc/apidoc/api/VOMS_CC_API/html VOMS_CC_API
install -m 644 doc/apidoc/api/VOMS_CC_API/latex/refman.pdf VOMS_CC_API

%clean
rm -rf $RPM_BUILD_ROOT

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%pre server
getent group %{name} >/dev/null || groupadd -r %{name}
getent passwd %{name} >/dev/null || useradd -r -g %{name} \
    -d %{_sysconfdir}/%{name} -s /sbin/nologin -c "VOMS Server Account" %{name}
exit 0

%post server
if [ $1 = 1 ]; then
    /sbin/chkconfig --add %{name}
fi

%preun server
if [ $1 = 0 ]; then
    /sbin/service %{name} stop >/dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}
fi

%postun server
if [ $1 -ge 1 ]; then
    /sbin/service %{name} condrestart >/dev/null 2>&1 || :
fi

%files
%defattr(-,root,root,-)
%{_libdir}/libvomsapi.so.*
%{_libdir}/libvomsapi_nog.so.*
%{_libdir}/libvomsc.so.*
%config(noreplace) %{_sysconfdir}/vomses
%dir %{_sysconfdir}/grid-security
%dir %{_sysconfdir}/grid-security/vomsdir
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/vomses.template
%doc AUTHORS LICENSE

%files devel
%defattr(-,root,root,-)
%{_libdir}/libvomsapi.so
%{_libdir}/libvomsapi_nog.so
%{_libdir}/libvomsc.so
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/acstack.h
%{_includedir}/%{name}/newformat.h
%{_includedir}/%{name}/vomsssl.h
%{_includedir}/%{name}/voms_api.h
%{_includedir}/%{name}/voms_api_nog.h
%{_includedir}/%{name}/voms_apic.h
%{_datadir}/aclocal/%{name}.m4

%files doc
%defattr(-,root,root,-)
%doc VOMS_C_API
%doc VOMS_CC_API

%files clients
%defattr(-,root,root,-)
%{_bindir}/voms-proxy-destroy
%{_bindir}/voms-proxy-info
%{_bindir}/voms-proxy-init
%{_bindir}/voms-proxy-fake
%{_bindir}/voms-proxy-list
%{_mandir}/man1/voms-proxy-destroy.1*
%{_mandir}/man1/voms-proxy-info.1*
%{_mandir}/man1/voms-proxy-init.1*
%{_mandir}/man1/voms-proxy-fake.1*
%{_mandir}/man1/voms-proxy-list.1*

%files server
%defattr(-,root,root,-)
%{_sbindir}/%{name}
%{_initrddir}/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%dir %{_sysconfdir}/%{name}
%dir %{_sysconfdir}/grid-security/%{name}
%attr(-,voms,voms) %dir %{_localstatedir}/log/%{name}
%{_datadir}/%{name}/mysql2oracle
%{_datadir}/%{name}/upgrade1to2
%{_datadir}/%{name}/voms.data
%{_datadir}/%{name}/voms_install_db
%{_datadir}/%{name}/voms-ping
%{_datadir}/%{name}/voms_replica_master_setup.sh
%{_datadir}/%{name}/voms_replica_slave_setup.sh
%{_mandir}/man8/voms.8*
%doc INSTALL.Fedora

%changelog
* Mon Sep 07 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.11-4
- Fix building with openssl 1.0

* Thu Sep 03 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.11-3
- Add an empty /etc/vomses file to the main package to avoid error messages
- Let the voms user own only necessary directories
- Additional fixes for the server start-up script

* Tue Aug 25 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.11-2
- Add the /etc/voms directory to the server package
- Add setup instructions to the server package
- Run the server as non-root

* Fri Aug 14 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.11-1
- Upstream 1.9.11 (CVS tag glite-security-voms_R_1_9_11)

* Mon Jun 29 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.8.1-1
- Upstream 1.9.8.1 (CVS tag glite-security-voms_R_1_9_8_1)

* Thu Feb 12 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.2-1
- Upstream 1.9.2 (CVS tag glite-security-voms_R_1_9_2)

* Fri Feb 06 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.9.1-1
- Upstream 1.9.1 (CVS tag glite-security-voms_R_1_9_1)

* Tue Jan 06 2009 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.8.10-1
- Upstream 1.8.10 (CVS tag glite-security-voms_R_1_8_10)
- Rebuild against distribution Globus
- Add clear SSL error patch needed for openssl > 0.9.8b
- Add missing return value patch

* Sun Oct 26 2008 Mattias Ellert <mattias.ellert at fysast.uu.se> - 1.8.9-1ng
- Upstream 1.8.9 (CVS tag glite-security-voms_R_1_8_9)
- Rebuild against Globus 4.0.8-0.11

* Thu May 15 2008 Anders Wäänänen <waananen at nbi.dk> - 1.7.24-4ng
- Add missing include patch

* Sat Apr 26 2008 Anders Wäänänen <waananen at nbi.dk> - 1.7.24-3ng
- Rebuild against Globus 4.0.7-0.10

* Sun Nov 25 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.24-2ng
- Fix GPT_LOCATION and GLOBUS_LOCATION detection in spec file

* Mon Oct 29 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.24-1ng
- Upstream 1.7.24 (CVS tag glite-security-voms_R_1_7_24_1)

* Mon Oct 15 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.23-1ng
- Upstream 1.7.23 (CVS tag glite-security-voms_R_1_7_23_1)

* Wed Sep 12 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.22-3ng
- Move /etc/voms/vomses back to /etc/vomses
- Added more openssl portability patches with input
  from Aake Sandgren <ake.sandgren at hpc2n.umu.se>

* Wed Sep 12 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.22-2ng
- Added more openssl portability patches with input
  from Aake Sandgren <ake.sandgren at hpc2n.umu.se>

* Mon Sep 10 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.22-1ng
- Try to link against system crypto library when Globus library is not
  available
- Make /etc/grid-security/vomsdir part of the voms sub-package
- Drop RPM prefix /etc
- Move the vomses.template to /etc/voms
- Use dashes instead of underscore in voms-install-replica.1 man page
- Do not try to link against system crypt library. Voms now
  does this internally.
- Upstream 1.7.22 (CVS tag glite-security-voms_R_1_7_22_1)

* Mon Jul 16 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.20-5ng
- Drop voms-struct_change.patch - problem is with libxml2

* Sat Jul 14 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.20-4ng
- Add missing openssl-devel dependency in voms-devel

* Thu Jul 12 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.20-3ng
- Add patch:
  - voms-struct_change.patch
    - Change API slightly - but now works with libxml2

* Thu Jul 08 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.20-2ng
- Make conditinal dependency on expat-devel (OpenSuSE 10.20 has only expat)

* Thu Jul 05 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.20-1ng
- Upstream 1.7.20 (CVS tag glite-security-voms_R_1_7_20_1) 

* Thu Jul 05 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.19-2ng
- Added patches:
  - voms-openssl_portability.patch
    - Support for newer OpenSSL-0.9.8
  - voms-isoc90_portability.patch
    - Support for older compilers
- Added openssl-devel build dependency

* Fri Jun 22 2007 Anders Wäänänen <waananen at nbi.dk> - 1.7.19-1ng
- Upstream 1.7.19 (CVS tag glite-security-voms_R_1_7_19_P2) 
- Remove patches (use shell substitutions instead)
- Disable Java API build

* Fri Jun 22 2007 Anders Wäänänen <waananen at nbi.dk> - 1.6.20-3ng
- Added Globus dependencies to voms-devel

* Mon Jul 24 2006 Anders Wäänänen <waananen at nbi.dk> - 1.6.20-2ng
- Fix dependency typo: Requires -> BuildRequires

* Sat May 06 2006 Anders Wäänänen <waananen at nbi.dk> - 1.6.20-1ng
- Many changes since upstream changed quite a lot.
- Added README.NorduGrid with packaging information
- Patches:
  - voms_openssl-0.9.8.patch
    - Support for OpenSSL 0.9.8
  - voms_noglobusopenssl-1.6.20.patch
    - Use system openssl rather than the one from Globus
    - Patch reworked for voms 1.6.20
  - Dont use project based (gLite) include paths
- Pseudo patches (fixes made at runtime and not from static patch files)
  - Fix broken --libexecdir support for configure
    (some systems do not have libexecdir = <prefix>/libexec)
  - Drop all documents except man pages which are pre-generated
    (section 3 man pages are skipped as well)
  - Do not use edg- prefix
    (can be turned on/off through macro)
  - Install flavored libraries in addition to non-flavored
    (can be turned on/off through macro)
  - Put start-up script in /etc/init.d
  - Move configuration files from <prefix>/etc to /etc

* Mon Dec 19 2005 Anders Wäänänen <waananen at nbi.dk> - 1.6.9-2
- Add patch voms_doc.patch to disable html and ps documentation
  and add man-mages and pdf files to distribution (make dist)
- Use rpm switch: --define "_autotools_bootstrap 1" to rebuild
  documentation and create "make dist" target
- Add patch voms_nohardcodelibexecdir.patch which use the libexecdir
  from configure rather than the hardcoded prefix/libexec

* Sun Nov 27 2005 Anders Wäänänen <waananen at nbi.dk> - 1.6.9-1
- Add patch voms_ssl_include.patch to add external openssl includes.
  Would be better to query globus_openssl about this

* Tue Oct 18 2005 Anders Wäänänen <waananen at nbi.dk> - 1.6.7-1
- Modfiy voms_noglobusopenssl.patch to match upstream
- Add patch voms_nops.patch to disable postscript versions of
  reference manual

* Fri Jun 17 2005 Anders Wäänänen <waananen at nbi.dk> - 1.5.4-1
- Remove the following patches:
  - voms_namespace.patch - Fixed in upstream
  - voms_external_mysql++-1.4.1.patch - Obsolete since mysql++ is no
    longer needed
  - voms-no_libs.path - Fixed in upstream
- Add Globus dependencies

* Wed Jun 01 2005 Anders Wäänänen <waananen at nbi.dk> - 1.4.1-3
- Do not hardcode Globus flavor but try to guess
- Remove explicit globus rpm Requirement
- Use external openssl - not globus_openssl

* Mon May 02 2005 Anders Wäänänen <waananen at nbi.dk> - 1.4.1-2
- Remove automake cache
- Add explicit dependency on mysql++-devel

* Sat Apr 30 2005 Anders Wäänänen <waananen at nbi.dk> - 1.4.1-1
- New upstream
- autogen.sh -> autobuild.sh

* Mon Apr 18 2005 Anders Wäänänen <waananen at nbi.dk> - 1.3.2-1
- Initial build.


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/voms/EL-5/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- .cvsignore	9 Sep 2009 16:08:49 -0000	1.1
+++ .cvsignore	10 Sep 2009 02:39:25 -0000	1.2
@@ -0,0 +1 @@
+voms-1.9.11.tar.gz


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/voms/EL-5/sources,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- sources	9 Sep 2009 16:08:49 -0000	1.1
+++ sources	10 Sep 2009 02:39:25 -0000	1.2
@@ -0,0 +1 @@
+86ca9fbf86b2aa61401f46d96c1b99bb  voms-1.9.11.tar.gz




More information about the fedora-extras-commits mailing list