remm        2005/07/30 14:19:58

  Modified:    jk/java/org/apache/coyote/ajp AjpAprProcessor.java
  Log:
  - Add a check for null certificates message bytes (that I forgot to cut & 
paste
    somehow).
  - Handling of addresses was wrong: AJP passes the remote and local
    addresses.
  
  Revision  Changes    Path
  1.15      +27 -100   
jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java
  
  Index: AjpAprProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AjpAprProcessor.java      29 Jul 2005 10:23:55 -0000      1.14
  +++ AjpAprProcessor.java      30 Jul 2005 21:19:58 -0000      1.15
  @@ -32,8 +32,6 @@
   import org.apache.coyote.Request;
   import org.apache.coyote.RequestInfo;
   import org.apache.coyote.Response;
  -import org.apache.tomcat.jni.Address;
  -import org.apache.tomcat.jni.Sockaddr;
   import org.apache.tomcat.jni.Socket;
   import org.apache.tomcat.jni.Status;
   import org.apache.tomcat.util.buf.ByteChunk;
  @@ -598,115 +596,44 @@
   
           } else if (actionCode == ActionCode.ACTION_REQ_SSL_ATTRIBUTE ) {
   
  -            ByteChunk certData = certificates.getByteChunk();
  -            ByteArrayInputStream bais = 
  -                new ByteArrayInputStream(certData.getBytes(),
  -                                         certData.getStart(),
  -                                         certData.getLength());
  -
  -            // Fill the first element.
  -            X509Certificate jsseCerts[] = null;
  -            try {
  -                CertificateFactory cf =
  -                    CertificateFactory.getInstance("X.509");
  -                X509Certificate cert = (X509Certificate)
  -                    cf.generateCertificate(bais);
  -                jsseCerts =  new X509Certificate[1];
  -                jsseCerts[0] = cert;
  -            } catch(java.security.cert.CertificateException e) {
  -                log.error(sm.getString("ajpprocessor.certs.fail"), e);
  -                return;
  -            }
  -            
  -            request.setAttribute(AprEndpoint.CERTIFICATE_KEY, jsseCerts);
  -            
  -        } else if (actionCode == ActionCode.ACTION_REQ_HOST_ADDR_ATTRIBUTE) {
  -
  -            // Get remote host address
  -            if (remoteAddr == null) {
  +            if (!certificates.isNull()) {
  +                ByteChunk certData = certificates.getByteChunk();
  +                X509Certificate jsseCerts[] = null;
  +                ByteArrayInputStream bais = 
  +                    new ByteArrayInputStream(certData.getBytes(),
  +                            certData.getStart(),
  +                            certData.getLength());
  +                // Fill the first element.
                   try {
  -                    long sa = Address.get(Socket.APR_REMOTE, socket);
  -                    remoteAddr = Address.getip(sa);
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  -                }
  -            }
  -            request.remoteAddr().setString(remoteAddr);
  -
  -        } else if (actionCode == ActionCode.ACTION_REQ_LOCAL_NAME_ATTRIBUTE) 
{
  -
  -            // Get local host name
  -            if (localName == null) {
  -                try {
  -                    long sa = Address.get(Socket.APR_LOCAL, socket);
  -                    localName = Address.getnameinfo(sa, 0);
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  +                    CertificateFactory cf =
  +                        CertificateFactory.getInstance("X.509");
  +                    X509Certificate cert = (X509Certificate)
  +                    cf.generateCertificate(bais);
  +                    jsseCerts = new X509Certificate[1];
  +                    jsseCerts[0] = cert;
  +                    request.setAttribute(AprEndpoint.CERTIFICATE_KEY, 
jsseCerts);
  +                } catch (java.security.cert.CertificateException e) {
  +                    log.error(sm.getString("ajpprocessor.certs.fail"), e);
  +                    return;
                   }
               }
  -            request.localName().setString(localName);
  -
  +            
           } else if (actionCode == ActionCode.ACTION_REQ_HOST_ATTRIBUTE) {
   
  -            // Get remote host name
  -            if (remoteHost == null) {
  +            // Get remote host name using a DNS resolution
  +            if (request.remoteHost().isNull()) {
                   try {
  -                    long sa = Address.get(Socket.APR_REMOTE, socket);
  -                    remoteHost = Address.getnameinfo(sa, 0);
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  +                    request.remoteHost().setString(InetAddress.getByName
  +                            (request.remoteAddr().toString()).getHostName());
  +                } catch (IOException iex) {
  +                    // Ignore
                   }
               }
  -            request.remoteHost().setString(remoteHost);
   
           } else if (actionCode == ActionCode.ACTION_REQ_LOCAL_ADDR_ATTRIBUTE) 
{
   
  -            // Get local host address
  -            if (localAddr == null) {
  -                try {
  -                    long sa = Address.get(Socket.APR_LOCAL, socket);
  -                    Sockaddr addr = new Sockaddr();
  -                    if (Address.fill(addr, sa)) {
  -                        localAddr = addr.hostname;
  -                        localPort = addr.port;
  -                    }
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  -                }
  -            }
  -
  -            request.localAddr().setString(localAddr);
  -
  -        } else if (actionCode == ActionCode.ACTION_REQ_REMOTEPORT_ATTRIBUTE) 
{
  -
  -            // Get remote port
  -            if (remotePort == -1) {
  -                try {
  -                    long sa = Address.get(Socket.APR_REMOTE, socket);
  -                    Sockaddr addr = Address.getInfo(sa);
  -                    remotePort = addr.port;
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  -                }
  -            }
  -            request.setRemotePort(remotePort);
  -
  -        } else if (actionCode == ActionCode.ACTION_REQ_LOCALPORT_ATTRIBUTE) {
  -
  -            // Get local port
  -            if (localPort == -1) {
  -                try {
  -                    long sa = Address.get(Socket.APR_LOCAL, socket);
  -                    Sockaddr addr = new Sockaddr();
  -                    if (Address.fill(addr, sa)) {
  -                        localAddr = addr.hostname;
  -                        localPort = addr.port;
  -                    }
  -                } catch (Exception e) {
  -                    log.warn(sm.getString("ajpprocessor.socket.info"), e);
  -                }
  -            }
  -            request.setLocalPort(localPort);
  +            // Copy from local name for now, which should simply be an 
address
  +            request.localAddr().setString(request.localName().toString());
   
           } else if (actionCode == ActionCode.ACTION_REQ_SET_BODY_REPLAY) {
               
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to