You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ma...@apache.org on 2002/03/25 10:21:59 UTC

cvs commit: apache-1.3/src/modules/proxy .indent.pro mod_proxy.c proxy_cache.c proxy_connect.c proxy_ftp.c proxy_http.c proxy_util.c

martin      02/03/25 01:21:59

  Modified:    src/modules/proxy .indent.pro mod_proxy.c proxy_cache.c
                        proxy_connect.c proxy_ftp.c proxy_http.c
                        proxy_util.c
  Log:
  Applied "canonical reformatting" according to the Apache Style Guide
  (indent | pr -t -e8) without changing anything else.
  
  Revision  Changes    Path
  1.2       +8 -0      apache-1.3/src/modules/proxy/.indent.pro
  
  Index: .indent.pro
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/.indent.pro,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- .indent.pro	16 Sep 1997 00:59:37 -0000	1.1
  +++ .indent.pro	25 Mar 2002 09:21:58 -0000	1.2
  @@ -11,6 +11,7 @@
   -Tbuf_area
   -Tbuff_struct
   -Tbuffy
  +-Tcache_req
   -Tcmd_how
   -Tcmd_parms
   -Tcommand_rec
  @@ -19,10 +20,12 @@
   -Tcore_dir_config
   -Tcore_server_config
   -Tdir_maker_func
  +-Tdirconn_entry
   -Tevent
   -Tglobals_s
   -Thandler_func
   -Thandler_rec
  +-Tin_addr
   -Tjoblist_s
   -Tlisten_rec
   -Tmerger_func
  @@ -31,12 +34,15 @@
   -Tmodule_struct
   -Tmutex
   -Tn_long
  +-Toff_t
   -Tother_child_rec
   -Toverrides_t
   -Tparent_score
  +-Tper_thread_data
   -Tpid_t
   -Tpiped_log
   -Tpool
  +-Tproxy_alias
   -Trequest_rec
   -Trequire_line
   -Trlim_t
  @@ -46,6 +52,8 @@
   -Tserver_rec
   -Tserver_rec_chain
   -Tshort_score
  +-Tsockaddr
  +-Tsockaddr_in
   -Ttable
   -Ttable_entry
   -Tthread
  
  
  
  1.81      +113 -104  apache-1.3/src/modules/proxy/mod_proxy.c
  
  Index: mod_proxy.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/mod_proxy.c,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- mod_proxy.c	13 Mar 2002 21:05:32 -0000	1.80
  +++ mod_proxy.c	25 Mar 2002 09:21:58 -0000	1.81
  @@ -99,8 +99,9 @@
   
       while (aliasp < end_fakename) {
           if (*aliasp == '/') {
  -            /* any number of '/' in the alias matches any number in
  -             * the supplied URI, but there must be at least one...
  +            /*
  +             * any number of '/' in the alias matches any number in the
  +             * supplied URI, but there must be at least one...
                */
               if (*urip != '/')
                   return 0;
  @@ -122,9 +123,9 @@
       if (aliasp[-1] != '/' && *urip != '\0' && *urip != '/')
           return 0;
   
  -    /* Return number of characters from URI which matched (may be
  -     * greater than length of alias, since we may have matched
  -     * doubled slashes)
  +    /*
  +     * Return number of characters from URI which matched (may be greater
  +     * than length of alias, since we may have matched doubled slashes)
        */
   
       return urip - uri;
  @@ -146,14 +147,14 @@
       void *sconf = r->server->module_config;
       proxy_server_conf *conf;
   
  -    conf = (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    conf = (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
   
       if (conf->req && r->parsed_uri.scheme) {
           /* but it might be something vhosted */
  -       if (!(r->parsed_uri.hostname
  -            && !strcasecmp(r->parsed_uri.scheme, ap_http_method(r))
  -            && ap_matches_request_vhost(r, r->parsed_uri.hostname,
  -               r->parsed_uri.port_str ? r->parsed_uri.port : ap_default_port(r)))) {
  +        if (!(r->parsed_uri.hostname
  +              && !strcasecmp(r->parsed_uri.scheme, ap_http_method(r))
  +              && ap_matches_request_vhost(r, r->parsed_uri.hostname,
  +        r->parsed_uri.port_str ? r->parsed_uri.port : ap_default_port(r)))) {
               r->proxyreq = STD_PROXY;
               r->uri = r->unparsed_uri;
               r->filename = ap_pstrcat(r->pool, "proxy:", r->uri, NULL);
  @@ -164,10 +165,10 @@
       else if (conf->req && r->method_number == M_CONNECT
                && r->parsed_uri.hostname
                && r->parsed_uri.port_str) {
  -            r->proxyreq = STD_PROXY;
  -            r->uri = r->unparsed_uri;
  -            r->filename = ap_pstrcat(r->pool, "proxy:", r->uri, NULL);
  -            r->handler = "proxy-server";
  +        r->proxyreq = STD_PROXY;
  +        r->uri = r->unparsed_uri;
  +        r->filename = ap_pstrcat(r->pool, "proxy:", r->uri, NULL);
  +        r->handler = "proxy-server";
       }
       return DECLINED;
   }
  @@ -176,31 +177,33 @@
   {
       void *sconf = r->server->module_config;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       int i, len;
  -    struct proxy_alias *ent = (struct proxy_alias *) conf->aliases->elts;
  +    struct proxy_alias *ent = (struct proxy_alias *)conf->aliases->elts;
   
       if (r->proxyreq != NOT_PROXY) {
  -        /* someone has already set up the proxy, it was possibly ourselves
  -         * in proxy_detect
  +        /*
  +         * someone has already set up the proxy, it was possibly ourselves in
  +         * proxy_detect
            */
           return OK;
       }
   
  -    /* XXX: since r->uri has been manipulated already we're not really
  -     * compliant with RFC1945 at this point.  But this probably isn't
  -     * an issue because this is a hybrid proxy/origin server.
  +    /*
  +     * XXX: since r->uri has been manipulated already we're not really
  +     * compliant with RFC1945 at this point.  But this probably isn't an
  +     * issue because this is a hybrid proxy/origin server.
        */
   
       for (i = 0; i < conf->aliases->nelts; i++) {
           len = alias_match(r->uri, ent[i].fake);
  -            
  -       if (len > 0) {
  -           r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real,
  -                                 r->uri + len, NULL);
  -           r->handler = "proxy-server";
  -           r->proxyreq = PROXY_PASS;
  -           return OK;
  +
  +        if (len > 0) {
  +            r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real,
  +                                     r->uri + len, NULL);
  +            r->handler = "proxy-server";
  +            r->proxyreq = PROXY_PASS;
  +            return OK;
           }
       }
       return DECLINED;
  @@ -231,7 +234,7 @@
       if (p == NULL || p == url)
           return HTTP_BAD_REQUEST;
   
  -    return OK;          /* otherwise; we've done the best we can */
  +    return OK;                  /* otherwise; we've done the best we can */
   }
   
   static void proxy_init(server_rec *r, pool *p)
  @@ -258,7 +261,7 @@
   
       /* If host does contain a dot already, or it is "localhost", decline */
       if (strchr(r->parsed_uri.hostname, '.') != NULL
  -     || strcasecmp(r->parsed_uri.hostname, "localhost") == 0)
  +        || strcasecmp(r->parsed_uri.hostname, "localhost") == 0)
           return DECLINED;        /* host name has a dot already */
   
       ref = ap_table_get(r->headers_in, "Referer");
  @@ -266,17 +269,17 @@
       /* Reassemble the request, but insert the domain after the host name */
       /* Note that the domain name always starts with a dot */
       r->parsed_uri.hostname = ap_pstrcat(r->pool, r->parsed_uri.hostname,
  -                                     domain, NULL);
  +                                        domain, NULL);
       nuri = ap_unparse_uri_components(r->pool,
  -                                  &r->parsed_uri,
  -                                  UNP_REVEALPASSWORD);
  +                                     &r->parsed_uri,
  +                                     UNP_REVEALPASSWORD);
   
       ap_table_set(r->headers_out, "Location", nuri);
  -    ap_log_rerror(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, r,
  -                "Domain missing: %s sent to %s%s%s", r->uri,
  -                ap_unparse_uri_components(r->pool, &r->parsed_uri,
  -                      UNP_OMITUSERINFO),
  -                ref ? " from " : "", ref ? ref : "");
  +    ap_log_rerror(APLOG_MARK, APLOG_INFO | APLOG_NOERRNO, r,
  +                  "Domain missing: %s sent to %s%s%s", r->uri,
  +                  ap_unparse_uri_components(r->pool, &r->parsed_uri,
  +                                            UNP_OMITUSERINFO),
  +                  ref ? " from " : "", ref ? ref : "");
   
       return HTTP_MOVED_PERMANENTLY;
   }
  @@ -289,7 +292,7 @@
       char *url, *scheme, *p;
       void *sconf = r->server->module_config;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       array_header *proxies = conf->proxies;
       struct proxy_remote *ents = (struct proxy_remote *) proxies->elts;
       int i, rc;
  @@ -312,8 +315,8 @@
                   ap_finalize_request_protocol(r);
               return OK;
           }
  -        ap_table_setn(r->headers_in, "Max-Forwards", 
  -                      ap_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd-1 : 0));
  +        ap_table_setn(r->headers_in, "Max-Forwards",
  +                ap_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd - 1 : 0));
       }
   
       if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))
  @@ -343,18 +346,18 @@
       /* Check URI's destination host against NoProxy hosts */
       /* Bypass ProxyRemote server lookup if configured as NoProxy */
       /* we only know how to handle communication to a proxy via http */
  -    /*if (strcasecmp(scheme, "http") == 0) */
  +    /* if (strcasecmp(scheme, "http") == 0) */
       {
           int ii;
  -        struct dirconn_entry *list = (struct dirconn_entry *) conf->dirconn->elts;
  +        struct dirconn_entry *list = (struct dirconn_entry *)conf->dirconn->elts;
   
           for (direct_connect = ii = 0; ii < conf->dirconn->nelts && !direct_connect; ii++) {
               direct_connect = list[ii].matcher(&list[ii], r);
           }
   #if DEBUGGING
  -        ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r,
  -                     (direct_connect) ? "NoProxy for %s" : "UseProxy for %s",
  -                     r->uri);
  +        ap_log_rerror(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r,
  +                    (direct_connect) ? "NoProxy for %s" : "UseProxy for %s",
  +                      r->uri);
   #endif
       }
   
  @@ -366,17 +369,18 @@
               if (strcmp(ents[i].scheme, "*") == 0 ||
                   (p == NULL && strcasecmp(scheme, ents[i].scheme) == 0) ||
                   (p != NULL &&
  -               strncasecmp(url, ents[i].scheme, strlen(ents[i].scheme)) == 0)) {
  -                /* CONNECT is a special method that bypasses the normal
  -                 * proxy code.
  +            strncasecmp(url, ents[i].scheme, strlen(ents[i].scheme)) == 0)) {
  +                /*
  +                 * CONNECT is a special method that bypasses the normal proxy
  +                 * code.
                    */
                   if (r->method_number == M_CONNECT)
                       rc = ap_proxy_connect_handler(r, cr, url, ents[i].hostname,
  -                                               ents[i].port);
  +                                                  ents[i].port);
   /* we only know how to handle communication to a proxy via http */
                   else if (strcasecmp(ents[i].protocol, "http") == 0)
                       rc = ap_proxy_http_handler(r, cr, url, ents[i].hostname,
  -                                            ents[i].port);
  +                                               ents[i].port);
                   else
                       rc = DECLINED;
   
  @@ -418,11 +422,12 @@
       ps->nocaches = ap_make_array(p, 10, sizeof(struct nocache_entry));
       ps->allowed_connect_ports = ap_make_array(p, 10, sizeof(int));
       ps->domain = NULL;
  -    ps->viaopt = via_off; /* initially backward compatible with 1.3.1 */
  -    ps->viaopt_set = 0; /* 0 means default */
  +    ps->viaopt = via_off;       /* initially backward compatible with 1.3.1 */
  +    ps->viaopt_set = 0;         /* 0 means default */
       ps->req = 0;
       ps->req_set = 0;
  -    ps->recv_buffer_size = 0; /* this default was left unset for some reason */
  +    ps->recv_buffer_size = 0;   /* this default was left unset for some
  +                                 * reason */
       ps->recv_buffer_size_set = 0;
       ps->io_buffer_size = IOBUFSIZE;
       ps->io_buffer_size_set = 0;
  @@ -451,11 +456,11 @@
   
   static void *
        merge_proxy_config(pool *p, void *basev,
  -                        void *overridesv)
  +                             void *overridesv)
   {
       proxy_server_conf *ps = ap_pcalloc(p, sizeof(proxy_server_conf));
  -    proxy_server_conf *base = (proxy_server_conf *) basev;
  -    proxy_server_conf *overrides = (proxy_server_conf *) overridesv;
  +    proxy_server_conf *base = (proxy_server_conf *)basev;
  +    proxy_server_conf *overrides = (proxy_server_conf *)overridesv;
   
       ps->proxies = ap_append_arrays(p, base->proxies, overrides->proxies);
       ps->aliases = ap_append_arrays(p, base->aliases, overrides->aliases);
  @@ -490,7 +495,7 @@
   {
       server_rec *s = cmd->server;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(s->module_config, &proxy_module);
       struct proxy_remote *new;
       char *p, *q;
       int port;
  @@ -508,8 +513,8 @@
           port = -1;
       *p = '\0';
       if (strchr(f, ':') == NULL)
  -        ap_str_tolower(f);              /* lowercase scheme */
  -    ap_str_tolower(p + 3);              /* lowercase hostname */
  +        ap_str_tolower(f);      /* lowercase scheme */
  +    ap_str_tolower(p + 3);      /* lowercase hostname */
   
       if (port == -1) {
           int i;
  @@ -532,7 +537,7 @@
   {
       server_rec *s = cmd->server;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(s->module_config, &proxy_module);
       struct proxy_alias *new;
   
       new = ap_push_array(conf->aliases);
  @@ -542,14 +547,14 @@
   }
   
   static const char *
  -    add_pass_reverse(cmd_parms *cmd, void *dummy, char *f, char *r)
  +     add_pass_reverse(cmd_parms *cmd, void *dummy, char *f, char *r)
   {
       server_rec *s = cmd->server;
       proxy_server_conf *conf;
       struct proxy_alias *new;
   
  -    conf = (proxy_server_conf *)ap_get_module_config(s->module_config, 
  -                                                  &proxy_module);
  +    conf = (proxy_server_conf *)ap_get_module_config(s->module_config,
  +                                                     &proxy_module);
       new = ap_push_array(conf->raliases);
       new->fake = f;
       new->real = r;
  @@ -579,7 +584,10 @@
           new->name = arg;
           /* Don't do name lookups on things that aren't dotted */
           if (strchr(arg, '.') != NULL && ap_proxy_host2addr(new->name, &hp) == NULL)
  -            /*@@@FIXME: This copies only the first of (possibly many) IP addrs */
  +            /*
  +             * @@@FIXME: This copies only the first of (possibly many) IP
  +             * addrs
  +             */
               memcpy(&new->addr, hp.h_addr, sizeof(struct in_addr));
           else
               new->addr.s_addr = 0;
  @@ -591,11 +599,11 @@
    * Set the ports CONNECT can use
    */
   static const char *
  -    set_allowed_ports(cmd_parms *parms, void *dummy, char *arg)
  +     set_allowed_ports(cmd_parms *parms, void *dummy, char *arg)
   {
       server_rec *s = parms->server;
       proxy_server_conf *conf =
  -      ap_get_module_config(s->module_config, &proxy_module);
  +    ap_get_module_config(s->module_config, &proxy_module);
       int *New;
   
       if (!ap_isdigit(arg[0]))
  @@ -616,7 +624,7 @@
       proxy_server_conf *conf =
       ap_get_module_config(s->module_config, &proxy_module);
       struct dirconn_entry *New;
  -    struct dirconn_entry *list = (struct dirconn_entry *) conf->dirconn->elts;
  +    struct dirconn_entry *list = (struct dirconn_entry *)conf->dirconn->elts;
       int found = 0;
       int i;
   
  @@ -733,7 +741,7 @@
   
       if (sscanf(arg, "%lg", &val) != 1)
           return "CacheMaxExpire value must be a float";
  -    psf->cache.maxexpire = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.maxexpire = (int)(val * (double)SEC_ONE_HR);
       psf->cache.maxexpire_set = 1;
       return NULL;
   }
  @@ -747,7 +755,7 @@
   
       if (sscanf(arg, "%lg", &val) != 1)
           return "CacheDefaultExpire value must be a float";
  -    psf->cache.defaultexpire = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.defaultexpire = (int)(val * (double)SEC_ONE_HR);
       psf->cache.defaultexpire_set = 1;
       return NULL;
   }
  @@ -761,7 +769,7 @@
   
       if (sscanf(arg, "%lg", &val) != 1)
           return "CacheGcInterval value must be a float";
  -    psf->cache.gcinterval = (int) (val * (double) SEC_ONE_HR);
  +    psf->cache.gcinterval = (int)(val * (double)SEC_ONE_HR);
       psf->cache.gcinterval_set = 1;
       return NULL;
   }
  @@ -823,7 +831,10 @@
           new->name = arg;
           /* Don't do name lookups on things that aren't dotted */
           if (strchr(arg, '.') != NULL && ap_proxy_host2addr(new->name, &hp) == NULL)
  -            /*@@@FIXME: This copies only the first of (possibly many) IP addrs */
  +            /*
  +             * @@@FIXME: This copies only the first of (possibly many) IP
  +             * addrs
  +             */
               memcpy(&new->addr, hp.h_addr, sizeof(struct in_addr));
           else
               new->addr.s_addr = 0;
  @@ -858,26 +869,26 @@
       return NULL;
   }
   
  -static const char*
  -    set_cache_completion(cmd_parms *parms, void *dummy, char *arg)
  +static const char *
  +     set_cache_completion(cmd_parms *parms, void *dummy, char *arg)
   {
       proxy_server_conf *psf =
       ap_get_module_config(parms->server->module_config, &proxy_module);
       int s = atoi(arg);
       if (s > 100 || s < 0) {
           return "CacheForceCompletion must be <= 100 percent, "
  -               "or 0 for system default.";
  +            "or 0 for system default.";
       }
   
       if (s > 0)
  -      psf->cache.cache_completion = ((float)s / 100);
  +        psf->cache.cache_completion = ((float)s / 100);
   
       psf->cache.cache_completion_set = 1;
  -    return NULL;    
  +    return NULL;
   }
   
  -static const char*
  -    set_via_opt(cmd_parms *parms, void *dummy, char *arg)
  +static const char *
  +     set_via_opt(cmd_parms *parms, void *dummy, char *arg)
   {
       proxy_server_conf *psf =
       ap_get_module_config(parms->server->module_config, &proxy_module);
  @@ -892,11 +903,11 @@
           psf->viaopt = via_full;
       else {
           return "ProxyVia must be one of: "
  -               "off | on | full | block";
  +            "off | on | full | block";
       }
   
       psf->viaopt_set = 1;
  -    return NULL;    
  +    return NULL;
   }
   
   static const handler_rec proxy_handlers[] =
  @@ -908,47 +919,47 @@
   static const command_rec proxy_cmds[] =
   {
       {"ProxyRequests", set_proxy_req, NULL, RSRC_CONF, FLAG,
  -     "on if the true proxy requests should be accepted"},
  +    "on if the true proxy requests should be accepted"},
       {"ProxyRemote", add_proxy, NULL, RSRC_CONF, TAKE2,
  -     "a scheme, partial URL or '*' and a proxy server"},
  +    "a scheme, partial URL or '*' and a proxy server"},
       {"ProxyPass", add_pass, NULL, RSRC_CONF, TAKE2,
  -     "a virtual path and a URL"},
  +    "a virtual path and a URL"},
       {"ProxyPassReverse", add_pass_reverse, NULL, RSRC_CONF, TAKE2,
  -     "a virtual path and a URL for reverse proxy behaviour"},
  +    "a virtual path and a URL for reverse proxy behaviour"},
       {"ProxyBlock", set_proxy_exclude, NULL, RSRC_CONF, ITERATE,
  -     "A list of names, hosts or domains to which the proxy will not connect"},
  +    "A list of names, hosts or domains to which the proxy will not connect"},
       {"ProxyReceiveBufferSize", set_recv_buffer_size, NULL, RSRC_CONF, TAKE1,
  -     "Receive buffer size for outgoing HTTP and FTP connections in bytes"},
  +    "Receive buffer size for outgoing HTTP and FTP connections in bytes"},
       {"ProxyIOBufferSize", set_io_buffer_size, NULL, RSRC_CONF, TAKE1,
  -     "IO buffer size for outgoing HTTP and FTP connections in bytes"},
  +    "IO buffer size for outgoing HTTP and FTP connections in bytes"},
       {"NoProxy", set_proxy_dirconn, NULL, RSRC_CONF, ITERATE,
  -     "A list of domains, hosts, or subnets to which the proxy will connect directly"},
  +    "A list of domains, hosts, or subnets to which the proxy will connect directly"},
       {"ProxyDomain", set_proxy_domain, NULL, RSRC_CONF, TAKE1,
  -     "The default intranet domain name (in absence of a domain in the URL)"},
  +    "The default intranet domain name (in absence of a domain in the URL)"},
       {"AllowCONNECT", set_allowed_ports, NULL, RSRC_CONF, ITERATE,
  -     "A list of ports which CONNECT may connect to"},
  +    "A list of ports which CONNECT may connect to"},
       {"CacheRoot", set_cache_root, NULL, RSRC_CONF, TAKE1,
  -     "The directory to store cache files"},
  +    "The directory to store cache files"},
       {"CacheSize", set_cache_size, NULL, RSRC_CONF, TAKE1,
  -     "The maximum disk space used by the cache in Kb"},
  +    "The maximum disk space used by the cache in Kb"},
       {"CacheMaxExpire", set_cache_maxex, NULL, RSRC_CONF, TAKE1,
  -     "The maximum time in hours to cache a document"},
  +    "The maximum time in hours to cache a document"},
       {"CacheDefaultExpire", set_cache_defex, NULL, RSRC_CONF, TAKE1,
  -     "The default time in hours to cache a document"},
  +    "The default time in hours to cache a document"},
       {"CacheLastModifiedFactor", set_cache_factor, NULL, RSRC_CONF, TAKE1,
  -     "The factor used to estimate Expires date from LastModified date"},
  +    "The factor used to estimate Expires date from LastModified date"},
       {"CacheGcInterval", set_cache_gcint, NULL, RSRC_CONF, TAKE1,
  -     "The interval between garbage collections, in hours"},
  +    "The interval between garbage collections, in hours"},
       {"CacheDirLevels", set_cache_dirlevels, NULL, RSRC_CONF, TAKE1,
  -     "The number of levels of subdirectories in the cache"},
  +    "The number of levels of subdirectories in the cache"},
       {"CacheDirLength", set_cache_dirlength, NULL, RSRC_CONF, TAKE1,
  -     "The number of characters in subdirectory names"},
  +    "The number of characters in subdirectory names"},
       {"NoCache", set_cache_exclude, NULL, RSRC_CONF, ITERATE,
  -     "A list of names, hosts or domains for which caching is *not* provided"},
  +    "A list of names, hosts or domains for which caching is *not* provided"},
       {"CacheForceCompletion", set_cache_completion, NULL, RSRC_CONF, TAKE1,
  -     "Force a http cache completion after this percentage is loaded"},
  +    "Force a http cache completion after this percentage is loaded"},
       {"ProxyVia", set_via_opt, NULL, RSRC_CONF, TAKE1,
  -     "Configure Via: proxy header header to one of: on | off | block | full"},
  +    "Configure Via: proxy header header to one of: on | off | block | full"},
       {NULL}
   };
   
  @@ -974,5 +985,3 @@
       NULL,                       /* child_exit */
       proxy_detect                /* post read-request */
   };
  -
  -
  
  
  
  1.82      +1066 -1037apache-1.3/src/modules/proxy/proxy_cache.c
  
  Index: proxy_cache.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_cache.c,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- proxy_cache.c	13 Mar 2002 21:05:32 -0000	1.81
  +++ proxy_cache.c	25 Mar 2002 09:21:58 -0000	1.82
  @@ -68,7 +68,7 @@
   #include <sys/utime.h>
   #else
   #include <utime.h>
  -#endif /* WIN32 */
  +#endif                          /* WIN32 */
   #include "multithread.h"
   #include "ap_md5.h"
   #ifdef __TANDEM
  @@ -87,9 +87,9 @@
   
   /* Poor man's 61 bit arithmetic */
   typedef struct {
  -    long lower; /* lower 30 bits of result */
  -    long upper; /* upper 31 bits of result */
  -} long61_t;
  +    long lower;                 /* lower 30 bits of result */
  +    long upper;                 /* upper 31 bits of result */
  +}      long61_t;
   
   /* FIXME: The block size can be different on a `per file system' base.
    * This would make automatic detection highly OS specific.
  @@ -123,7 +123,7 @@
   
   
   static int sub_garbage_coll(request_rec *r, array_header *files,
  -                            const char *cachedir, const char *cachesubdir);
  +                             const char *cachedir, const char *cachesubdir);
   static void help_proxy_garbage_coll(request_rec *r);
   static int should_proxy_garbage_coll(request_rec *r);
   #if !defined(WIN32) && !defined(MPE) && !defined(OS2) && !defined(NETWARE) && !defined(TPF)
  @@ -135,14 +135,14 @@
   {
       static int inside = 0;
   
  -    (void) ap_acquire_mutex(garbage_mutex);
  +    (void)ap_acquire_mutex(garbage_mutex);
       if (inside == 1) {
  -        (void) ap_release_mutex(garbage_mutex);
  +        (void)ap_release_mutex(garbage_mutex);
           return;
       }
       else
           inside = 1;
  -    (void) ap_release_mutex(garbage_mutex);
  +    (void)ap_release_mutex(garbage_mutex);
   
       ap_block_alarms();          /* avoid SIGALRM on big cache cleanup */
       if (should_proxy_garbage_coll(r))
  @@ -153,14 +153,13 @@
   #endif
       ap_unblock_alarms();
   
  -    (void) ap_acquire_mutex(garbage_mutex);
  +    (void)ap_acquire_mutex(garbage_mutex);
       inside = 0;
  -    (void) ap_release_mutex(garbage_mutex);
  +    (void)ap_release_mutex(garbage_mutex);
   }
   
   
  -static void
  -add_long61 (long61_t *accu, long val)
  +static void add_long61(long61_t * accu, long val)
   {
       /* Add in lower 30 bits */
       accu->lower += (val & 0x3FFFFFFFL);
  @@ -170,8 +169,7 @@
       accu->lower &= 0x3FFFFFFFL;
   }
   
  -static void
  -sub_long61 (long61_t *accu, long val)
  +static void sub_long61(long61_t * accu, long val)
   {
       int carry = (val & 0x3FFFFFFFL) > accu->lower;
       /* Subtract lower 30 bits */
  @@ -185,11 +183,10 @@
    * return  0 when left == right
    * return >0 when left > right
    */
  -static long
  -cmp_long61 (long61_t *left, long61_t *right)
  +static long cmp_long61(long61_t * left, long61_t * right)
   {
       return (left->upper == right->upper) ? (left->lower - right->lower)
  -                                         : (left->upper - right->upper);
  +    : (left->upper - right->upper);
   }
   
   /* Compare two gc_ent's, sort them by expiration date */
  @@ -215,66 +212,66 @@
   
   #if 0
       ap_log_error(APLOG_MARK, APLOG_DEBUG, r->server,
  -                         "proxy: Guess what; we fork() again...");
  +                 "proxy: Guess what; we fork() again...");
   #endif
       switch (pid = fork()) {
  -        case -1:
  -            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                         "proxy: fork() for cache cleanup failed");
  -            return;
  +    case -1:
  +        ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                     "proxy: fork() for cache cleanup failed");
  +        return;
   
  -        case 0: /* Child */
  +    case 0:                     /* Child */
   
  -            /* close all sorts of things, including the socket fd */
  -            ap_cleanup_for_exec();
  +        /* close all sorts of things, including the socket fd */
  +        ap_cleanup_for_exec();
   
  -            /* Fork twice to disassociate from the child */
  -            switch (pid = fork()) {
  -                case -1:
  -                    ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +        /* Fork twice to disassociate from the child */
  +        switch (pid = fork()) {
  +        case -1:
  +            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
                            "proxy: fork(2nd) for cache cleanup failed");
  -                    exit(1);
  +            exit(1);
   
  -                case 0: /* Child */
  -                    /* The setpgrp() stuff was snarfed from http_main.c */
  +        case 0:         /* Child */
  +            /* The setpgrp() stuff was snarfed from http_main.c */
   #ifndef NO_SETSID
  -                    if ((pgrp = setsid()) == -1) {
  -                        perror("setsid");
  -                        fprintf(stderr, "%s: setsid failed\n",
  -                                ap_server_argv0);
  -                        exit(1);
  -                    }
  +            if ((pgrp = setsid()) == -1) {
  +                perror("setsid");
  +                fprintf(stderr, "%s: setsid failed\n",
  +                        ap_server_argv0);
  +                exit(1);
  +            }
   #elif defined(NEXT) || defined(NEWSOS)
  -                    if (setpgrp(0, getpid()) == -1 || (pgrp = getpgrp(0)) == -1) {
  -                        perror("setpgrp");
  -                        fprintf(stderr, "%S: setpgrp or getpgrp failed\n",
  -                                ap_server_argv0);
  -                        exit(1);
  -                    }
  +            if (setpgrp(0, getpid()) == -1 || (pgrp = getpgrp(0)) == -1) {
  +                perror("setpgrp");
  +                fprintf(stderr, "%S: setpgrp or getpgrp failed\n",
  +                        ap_server_argv0);
  +                exit(1);
  +            }
   #else
  -                    if ((pgrp = setpgrp(getpid(), 0)) == -1) {
  -                        perror("setpgrp");
  -                        fprintf(stderr, "%s: setpgrp failed\n",
  -                                ap_server_argv0);
  -                        exit(1);
  -                    }
  -#endif
  -                    help_proxy_garbage_coll(r);
  -                    exit(0);
  -
  -                default:    /* Father */
  -                    /* After grandson has been forked off, */
  -                    /* there's nothing else to do. */
  -                    exit(0);
  -            }
  -        default:
  -            /* Wait until grandson has been forked off */
  -            /* (without wait we'd leave a zombie) */
  -            waitpid(pid, &status, 0);
  -            return;
  +            if ((pgrp = setpgrp(getpid(), 0)) == -1) {
  +                perror("setpgrp");
  +                fprintf(stderr, "%s: setpgrp failed\n",
  +                        ap_server_argv0);
  +                exit(1);
  +            }
  +#endif
  +            help_proxy_garbage_coll(r);
  +            exit(0);
  +
  +        default:                /* Father */
  +            /* After grandson has been forked off, */
  +            /* there's nothing else to do. */
  +            exit(0);
  +        }
  +    default:
  +        /* Wait until grandson has been forked off */
  +        /* (without wait we'd leave a zombie) */
  +        waitpid(pid, &status, 0);
  +        return;
       }
   }
  -#endif /* ndef WIN32 */
  +#endif                          /* ndef WIN32 */
   
   #define DOT_TIME "/.time"       /* marker */
   
  @@ -282,7 +279,7 @@
   {
       void *sconf = r->server->module_config;
       proxy_server_conf *pconf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       const struct cache_conf *conf = &pconf->cache;
   
       const char *cachedir = conf->root;
  @@ -290,34 +287,36 @@
       struct stat buf;
       int timefd;
       time_t every = conf->gcinterval;
  -    static time_t lastcheck = BAD_DATE;         /* static (per-process) data!!! */
  +    static time_t lastcheck = BAD_DATE; /* static (per-process) data!!! */
   
       if (cachedir == NULL || every == -1)
           return 0;
   
  -    filename = ap_palloc(r->pool, strlen(cachedir) + strlen( DOT_TIME ) +1);
  +    filename = ap_palloc(r->pool, strlen(cachedir) + strlen(DOT_TIME) + 1);
   
       garbage_now = time(NULL);
  -    /* Usually, the modification time of <cachedir>/.time can only increase.
  +    /*
  +     * Usually, the modification time of <cachedir>/.time can only increase.
        * Thus, even with several child processes having their own copy of
  -     * lastcheck, if time(NULL) still < lastcheck then it's not time
  -     * for GC yet.
  +     * lastcheck, if time(NULL) still < lastcheck then it's not time for GC
  +     * yet.
        */
       if (garbage_now != -1 && lastcheck != BAD_DATE && garbage_now < lastcheck + every)
           return 0;
   
  -    strcpy(filename,cachedir);
  -    strcat(filename,DOT_TIME);
  +    strcpy(filename, cachedir);
  +    strcat(filename, DOT_TIME);
   
  -    /* At this point we have a bit of an engineering compromise. We could either
  -     * create and/or mark the .time file  (prior to the fork which might
  -     * fail on a resource issue) or wait until we are safely forked. The
  -     * advantage of doing it now in this process is that we get some
  -     * usefull live out of the global last check variable. (XXX which
  -     * should go scoreboard IMHO.) Note that the actual counting is 
  -     * at a later moment.
  +    /*
  +     * At this point we have a bit of an engineering compromise. We could
  +     * either create and/or mark the .time file  (prior to the fork which
  +     * might fail on a resource issue) or wait until we are safely forked.
  +     * The advantage of doing it now in this process is that we get some
  +     * usefull live out of the global last check variable. (XXX which should
  +     * go scoreboard IMHO.) Note that the actual counting is at a later
  +     * moment.
        */
  -   if (stat(filename, &buf) == -1) {   /* does not exist */
  +    if (stat(filename, &buf) == -1) {   /* does not exist */
           if (errno != ENOENT) {
               ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
                            "proxy: stat(%s)", filename);
  @@ -351,7 +350,7 @@
       const char *cachedir;
       void *sconf = r->server->module_config;
       proxy_server_conf *pconf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       const struct cache_conf *conf = &pconf->cache;
       array_header *files;
       struct gc_ent *fent;
  @@ -372,9 +371,9 @@
       sub_garbage_coll(r, files, cachedir, "/");
   
       if (cmp_long61(&curbytes, &cachesize) < 0L) {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -                         "proxy GC: Cache is %ld%% full (nothing deleted)",
  -                         (long)(((curbytes.upper<<20)|(curbytes.lower>>10))*100/conf->space));
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "proxy GC: Cache is %ld%% full (nothing deleted)",
  +                     (long)(((curbytes.upper << 20) | (curbytes.lower >> 10)) * 100 / conf->space));
           ap_unblock_alarms();
           return;
       }
  @@ -385,7 +384,7 @@
       for (i = 0; i < files->nelts; i++) {
           fent = &((struct gc_ent *) files->elts)[i];
           sprintf(filename, "%s%s", cachedir, fent->file);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "GC Unlinking %s (expiry %ld, garbage_now %ld)", filename, (long)fent->expire, (long)garbage_now);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "GC Unlinking %s (expiry %ld, garbage_now %ld)", filename, (long)fent->expire, (long)garbage_now);
   #if TESTING
           fprintf(stderr, "Would unlink %s\n", filename);
   #else
  @@ -403,16 +402,16 @@
           }
       }
   
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -                         "proxy GC: Cache is %ld%% full (%d deleted)",
  -                         (long)(((curbytes.upper<<20)|(curbytes.lower>>10))*100/conf->space), i);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                 "proxy GC: Cache is %ld%% full (%d deleted)",
  +                 (long)(((curbytes.upper << 20) | (curbytes.lower >> 10)) * 100 / conf->space), i);
       ap_unblock_alarms();
   }
   
   static int sub_garbage_coll(request_rec *r, array_header *files,
                             const char *cachebasedir, const char *cachesubdir)
   {
  -    char line[17*(3)];
  +    char line[17 * (3)];
       char cachedir[HUGE_STRING_LEN];
       struct stat buf;
       int fd, i;
  @@ -428,7 +427,7 @@
   
       ap_snprintf(cachedir, sizeof(cachedir), "%s%s", cachebasedir, cachesubdir);
       filename = ap_palloc(r->pool, strlen(cachedir) + HASH_LEN + 2);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "GC Examining directory %s", cachedir);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "GC Examining directory %s", cachedir);
       dir = opendir(cachedir);
       if (dir == NULL) {
           ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  @@ -440,7 +439,7 @@
           if (ent->d_name[0] == '.')
               continue;
           sprintf(filename, "%s%s", cachedir, ent->d_name);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "GC Examining file %s", filename);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "GC Examining file %s", filename);
   /* is it a temporary file? */
           if (strncmp(ent->d_name, "tmp", 3) == 0) {
   /* then stat it to see how old it is; delete temporary files > 1 day old */
  @@ -451,9 +450,9 @@
               }
               else if (garbage_now != -1 && buf.st_atime < garbage_now - SEC_ONE_DAY &&
                        buf.st_mtime < garbage_now - SEC_ONE_DAY) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "GC unlink %s", filename);
  -                ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, r->server,
  -                             "proxy gc: deleting orphaned cache file %s", filename);
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "GC unlink %s", filename);
  +                ap_log_error(APLOG_MARK, APLOG_INFO | APLOG_NOERRNO, r->server,
  +                     "proxy gc: deleting orphaned cache file %s", filename);
   #if TESTING
                   fprintf(stderr, "Would unlink %s\n", filename);
   #else
  @@ -465,7 +464,7 @@
           ++nfiles;
   /* is it another file? */
           /* FIXME: Shouldn't any unexpected files be deleted? */
  -        /*      if (strlen(ent->d_name) != HASH_LEN) continue; */
  +        /* if (strlen(ent->d_name) != HASH_LEN) continue; */
   
   /* under OS/2 use dirent's d_attr to identify a diretory */
   /* under TPF use stat to identify a directory */
  @@ -474,122 +473,124 @@
   #ifdef OS2
           if (ent->d_attr & A_DIR) {
   #elif defined(TPF)
  -    if (stat(filename, &buf) == -1) {
  -        if (errno != ENOENT)
  -            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                 "proxy gc: stat(%s)", filename);
  -    }
  -    if (S_ISDIR(buf.st_mode)) {
  +            if (stat(filename, &buf) == -1) {
  +                if (errno != ENOENT)
  +                    ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                                 "proxy gc: stat(%s)", filename);
  +            }
  +            if (S_ISDIR(buf.st_mode)) {
   #endif
  -            char newcachedir[HUGE_STRING_LEN];
  -            ap_snprintf(newcachedir, sizeof(newcachedir),
  -                        "%s%s/", cachesubdir, ent->d_name);
  -            if (!sub_garbage_coll(r, files, cachebasedir, newcachedir)) {
  +                char newcachedir[HUGE_STRING_LEN];
                   ap_snprintf(newcachedir, sizeof(newcachedir),
  -                            "%s%s", cachedir, ent->d_name);
  +                            "%s%s/", cachesubdir, ent->d_name);
  +                if (!sub_garbage_coll(r, files, cachebasedir, newcachedir)) {
  +                    ap_snprintf(newcachedir, sizeof(newcachedir),
  +                                "%s%s", cachedir, ent->d_name);
   #if TESTING
  -                fprintf(stderr, "Would remove directory %s\n", newcachedir);
  +                    fprintf(stderr, "Would remove directory %s\n", newcachedir);
   #else
  -                rmdir(newcachedir);
  +                    rmdir(newcachedir);
   #endif
  -                --nfiles;
  +                    --nfiles;
  +                }
  +                continue;
               }
  -            continue;
  -        }
   #endif
   
   /* read the file */
   #if defined(WIN32)
  -        /* On WIN32 open does not work for directories, 
  -         * so we us stat instead of fstat to determine 
  -         * if the file is a directory 
  -         */
  -        if (stat(filename, &buf) == -1) {
  -            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                         "proxy gc: stat(%s)", filename);
  -            continue;
  -        }
  -        fd = -1;
  +            /*
  +             * On WIN32 open does not work for directories, so we us stat
  +             * instead of fstat to determine if the file is a directory
  +             */
  +            if (stat(filename, &buf) == -1) {
  +                ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                             "proxy gc: stat(%s)", filename);
  +                continue;
  +            }
  +            fd = -1;
   #else
  -        fd = open(filename, O_RDONLY | O_BINARY);
  -        if (fd == -1) {
  -            if (errno != ENOENT)
  +            fd = open(filename, O_RDONLY | O_BINARY);
  +            if (fd == -1) {
  +                if (errno != ENOENT)
  +                    ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                                 "proxy gc: open(%s)", filename);
  +                continue;
  +            }
  +            if (fstat(fd, &buf) == -1) {
                   ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                             "proxy gc: open(%s)", filename);
  -            continue;
  -        }
  -        if (fstat(fd, &buf) == -1) {
  -            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                         "proxy gc: fstat(%s)", filename);
  -            close(fd);
  -            continue;
  -        }
  +                             "proxy gc: fstat(%s)", filename);
  +                close(fd);
  +                continue;
  +            }
   #endif
   
   /* In OS/2 and TPF this has already been done above */
   #if !defined(OS2) && !defined(TPF)
  -        if (S_ISDIR(buf.st_mode)) {
  -            char newcachedir[HUGE_STRING_LEN];
  +            if (S_ISDIR(buf.st_mode)) {
  +                char newcachedir[HUGE_STRING_LEN];
   #if !defined(WIN32)
  -            /* Win32 used stat, no file to close */
  -            close(fd);
  +                /* Win32 used stat, no file to close */
  +                close(fd);
   #endif
  -            ap_snprintf(newcachedir, sizeof(newcachedir),
  -                        "%s%s/", cachesubdir, ent->d_name);
  -            if (!sub_garbage_coll(r, files, cachebasedir, newcachedir)) {
                   ap_snprintf(newcachedir, sizeof(newcachedir),
  -                            "%s%s", cachedir, ent->d_name);
  +                            "%s%s/", cachesubdir, ent->d_name);
  +                if (!sub_garbage_coll(r, files, cachebasedir, newcachedir)) {
  +                    ap_snprintf(newcachedir, sizeof(newcachedir),
  +                                "%s%s", cachedir, ent->d_name);
   #if TESTING
  -                fprintf(stderr, "Would remove directory %s\n", newcachedir);
  +                    fprintf(stderr, "Would remove directory %s\n", newcachedir);
   #else
  -                rmdir(newcachedir);
  +                    rmdir(newcachedir);
   #endif
  -                --nfiles;
  -            } else {
  -                /* Directory is not empty. Account for its size: */
  -                add_long61(&curbytes, ROUNDUP2BLOCKS(buf.st_size));
  +                    --nfiles;
  +                }
  +                else {
  +                    /* Directory is not empty. Account for its size: */
  +                    add_long61(&curbytes, ROUNDUP2BLOCKS(buf.st_size));
  +                }
  +                continue;
               }
  -            continue;
  -        }
   #endif
   
   #if defined(WIN32)
  -        /* Since we have determined above that the file is not a directory,
  -         * it should be safe to open it now 
  -         */
  -        fd = open(filename, O_RDONLY | O_BINARY);
  -        if (fd == -1) {
  -            if (errno != ENOENT)
  -                ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                             "proxy gc: open(%s) = %d", filename, errno);
  -            continue;
  -        }
  +            /*
  +             * Since we have determined above that the file is not a
  +             * directory, it should be safe to open it now
  +             */
  +            fd = open(filename, O_RDONLY | O_BINARY);
  +            if (fd == -1) {
  +                if (errno != ENOENT)
  +                    ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                                 "proxy gc: open(%s) = %d", filename, errno);
  +                continue;
  +            }
   #endif
  - 
  -        i = read(fd, line, 17*(3)-1);
  -        close(fd);
  -        if (i == -1) {
  -            ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  -                         "proxy gc: read(%s)", filename);
  -            continue;
  -        }
  -        line[i] = '\0';
  -        garbage_expire = ap_proxy_hex2sec(line + 17*(2));
  -        if (!ap_checkmask(line, "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&") ||
  -            garbage_expire == BAD_DATE) {
  -            /* bad file */
  -            if (garbage_now != -1 && buf.st_atime > garbage_now + SEC_ONE_DAY &&
  -                buf.st_mtime > garbage_now + SEC_ONE_DAY) {
  -                ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, r->server,
  -                             "proxy: deleting bad cache file with future date: %s", filename);
  +
  +            i = read(fd, line, 17 * (3) - 1);
  +            close(fd);
  +            if (i == -1) {
  +                ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
  +                             "proxy gc: read(%s)", filename);
  +                continue;
  +            }
  +            line[i] = '\0';
  +            garbage_expire = ap_proxy_hex2sec(line + 17 * (2));
  +            if (!ap_checkmask(line, "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&") ||
  +                garbage_expire == BAD_DATE) {
  +                /* bad file */
  +                if (garbage_now != -1 && buf.st_atime > garbage_now + SEC_ONE_DAY &&
  +                    buf.st_mtime > garbage_now + SEC_ONE_DAY) {
  +                    ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, r->server,
  +                                 "proxy: deleting bad cache file with future date: %s", filename);
   #if TESTING
  -                fprintf(stderr, "Would unlink bad file %s\n", filename);
  +                    fprintf(stderr, "Would unlink bad file %s\n", filename);
   #else
  -                unlink(filename);
  +                    unlink(filename);
   #endif
  +                }
  +                continue;
               }
  -            continue;
  -        }
   
   /*
    * we need to calculate an 'old' factor, and remove the 'oldest' files
  @@ -597,21 +598,21 @@
    * file.
    *
    */
  -        fent = (struct gc_ent *) ap_push_array(files);
  -        fent->len = buf.st_size;
  -        fent->expire = garbage_expire;
  -        strcpy(fent->file, cachesubdir);
  -        strcat(fent->file, ent->d_name);
  +            fent = (struct gc_ent *) ap_push_array(files);
  +            fent->len = buf.st_size;
  +            fent->expire = garbage_expire;
  +            strcpy(fent->file, cachesubdir);
  +            strcat(fent->file, ent->d_name);
   
   /* accumulate in blocks, to cope with directories > 4Gb */
  -        add_long61(&curbytes, ROUNDUP2BLOCKS(buf.st_size));
  -    }
  +            add_long61(&curbytes, ROUNDUP2BLOCKS(buf.st_size));
  +        }
   
  -    closedir(dir);
  +        closedir(dir);
   
  -    return nfiles;
  +        return nfiles;
   
  -}
  +    }
   
   
   /*
  @@ -625,94 +626,89 @@
    * pointing at the start of the message body itself, ready to be
    * shipped to the client later on, if appropriate.
    */
  -static int rdcache(request_rec *r, BUFF *cachefp, cache_req *c)
  -{
  -    char urlbuff[HUGE_STRING_LEN], *strp;
  -    int len;
  -
  -    /* read the data from the cache file */
  -
  -    /* Format:
  -     *
  -     * The cache needs to keep track of the following information:
  -     * - Date, LastMod, Version, ReqTime, RespTime, ContentLength
  -     * - The original request headers (for Vary)
  -     * - The original response headers (for returning with a cached response)
  -     * - The body of the message
  -     *
  -     * date SP lastmod SP expire SP count SP request-time SP response-time SP content-lengthCRLF
  -     * (dates are stored as hex seconds since 1970)
  -     * Original URLCRLF
  -     * Original Request Headers
  -     * CRLF
  -     * Original Response Headers
  -     * CRLF
  -     * Body
  -     * 
  -     */
  -
  -    /* retrieve cachefile information values */
  -    len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  -    if (len == -1)
  -        return -1;
  -    if (len == 0 || urlbuff[len - 1] != '\n')
  -        return 0;
  -    urlbuff[len - 1] = '\0';
  -
  -    if (!ap_checkmask(urlbuff,
  -                   "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&"))
  -        return 0;
  -
  -    c->date = ap_proxy_hex2sec(urlbuff + 17*(0));
  -    c->lmod = ap_proxy_hex2sec(urlbuff + 17*(1));
  -    c->expire = ap_proxy_hex2sec(urlbuff + 17*(2));
  -    c->version = ap_proxy_hex2sec(urlbuff + 17*(3));
  -    c->req_time = ap_proxy_hex2sec(urlbuff + 17*(4));
  -    c->resp_time = ap_proxy_hex2sec(urlbuff + 17*(5));
  -    c->len = ap_proxy_hex2sec(urlbuff + 17*(6));
  -
  -    /* check that we have the same URL */
  -    len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  -    if (len == -1)
  -        return -1;
  -    if (len == 0 || strncmp(urlbuff, "X-URL: ", 7) != 0 ||
  -        urlbuff[len - 1] != '\n')
  -        return 0;
  -    urlbuff[len - 1] = '\0';
  -    if (strcmp(urlbuff + 7, c->url) != 0)
  -        return 0;
  -
  -    /* then the original request headers */
  -    c->req_hdrs = ap_proxy_read_headers(r, urlbuff, sizeof urlbuff, cachefp);
  -    if (c->req_hdrs == NULL)
  -        return -1;
  -
  -    /* then the original response headers */
  -    len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  -    if (len == -1)
  -        return -1;
  -    if (len == 0 || urlbuff[len - 1] != '\n')
  -        return 0;
  -    urlbuff[--len] = '\0';
  +    static int rdcache(request_rec *r, BUFF *cachefp, cache_req *c){
  +        char urlbuff[HUGE_STRING_LEN], *strp;
  +        int len;
  +
  +        /* read the data from the cache file */
  +
  +        /*
  +         * Format:
  +         * 
  +         * The cache needs to keep track of the following information: - Date,
  +         * LastMod, Version, ReqTime, RespTime, ContentLength - The original
  +         * request headers (for Vary) - The original response headers (for
  +         * returning with a cached response) - The body of the message
  +         * 
  +         * date SP lastmod SP expire SP count SP request-time SP response-time
  +         * SP content-lengthCRLF (dates are stored as hex seconds since 1970)
  +         * Original URLCRLF Original Request Headers CRLF Original Response
  +         * Headers CRLF Body
  +         * 
  +         */
   
  -    c->resp_line = ap_pstrdup(r->pool, urlbuff);
  -    strp = strchr(urlbuff, ' ');
  -    if (strp == NULL)
  -        return 0;
  +        /* retrieve cachefile information values */
  +            len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  +        if  (len == -1)
  +                return -1;
  +        if  (len == 0 || urlbuff[len - 1] != '\n')
  +                return 0;
  +            urlbuff[len - 1] = '\0';
  +
  +        if  (!ap_checkmask(urlbuff,
  +                               "&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&"))
  +                return 0;
  +
  +            c->date = ap_proxy_hex2sec(urlbuff + 17 * (0));
  +            c->lmod = ap_proxy_hex2sec(urlbuff + 17 * (1));
  +            c->expire = ap_proxy_hex2sec(urlbuff + 17 * (2));
  +            c->version = ap_proxy_hex2sec(urlbuff + 17 * (3));
  +            c->req_time = ap_proxy_hex2sec(urlbuff + 17 * (4));
  +            c->resp_time = ap_proxy_hex2sec(urlbuff + 17 * (5));
  +            c->len = ap_proxy_hex2sec(urlbuff + 17 * (6));
  +
  +        /* check that we have the same URL */
  +            len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  +        if  (len == -1)
  +                return -1;
  +        if  (len == 0 || strncmp(urlbuff, "X-URL: ", 7) != 0 ||
  +                 urlbuff[len - 1] != '\n')
  +                return 0;
  +            urlbuff[len - 1] = '\0';
  +        if  (strcmp(urlbuff + 7, c->url) != 0)
  +                return 0;
  +
  +        /* then the original request headers */
  +            c->req_hdrs = ap_proxy_read_headers(r, urlbuff, sizeof urlbuff, cachefp);
  +        if  (c->req_hdrs == NULL)
  +                return -1;
  +
  +        /* then the original response headers */
  +            len = ap_bgets(urlbuff, sizeof urlbuff, cachefp);
  +        if  (len == -1)
  +                return -1;
  +        if  (len == 0 || urlbuff[len - 1] != '\n')
  +                return 0;
  +            urlbuff[--len] = '\0';
  +
  +            c->resp_line = ap_pstrdup(r->pool, urlbuff);
  +            strp = strchr(urlbuff, ' ');
  +        if  (strp == NULL)
  +                return 0;
  +
  +            c->status = atoi(strp);
  +            c->hdrs = ap_proxy_read_headers(r, urlbuff, sizeof urlbuff, cachefp);
  +        if  (c->hdrs == NULL)
  +                return -1;
  +        if  (c->len != -1)      /* add a content-length header */
  +            if  (ap_table_get(c->hdrs, "Content-Length") == NULL) {
  +                ap_table_set(c->hdrs, "Content-Length",
  +                        ap_psprintf(r->pool, "%lu", (unsigned long)c->len));
  +            }
   
  -    c->status = atoi(strp);
  -    c->hdrs = ap_proxy_read_headers(r, urlbuff, sizeof urlbuff, cachefp);
  -    if (c->hdrs == NULL)
  -        return -1;
  -    if (c->len != -1)    /* add a content-length header */
  -        if (ap_table_get(c->hdrs, "Content-Length") == NULL) {
  -            ap_table_set(c->hdrs, "Content-Length",
  -                         ap_psprintf(r->pool, "%lu", (unsigned long)c->len));
  -        }
   
  -    
  -    return 1;
  -}
  +            return 1;
  +    }
   
   /*
    * Call this to check the possible conditional status of
  @@ -723,190 +719,191 @@
    *
    * We don't yet understand If-Range, but we will...
    */
  -int ap_proxy_cache_conditional(request_rec *r, cache_req *c, BUFF *cachefp)
  -{
  -    const char *etag, *wetag = NULL;
  +    int ap_proxy_cache_conditional(request_rec *r, cache_req *c, BUFF *cachefp){
  +        const char *etag, *wetag = NULL;
   
  -    /* get etag */
  -    if ((etag = ap_table_get(c->hdrs, "Etag"))) {
  -        wetag = ap_pstrcat(r->pool, "W/", etag, NULL);
  -    }
  +        /* get etag */
  +        if   ((etag = ap_table_get(c->hdrs, "Etag"))) {
  +            wetag = ap_pstrcat(r->pool, "W/", etag, NULL);
  +        }
  +
  +        /* check for If-Match, If-Unmodified-Since */
  +        while (1) {
  +
  +            /*
  +             * check If-Match and If-Unmodified-Since exist
  +             * 
  +             * If neither of these exist, the request is not conditional, and we
  +             * serve it normally
  +             */
  +            if (!c->im && BAD_DATE == c->ius) {
  +                break;
  +            }
   
  -    /* check for If-Match, If-Unmodified-Since */
  -    while (1) {
  +            /*
  +             * check If-Match
  +             * 
  +             * we check if the Etag on the cached file is in the list of Etags
  +             * in the If-Match field. The comparison must be a strong
  +             * comparison, so the Etag cannot be marked as weak. If the
  +             * comparision fails we return 412 Precondition Failed.
  +             * 
  +             * if If-Match is specified AND If-Match is not a "*" AND Etag is
  +             * missing or weak or not in the list THEN return 412
  +             * Precondition Failed
  +             */
  +
  +            if (c->im) {
  +                if (strcmp(c->im, "*") &&
  +                    (!etag || (strlen(etag) > 1 && 'W' == etag[0] && '/' == etag[1]) || !ap_proxy_liststr(c->im, etag, NULL))) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-Match specified, and it didn't - return 412");
  +                }
  +                else {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-Match specified, and it matched");
  +                    break;
  +                }
  +            }
  +
  +            /*
  +             * check If-Unmodified-Since
  +             * 
  +             * if If-Unmodified-Since is specified AND Last-Modified is
  +             * specified somewhere AND If-Unmodified-Since is in the past
  +             * compared to Last-Modified THEN return 412 Precondition Failed
  +             */
  +            if (BAD_DATE != c->ius && BAD_DATE != c->lmod) {
  +                if (c->ius < c->lmod) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-Unmodified-Since specified, but it wasn't - return 412");
  +                }
  +                else {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-Unmodified-Since specified, and it was unmodified");
  +                    break;
  +                }
  +            }
  +
  +            /* if cache file is being updated */
  +            if (c->origfp) {
  +                ap_proxy_write_headers(c, c->resp_line, c->hdrs);
  +                ap_proxy_send_fb(c->origfp, r, c, c->len, 1, IOBUFSIZE);
  +                ap_proxy_cache_tidy(c);
  +            }
  +            else
  +                ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
   
  -        /* check If-Match and If-Unmodified-Since exist
  -         *
  -         * If neither of these exist, the request is not conditional, and
  -         * we serve it normally
  -         */
  -        if (!c->im && BAD_DATE == c->ius) {
  -            break;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Use your cached copy, conditional precondition failed.");
  +            return HTTP_PRECONDITION_FAILED;
           }
   
  -        /* check If-Match
  -         *
  -         * we check if the Etag on the cached file is in the list of Etags
  -         * in the If-Match field. The comparison must be a strong comparison,
  -         * so the Etag cannot be marked as weak. If the comparision fails
  -         * we return 412 Precondition Failed.
  -         *
  -         * if If-Match is specified AND
  -         * If-Match is not a "*" AND
  -         * Etag is missing or weak or not in the list THEN
  -         * return 412 Precondition Failed
  -         */
   
  -        if (c->im) {
  -            if (strcmp(c->im, "*") &&
  -            (!etag || (strlen(etag) > 1 && 'W' == etag[0] && '/' == etag[1]) || !ap_proxy_liststr(c->im, etag, NULL))) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-Match specified, and it didn't - return 412");
  -            }
  -            else {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-Match specified, and it matched");
  +        /* check for If-None-Match, If-Modified-Since */
  +        while (1) {
  +
  +            /*
  +             * check for existance of If-None-Match and If-Modified-Since
  +             * 
  +             * if neither of these headers have been set, then the request is
  +             * not conditional, and we just send the cached response and be
  +             * done with it.
  +             */
  +            if (!c->inm && BAD_DATE == c->ims) {
                   break;
               }
  -        }
   
  -        /* check If-Unmodified-Since
  -         *
  -         * if If-Unmodified-Since is specified AND
  -         * Last-Modified is specified somewhere AND
  -         * If-Unmodified-Since is in the past compared to Last-Modified THEN
  -         * return 412 Precondition Failed
  -         */
  -        if (BAD_DATE != c->ius && BAD_DATE != c->lmod) {
  -            if (c->ius < c->lmod) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-Unmodified-Since specified, but it wasn't - return 412");
  +            /*
  +             * check If-None-Match
  +             * 
  +             * we check if the Etag on the cached file is in the list of Etags
  +             * in the If-None-Match field. The comparison must be a strong
  +             * comparison, so the Etag cannot be marked as weak. If the
  +             * comparision fails we return 412 Precondition Failed.
  +             * 
  +             * if If-None-Match is specified: if If-None-Match is a "*" THEN 304
  +             * else if Etag is specified AND we get a match THEN 304 else if
  +             * Weak Etag is specified AND we get a match THEN 304 else sent
  +             * the original object
  +             */
  +            if (c->inm) {
  +                if (!strcmp(c->inm, "*")) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-None-Match: * specified, return 304");
  +                }
  +                else if (etag && ap_proxy_liststr(c->inm, etag, NULL)) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-None-Match: specified and we got a strong match - return 304");
  +                }
  +                else if (wetag && ap_proxy_liststr(c->inm, wetag, NULL)) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-None-Match specified, and we got a weak match - return 304");
  +                }
  +                else
  +                    break;
  +            }
  +
  +            /*
  +             * check If-Modified-Since
  +             * 
  +             * if If-Modified-Since is specified AND Last-Modified is specified
  +             * somewhere: if last modification date is earlier than
  +             * If-Modified-Since THEN 304 else send the original object
  +             */
  +            if (BAD_DATE != c->ims && BAD_DATE != c->lmod) {
  +                if (c->ims >= c->lmod) {
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "If-Modified-Since specified and not modified, try return 304");
  +                }
  +                else
  +                    break;
               }
  -            else {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-Unmodified-Since specified, and it was unmodified");
  -                break;
  +
  +
  +            /* are we updating the cache file? */
  +            if (c->origfp) {
  +                ap_proxy_write_headers(c, c->resp_line, c->hdrs);
  +                ap_proxy_send_fb(c->origfp, r, c, c->len, 1, IOBUFSIZE);
  +                ap_proxy_cache_tidy(c);
               }
  -        }
  +            else
  +                ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
   
  -        /* if cache file is being updated */
  -        if (c->origfp) {
  -            ap_proxy_write_headers(c, c->resp_line, c->hdrs);
  -            ap_proxy_send_fb(c->origfp, r, c, c->len, 1, IOBUFSIZE);
  -            ap_proxy_cache_tidy(c);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Use local copy, cached file hasn't changed");
  +            return HTTP_NOT_MODIFIED;
           }
  -        else
  -            ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
   
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Use your cached copy, conditional precondition failed.");
  -        return HTTP_PRECONDITION_FAILED;
  -    }
   
  +        /* No conditional - just send it cousin! */
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Local copy modified, send it");
  +        r->status_line = strchr(c->resp_line, ' ') + 1;
  +        r->status = c->status;
   
  -    /* check for If-None-Match, If-Modified-Since */
  -    while (1) {
  +        /* Prepare and send headers to client */
  +        ap_overlap_tables(r->headers_out, c->hdrs, AP_OVERLAP_TABLES_SET);
  +        /* make sure our X-Cache header does not stomp on a previous header */
  +        ap_table_mergen(r->headers_out, "X-Cache", c->xcache);
   
  -        /* check for existance of If-None-Match and If-Modified-Since
  -         *
  -         * if neither of these headers have been set, then the request
  -         * is not conditional, and we just send the cached response and
  -         * be done with it.
  -         */
  -        if (!c->inm && BAD_DATE == c->ims) {
  -            break;
  -        }
  +        /* content type is already set in the headers */
  +        r->content_type = ap_table_get(r->headers_out, "Content-Type");
   
  -        /* check If-None-Match
  -         *
  -         * we check if the Etag on the cached file is in the list of Etags
  -         * in the If-None-Match field. The comparison must be a strong comparison,
  -         * so the Etag cannot be marked as weak. If the comparision fails
  -         * we return 412 Precondition Failed.
  -         *
  -         * if If-None-Match is specified:
  -         * if If-None-Match is a "*" THEN 304
  -         * else if Etag is specified AND we get a match THEN 304
  -         * else if Weak Etag is specified AND we get a match THEN 304
  -         * else sent the original object
  -         */
  -        if (c->inm) {
  -            if (!strcmp(c->inm, "*")) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-None-Match: * specified, return 304");
  -            }
  -            else if (etag && ap_proxy_liststr(c->inm, etag, NULL)) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-None-Match: specified and we got a strong match - return 304");
  -            }
  -            else if (wetag && ap_proxy_liststr(c->inm, wetag, NULL)) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-None-Match specified, and we got a weak match - return 304");
  -            }
  -            else
  -                break;
  -        }
  -
  -        /* check If-Modified-Since
  -         *
  -         * if If-Modified-Since is specified AND
  -         * Last-Modified is specified somewhere:
  -         * if last modification date is earlier than If-Modified-Since THEN 304
  -         * else send the original object
  -         */
  -        if (BAD_DATE != c->ims && BAD_DATE != c->lmod) {
  -            if (c->ims >= c->lmod) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "If-Modified-Since specified and not modified, try return 304");
  -            }
  -            else
  -                break;
  -        }
  +        /* cookies are special: they must not be merged (stupid browsers) */
  +        ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie");
  +        ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie2");
   
  +        ap_send_http_header(r);
   
  -        /* are we updating the cache file? */
  +        /* are we rewriting the cache file? */
           if (c->origfp) {
               ap_proxy_write_headers(c, c->resp_line, c->hdrs);
  -            ap_proxy_send_fb(c->origfp, r, c, c->len, 1, IOBUFSIZE);
  +            ap_proxy_send_fb(c->origfp, r, c, c->len, r->header_only, IOBUFSIZE);
               ap_proxy_cache_tidy(c);
  +            return OK;
           }
  -        else
  -            ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  -
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Use local copy, cached file hasn't changed");
  -        return HTTP_NOT_MODIFIED;
  -    }
   
  +        /* no, we not */
  +        if (!r->header_only) {
  +            ap_proxy_send_fb(cachefp, r, NULL, c->len, 0, IOBUFSIZE);
  +        }
  +        else {
  +            ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  +        }
   
  -    /* No conditional - just send it cousin! */
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Local copy modified, send it");
  -    r->status_line = strchr(c->resp_line, ' ') + 1;
  -    r->status = c->status;
  -
  -    /* Prepare and send headers to client */
  -    ap_overlap_tables(r->headers_out, c->hdrs, AP_OVERLAP_TABLES_SET);
  -    /* make sure our X-Cache header does not stomp on a previous header */
  -    ap_table_mergen(r->headers_out, "X-Cache", c->xcache);
  -
  -    /* content type is already set in the headers */
  -    r->content_type = ap_table_get(r->headers_out, "Content-Type");
  -
  -    /* cookies are special: they must not be merged (stupid browsers) */
  -    ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie");
  -    ap_proxy_table_unmerge(r->pool, r->headers_out, "Set-Cookie2");
  -
  -    ap_send_http_header(r);
  -
  -    /* are we rewriting the cache file? */
  -    if (c->origfp) {
  -        ap_proxy_write_headers(c, c->resp_line, c->hdrs);
  -        ap_proxy_send_fb(c->origfp, r, c, c->len, r->header_only, IOBUFSIZE);
  -        ap_proxy_cache_tidy(c);
           return OK;
       }
   
  -    /* no, we not */
  -    if (!r->header_only) {
  -        ap_proxy_send_fb(cachefp, r, NULL, c->len, 0, IOBUFSIZE);
  -    }
  -    else {
  -        ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  -    }
  -
  -    return OK;
  -}
  -
   
   /*
    * Call this to test for a resource in the cache
  @@ -922,80 +919,83 @@
    *         if last modified after if-modified-since then add
    *            last modified date to request
    */
  -int ap_proxy_cache_check(request_rec *r, char *url, struct cache_conf *conf,
  -                      cache_req **cr)
  -{
  -    const char *datestr, *pragma_req = NULL, *pragma_cresp = NULL, *cc_req = NULL, *cc_cresp = NULL, *vary = NULL;
  -    cache_req *c;
  -    time_t now;
  -    BUFF *cachefp;
  -    int i;
  -    void *sconf = r->server->module_config;
  -    proxy_server_conf *pconf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  -    const char *agestr = NULL;
  -    char *val;
  -    time_t age_c = 0;
  -    time_t age, maxage_req, maxage_cresp, maxage, smaxage, maxstale, minfresh;
  -
  -    c = ap_pcalloc(r->pool, sizeof(cache_req));
  -    *cr = c;
  -    c->req = r;
  -    c->url = ap_pstrdup(r->pool, url);
  -    c->filename = NULL;
  -    c->tempfile = NULL;
  -    c->fp = NULL;
  -    c->origfp = NULL;
  -    c->version = 0;
  -    c->len = -1;
  -    c->req_hdrs = NULL;   
  -    c->hdrs = NULL;
  -    c->xcache = NULL;
  -
  -    /* get the If-Modified-Since date of the request, if it exists */
  -    c->ims = BAD_DATE;
  -    datestr = ap_table_get(r->headers_in, "If-Modified-Since");
  -    if (datestr != NULL) {
  -        /* this may modify the value in the original table */
  -      datestr = ap_proxy_date_canon(r->pool, datestr);
  -      c->ims = ap_parseHTTPdate(datestr);
  -      if (c->ims == BAD_DATE)        /* bad or out of range date; remove it */
  -         ap_table_unset(r->headers_in, "If-Modified-Since");
  -    }
  +    int ap_proxy_cache_check(request_rec *r, char *url, struct cache_conf * conf,
  +                                 cache_req **cr){
  +        const char *datestr, *pragma_req = NULL, *pragma_cresp = NULL,
  +            *cc_req = NULL, *cc_cresp = NULL, *vary = NULL;
  +        cache_req *c;
  +        time_t now;
  +        BUFF *cachefp;
  +        int i;
  +        void *sconf = r->server->module_config;
  +        proxy_server_conf *pconf =
  +        (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
  +                          const char *agestr = NULL;
  +        char *val;
  +        time_t age_c = 0;
  +        time_t age, maxage_req, maxage_cresp, maxage, smaxage, maxstale,
  +               minfresh;
  +
  +               c = ap_pcalloc(r->pool, sizeof(cache_req));
  +              *cr = c;
  +               c->req = r;
  +               c->url = ap_pstrdup(r->pool, url);
  +               c->filename = NULL;
  +               c->tempfile = NULL;
  +               c->fp = NULL;
  +               c->origfp = NULL;
  +               c->version = 0;
  +               c->len = -1;
  +               c->req_hdrs = NULL;
  +               c->hdrs = NULL;
  +               c->xcache = NULL;
  +
  +        /* get the If-Modified-Since date of the request, if it exists */
  +               c->ims = BAD_DATE;
  +               datestr = ap_table_get(r->headers_in, "If-Modified-Since");
  +        if     (datestr != NULL) {
  +            /* this may modify the value in the original table */
  +            datestr = ap_proxy_date_canon(r->pool, datestr);
  +            c->ims = ap_parseHTTPdate(datestr);
  +            if (c->ims == BAD_DATE)     /* bad or out of range date; remove
  +                                         * it */
  +                ap_table_unset(r->headers_in, "If-Modified-Since");
  +        }
   
   /* get the If-Unmodified-Since date of the request, if it exists */
  -    c->ius = BAD_DATE;
  -    datestr = ap_table_get(r->headers_in, "If-Unmodified-Since");
  -    if (datestr != NULL) {
  -        /* this may modify the value in the original table */
  -      datestr = ap_proxy_date_canon(r->pool, datestr); 
  -      c->ius = ap_parseHTTPdate(datestr);
  -      if (c->ius == BAD_DATE) /* bad or out of range date; remove it */
  -          ap_table_unset(r->headers_in, "If-Unmodified-Since");
  -    }
  -     
  +            c->ius = BAD_DATE;
  +        datestr = ap_table_get(r->headers_in, "If-Unmodified-Since");
  +        if (datestr != NULL) {
  +            /* this may modify the value in the original table */
  +            datestr = ap_proxy_date_canon(r->pool, datestr);
  +            c->ius = ap_parseHTTPdate(datestr);
  +            if (c->ius == BAD_DATE)     /* bad or out of range date; remove
  +                                         * it */
  +                ap_table_unset(r->headers_in, "If-Unmodified-Since");
  +        }
  +
   /* get the If-Match of the request, if it exists */
  -    c->im = ap_table_get(r->headers_in, "If-Match");
  -     
  +        c->im = ap_table_get(r->headers_in, "If-Match");
  +
   /* get the If-None-Match of the request, if it exists */
  -    c->inm = ap_table_get(r->headers_in, "If-None-Match");
  +        c->inm = ap_table_get(r->headers_in, "If-None-Match");
   
   /* find the filename for this cache entry */
  -    if (conf->root != NULL) {
  -        char hashfile[66];
  -        ap_proxy_hash(url, hashfile, pconf->cache.dirlevels, pconf->cache.dirlength);
  -      c->filename = ap_pstrcat(r->pool, conf->root, "/", hashfile, NULL);
  -    }
  -    else {
  -      c->filename = NULL;
  -      c->fp = NULL;
  -      ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "No CacheRoot, so no caching. Declining.");
  -      return DECLINED;
  -    }
  +        if (conf->root != NULL) {
  +            char hashfile[66];
  +            ap_proxy_hash(url, hashfile, pconf->cache.dirlevels, pconf->cache.dirlength);
  +            c->filename = ap_pstrcat(r->pool, conf->root, "/", hashfile, NULL);
  +        }
  +        else {
  +            c->filename = NULL;
  +            c->fp = NULL;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "No CacheRoot, so no caching. Declining.");
  +            return DECLINED;
  +        }
   
   /* find certain cache controlling headers */
  -    pragma_req = ap_table_get(r->headers_in, "Pragma");
  -    cc_req = ap_table_get(r->headers_in, "Cache-Control");
  +        pragma_req = ap_table_get(r->headers_in, "Pragma");
  +        cc_req = ap_table_get(r->headers_in, "Cache-Control");
   
   /* first things first - does the request allow us to return
    * cached information at all? If not, just decline the request.
  @@ -1010,277 +1010,291 @@
    * we are not supposed to store this request at all. Behave as a tunnel.
    *
    */
  -    if (ap_proxy_liststr(cc_req, "no-store", NULL)) {
  +        if (ap_proxy_liststr(cc_req, "no-store", NULL)) {
   
   /* delete the previously cached file */
  -      if (c->filename)
  -          unlink(c->filename);
  -      c->fp = NULL;
  -      c->filename = NULL;
  -      ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "no-store forbids caching. Declining.");
  -      return DECLINED;
  -    }
  +            if (c->filename)
  +                unlink(c->filename);
  +            c->fp = NULL;
  +            c->filename = NULL;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "no-store forbids caching. Declining.");
  +            return DECLINED;
  +        }
   
   /* if the cache file exists, open it */
  -    cachefp = NULL;
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Request for %s, pragma_req=%s, ims=%ld", url,
  -             pragma_req, c->ims);
  +        cachefp = NULL;
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Request for %s, pragma_req=%s, ims=%ld", url,
  +                     pragma_req, c->ims);
   /* find out about whether the request can access the cache */
  -    if (c->filename != NULL && r->method_number == M_GET &&
  -        strlen(url) < 1024 ) {
  -      cachefp = ap_proxy_open_cachefile(r, c->filename); 
  -    }
  +        if (c->filename != NULL && r->method_number == M_GET &&
  +            strlen(url) < 1024) {
  +            cachefp = ap_proxy_open_cachefile(r, c->filename);
  +        }
   
   
  -    /* if a cache file exists, try reading body and headers from cache file */
  -    if (cachefp != NULL) {
  -        i = rdcache(r, cachefp, c);
  -        if (i == -1)
  -            ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                         "proxy: error reading cache file %s", 
  -                         c->filename);
  -        else if (i == 0)
  -            ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r,
  +        /*
  +         * if a cache file exists, try reading body and headers from cache
  +         * file
  +         */
  +        if (cachefp != NULL) {
  +            i = rdcache(r, cachefp, c);
  +            if (i == -1)
  +                ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  +                              "proxy: error reading cache file %s",
  +                              c->filename);
  +            else if (i == 0)
  +                ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, r,
                            "proxy: bad (short?) cache file: %s", c->filename);
  -        if (i != 1) {
  -            ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  -            cachefp = NULL;
  -        }
  -        if (c->hdrs) {
  -            cc_cresp = ap_table_get(c->hdrs, "Cache-Control");
  -            pragma_cresp = ap_table_get(c->hdrs, "Pragma");
  -            vary = ap_table_get(c->hdrs, "Vary");
  -            if ((agestr = ap_table_get(c->hdrs, "Age"))) {
  -                age_c = atoi(agestr);
  +            if (i != 1) {
  +                ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  +                cachefp = NULL;
  +            }
  +            if (c->hdrs) {
  +                cc_cresp = ap_table_get(c->hdrs, "Cache-Control");
  +                pragma_cresp = ap_table_get(c->hdrs, "Pragma");
  +                vary = ap_table_get(c->hdrs, "Vary");
  +                if ((agestr = ap_table_get(c->hdrs, "Age"))) {
  +                    age_c = atoi(agestr);
  +                }
               }
           }
  -    }
   
  -    /* if a cache file does not exist, create empty header array */
  +        /* if a cache file does not exist, create empty header array */
   /* fixed?  in this case, we want to get the headers from the remote server
      it will be handled later if we don't do this (I hope ;-)
   
       if (cachefp == NULL)
           c->hdrs = ap_make_table(r->pool, 20);
   */
  -    /* FIXME: Shouldn't we check the URL somewhere? */
  -
  -    /* Check Content-Negotiation - Vary
  -     *
  -     * At this point we need to make sure that the object we found in the cache
  -     * is the same object that would be delivered to the client, when the
  -     * effects of content negotiation are taken into effect.
  -     *
  -     * In plain english, we want to make sure that a language-negotiated
  -     * document in one language is not given to a client asking for a
  -     * language negotiated document in a different language by mistake.
  -     *
  -     * RFC2616 13.6 and 14.44 describe the Vary mechanism.
  -     */
  -    if (c->hdrs && c->req_hdrs) {
  -        char *vary = ap_pstrdup(r->pool, ap_table_get(c->hdrs, "Vary"));
  -
  -        while (vary && *vary) {
  -            char *name = vary;
  -            const char *h1, *h2;
  -
  -            /* isolate header name */
  -            while (*vary && !ap_isspace(*vary) && (*vary != ','))
  -                ++vary;
  -            while (*vary && (ap_isspace(*vary) || (*vary == ','))) {
  -                *vary = '\0';
  -                ++vary;
  -            }
  -
  -            /* is this header in the request and the header in the cached
  -             * request identical? If not, we give up and do a straight get */
  -            h1 = ap_table_get(r->headers_in, name);
  -            h2 = ap_table_get(c->req_hdrs, name);
  -            if (h1 == h2) {
  -                /* both headers NULL, so a match - do nothing */
  -            }
  -            else if (h1 && h2 && !strcmp(h1, h2)) {
  -                /* both headers exist and are equal - do nothing */
  -            }
  -            else {
  -
  -                /* headers do not match, so Vary failed */
  -                c->fp = cachefp;
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Vary header mismatch - object must be fetched from scratch. Declining.");
  -                return DECLINED;
  -            }
  -        }
  -    }
  +        /* FIXME: Shouldn't we check the URL somewhere? */
   
  +        /*
  +         * Check Content-Negotiation - Vary
  +         * 
  +         * At this point we need to make sure that the object we found in the
  +         * cache is the same object that would be delivered to the client,
  +         * when the effects of content negotiation are taken into effect.
  +         * 
  +         * In plain english, we want to make sure that a language-negotiated
  +         * document in one language is not given to a client asking for a
  +         * language negotiated document in a different language by mistake.
  +         * 
  +         * RFC2616 13.6 and 14.44 describe the Vary mechanism.
  +         */
  +        if (c->hdrs && c->req_hdrs) {
  +            char *vary = ap_pstrdup(r->pool, ap_table_get(c->hdrs, "Vary"));
   
  -    /* We now want to check if our cached data is still fresh. This depends
  -     * on a few things, in this order:
  -     *
  -     * - RFC2616 14.9.4 End to end reload, Cache-Control: no-cache
  -     * no-cache in either the request or the cached response means that
  -     * we must revalidate the request unconditionally, overriding any
  -     * expiration mechanism. It's equivalent to max-age=0,must-revalidate.
  -     *
  -     * - RFC2616 14.32 Pragma: no-cache
  -     * This is treated the same as Cache-Control: no-cache.
  -     *
  -     * - RFC2616 14.9.3 Cache-Control: max-stale, must-revalidate, proxy-revalidate
  -     * if the max-stale request header exists, modify the stale calculations
  -     * below so that an object can be at most <max-stale> seconds stale before
  -     * we request a revalidation, _UNLESS_ a must-revalidate or
  -     * proxy-revalidate cached response header exists to stop us doing this.
  -     *
  -     * - RFC2616 14.9.3 Cache-Control: s-maxage
  -     * the origin server specifies the maximum age an object can be before
  -     * it is considered stale. This directive has the effect of proxy|must
  -     * revalidate, which in turn means simple ignore any max-stale setting.
  -     *
  -     * - RFC2616 14.9.4 Cache-Control: max-age
  -     * this header can appear in both requests and responses. If both are
  -     * specified, the smaller of the two takes priority.
  -     *
  -     * - RFC2616 14.21 Expires:
  -     * if this request header exists in the cached entity, and it's value is
  -     * in the past, it has expired.
  -     * 
  -     */
  +            while (vary && *vary) {
  +                char *name = vary;
  +                const char *h1, *h2;
  +
  +                /* isolate header name */
  +                while (*vary && !ap_isspace(*vary) && (*vary != ','))
  +                    ++vary;
  +                while (*vary && (ap_isspace(*vary) || (*vary == ','))) {
  +                    *vary = '\0';
  +                    ++vary;
  +                }
  +
  +                /*
  +                 * is this header in the request and the header in the cached
  +                 * request identical? If not, we give up and do a straight
  +                 * get
  +                 */
  +                h1 = ap_table_get(r->headers_in, name);
  +                h2 = ap_table_get(c->req_hdrs, name);
  +                if (h1 == h2) {
  +                    /* both headers NULL, so a match - do nothing */
  +                }
  +                else if (h1 && h2 && !strcmp(h1, h2)) {
  +                    /* both headers exist and are equal - do nothing */
  +                }
  +                else {
  +
  +                    /* headers do not match, so Vary failed */
  +                    c->fp = cachefp;
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Vary header mismatch - object must be fetched from scratch. Declining.");
  +                    return DECLINED;
  +                }
  +            }
  +        }
  +
  +
  +        /*
  +         * We now want to check if our cached data is still fresh. This
  +         * depends on a few things, in this order:
  +         * 
  +         * - RFC2616 14.9.4 End to end reload, Cache-Control: no-cache no-cache
  +         * in either the request or the cached response means that we must
  +         * revalidate the request unconditionally, overriding any expiration
  +         * mechanism. It's equivalent to max-age=0,must-revalidate.
  +         * 
  +         * - RFC2616 14.32 Pragma: no-cache This is treated the same as
  +         * Cache-Control: no-cache.
  +         * 
  +         * - RFC2616 14.9.3 Cache-Control: max-stale, must-revalidate,
  +         * proxy-revalidate if the max-stale request header exists, modify
  +         * the stale calculations below so that an object can be at most
  +         * <max-stale> seconds stale before we request a revalidation,
  +         * _UNLESS_ a must-revalidate or proxy-revalidate cached response
  +         * header exists to stop us doing this.
  +         * 
  +         * - RFC2616 14.9.3 Cache-Control: s-maxage the origin server specifies
  +         * the maximum age an object can be before it is considered stale.
  +         * This directive has the effect of proxy|must revalidate, which in
  +         * turn means simple ignore any max-stale setting.
  +         * 
  +         * - RFC2616 14.9.4 Cache-Control: max-age this header can appear in
  +         * both requests and responses. If both are specified, the smaller of
  +         * the two takes priority.
  +         * 
  +         * - RFC2616 14.21 Expires: if this request header exists in the cached
  +         * entity, and it's value is in the past, it has expired.
  +         * 
  +         */
   
  -    /* calculate age of object */
  -    age = ap_proxy_current_age(c, age_c);
  +        /* calculate age of object */
  +        age = ap_proxy_current_age(c, age_c);
   
  -    /* extract s-maxage */
  -    if (cc_cresp && ap_proxy_liststr(cc_cresp, "s-maxage", &val))
  -        smaxage = atoi(val);
  -    else
  -        smaxage = -1;
  +        /* extract s-maxage */
  +        if (cc_cresp && ap_proxy_liststr(cc_cresp, "s-maxage", &val))
  +            smaxage = atoi(val);
  +        else
  +            smaxage = -1;
   
  -    /* extract max-age from request */
  -    if (cc_req && ap_proxy_liststr(cc_req, "max-age", &val))
  -        maxage_req =  atoi(val);
  -    else
  -        maxage_req = -1;
  +        /* extract max-age from request */
  +        if (cc_req && ap_proxy_liststr(cc_req, "max-age", &val))
  +            maxage_req = atoi(val);
  +        else
  +            maxage_req = -1;
   
  -    /* extract max-age from response */
  -    if (cc_cresp && ap_proxy_liststr(cc_cresp, "max-age", &val))
  -        maxage_cresp =  atoi(val);
  -    else
  -        maxage_cresp = -1;
  +        /* extract max-age from response */
  +        if (cc_cresp && ap_proxy_liststr(cc_cresp, "max-age", &val))
  +            maxage_cresp = atoi(val);
  +        else
  +            maxage_cresp = -1;
   
  -    /* if both maxage request and response, the smaller one takes priority */
  -    if (-1 == maxage_req)
  -        maxage = maxage_cresp;
  -    else if (-1 == maxage_cresp)
  -        maxage = maxage_req;
  -    else
  -        maxage = MIN(maxage_req, maxage_cresp);
  +        /*
  +         * if both maxage request and response, the smaller one takes
  +         * priority
  +         */
  +        if (-1 == maxage_req)
  +            maxage = maxage_cresp;
  +        else if (-1 == maxage_cresp)
  +            maxage = maxage_req;
  +        else
  +            maxage = MIN(maxage_req, maxage_cresp);
   
  -    /* extract max-stale */
  -    if (cc_req && ap_proxy_liststr(cc_req, "max-stale", &val))
  -        maxstale =  atoi(val);
  -    else
  -        maxstale = 0;
  +        /* extract max-stale */
  +        if (cc_req && ap_proxy_liststr(cc_req, "max-stale", &val))
  +            maxstale = atoi(val);
  +        else
  +            maxstale = 0;
   
  -    /* extract min-fresh */
  -    if (cc_req && ap_proxy_liststr(cc_req, "min-fresh", &val))
  -        minfresh =  atoi(val);
  -    else
  -        minfresh = 0;
  +        /* extract min-fresh */
  +        if (cc_req && ap_proxy_liststr(cc_req, "min-fresh", &val))
  +            minfresh = atoi(val);
  +        else
  +            minfresh = 0;
   
  -    /* override maxstale if must-revalidate or proxy-revalidate */
  -    if (maxstale && ( (cc_cresp && ap_proxy_liststr(cc_cresp, "must-revalidate", NULL)) || (cc_cresp && ap_proxy_liststr(cc_cresp, "proxy-revalidate", NULL)) ))
  -        maxstale = 0;
  +        /* override maxstale if must-revalidate or proxy-revalidate */
  +        if (maxstale && ((cc_cresp && ap_proxy_liststr(cc_cresp, "must-revalidate", NULL)) || (cc_cresp && ap_proxy_liststr(cc_cresp, "proxy-revalidate", NULL))))
  +            maxstale = 0;
   
  -    now = time(NULL);
  -    if (cachefp != NULL &&
  +        now = time(NULL);
  +        if (cachefp != NULL &&
   
           /* handle no-cache */
  -        !( (cc_req && ap_proxy_liststr(cc_req, "no-cache", NULL)) ||
  -          (pragma_req && ap_proxy_liststr(pragma_req, "no-cache", NULL)) ||
  -          (cc_cresp && ap_proxy_liststr(cc_cresp, "no-cache", NULL)) ||
  -          (pragma_cresp && ap_proxy_liststr(pragma_cresp, "no-cache", NULL)) ) &&
  +            !((cc_req && ap_proxy_liststr(cc_req, "no-cache", NULL)) ||
  +           (pragma_req && ap_proxy_liststr(pragma_req, "no-cache", NULL)) ||
  +              (cc_cresp && ap_proxy_liststr(cc_cresp, "no-cache", NULL)) ||
  +              (pragma_cresp && ap_proxy_liststr(pragma_cresp, "no-cache", NULL))) &&
   
           /* handle expiration */
  -        ( (-1 < smaxage && age < (smaxage - minfresh)) ||
  -          (-1 < maxage && age < (maxage + maxstale - minfresh)) ||
  -          (c->expire != BAD_DATE && age < (c->expire - c->date + maxstale - minfresh)) )
  +            ((-1 < smaxage && age < (smaxage - minfresh)) ||
  +             (-1 < maxage && age < (maxage + maxstale - minfresh)) ||
  +             (c->expire != BAD_DATE && age < (c->expire - c->date + maxstale - minfresh)))
  +            ) {
   
  -        ) {
  +            /* it's fresh darlings... */
   
  -        /* it's fresh darlings... */
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Unexpired data available");
   
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Unexpired data available");
  +            /* set age header on response */
  +            ap_table_set(c->hdrs, "Age",
  +                         ap_psprintf(r->pool, "%lu", (unsigned long)age));
   
  -        /* set age header on response */
  -        ap_table_set(c->hdrs, "Age",
  -                        ap_psprintf(r->pool, "%lu", (unsigned long)age));
  +            /* add warning if maxstale overrode freshness calculation */
  +            if (!((-1 < smaxage && age < smaxage) ||
  +                  (-1 < maxage && age < maxage) ||
  +                  (c->expire != BAD_DATE && (c->expire - c->date) > age))) {
  +                /* make sure we don't stomp on a previous warning */
  +                ap_table_merge(c->hdrs, "Warning", "110 Response is stale");
  +            }
   
  -        /* add warning if maxstale overrode freshness calculation */
  -        if (!( (-1 < smaxage && age < smaxage) ||
  -             (-1 < maxage && age < maxage) ||
  -             (c->expire != BAD_DATE && (c->expire - c->date) > age) )) {
  -            /* make sure we don't stomp on a previous warning */
  -            ap_table_merge(c->hdrs, "Warning", "110 Response is stale");
  -        }
  +            /* check conditionals (If-Modified-Since, etc) */
  +            c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), NULL);
  +            return ap_proxy_cache_conditional(r, c, cachefp);
   
  -        /* check conditionals (If-Modified-Since, etc) */
  -        c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), NULL);
  -        return ap_proxy_cache_conditional(r, c, cachefp);
   
  +        }
   
  -    }
  +        /*
  +         * at this point we have determined our cached data needs
  +         * revalidation but first - we check 1 thing:
  +         * 
  +         * RFC2616 14.9.4 - if "only-if-cached" specified, send a 504 Gateway
  +         * Timeout - we're not allowed to revalidate the object
  +         */
  +        if (ap_proxy_liststr(cc_req, "only-if-cached", NULL)) {
  +            if (cachefp)
  +                ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  +            return HTTP_GATEWAY_TIME_OUT;
  +        }
   
  -    /* at this point we have determined our cached data needs revalidation
  -     * but first - we check 1 thing:
  -     *
  -     * RFC2616 14.9.4 - if "only-if-cached" specified, send a
  -     * 504 Gateway Timeout - we're not allowed to revalidate the object
  -     */
  -    if (ap_proxy_liststr(cc_req, "only-if-cached", NULL)) {
  -        if (cachefp)
  -            ap_pclosef(r->pool, ap_bfileno(cachefp, B_WR));
  -        return HTTP_GATEWAY_TIME_OUT;
  -    }
   
  +        /*
  +         * If we already have cached data and a last-modified date, and it is
  +         * not a head request, then add an If-Modified-Since.
  +         * 
  +         * If we also have an Etag, then the object must have come from an
  +         * HTTP/1.1 server. Add an If-None-Match as well.
  +         * 
  +         * See RFC2616 13.3.4
  +         */
   
  -    /* If we already have cached data and a last-modified date, and it is
  -     * not a head request, then add an If-Modified-Since.
  -     *
  -     * If we also have an Etag, then the object must have come from
  -     * an HTTP/1.1 server. Add an If-None-Match as well.
  -     *
  -     * See RFC2616 13.3.4
  -     */
  +        if (cachefp != NULL && !r->header_only) {
   
  -    if (cachefp != NULL && !r->header_only) {
  +            const char *etag = ap_table_get(c->hdrs, "Etag");
   
  -        const char *etag = ap_table_get(c->hdrs, "Etag");
  +            /* If-Modified-Since */
  +            if (c->lmod != BAD_DATE) {
  +                /*
  +                 * use the later of the one from the request and the
  +                 * last-modified date from the cache
  +                 */
  +                if (c->ims == BAD_DATE || c->ims < c->lmod) {
  +                    const char *q;
   
  -        /* If-Modified-Since */
  -        if (c->lmod != BAD_DATE) {
  -            /* use the later of the one from the request and the last-modified date
  -             * from the cache */
  -            if (c->ims == BAD_DATE || c->ims < c->lmod) {
  -                const char *q;
  +                    if ((q = ap_table_get(c->hdrs, "Last-Modified")) != NULL)
  +                        ap_table_set(r->headers_in, "If-Modified-Since", (char *)q);
  +                }
  +            }
   
  -                if ((q = ap_table_get(c->hdrs, "Last-Modified")) != NULL)
  -                    ap_table_set(r->headers_in, "If-Modified-Since", (char *) q);
  +            /* If-None-Match */
  +            if (etag) {
  +                ap_table_set(r->headers_in, "If-None-Match", etag);
               }
  -        }
   
  -        /* If-None-Match */
  -        if (etag) {
  -            ap_table_set(r->headers_in, "If-None-Match", etag);
           }
   
  -    }
  -
   
  -    c->fp = cachefp;
  +        c->fp = cachefp;
   
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Local copy not present or expired. Declining.");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Local copy not present or expired. Declining.");
   
  -    return DECLINED;
  -}
  +        return DECLINED;
  +    }
   
   /*
    * Having read the response from the client, decide what to do
  @@ -1294,168 +1308,183 @@
    *  from the cache, maybe updating the header line
    *  otherwise, delete the old cached file and open a new temporary file
    */
  -int ap_proxy_cache_update(cache_req *c, table *resp_hdrs,
  -                       const int is_HTTP1, int nocache)
  -{
  +    int ap_proxy_cache_update(cache_req *c, table *resp_hdrs,
  +                                  const int is_HTTP1, int nocache){
   #if defined(ULTRIX_BRAIN_DEATH) || defined(SINIX_D_RESOLVER_BUG)
  -  extern char *mktemp(char *template);
  -#endif 
  -    request_rec *r = c->req;
  -    char *p;
  -    const char *expire, *lmods, *dates, *clen;
  -    time_t expc, date, lmod, now;
  -    char buff[17*7+1];
  -    void *sconf = r->server->module_config;
  -    proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  -    const char *cc_resp;
  -    table *req_hdrs;
  -
  -    cc_resp = ap_table_get(resp_hdrs, "Cache-Control");
  -
  -    c->tempfile = NULL;
  -
  -    /* we've received the response from the origin server */
  -    
  -    /* read expiry date; if a bad date, then leave it so the client can
  -     * read it */
  -    expire = ap_table_get(resp_hdrs, "Expires");
  -    if (expire != NULL)
  -        expc = ap_parseHTTPdate(expire);
  -    else
  -        expc = BAD_DATE;
  +        extern char *mktemp(char *template);
  +#endif
  +        request_rec *r = c->req;
  +        char *p;
  +             const char *expire, *lmods, *dates, *clen;
  +        time_t expc, date, lmod, now;
  +        char buff[17 * 7 + 1];
  +        void *sconf = r->server->module_config;
  +        proxy_server_conf *conf =
  +        (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
  +                          const char *cc_resp;
  +        table *req_hdrs;
   
  -    /* read the last-modified date; if the date is bad, then delete it */
  -    lmods = ap_table_get(resp_hdrs, "Last-Modified");
  -    if (lmods != NULL) {
  -        lmod = ap_parseHTTPdate(lmods);
  -        if (lmod == BAD_DATE) {
  -            /* kill last modified date */
  -            lmods = NULL;
  +              cc_resp = ap_table_get(resp_hdrs, "Cache-Control");
  +
  +              c->tempfile = NULL;
  +
  +        /* we've received the response from the origin server */
  +
  +        /*
  +         * read expiry date; if a bad date, then leave it so the client can
  +         * read it
  +         */
  +              expire = ap_table_get(resp_hdrs, "Expires");
  +        if    (expire != NULL)
  +                  expc = ap_parseHTTPdate(expire);
  +        else
  +                  expc = BAD_DATE;
  +
  +        /* read the last-modified date; if the date is bad, then delete it */
  +              lmods = ap_table_get(resp_hdrs, "Last-Modified");
  +        if    (lmods != NULL) {
  +            lmod = ap_parseHTTPdate(lmods);
  +            if (lmod == BAD_DATE) {
  +                /* kill last modified date */
  +                lmods = NULL;
  +            }
           }
  -    }
  -    else
  -        lmod = BAD_DATE;
  +        else
  +                lmod = BAD_DATE;
   
   
  -    /*
  -     * what responses should we not cache?
  -     *
  -     * At this point we decide based on the response headers whether it
  -     * is appropriate _NOT_ to cache the data from the server. There are
  -     * a whole lot of conditions that prevent us from caching this data.
  -     * They are tested here one by one to be clear and unambiguous. */
  -
  -    /* RFC2616 13.4 we are allowed to cache 200, 203, 206, 300, 301 or 410
  -     * We don't cache 206, because we don't (yet) cache partial responses.
  -     * We include 304 Not Modified here too as this is the origin server
  -     * telling us to serve the cached copy. */
  -    if ((r->status != HTTP_OK && r->status != HTTP_NON_AUTHORITATIVE && r->status != HTTP_MULTIPLE_CHOICES && r->status != HTTP_MOVED_PERMANENTLY && r->status != HTTP_NOT_MODIFIED) ||
  -
  -    /* if a broken Expires header is present, don't cache it */
  -        (expire != NULL && expc == BAD_DATE) ||
  -
  -    /* if the server said 304 Not Modified but we have no cache file - pass
  -     * this untouched to the user agent, it's not for us. */
  -        (r->status == HTTP_NOT_MODIFIED && (c == NULL || c->fp == NULL)) ||
  -
  -    /* 200 OK response from HTTP/1.0 and up without a Last-Modified header */
  -        (r->status == HTTP_OK && lmods == NULL && is_HTTP1) ||
  -
  -    /* HEAD requests */
  -        r->header_only ||
  -
  -    /* RFC2616 14.9.2 Cache-Control: no-store response indicating do not
  -     * cache, or stop now if you are trying to cache it */
  -        ap_proxy_liststr(cc_resp, "no-store", NULL) ||
  -
  -    /* RFC2616 14.9.1 Cache-Control: private
  -     * this object is marked for this user's eyes only. Behave as a tunnel. */
  -        ap_proxy_liststr(cc_resp, "private", NULL) ||
  -
  -    /* RFC2616 14.8 Authorisation:
  -     * if authorisation is included in the request, we don't cache, but we
  -     * can cache if the following exceptions are true:
  -     * 1) If Cache-Control: s-maxage is included
  -     * 2) If Cache-Control: must-revalidate is included
  -     * 3) If Cache-Control: public is included
  -     */
  -        (ap_table_get(r->headers_in, "Authorization") != NULL
  +        /*
  +         * what responses should we not cache?
  +         * 
  +         * At this point we decide based on the response headers whether it is
  +         * appropriate _NOT_ to cache the data from the server. There are a
  +         * whole lot of conditions that prevent us from caching this data.
  +         * They are tested here one by one to be clear and unambiguous.
  +         */
   
  -        && !(ap_proxy_liststr(cc_resp, "s-maxage", NULL) || ap_proxy_liststr(cc_resp, "must-revalidate", NULL) || ap_proxy_liststr(cc_resp, "public", NULL))
  -        ) ||
  +        /*
  +         * RFC2616 13.4 we are allowed to cache 200, 203, 206, 300, 301 or
  +         * 410 We don't cache 206, because we don't (yet) cache partial
  +         * responses. We include 304 Not Modified here too as this is the
  +         * origin server telling us to serve the cached copy.
  +         */
  +        if ((r->status != HTTP_OK && r->status != HTTP_NON_AUTHORITATIVE && r->status != HTTP_MULTIPLE_CHOICES && r->status != HTTP_MOVED_PERMANENTLY && r->status != HTTP_NOT_MODIFIED) ||
   
  -    /* or we've been asked not to cache it above */
  -        nocache) {
  +        /* if a broken Expires header is present, don't cache it */
  +            (expire != NULL && expc == BAD_DATE) ||
   
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Response is not cacheable, unlinking %s", c->filename);
  +        /*
  +         * if the server said 304 Not Modified but we have no cache file -
  +         * pass this untouched to the user agent, it's not for us.
  +         */
  +         (r->status == HTTP_NOT_MODIFIED && (c == NULL || c->fp == NULL)) ||
   
  -        /* close the file */
  -        if (c->fp != NULL) {
  -            ap_pclosef(r->pool, ap_bfileno(c->fp, B_WR));
  -            c->fp = NULL;
  -        }
  +        /*
  +         * 200 OK response from HTTP/1.0 and up without a Last-Modified
  +         * header
  +         */
  +            (r->status == HTTP_OK && lmods == NULL && is_HTTP1) ||
   
  -        /* delete the previously cached file */
  -        if (c->filename)
  -            unlink(c->filename);
  -        return DECLINED;        /* send data to client but not cache */
  -    }
  +        /* HEAD requests */
  +            r->header_only ||
   
  +        /*
  +         * RFC2616 14.9.2 Cache-Control: no-store response indicating do not
  +         * cache, or stop now if you are trying to cache it
  +         */
  +            ap_proxy_liststr(cc_resp, "no-store", NULL) ||
   
  -    /* It's safe to cache the response.
  -     *
  -     * We now want to update the cache file header information with
  -     * the new date, last modified, expire and content length and write
  -     * it away to our cache file. First, we determine these values from
  -     * the response, using heuristics if appropriate.
  -     *
  -     * In addition, we make HTTP/1.1 age calculations and write them away
  -     * too.
  -     */
  +        /*
  +         * RFC2616 14.9.1 Cache-Control: private this object is marked for
  +         * this user's eyes only. Behave as a tunnel.
  +         */
  +            ap_proxy_liststr(cc_resp, "private", NULL) ||
   
  -    /* Read the date. Generate one if one is not supplied */
  -    dates = ap_table_get(resp_hdrs, "Date");
  -    if (dates != NULL)
  -        date = ap_parseHTTPdate(dates);
  -    else
  -        date = BAD_DATE;
  +        /*
  +         * RFC2616 14.8 Authorisation: if authorisation is included in the
  +         * request, we don't cache, but we can cache if the following
  +         * exceptions are true: 1) If Cache-Control: s-maxage is included 2)
  +         * If Cache-Control: must-revalidate is included 3) If Cache-Control:
  +         * public is included
  +         */
  +            (ap_table_get(r->headers_in, "Authorization") != NULL
   
  -    now = time(NULL);
  +             && !(ap_proxy_liststr(cc_resp, "s-maxage", NULL) || ap_proxy_liststr(cc_resp, "must-revalidate", NULL) || ap_proxy_liststr(cc_resp, "public", NULL))
  +             ) ||
   
  -    if (date == BAD_DATE) {     /* No, or bad date */
  +        /* or we've been asked not to cache it above */
  +            nocache) {
  +
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Response is not cacheable, unlinking %s", c->filename);
  +
  +            /* close the file */
  +            if (c->fp != NULL) {
  +                ap_pclosef(r->pool, ap_bfileno(c->fp, B_WR));
  +                c->fp = NULL;
  +            }
  +
  +            /* delete the previously cached file */
  +            if (c->filename)
  +                unlink(c->filename);
  +            return DECLINED;    /* send data to client but not cache */
  +        }
  +
  +
  +        /*
  +         * It's safe to cache the response.
  +         * 
  +         * We now want to update the cache file header information with the new
  +         * date, last modified, expire and content length and write it away
  +         * to our cache file. First, we determine these values from the
  +         * response, using heuristics if appropriate.
  +         * 
  +         * In addition, we make HTTP/1.1 age calculations and write them away
  +         * too.
  +         */
  +
  +        /* Read the date. Generate one if one is not supplied */
  +        dates = ap_table_get(resp_hdrs, "Date");
  +        if (dates != NULL)
  +            date = ap_parseHTTPdate(dates);
  +        else
  +            date = BAD_DATE;
  +
  +        now = time(NULL);
  +
  +        if (date == BAD_DATE) { /* No, or bad date */
   /* no date header! */
   /* add one; N.B. use the time _now_ rather than when we were checking the cache
    */
  -        date = now;
  -        dates = ap_gm_timestr_822(r->pool, now);
  -        ap_table_set(resp_hdrs, "Date", dates);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Added date header");
  -    }
  +            date = now;
  +            dates = ap_gm_timestr_822(r->pool, now);
  +            ap_table_set(resp_hdrs, "Date", dates);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Added date header");
  +        }
   
   /* set response_time for HTTP/1.1 age calculations */
  -    c->resp_time = now;
  +        c->resp_time = now;
   
   /* check last-modified date */
  -    if (lmod != BAD_DATE && lmod > date)
  +        if (lmod != BAD_DATE && lmod > date)
   /* if its in the future, then replace by date */
  -    {
  -        lmod = date;
  -        lmods = dates;
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Last modified is in the future, replacing with now");
  -    }
  +        {
  +            lmod = date;
  +            lmods = dates;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Last modified is in the future, replacing with now");
  +        }
   /* if the response did not contain the header, then use the cached version */
  -    if (lmod == BAD_DATE && c->fp != NULL) {
  -        lmod = c->lmod;
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Reusing cached last modified");
  -    }
  +        if (lmod == BAD_DATE && c->fp != NULL) {
  +            lmod = c->lmod;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Reusing cached last modified");
  +        }
   
   /* we now need to calculate the expire data for the object. */
  -    if (expire == NULL && c->fp != NULL) {     /* no expiry data sent in response */
  -        expire = ap_table_get(c->hdrs, "Expires");
  -        if (expire != NULL)
  -            expc = ap_parseHTTPdate(expire);
  -    }
  +        if (expire == NULL && c->fp != NULL) {  /* no expiry data sent in
  +                                                 * response */
  +            expire = ap_table_get(c->hdrs, "Expires");
  +            if (expire != NULL)
  +                expc = ap_parseHTTPdate(expire);
  +        }
   /* so we now have the expiry date */
   /* if no expiry date then
    *   if lastmod
  @@ -1463,44 +1492,44 @@
    *   else
    *      expire date = now + defaultexpire
    */
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Expiry date is %ld", (long)expc);
  -    if (expc == BAD_DATE) {
  -        if (lmod != BAD_DATE) {
  -            double x = (double) (date - lmod) * conf->cache.lmfactor;
  -            double maxex = conf->cache.maxexpire;
  -            if (x > maxex)
  -                x = maxex;
  -            expc = now + (int) x;
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Expiry date is %ld", (long)expc);
  +        if (expc == BAD_DATE) {
  +            if (lmod != BAD_DATE) {
  +                double x = (double)(date - lmod) * conf->cache.lmfactor;
  +                double maxex = conf->cache.maxexpire;
  +                if (x > maxex)
  +                    x = maxex;
  +                expc = now + (int)x;
  +            }
  +            else
  +                expc = now + conf->cache.defaultexpire;
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Expiry date calculated %ld", (long)expc);
           }
  -        else
  -            expc = now + conf->cache.defaultexpire;
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Expiry date calculated %ld", (long)expc);
  -    }
   
   /* get the content-length header */
  -    clen = ap_table_get(resp_hdrs, "Content-Length");
  -    if (clen == NULL)
  -        c->len = -1;
  -    else
  -        c->len = atoi(clen);
  +        clen = ap_table_get(resp_hdrs, "Content-Length");
  +        if (clen == NULL)
  +            c->len = -1;
  +        else
  +            c->len = atoi(clen);
   
   /* we have all the header information we need - write it to the cache file */
  -    c->version++;
  -    ap_proxy_sec2hex(date, buff + 17*(0));
  -    buff[17*(1)-1] = ' ';
  -    ap_proxy_sec2hex(lmod, buff + 17*(1));
  -    buff[17*(2)-1] = ' '; 
  -    ap_proxy_sec2hex(expc, buff + 17*(2));
  -    buff[17*(3)-1] = ' ';
  -    ap_proxy_sec2hex(c->version, buff + 17*(3));
  -    buff[17*(4)-1] = ' ';
  -    ap_proxy_sec2hex(c->req_time, buff + 17*(4));
  -    buff[17*(5)-1] = ' ';
  -    ap_proxy_sec2hex(c->resp_time, buff + 17*(5));
  -    buff[17*(6)-1] = ' '; 
  -    ap_proxy_sec2hex(c->len, buff + 17*(6));
  -    buff[17*(7)-1] = '\n';
  -    buff[17*(7)] = '\0';
  +        c->version++;
  +        ap_proxy_sec2hex(date, buff + 17 * (0));
  +        buff[17 * (1) - 1] = ' ';
  +        ap_proxy_sec2hex(lmod, buff + 17 * (1));
  +        buff[17 * (2) - 1] = ' ';
  +        ap_proxy_sec2hex(expc, buff + 17 * (2));
  +        buff[17 * (3) - 1] = ' ';
  +        ap_proxy_sec2hex(c->version, buff + 17 * (3));
  +        buff[17 * (4) - 1] = ' ';
  +        ap_proxy_sec2hex(c->req_time, buff + 17 * (4));
  +        buff[17 * (5) - 1] = ' ';
  +        ap_proxy_sec2hex(c->resp_time, buff + 17 * (5));
  +        buff[17 * (6) - 1] = ' ';
  +        ap_proxy_sec2hex(c->len, buff + 17 * (6));
  +        buff[17 * (7) - 1] = '\n';
  +        buff[17 * (7)] = '\0';
   
   /* Was the server response a 304 Not Modified?
    *
  @@ -1510,116 +1539,116 @@
    */
   
   /* if response from server 304 not modified */
  -      if (r->status == HTTP_NOT_MODIFIED) {
  +        if (r->status == HTTP_NOT_MODIFIED) {
   
   /* Have the headers changed?
    *
    * if not - we fulfil the request and return now.
    */
   
  -        if (c->hdrs) {
  -          if (!ap_proxy_table_replace(c->hdrs, resp_hdrs)) {
  -              c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), " (with revalidation)", NULL);
  -              return ap_proxy_cache_conditional(r, c, c->fp);
  +            if (c->hdrs) {
  +                if (!ap_proxy_table_replace(c->hdrs, resp_hdrs)) {
  +                    c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), " (with revalidation)", NULL);
  +                    return ap_proxy_cache_conditional(r, c, c->fp);
  +                }
               }
  -        }
  -        else
  -          c->hdrs = resp_hdrs;
  +            else
  +                c->hdrs = resp_hdrs;
   /* if we get here - the headers have changed. Go through the motions
    * of creating a new temporary cache file below, we'll then serve
    * the request like we would have in ap_proxy_cache_conditional()
    * above, and at the same time we will also rewrite the contents
    * to the new temporary file.
    */
  -      }
  +        }
   
  -/* 
  +/*
    * Ok - lets prepare and open the cached file
  - * 
  + *
    * If a cached file (in c->fp) is already open, then we want to
    * update that cached file. Copy the c->fp to c->origfp and open
    * up a new one.
  - *  
  + *
    * If the cached file (in c->fp) is NULL, we must open a new cached
    * file from scratch.
    *
    * The new cache file will be moved to it's final location in the
    * directory tree later, overwriting the old cache file should it exist.
  - */       
  + */
   
   /* if a cache file was already open */
  -    if (c->fp != NULL) {
  -      c->origfp = c->fp;
  -    }
  +        if (c->fp != NULL) {
  +            c->origfp = c->fp;
  +        }
   
  -    while (1) {
  +        while (1) {
   /* create temporary filename */
   #ifndef TPF
   #define TMPFILESTR    "/tmpXXXXXX"
  -      if (conf->cache.root == NULL) {
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  -      c->tempfile = ap_palloc(r->pool, strlen(conf->cache.root) + sizeof(TMPFILESTR));
  -      strcpy(c->tempfile, conf->cache.root);
  -      strcat(c->tempfile, TMPFILESTR);
  +            if (conf->cache.root == NULL) {
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
  +            c->tempfile = ap_palloc(r->pool, strlen(conf->cache.root) + sizeof(TMPFILESTR));
  +            strcpy(c->tempfile, conf->cache.root);
  +            strcat(c->tempfile, TMPFILESTR);
   #undef TMPFILESTR
  -      p = mktemp(c->tempfile);
  +            p = mktemp(c->tempfile);
   #else
  -      if (conf->cache.root == NULL) {
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  -      c->tempfile = ap_palloc(r->pool, strlen(conf->cache.root) +1+ L_tmpnam);
  -      strcpy(c->tempfile, conf->cache.root);
  -      strcat(c->tempfile, "/");
  -      p = tmpnam(NULL);
  -      strcat(c->tempfile, p);
  -#endif
  -      if (p == NULL) {
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  +            if (conf->cache.root == NULL) {
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
  +            c->tempfile = ap_palloc(r->pool, strlen(conf->cache.root) + 1 + L_tmpnam);
  +            strcpy(c->tempfile, conf->cache.root);
  +            strcat(c->tempfile, "/");
  +            p = tmpnam(NULL);
  +            strcat(c->tempfile, p);
  +#endif
  +            if (p == NULL) {
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
   
  -      ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Create temporary file %s", c->tempfile);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Create temporary file %s", c->tempfile);
   
   /* create the new file */
  -      c->fp = ap_proxy_create_cachefile(r, c->tempfile);
  -      if (NULL == c->fp) {
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  +            c->fp = ap_proxy_create_cachefile(r, c->tempfile);
  +            if (NULL == c->fp) {
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
   
   /* write away the cache header and the URL */
  -      if (ap_bvputs(c->fp, buff, "X-URL: ", c->url, "\n", NULL) == -1) {
  -          ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                       "proxy: error writing cache file(%s)", c->tempfile);
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  +            if (ap_bvputs(c->fp, buff, "X-URL: ", c->url, "\n", NULL) == -1) {
  +                ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  +                        "proxy: error writing cache file(%s)", c->tempfile);
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
   
   /* get original request headers */
  -      if (c->req_hdrs)
  -          req_hdrs = ap_copy_table(r->pool, c->req_hdrs);
  -      else
  -          req_hdrs = ap_copy_table(r->pool, r->headers_in);
  +            if (c->req_hdrs)
  +                req_hdrs = ap_copy_table(r->pool, c->req_hdrs);
  +            else
  +                req_hdrs = ap_copy_table(r->pool, r->headers_in);
   
   /* remove hop-by-hop headers */
  -      ap_proxy_clear_connection(r->pool, req_hdrs);
  +            ap_proxy_clear_connection(r->pool, req_hdrs);
   
   /* save original request headers */
  -      if (c->req_hdrs)
  -            ap_table_do(ap_proxy_send_hdr_line, c, c->req_hdrs, NULL);
  -      else
  -            ap_table_do(ap_proxy_send_hdr_line, c, r->headers_in, NULL);
  -      if (ap_bputs(CRLF, c->fp) == -1) {
  -          ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                      "proxy: error writing request headers terminating CRLF to %s", c->tempfile);
  -          c = ap_proxy_cache_error(c);
  -          break;
  -      }
  -      break;
  -    }
  +            if (c->req_hdrs)
  +                ap_table_do(ap_proxy_send_hdr_line, c, c->req_hdrs, NULL);
  +            else
  +                ap_table_do(ap_proxy_send_hdr_line, c, r->headers_in, NULL);
  +            if (ap_bputs(CRLF, c->fp) == -1) {
  +                ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  +                              "proxy: error writing request headers terminating CRLF to %s", c->tempfile);
  +                c = ap_proxy_cache_error(c);
  +                break;
  +            }
  +            break;
  +        }
   
   /* Was the server response a 304 Not Modified?
    *
  @@ -1629,39 +1658,38 @@
    */
   
   /* if response from server 304 not modified */
  -    if (r->status == HTTP_NOT_MODIFIED) {
  +        if (r->status == HTTP_NOT_MODIFIED) {
   
   /* fulfil the request */
  -      c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), " (with revalidation)", NULL);
  -      return ap_proxy_cache_conditional(r, c, c->fp);
  +            c->xcache = ap_pstrcat(r->pool, "HIT from ", ap_get_server_name(r), " (with revalidation)", NULL);
  +            return ap_proxy_cache_conditional(r, c, c->fp);
   
  +        }
  +        return DECLINED;
       }
  -    return DECLINED;
  -}
   
  -void ap_proxy_cache_tidy(cache_req *c)
  -{
  -    server_rec *s;
  -    long int bc;
  +    void ap_proxy_cache_tidy(cache_req *c){
  +        server_rec *s;
  +        long int bc;
   
  -    if (!c || !c->fp)
  -        return;
  +        if  (!c || !c->fp)
  +                return;
   
  -    s = c->req->server;
  +            s = c->req->server;
   
   /* don't care how much was sent, but rather how much was written to cache
       ap_bgetopt(c->req->connection->client, BO_BYTECT, &bc);
    */
  -    bc = c->written;
  +            bc = c->written;
   
  -    if (c->len != -1) {
  +        if  (c->len != -1) {
   /* file lengths don't match; don't cache it */
  -        if (bc != c->len) {
  -            ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));  /* no need to flush */
  -            unlink(c->tempfile);
  -            return;
  +            if (bc != c->len) {
  +                ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));      /* no need to flush */
  +                unlink(c->tempfile);
  +                return;
  +            }
           }
  -    }
   /* don't care if aborted, cache it if fully retrieved from host!
       else if (c->req->connection->aborted) {
           ap_pclosef(c->req->pool, c->fp->fd);    / no need to flush /
  @@ -1669,85 +1697,86 @@
           return;
       }
   */
  -    else {
  +        else {
   /* update content-length of file */
  -        char buff[17];
  -        off_t curpos;
  +            char buff[17];
  +            off_t curpos;
   
  -        c->len = bc;
  -        ap_bflush(c->fp);
  -        ap_proxy_sec2hex(c->len, buff);
  -        curpos = lseek(ap_bfileno(c->fp, B_WR), 17*6, SEEK_SET);
  -        if (curpos == -1)
  -            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                         "proxy: error seeking on cache file %s", c->tempfile);
  -        else if (write(ap_bfileno(c->fp, B_WR), buff, sizeof(buff) - 1) == -1)
  -            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                         "proxy: error updating cache file %s", c->tempfile);
  -    }
  -
  -    if (ap_bflush(c->fp) == -1) {
  -        ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                     "proxy: error writing to cache file %s",
  -                     c->tempfile);
  -        ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));
  -        unlink(c->tempfile);
  -        return;
  -    }
  +            c->len = bc;
  +            ap_bflush(c->fp);
  +            ap_proxy_sec2hex(c->len, buff);
  +            curpos = lseek(ap_bfileno(c->fp, B_WR), 17 * 6, SEEK_SET);
  +            if (curpos == -1)
  +                ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                      "proxy: error seeking on cache file %s", c->tempfile);
  +            else if (write(ap_bfileno(c->fp, B_WR), buff, sizeof(buff) - 1) == -1)
  +                ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                        "proxy: error updating cache file %s", c->tempfile);
  +        }
   
  -    if (ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR)) == -1) {
  -        ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                     "proxy: error closing cache file %s", c->tempfile);
  -        unlink(c->tempfile);
  -        return;
  -    }
  +        if (ap_bflush(c->fp) == -1) {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                         "proxy: error writing to cache file %s",
  +                         c->tempfile);
  +            ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));
  +            unlink(c->tempfile);
  +            return;
  +        }
   
  -    if (unlink(c->filename) == -1 && errno != ENOENT) {
  -        ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                     "proxy: error deleting old cache file %s",
  -                     c->tempfile);
  -    }
  -    else {
  -        char *p;
  -        proxy_server_conf *conf =
  -        (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
  +        if (ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR))== -1) {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                         "proxy: error closing cache file %s", c->tempfile);
  +            unlink(c->tempfile);
  +            return;
  +        }
   
  -        for (p = c->filename + strlen(conf->cache.root) + 1;;) {
  -            p = strchr(p, '/');
  -            if (!p)
  -                break;
  -            *p = '\0';
  +        if (unlink(c->filename) == -1 && errno != ENOENT) {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                         "proxy: error deleting old cache file %s",
  +                         c->tempfile);
  +        }
  +        else {
  +            char *p;
  +            proxy_server_conf *conf =
  +            (proxy_server_conf *)ap_get_module_config(s->module_config, &proxy_module);
  +
  +            for (p = c->filename + strlen(conf->cache.root) + 1;;) {
  +                p = strchr(p, '/');
  +                if (!p)
  +                    break;
  +                *p = '\0';
   #if defined(WIN32) || defined(NETWARE)
  -            if (mkdir(c->filename) < 0 && errno != EEXIST)
  +                if (mkdir(c->filename) < 0 && errno != EEXIST)
   #elif defined(__TANDEM)
  -            if (mkdir(c->filename, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST)
  +                    if (mkdir(c->filename, S_IRWXU | S_IRWXG | S_IRWXO) < 0 && errno != EEXIST)
   #else
  -            if (mkdir(c->filename, S_IREAD | S_IWRITE | S_IEXEC) < 0 && errno != EEXIST)
  -#endif /* WIN32 */
  +                if (mkdir(c->filename, S_IREAD | S_IWRITE | S_IEXEC) < 0 && errno != EEXIST)
  +#endif                          /* WIN32 */
  +                    ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                                 "proxy: error creating cache directory %s",
  +                                 c->filename);
  +                *p = '/';
  +                ++p;
  +            }
  +#if defined(OS2) || defined(WIN32) || defined(NETWARE) || defined(MPE)
  +            /* Under OS/2 use rename. */
  +            if (rename(c->tempfile, c->filename) == -1)
                   ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                             "proxy: error creating cache directory %s",
  -                             c->filename);
  -            *p = '/';
  -            ++p;
  +                             "proxy: error renaming cache file %s to %s",
  +                             c->tempfile, c->filename);
           }
  -#if defined(OS2) || defined(WIN32) || defined(NETWARE) || defined(MPE)
  -        /* Under OS/2 use rename. */
  -        if (rename(c->tempfile, c->filename) == -1)
  -            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                         "proxy: error renaming cache file %s to %s",
  -                         c->tempfile, c->filename);
  -    }
   #else
   
  -        if (link(c->tempfile, c->filename) == -1)
  -            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                         "proxy: error linking cache file %s to %s",
  -                         c->tempfile, c->filename);
  -    }
  +            if (link(c->tempfile, c->filename) == -1)
  +                ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                             "proxy: error linking cache file %s to %s",
  +                             c->tempfile, c->filename);
  +        }
   
  -    if (unlink(c->tempfile) == -1)
  -        ap_log_error(APLOG_MARK, APLOG_ERR, s,
  -                     "proxy: error deleting temp file %s", c->tempfile);
  +        if (unlink(c->tempfile) == -1)
  +            ap_log_error(APLOG_MARK, APLOG_ERR, s,
  +                         "proxy: error deleting temp file %s", c->tempfile);
   #endif
   
  -}
  +    }
  +/**INDENT** Error@1753: Stuff missing from end of file. */
  
  
  
  1.49      +61 -58    apache-1.3/src/modules/proxy/proxy_connect.c
  
  Index: proxy_connect.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_connect.c,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- proxy_connect.c	13 Mar 2002 21:05:32 -0000	1.48
  +++ proxy_connect.c	25 Mar 2002 09:21:58 -0000	1.49
  @@ -66,7 +66,7 @@
   #include <bstring.h>            /* for IRIX, FD_SET calls bzero() */
   #endif
   
  -/*  
  +/*
    * This handles Netscape CONNECT method secure proxy requests.
    * A connection is opened to the specified host and data is
    * passed through between the WWW site and the browser.
  @@ -75,8 +75,8 @@
    * "Tunneling SSL Through a WWW Proxy" currently at
    * http://www.mcom.com/newsref/std/tunneling_ssl.html.
    *
  - * If proxyhost and proxyport are set, we send a CONNECT to 
  - * the specified proxy..  
  + * If proxyhost and proxyport are set, we send a CONNECT to
  + * the specified proxy..
    *
    * FIXME: this is bad, because it does its own socket I/O
    *        instead of using the I/O in buff.c.  However,
  @@ -96,14 +96,13 @@
    * FIXME: no check for r->assbackwards, whatever that is.
    */
   
  -static int
  -allowed_port(proxy_server_conf *conf, int port)
  +static int allowed_port(proxy_server_conf *conf, int port)
   {
       int i;
  -    int *list = (int *) conf->allowed_connect_ports->elts;
  +    int *list = (int *)conf->allowed_connect_ports->elts;
   
  -    for(i = 0; i < conf->allowed_connect_ports->nelts; i++) {
  -        if(port == list[i])
  +    for (i = 0; i < conf->allowed_connect_ports->nelts; i++) {
  +        if (port == list[i])
               return 1;
       }
       return 0;
  @@ -111,7 +110,7 @@
   
   
   int ap_proxy_connect_handler(request_rec *r, cache_req *c, char *url,
  -                          const char *proxyhost, int proxyport)
  +                                 const char *proxyhost, int proxyport)
   {
       struct sockaddr_in server;
       struct in_addr destaddr;
  @@ -125,8 +124,8 @@
   
       void *sconf = r->server->module_config;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  -    struct noproxy_entry *npent = (struct noproxy_entry *)conf->noproxies->elts;
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
  +    struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
   
       memset(&server, '\0', sizeof(server));
       server.sin_family = AF_INET;
  @@ -156,22 +155,23 @@
       if (conf->allowed_connect_ports->nelts == 0) {
           /* Default setting if not overridden by AllowCONNECT */
           switch (port) {
  -            case DEFAULT_HTTPS_PORT:
  -            case DEFAULT_SNEWS_PORT:
  -                break;
  -            default:
  -                return HTTP_FORBIDDEN;
  +        case DEFAULT_HTTPS_PORT:
  +        case DEFAULT_SNEWS_PORT:
  +            break;
  +        default:
  +            return HTTP_FORBIDDEN;
           }
  -    } else if(!allowed_port(conf, port))
  +    }
  +    else if (!allowed_port(conf, port))
           return HTTP_FORBIDDEN;
   
       if (proxyhost) {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "CONNECT to remote proxy %s on port %d", proxyhost, proxyport);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +             "CONNECT to remote proxy %s on port %d", proxyhost, proxyport);
       }
       else {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "CONNECT to %s on port %d", host, port);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "CONNECT to %s on port %d", host, port);
       }
   
       /* Nasty cast to work around broken terniary expressions on MSVC */
  @@ -180,7 +180,7 @@
   
       if (err != NULL)
           return ap_proxyerror(r,
  -           proxyhost ? HTTP_BAD_GATEWAY : HTTP_INTERNAL_SERVER_ERROR, err);
  +            proxyhost ? HTTP_BAD_GATEWAY : HTTP_INTERNAL_SERVER_ERROR, err);
   
       sock = ap_psocket(r->pool, PF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (sock == -1) {
  @@ -190,11 +190,11 @@
   
   #ifdef CHECK_FD_SETSIZE
       if (sock >= FD_SETSIZE) {
  -        ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, NULL,
  -            "proxy_connect_handler: filedescriptor (%u) "
  -            "larger than FD_SETSIZE (%u) "
  -            "found, you probably need to rebuild Apache with a "
  -            "larger FD_SETSIZE", sock, FD_SETSIZE);
  +        ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_WARNING, NULL,
  +                     "proxy_connect_handler: filedescriptor (%u) "
  +                     "larger than FD_SETSIZE (%u) "
  +                     "found, you probably need to rebuild Apache with a "
  +                     "larger FD_SETSIZE", sock, FD_SETSIZE);
           ap_pclosesocket(r->pool, sock);
           return HTTP_INTERNAL_SERVER_ERROR;
       }
  @@ -212,73 +212,76 @@
       if (i == -1) {
           ap_pclosesocket(r->pool, sock);
           return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, ap_pstrcat(r->pool,
  -            "Could not connect to remote machine:<br>", strerror(errno), NULL));
  +        "Could not connect to remote machine:<br>", strerror(errno), NULL));
       }
   
  -    /* If we are connecting through a remote proxy, we need to pass
  -     * the CONNECT request on to it.
  +    /*
  +     * If we are connecting through a remote proxy, we need to pass the
  +     * CONNECT request on to it.
        */
       if (proxyport) {
  -        /* FIXME: We should not be calling write() directly, but we currently
  -         * have no alternative.  Error checking ignored.  Also, we force
  -         * a HTTP/1.0 request to keep things simple.
  +        /*
  +         * FIXME: We should not be calling write() directly, but we currently
  +         * have no alternative.  Error checking ignored.  Also, we force a
  +         * HTTP/1.0 request to keep things simple.
            */
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "Sending the CONNECT request to the remote proxy");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "Sending the CONNECT request to the remote proxy");
           ap_snprintf(buffer, sizeof(buffer), "CONNECT %s HTTP/1.0" CRLF, r->uri);
  -        send(sock, buffer, strlen(buffer),0);
  +        send(sock, buffer, strlen(buffer), 0);
           ap_snprintf(buffer, sizeof(buffer),
  -            "Proxy-agent: %s" CRLF CRLF, ap_get_server_version());
  -        send(sock, buffer, strlen(buffer),0);
  +                    "Proxy-agent: %s" CRLF CRLF, ap_get_server_version());
  +        send(sock, buffer, strlen(buffer), 0);
       }
       else {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "Returning 200 OK Status");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "Returning 200 OK Status");
           ap_rvputs(r, "HTTP/1.0 200 Connection established" CRLF, NULL);
           ap_rvputs(r, "Proxy-agent: ", ap_get_server_version(), CRLF CRLF, NULL);
           ap_bflush(r->connection->client);
       }
   
  -    while (1) { /* Infinite loop until error (one side closes the connection) */
  +    while (1) {                 /* Infinite loop until error (one side closes
  +                                 * the connection) */
           FD_ZERO(&fds);
           FD_SET(sock, &fds);
           FD_SET(ap_bfileno(r->connection->client, B_WR), &fds);
   
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "Going to sleep (select)");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "Going to sleep (select)");
           i = ap_select((ap_bfileno(r->connection->client, B_WR) > sock ?
  -            ap_bfileno(r->connection->client, B_WR) + 1 :
  -            sock + 1), &fds, NULL, NULL, NULL);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -            "Woke from select(), i=%d", i);
  +                       ap_bfileno(r->connection->client, B_WR) + 1 :
  +                       sock + 1), &fds, NULL, NULL, NULL);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                     "Woke from select(), i=%d", i);
   
           if (i) {
               if (FD_ISSET(sock, &fds)) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -                    "sock was set");
  -                if ((nbytes = recv(sock, buffer, HUGE_STRING_LEN,0)) != 0) {
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                             "sock was set");
  +                if ((nbytes = recv(sock, buffer, HUGE_STRING_LEN, 0)) != 0) {
                       if (nbytes == -1)
                           break;
                       if (send(ap_bfileno(r->connection->client, B_WR), buffer,
  -                        nbytes,0) == EOF)
  +                             nbytes, 0) == EOF)
                           break;
  -                    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO,
  -                        r->server, "Wrote %d bytes to client", nbytes);
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO,
  +                             r->server, "Wrote %d bytes to client", nbytes);
                   }
                   else
                       break;
               }
               else if (FD_ISSET(ap_bfileno(r->connection->client, B_WR), &fds)) {
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
  -                    "client->fd was set");
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server,
  +                             "client->fd was set");
                   if ((nbytes = recv(ap_bfileno(r->connection->client, B_WR),
  -                    buffer, HUGE_STRING_LEN, 0)) != 0) {
  +                                   buffer, HUGE_STRING_LEN, 0)) != 0) {
                       if (nbytes == -1)
                           break;
                       if (send(sock, buffer, nbytes, 0) == EOF)
                           break;
  -                    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO,
  -                        r->server, "Wrote %d bytes to server", nbytes);
  +                    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO,
  +                             r->server, "Wrote %d bytes to server", nbytes);
                   }
                   else
                       break;
  
  
  
  1.97      +267 -259  apache-1.3/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.96
  retrieving revision 1.97
  diff -u -r1.96 -r1.97
  --- proxy_ftp.c	13 Mar 2002 21:05:32 -0000	1.96
  +++ proxy_ftp.c	25 Mar 2002 09:21:58 -0000	1.97
  @@ -73,7 +73,7 @@
       int i, j, ch;
   
       if (x[0] == '\0')
  -        return 0;                /* special case for no characters */
  +        return 0;               /* special case for no characters */
       for (i = 0, j = 0; x[i] != '\0'; i++, j++) {
   /* decode it if not already done */
           ch = x[i];
  @@ -173,10 +173,10 @@
           sport[0] = '\0';
   
       r->filename = ap_pstrcat(p, "proxy:ftp://", (user != NULL) ? user : "",
  -                               (password != NULL) ? ":" : "",
  -                               (password != NULL) ? password : "",
  +                             (password != NULL) ? ":" : "",
  +                             (password != NULL) ? password : "",
                             (user != NULL) ? "@" : "", host, sport, "/", path,
  -                               (parms[0] != '\0') ? ";" : "", parms, NULL);
  +                             (parms[0] != '\0') ? ";" : "", parms, NULL);
   
       return OK;
   }
  @@ -195,7 +195,7 @@
           return -1;
   /* check format */
       if (len < 5 || !ap_isdigit(linebuff[0]) || !ap_isdigit(linebuff[1]) ||
  -        !ap_isdigit(linebuff[2]) || (linebuff[3] != ' ' && linebuff[3] != '-'))
  +     !ap_isdigit(linebuff[2]) || (linebuff[3] != ' ' && linebuff[3] != '-'))
           status = 0;
       else
           status = 100 * linebuff[0] + 10 * linebuff[1] + linebuff[2] - 111 * '0';
  @@ -222,26 +222,25 @@
   }
   
   /*
  - * Like ftp_getrc but returns both the ftp status code and 
  + * Like ftp_getrc but returns both the ftp status code and
    * remembers the response message in the supplied buffer
    */
   static int ftp_getrc_msg(BUFF *ctrl, char *msgbuf, int msglen)
   {
       int len, status;
       char linebuff[100], buff[5];
  -    char *mb = msgbuf,
  -         *me = &msgbuf[msglen];
  +    char *mb = msgbuf, *me = &msgbuf[msglen];
   
       len = ap_bgets(linebuff, sizeof linebuff, ctrl);
       if (len == -1)
           return -1;
       if (len < 5 || !ap_isdigit(linebuff[0]) || !ap_isdigit(linebuff[1]) ||
  -        !ap_isdigit(linebuff[2]) || (linebuff[3] != ' ' && linebuff[3] != '-'))
  +     !ap_isdigit(linebuff[2]) || (linebuff[3] != ' ' && linebuff[3] != '-'))
           status = 0;
       else
           status = 100 * linebuff[0] + 10 * linebuff[1] + linebuff[2] - 111 * '0';
   
  -    mb = ap_cpystrn(mb, linebuff+4, me - mb);
  +    mb = ap_cpystrn(mb, linebuff + 4, me - mb);
   
       if (linebuff[len - 1] != '\n')
           (void)ap_bskiplf(ctrl);
  @@ -256,7 +255,7 @@
               if (linebuff[len - 1] != '\n') {
                   (void)ap_bskiplf(ctrl);
               }
  -            mb = ap_cpystrn(mb, linebuff+4, me - mb);
  +            mb = ap_cpystrn(mb, linebuff + 4, me - mb);
           } while (memcmp(linebuff, buff, 4) != 0);
       }
       return status;
  @@ -275,7 +274,8 @@
       conn_rec *con = r->connection;
       pool *p = r->pool;
       char *dir, *path, *reldir, *site, *type = NULL;
  -    char *basedir = ""; /* By default, path is relative to the $HOME dir */
  +    char *basedir = "";         /* By default, path is relative to the $HOME
  +                                 * dir */
   
       /* create default sized buffers for the stuff below */
       buf_size = IOBUFSIZE;
  @@ -283,9 +283,9 @@
       buf2 = ap_palloc(r->pool, buf_size);
   
       /* Save "scheme://site" prefix without password */
  -    site = ap_unparse_uri_components(p, &r->parsed_uri, UNP_OMITPASSWORD|UNP_OMITPATHINFO);
  +    site = ap_unparse_uri_components(p, &r->parsed_uri, UNP_OMITPASSWORD | UNP_OMITPATHINFO);
       /* ... and path without query args */
  -    path = ap_unparse_uri_components(p, &r->parsed_uri, UNP_OMITSITEPART|UNP_OMITQUERY);
  +    path = ap_unparse_uri_components(p, &r->parsed_uri, UNP_OMITSITEPART | UNP_OMITQUERY);
   
       /* If path began with /%2f, change the basedir */
       if (strncasecmp(path, "/%2f", 4) == 0) {
  @@ -298,24 +298,24 @@
   
       (void)decodeenc(path);
   
  -    while (path[1] == '/') /* collapse multiple leading slashes to one */
  +    while (path[1] == '/')      /* collapse multiple leading slashes to one */
           ++path;
   
       /* Copy path, strip (all except the last) trailing slashes */
       /* (the trailing slash is needed for the dir component loop below) */
       path = dir = ap_pstrcat(r->pool, path, "/", NULL);
  -    for (n = strlen(path); n > 1 && path[n-1] == '/' && path[n-2] == '/'; --n)
  -        path[n-1] = '\0';
  +    for (n = strlen(path); n > 1 && path[n - 1] == '/' && path[n - 2] == '/'; --n)
  +        path[n - 1] = '\0';
   
       /* print "ftp://host/" */
       n = ap_snprintf(buf, buf_size, DOCTYPE_HTML_3_2
  -                "<html><head><title>%s%s%s</title>\n"
  -                "<base href=\"%s%s%s\"></head>\n"
  -                "<body><h2>Directory of "
  -                "<a href=\"/\">%s</a>/",
  -                site, basedir, ap_escape_html(p,path),
  -                site, basedir, ap_escape_uri(p,path),
  -                site);
  +                    "<html><head><title>%s%s%s</title>\n"
  +                    "<base href=\"%s%s%s\"></head>\n"
  +                    "<body><h2>Directory of "
  +                    "<a href=\"/\">%s</a>/",
  +                    site, basedir, ap_escape_html(p, path),
  +                    site, basedir, ap_escape_uri(p, path),
  +                    site);
       total_bytes_sent += ap_proxy_bputs2(buf, con->client, c);
   
       /* Add a link to the root directory (if %2f hack was used) */
  @@ -323,11 +323,10 @@
           total_bytes_sent += ap_proxy_bputs2("<a href=\"/%2f/\">%2f</a>/", con->client, c);
       }
   
  -    for (dir = path+1; (dir = strchr(dir, '/')) != NULL; )
  -    {
  +    for (dir = path + 1; (dir = strchr(dir, '/')) != NULL;) {
           *dir = '\0';
  -        if ((reldir = strrchr(path+1, '/'))==NULL) {
  -            reldir = path+1;
  +        if ((reldir = strrchr(path + 1, '/')) == NULL) {
  +            reldir = path + 1;
           }
           else
               ++reldir;
  @@ -339,14 +338,15 @@
           total_bytes_sent += ap_proxy_bputs2(buf, con->client, c);
           *dir = '/';
           while (*dir == '/')
  -          ++dir;
  +            ++dir;
       }
   
       /* If the caller has determined the current directory, and it differs */
       /* from what the client requested, then show the real name */
  -    if (cwd == NULL || strncmp (cwd, path, strlen(cwd)) == 0) {
  +    if (cwd == NULL || strncmp(cwd, path, strlen(cwd)) == 0) {
           ap_snprintf(buf, buf_size, "</h2>\n<hr /><pre>");
  -    } else {
  +    }
  +    else {
           ap_snprintf(buf, buf_size, "</h2>\n(%s)\n<hr /><pre>",
                       ap_escape_html(p, cwd));
       }
  @@ -357,21 +357,21 @@
           if (n == -1) {          /* input error */
               if (c != NULL) {
                   ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                    "proxy: error reading from %s", c->url);
  +                              "proxy: error reading from %s", c->url);
                   c = ap_proxy_cache_error(c);
               }
               break;
           }
           if (n == 0)
  -            break;                /* EOF */
  +            break;              /* EOF */
   
  -        if (buf[n-1] == '\n')  /* strip trailing '\n' */
  +        if (buf[n - 1] == '\n') /* strip trailing '\n' */
               buf[--n] = '\0';
  -        if (buf[n-1] == '\r')  /* strip trailing '\r' if present */
  +        if (buf[n - 1] == '\r') /* strip trailing '\r' if present */
               buf[--n] = '\0';
   
           /* Handle unix-style symbolic link */
  -        if (buf[0] == 'l' && (filename=strstr(buf, " -> ")) != NULL) {
  +        if (buf[0] == 'l' && (filename = strstr(buf, " -> ")) != NULL) {
               char *link_ptr = filename;
   
               do {
  @@ -382,7 +382,7 @@
               *(link_ptr++) = '\0';
               ap_snprintf(buf2, buf_size, "%s <a href=\"%s\">%s %s</a>\n",
                           ap_escape_html(p, buf),
  -                        ap_escape_uri(p,filename),
  +                        ap_escape_uri(p, filename),
                           ap_escape_html(p, filename),
                           ap_escape_html(p, link_ptr));
               ap_cpystrn(buf, buf2, buf_size);
  @@ -416,13 +416,13 @@
               /* Special handling for '.' and '..': append slash to link */
               if (!strcmp(filename, ".") || !strcmp(filename, "..") || buf[0] == 'd') {
                   ap_snprintf(buf2, buf_size, "%s <a href=\"%s/\">%s</a>\n",
  -                            ap_escape_html(p, buf), ap_escape_uri(p,filename),
  +                         ap_escape_html(p, buf), ap_escape_uri(p, filename),
                               ap_escape_html(p, filename));
               }
               else {
                   ap_snprintf(buf2, buf_size, "%s <a href=\"%s\">%s</a>\n",
                               ap_escape_html(p, buf),
  -                            ap_escape_uri(p,filename),
  +                            ap_escape_uri(p, filename),
                               ap_escape_html(p, filename));
               }
               ap_cpystrn(buf, buf2, buf_size);
  @@ -430,13 +430,13 @@
           }
           /* else??? What about other OS's output formats? */
           else {
  -            strcat(buf, "\n"); /* re-append the newline char */
  +            strcat(buf, "\n");  /* re-append the newline char */
               ap_cpystrn(buf, ap_escape_html(p, buf), buf_size);
           }
   
           total_bytes_sent += ap_proxy_bputs2(buf, con->client, c);
   
  -        ap_reset_timeout(r);        /* reset timeout after successfule write */
  +        ap_reset_timeout(r);    /* reset timeout after successfule write */
       }
   
       total_bytes_sent += ap_proxy_bputs2("</pre><hr />\n", con->client, c);
  @@ -457,23 +457,24 @@
    * Note that we "invent" a realm name which consists of the
    * ftp://user@host part of the reqest (sans password -if supplied but invalid-)
    */
  -static int ftp_unauthorized (request_rec *r, int log_it)
  +static int ftp_unauthorized(request_rec *r, int log_it)
   {
       r->proxyreq = NOT_PROXY;
  -    /* Log failed requests if they supplied a password
  -     * (log username/password guessing attempts)
  +    /*
  +     * Log failed requests if they supplied a password (log username/password
  +     * guessing attempts)
        */
       if (log_it)
  -        ap_log_rerror(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, r,
  +        ap_log_rerror(APLOG_MARK, APLOG_INFO | APLOG_NOERRNO, r,
                         "proxy: missing or failed auth to %s",
                         ap_unparse_uri_components(r->pool,
  -                      &r->parsed_uri, UNP_OMITPATHINFO));
  +                                         &r->parsed_uri, UNP_OMITPATHINFO));
   
       ap_table_setn(r->err_headers_out, "WWW-Authenticate",
                     ap_pstrcat(r->pool, "Basic realm=\"",
  -                  ap_unparse_uri_components(r->pool, &r->parsed_uri,
  -                                            UNP_OMITPASSWORD|UNP_OMITPATHINFO),
  -                  "\"", NULL));
  +                          ap_unparse_uri_components(r->pool, &r->parsed_uri,
  +                                       UNP_OMITPASSWORD | UNP_OMITPATHINFO),
  +                             "\"", NULL));
   
       return HTTP_UNAUTHORIZED;
   }
  @@ -481,7 +482,7 @@
   /* Set ftp server to TYPE {A,I,E} before transfer of a directory or file */
   static int ftp_set_TYPE(request_rec *r, BUFF *ctrl, char xfer_type)
   {
  -    static char old_type[2] = { 'A', '\0' }; /* After logon, mode is ASCII */
  +    static char old_type[2] = {'A', '\0'};      /* After logon, mode is ASCII */
       int ret = HTTP_OK;
       int rc;
   
  @@ -492,7 +493,7 @@
       old_type[0] = xfer_type;
       ap_bvputs(ctrl, "TYPE ", old_type, CRLF, NULL);
       ap_bflush(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: TYPE %s", old_type);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: TYPE %s", old_type);
   
   /* responses: 200, 421, 500, 501, 504, 530 */
       /* 200 Command okay. */
  @@ -502,37 +503,36 @@
       /* 504 Command not implemented for that parameter. */
       /* 530 Not logged in. */
       rc = ftp_getrc(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
       if (rc == -1 || rc == 421) {
           ap_kill_timeout(r);
           ret = ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                             "Error reading from remote server");
  +                            "Error reading from remote server");
       }
       else if (rc != 200 && rc != 504) {
           ap_kill_timeout(r);
           ret = ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                             "Unable to set transfer type");
  +                            "Unable to set transfer type");
       }
   /* Allow not implemented */
       else if (rc == 504)
  -        /* ignore it silently */;
  +         /* ignore it silently */ ;
   
       return ret;
   }
   
   /* Common cleanup routine: close open BUFFers or sockets, and return an error */
  -static int
  -ftp_cleanup_and_return(request_rec *r, BUFF *ctrl, BUFF *data, int csock, int dsock, int rc)
  +static int ftp_cleanup_and_return(request_rec *r, BUFF *ctrl, BUFF *data, int csock, int dsock, int rc)
   {
       if (ctrl != NULL)
  -      ap_bclose(ctrl);
  +        ap_bclose(ctrl);
       else if (csock != -1)
  -      ap_pclosesocket(r->pool, csock);
  +        ap_pclosesocket(r->pool, csock);
   
       if (data != NULL)
  -      ap_bclose(data);
  +        ap_bclose(data);
       else if (dsock != -1)
  -      ap_pclosesocket(r->pool, dsock);
  +        ap_pclosesocket(r->pool, dsock);
   
       ap_kill_timeout(r);
   
  @@ -564,12 +564,12 @@
       pool *p = r->pool;
       int one = 1;
       NET_SIZE_T clen;
  -    char xfer_type = 'A'; /* after ftp login, the default is ASCII */
  +    char xfer_type = 'A';       /* after ftp login, the default is ASCII */
       int get_dirlisting = 0;
   
       void *sconf = r->server->module_config;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
       struct nocache_entry *ncent = (struct nocache_entry *) conf->nocaches->elts;
   
  @@ -595,8 +595,8 @@
   
       host = r->parsed_uri.hostname;
       port = (r->parsed_uri.port != 0)
  -            ? r->parsed_uri.port
  -            : ap_default_port_for_request(r);
  +        ? r->parsed_uri.port
  +        : ap_default_port_for_request(r);
       path = ap_pstrdup(p, r->parsed_uri.path);
       if (path == NULL)
           path = "";
  @@ -604,25 +604,27 @@
           while (*path == '/')
               ++path;
   
  -    /* The "Authorization:" header must be checked first.
  -     * We allow the user to "override" the URL-coded user [ & password ]
  -     * in the Browsers' User&Password Dialog.
  -     * NOTE that this is only marginally more secure than having the
  -     * password travel in plain as part of the URL, because Basic Auth
  -     * simply uuencodes the plain text password. 
  -     * But chances are still smaller that the URL is logged regularly.
  +    /*
  +     * The "Authorization:" header must be checked first. We allow the user
  +     * to "override" the URL-coded user [ & password ] in the Browsers'
  +     * User&Password Dialog. NOTE that this is only marginally more secure
  +     * than having the password travel in plain as part of the URL, because
  +     * Basic Auth simply uuencodes the plain text password. But chances are
  +     * still smaller that the URL is logged regularly.
        */
       if ((password = ap_table_get(r->headers_in, "Authorization")) != NULL
           && strcasecmp(ap_getword(r->pool, &password, ' '), "Basic") == 0
           && (password = ap_pbase64decode(r->pool, password))[0] != ':') {
  -        /* Note that this allocation has to be made from r->connection->pool
  -         * because it has the lifetime of the connection.  The other allocations
  -         * are temporary and can be tossed away any time.
  +        /*
  +         * Note that this allocation has to be made from r->connection->pool
  +         * because it has the lifetime of the connection.  The other
  +         * allocations are temporary and can be tossed away any time.
            */
  -        user = ap_getword_nulls (r->connection->pool, &password, ':');
  +        user = ap_getword_nulls(r->connection->pool, &password, ':');
           r->connection->ap_auth_type = "Basic";
           r->connection->user = r->parsed_uri.user = user;
  -        nocache = 1;    /* This resource only accessible with username/password */
  +        nocache = 1;            /* This resource only accessible with
  +                                 * username/password */
       }
       else if ((user = r->parsed_uri.user) != NULL) {
           user = ap_pstrdup(p, user);
  @@ -632,7 +634,8 @@
               decodeenc(tmp);
               password = tmp;
           }
  -        nocache = 1;    /* This resource only accessible with username/password */
  +        nocache = 1;            /* This resource only accessible with
  +                                 * username/password */
       }
       else {
           user = "anonymous";
  @@ -644,12 +647,12 @@
       for (i = 0; i < conf->noproxies->nelts; i++) {
           if (destaddr.s_addr == npent[i].addr.s_addr ||
               (npent[i].name != NULL &&
  -              (npent[i].name[0] == '*' || strstr(host, npent[i].name) != NULL)))
  +          (npent[i].name[0] == '*' || strstr(host, npent[i].name) != NULL)))
               return ap_proxyerror(r, HTTP_FORBIDDEN,
                                    "Connect to remote machine blocked");
       }
   
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: connect to %s:%d", host, port);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: connect to %s:%d", host, port);
   
       parms = strchr(path, ';');
       if (parms != NULL)
  @@ -665,33 +668,33 @@
       sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (sock == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                     "proxy: error creating socket");
  +                      "proxy: error creating socket");
           return HTTP_INTERNAL_SERVER_ERROR;
       }
   
   #if !defined(TPF) && !defined(BEOS)
       if (conf->recv_buffer_size > 0
           && setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
  -                       (const char *) &conf->recv_buffer_size, sizeof(int))
  -            == -1) {
  -            ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                         "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
  +                      (const char *)&conf->recv_buffer_size, sizeof(int))
  +        == -1) {
  +        ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  +                      "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
       }
   #endif
   
  -    if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &one,
  +    if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&one,
                      sizeof(one)) == -1) {
  -#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
  +#ifndef _OSD_POSIX              /* BS2000 has this option "always on" */
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                     "proxy: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
  +         "proxy: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
           ap_pclosesocket(p, sock);
           return HTTP_INTERNAL_SERVER_ERROR;
  -#endif /*_OSD_POSIX*/
  +#endif                          /* _OSD_POSIX */
       }
   
   #ifdef SINIX_D_RESOLVER_BUG
       {
  -        struct in_addr *ip_addr = (struct in_addr *) *server_hp.h_addr_list;
  +        struct in_addr *ip_addr = (struct in_addr *)*server_hp.h_addr_list;
   
           for (; ip_addr->s_addr != 0; ++ip_addr) {
               memcpy(&server.sin_addr, ip_addr, sizeof(struct in_addr));
  @@ -715,7 +718,7 @@
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                         ap_proxyerror(r, HTTP_BAD_GATEWAY, ap_pstrcat(r->pool,
                                       "Could not connect to remote machine: ",
  -                                    strerror(errno), NULL)));
  +                                                   strerror(errno), NULL)));
       }
   
       /* record request_time for HTTP/1.1 age calculation */
  @@ -726,8 +729,8 @@
   /* shouldn't we implement telnet control options here? */
   
   #ifdef CHARSET_EBCDIC
  -    ap_bsetflag(ctrl, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 1);
  -#endif /*CHARSET_EBCDIC*/
  +    ap_bsetflag(ctrl, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 1);
  +#endif                          /* CHARSET_EBCDIC */
   
       /* possible results: */
       /* 120 Service ready in nnn minutes. */
  @@ -735,39 +738,40 @@
       /* 421 Service not available, closing control connection. */
       ap_hard_timeout("proxy ftp", r);
       i = ftp_getrc_msg(ctrl, resp, sizeof resp);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
       if (i == -1 || i == 421) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                    "Error reading from remote server"));
  +                                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
       }
   #if 0
       if (i == 120) {
  -        /* RFC2068 states:
  -         * 14.38 Retry-After
  +        /*
  +         * RFC2068 states: 14.38 Retry-After
            * 
  -         *  The Retry-After response-header field can be used with a 503 (Service
  -         *  Unavailable) response to indicate how long the service is expected to
  -         *  be unavailable to the requesting client. The value of this field can
  -         *  be either an HTTP-date or an integer number of seconds (in decimal)
  -         *  after the time of the response.
  -         *     Retry-After  = "Retry-After" ":" ( HTTP-date | delta-seconds )
  +         * The Retry-After response-header field can be used with a 503 (Service
  +         * Unavailable) response to indicate how long the service is expected
  +         * to be unavailable to the requesting client. The value of this
  +         * field can be either an HTTP-date or an integer number of seconds
  +         * (in decimal) after the time of the response. Retry-After  =
  +         * "Retry-After" ":" ( HTTP-date | delta-seconds )
            */
  -        ap_set_header("Retry-After", ap_psprintf(p, "%u", 60*wait_mins);
  +/**INDENT** Error@756: Unbalanced parens */
  +        ap_set_header("Retry-After", ap_psprintf(p, "%u", 60 * wait_mins);
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_SERVICE_UNAVAILABLE, resp));
  +                          ap_proxyerror(r, HTTP_SERVICE_UNAVAILABLE, resp));
       }
   #endif
       if (i != 220) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_GATEWAY, resp));
  +                                  ap_proxyerror(r, HTTP_BAD_GATEWAY, resp));
       }
   
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: connected.");
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: connected.");
   
       ap_bvputs(ctrl, "USER ", user, CRLF, NULL);
  -    ap_bflush(ctrl);                        /* capture any errors */
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: USER %s", user);
  +    ap_bflush(ctrl);            /* capture any errors */
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: USER %s", user);
   
       /* possible results; 230, 331, 332, 421, 500, 501, 530 */
       /* states: 1 - error, 2 - success; 3 - send password, 4,5 fail */
  @@ -776,19 +780,19 @@
       /* 332 Need account for login. */
       /* 421 Service not available, closing control connection. */
       /* 500 Syntax error, command unrecognized. */
  -    /*     (This may include errors such as command line too long.) */
  +    /* (This may include errors such as command line too long.) */
       /* 501 Syntax error in parameters or arguments. */
       /* 530 Not logged in. */
       i = ftp_getrc(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
       if (i == -1 || i == 421) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                    "Error reading from remote server"));
  +                                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
       }
       if (i == 530) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                      ftp_unauthorized (r, 1));
  +                                      ftp_unauthorized(r, 1));
       }
       if (i != 230 && i != 331) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  @@ -798,50 +802,51 @@
       if (i == 331) {             /* send password */
           if (password == NULL) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                          ftp_unauthorized (r, 0));
  +                                          ftp_unauthorized(r, 0));
           }
           ap_bvputs(ctrl, "PASS ", password, CRLF, NULL);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PASS %s", password);
  -    /* possible results 202, 230, 332, 421, 500, 501, 503, 530 */
  -    /* 230 User logged in, proceed. */
  -    /* 332 Need account for login. */
  -    /* 421 Service not available, closing control connection. */
  -    /* 500 Syntax error, command unrecognized. */
  -    /* 501 Syntax error in parameters or arguments. */
  -    /* 503 Bad sequence of commands. */
  -    /* 530 Not logged in. */
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PASS %s", password);
  +        /* possible results 202, 230, 332, 421, 500, 501, 503, 530 */
  +        /* 230 User logged in, proceed. */
  +        /* 332 Need account for login. */
  +        /* 421 Service not available, closing control connection. */
  +        /* 500 Syntax error, command unrecognized. */
  +        /* 501 Syntax error in parameters or arguments. */
  +        /* 503 Bad sequence of commands. */
  +        /* 530 Not logged in. */
           i = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
           if (i == -1 || i == 421) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                    "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
           }
           if (i == 332) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_UNAUTHORIZED,
  -                                 "Need account for login"));
  +                                          ap_proxyerror(r, HTTP_UNAUTHORIZED,
  +                                                 "Need account for login"));
           }
           /* @@@ questionable -- we might as well return a 403 Forbidden here */
  -        if (i == 530) /* log it: passwd guessing attempt? */
  +        if (i == 530)           /* log it: passwd guessing attempt? */
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                          ftp_unauthorized (r, 1));
  +                                          ftp_unauthorized(r, 1));
           if (i != 230 && i != 202)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_BAD_GATEWAY);
       }
   
  -    /* Special handling for leading "%2f": this enforces a "cwd /"
  -     * out of the $HOME directory which was the starting point after login
  +    /*
  +     * Special handling for leading "%2f": this enforces a "cwd /" out of the
  +     * $HOME directory which was the starting point after login
        */
       if (strncasecmp(path, "%2f", 3) == 0) {
           path += 3;
  -        while (*path == '/') /* skip leading '/' (after root %2f) */
  +        while (*path == '/')    /* skip leading '/' (after root %2f) */
               ++path;
           ap_bputs("CWD /" CRLF, ctrl);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: CWD /");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: CWD /");
   
           /* possible results: 250, 421, 500, 501, 502, 530, 550 */
           /* 250 Requested file action okay, completed. */
  @@ -852,11 +857,11 @@
           /* 530 Not logged in. */
           /* 550 Requested action not taken. */
           i = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
           if (i == -1 || i == 421)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                        ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
           else if (i == 550)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_NOT_FOUND);
  @@ -869,7 +874,7 @@
    * this is what we must do if we don't know the OS type of the remote
    * machine
    */
  -    for ( ; (strp = strchr(path, '/')) != NULL ; path = strp + 1) {
  +    for (; (strp = strchr(path, '/')) != NULL; path = strp + 1) {
           char *slash = strp;
   
           *slash = '\0';
  @@ -880,38 +885,38 @@
           if (strp[1] == '\0')
               break;
   
  -        len = decodeenc(path); /* Note! This decodes a %2f -> "/" */
  -        if (strchr(path, '/')) /* were there any '/' characters? */
  +        len = decodeenc(path);  /* Note! This decodes a %2f -> "/" */
  +        if (strchr(path, '/'))  /* were there any '/' characters? */
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                        ap_proxyerror(r, HTTP_BAD_REQUEST,
  -                                      "Use of %2F is only allowed at the base directory"));
  +                                          ap_proxyerror(r, HTTP_BAD_REQUEST,
  +                       "Use of %2F is only allowed at the base directory"));
   
           ap_bvputs(ctrl, "CWD ", path, CRLF, NULL);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
           *slash = '/';
   
   /* responses: 250, 421, 500, 501, 502, 530, 550 */
  -    /* 250 Requested file action okay, completed. */
  -    /* 421 Service not available, closing control connection. */
  -    /* 500 Syntax error, command unrecognized. */
  -    /* 501 Syntax error in parameters or arguments. */
  -    /* 502 Command not implemented. */
  -    /* 530 Not logged in. */
  -    /* 550 Requested action not taken. */
  +        /* 250 Requested file action okay, completed. */
  +        /* 421 Service not available, closing control connection. */
  +        /* 500 Syntax error, command unrecognized. */
  +        /* 501 Syntax error in parameters or arguments. */
  +        /* 502 Command not implemented. */
  +        /* 530 Not logged in. */
  +        /* 550 Requested action not taken. */
           i = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
           if (i == -1 || i == 421)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                    "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
           if (i == 550)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_NOT_FOUND);
           if (i == 500 || i == 501)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_BAD_REQUEST,
  -                                    "Syntax error in filename (reported by ftp server)"));
  +                                          ap_proxyerror(r, HTTP_BAD_REQUEST,
  +                      "Syntax error in filename (reported by ftp server)"));
           if (i != 250)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_BAD_GATEWAY);
  @@ -919,18 +924,19 @@
   
       if (parms != NULL && strncmp(parms, "type=", 5) == 0
           && ap_isalpha(parms[5])) {
  -        /* "type=d" forces a dir listing.
  -         * The other types (i|a|e) are directly used for the ftp TYPE command
  +        /*
  +         * "type=d" forces a dir listing. The other types (i|a|e) are
  +         * directly used for the ftp TYPE command
            */
  -        if ( ! (get_dirlisting = (parms[5] == 'd')))
  +        if (!(get_dirlisting = (parms[5] == 'd')))
               xfer_type = ap_toupper(parms[5]);
   
           /* Check valid types, rather than ignoring invalid types silently: */
           if (strchr("AEI", xfer_type) == NULL)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                         ap_proxyerror(r, HTTP_BAD_REQUEST, ap_pstrcat(r->pool,
  -                                    "ftp proxy supports only types 'a', 'i', or 'e': \"",
  -                                    parms, "\" is invalid.", NULL)));
  +                       "ftp proxy supports only types 'a', 'i', or 'e': \"",
  +                                           parms, "\" is invalid.", NULL)));
       }
       else {
           /* make binary transfers the default */
  @@ -941,23 +947,23 @@
       dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (dsock == -1) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  -                                    "proxy: error creating PASV socket"));
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  +                                      "proxy: error creating PASV socket"));
       }
   
   #if !defined (TPF) && !defined(BEOS)
       if (conf->recv_buffer_size) {
           if (setsockopt(dsock, SOL_SOCKET, SO_RCVBUF,
  -               (const char *) &conf->recv_buffer_size, sizeof(int)) == -1) {
  +                (const char *)&conf->recv_buffer_size, sizeof(int)) == -1) {
               ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                         "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
  +                          "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
           }
       }
   #endif
   
       ap_bputs("PASV" CRLF, ctrl);
       ap_bflush(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PASV command issued");
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PASV command issued");
   /* possible results: 227, 421, 500, 501, 502, 530 */
       /* 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). */
       /* 421 Service not available, closing control connection. */
  @@ -969,19 +975,19 @@
       i = ap_bgets(pasv, sizeof(pasv), ctrl);
       if (i == -1 || i == 421) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  -                                    "proxy: PASV: control connection is toast"));
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  +                               "proxy: PASV: control connection is toast"));
       }
       else {
           pasv[i - 1] = '\0';
  -        pstr = strtok(pasv, " ");        /* separate result code */
  +        pstr = strtok(pasv, " ");       /* separate result code */
           if (pstr != NULL) {
               presult = atoi(pstr);
               if (*(pstr + strlen(pstr) + 1) == '=')
                   pstr += strlen(pstr) + 2;
  -            else
  -            {
  -                pstr = strtok(NULL, "(");  /* separate address & port params */
  +            else {
  +                pstr = strtok(NULL, "(");       /* separate address & port
  +                                                 * params */
                   if (pstr != NULL)
                       pstr = strtok(NULL, ")");
               }
  @@ -989,15 +995,15 @@
           else
               presult = atoi(pasv);
   
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", presult);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", presult);
   
           if (presult == 227 && pstr != NULL && (sscanf(pstr,
                    "%d,%d,%d,%d,%d,%d", &h3, &h2, &h1, &h0, &p1, &p0) == 6)) {
               /* pardon the parens, but it makes gcc happy */
               paddr = (((((h3 << 8) + h2) << 8) + h1) << 8) + h0;
               pport = (p1 << 8) + p0;
  -            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: contacting host %d.%d.%d.%d:%d",
  -                     h3, h2, h1, h0, pport);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: contacting host %d.%d.%d.%d:%d",
  +                         h3, h2, h1, h0, pport);
               data_addr.sin_family = AF_INET;
               data_addr.sin_addr.s_addr = htonl(paddr);
               data_addr.sin_port = htons(pport);
  @@ -1005,10 +1011,10 @@
   
               if (i == -1) {
                   return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                             ap_pstrcat(r->pool,
  -                                        "Could not connect to remote machine: ",
  -                                        strerror(errno), NULL)));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                                        ap_pstrcat(r->pool,
  +                                    "Could not connect to remote machine: ",
  +                                                   strerror(errno), NULL)));
               }
               pasvmode = 1;
           }
  @@ -1020,45 +1026,45 @@
   
       if (!pasvmode) {            /* set up data connection */
           clen = sizeof(struct sockaddr_in);
  -        if (getsockname(sock, (struct sockaddr *) &server, &clen) < 0) {
  +        if (getsockname(sock, (struct sockaddr *)&server, &clen) < 0) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
                                       "proxy: error getting socket address"));
           }
   
           dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
           if (dsock == -1) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  -                                    "proxy: error creating socket"));
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  +                                           "proxy: error creating socket"));
           }
   
  -        if (setsockopt(dsock, SOL_SOCKET, SO_REUSEADDR, (void *) &one,
  +        if (setsockopt(dsock, SOL_SOCKET, SO_REUSEADDR, (void *)&one,
                          sizeof(one)) == -1) {
  -#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
  +#ifndef _OSD_POSIX              /* BS2000 has this option "always on" */
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  -                                    "proxy: error setting reuseaddr option"));
  -#endif /*_OSD_POSIX*/
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  +                                  "proxy: error setting reuseaddr option"));
  +#endif                          /* _OSD_POSIX */
           }
   
  -        if (bind(dsock, (struct sockaddr *) &server,
  +        if (bind(dsock, (struct sockaddr *)&server,
                    sizeof(struct sockaddr_in)) == -1) {
   
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                      ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, 
  -                        ap_psprintf(p, "proxy: error binding to ftp data socket %s:%d",
  -                           inet_ntoa(server.sin_addr), server.sin_port)));
  +                                ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  +             ap_psprintf(p, "proxy: error binding to ftp data socket %s:%d",
  +                         inet_ntoa(server.sin_addr), server.sin_port)));
           }
  -        listen(dsock, 2);        /* only need a short queue */
  +        listen(dsock, 2);       /* only need a short queue */
       }
   
   /* set request; "path" holds last path component */
       len = decodeenc(path);
  -    if (strchr(path, '/')) /* were there any '/' characters? */
  +    if (strchr(path, '/'))      /* were there any '/' characters? */
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                    ap_proxyerror(r, HTTP_BAD_REQUEST,
  -                                  "Use of %2F is only allowed at the base directory"));
  +                                      ap_proxyerror(r, HTTP_BAD_REQUEST,
  +                       "Use of %2F is only allowed at the base directory"));
   
       /* TM - if len == 0 then it must be a directory (you can't RETR nothing) */
   
  @@ -1068,16 +1074,16 @@
       else {
           ap_bvputs(ctrl, "SIZE ", path, CRLF, NULL);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: SIZE %s", path);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: SIZE %s", path);
           i = ftp_getrc_msg(ctrl, resp, sizeof resp);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d with response %s", i, resp);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d with response %s", i, resp);
           if (i != 500) {         /* Size command not recognized */
               if (i == 550) {     /* Not a regular file */
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: SIZE shows this is a directory");
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: SIZE shows this is a directory");
                   get_dirlisting = 1;
                   ap_bvputs(ctrl, "CWD ", path, CRLF, NULL);
                   ap_bflush(ctrl);
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
   
                   /* possible results: 250, 421, 500, 501, 502, 530, 550 */
                   /* 250 Requested file action okay, completed. */
  @@ -1088,11 +1094,11 @@
                   /* 530 Not logged in. */
                   /* 550 Requested action not taken. */
                   i = ftp_getrc(ctrl);
  -                ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +                ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
                   if (i == -1 || i == 421)
                       return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                              "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
                   if (i == 550)
                       return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                                     HTTP_NOT_FOUND);
  @@ -1102,9 +1108,8 @@
                   path = "";
                   len = 0;
               }
  -            else if (i == 213) { /* Size command ok */
  -                for (j = 0; j < sizeof resp && ap_isdigit(resp[j]); j++)
  -                        ;
  +            else if (i == 213) {/* Size command ok */
  +                for (j = 0; j < sizeof resp && ap_isdigit(resp[j]); j++);
                   resp[j] = '\0';
                   if (resp[0] != '\0')
                       size = ap_pstrdup(p, resp);
  @@ -1115,7 +1120,7 @@
   #ifdef AUTODETECT_PWD
       ap_bvputs(ctrl, "PWD", CRLF, NULL);
       ap_bflush(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PWD");
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PWD");
   /* responses: 257, 500, 501, 502, 421, 550 */
       /* 257 "<directory-name>" <commentary> */
       /* 421 Service not available, closing control connection. */
  @@ -1124,11 +1129,11 @@
       /* 502 Command not implemented. */
       /* 550 Requested action not taken. */
       i = ftp_getrc_msg(ctrl, resp, sizeof resp);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PWD returned status %d", i);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PWD returned status %d", i);
       if (i == -1 || i == 421)
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
       if (i == 550)
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                         HTTP_NOT_FOUND);
  @@ -1136,19 +1141,19 @@
           const char *dirp = resp;
           cwd = ap_getword_conf(r->pool, &dirp);
       }
  -#endif /*AUTODETECT_PWD*/
  +#endif                          /* AUTODETECT_PWD */
   
       if (get_dirlisting) {
           if (len != 0)
               ap_bvputs(ctrl, "LIST ", path, CRLF, NULL);
           else
               ap_bputs("LIST -lag" CRLF, ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: LIST %s", (len == 0 ? "" : path));
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: LIST %s", (len == 0 ? "" : path));
       }
       else {
           ftp_set_TYPE(r, ctrl, xfer_type);
           ap_bvputs(ctrl, "RETR ", path, CRLF, NULL);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: RETR %s", path);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: RETR %s", path);
       }
       ap_bflush(ctrl);
   /* RETR: 110, 125, 150, 226, 250, 421, 425, 426, 450, 451, 500, 501, 530, 550
  @@ -1168,19 +1173,20 @@
       /* 530 Not logged in. */
       /* 550 Requested action not taken. */
       rc = ftp_getrc(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
       if (rc == -1 || rc == 421)
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                      ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
       if (rc == 550) {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: RETR failed, trying LIST instead");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: RETR failed, trying LIST instead");
           get_dirlisting = 1;
  -        ftp_set_TYPE(r, ctrl, 'A'); /* directories must be transferred in ASCII */
  +        ftp_set_TYPE(r, ctrl, 'A');     /* directories must be transferred in
  +                                         * ASCII */
   
           ap_bvputs(ctrl, "CWD ", path, CRLF, NULL);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: CWD %s", path);
           /* possible results: 250, 421, 500, 501, 502, 530, 550 */
           /* 250 Requested file action okay, completed. */
           /* 421 Service not available, closing control connection. */
  @@ -1190,11 +1196,11 @@
           /* 530 Not logged in. */
           /* 550 Requested action not taken. */
           rc = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
           if (rc == -1 || rc == 421)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
           if (rc == 550)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_NOT_FOUND);
  @@ -1205,7 +1211,7 @@
   #ifdef AUTODETECT_PWD
           ap_bvputs(ctrl, "PWD", CRLF, NULL);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PWD");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PWD");
   /* responses: 257, 500, 501, 502, 421, 550 */
           /* 257 "<directory-name>" <commentary> */
           /* 421 Service not available, closing control connection. */
  @@ -1214,11 +1220,11 @@
           /* 502 Command not implemented. */
           /* 550 Requested action not taken. */
           i = ftp_getrc_msg(ctrl, resp, sizeof resp);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: PWD returned status %d", i);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: PWD returned status %d", i);
           if (i == -1 || i == 421)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
           if (i == 550)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                             HTTP_NOT_FOUND);
  @@ -1226,22 +1232,22 @@
               const char *dirp = resp;
               cwd = ap_getword_conf(r->pool, &dirp);
           }
  -#endif /*AUTODETECT_PWD*/
  +#endif                          /* AUTODETECT_PWD */
   
           ap_bputs("LIST -lag" CRLF, ctrl);
           ap_bflush(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: LIST -lag");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: LIST -lag");
           rc = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", rc);
           if (rc == -1 || rc == 421)
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                ap_proxyerror(r, HTTP_BAD_GATEWAY,
  -                                      "Error reading from remote server"));
  +                                          ap_proxyerror(r, HTTP_BAD_GATEWAY,
  +                                       "Error reading from remote server"));
       }
       ap_kill_timeout(r);
       if (rc != 125 && rc != 150 && rc != 226 && rc != 250)
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  -                                          HTTP_BAD_GATEWAY);
  +                                      HTTP_BAD_GATEWAY);
   
       r->status = HTTP_OK;
       r->status_line = "200 OK";
  @@ -1260,11 +1266,12 @@
       }
       else {
   #ifdef CHARSET_EBCDIC
  -        r->ebcdic.conv_out = 0; /* do not convert what we read from the ftp server */
  +        r->ebcdic.conv_out = 0; /* do not convert what we read from the ftp
  +                                 * server */
   #endif
           if (r->content_type != NULL) {
               ap_table_setn(resp_hdrs, "Content-Type", r->content_type);
  -            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: Content-Type set to %s", r->content_type);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: Content-Type set to %s", r->content_type);
           }
           else {
               ap_table_setn(resp_hdrs, "Content-Type", ap_default_type(r));
  @@ -1272,11 +1279,11 @@
           if (xfer_type != 'A' && size != NULL) {
               /* We "trust" the ftp server to really serve (size) bytes... */
               ap_table_set(resp_hdrs, "Content-Length", size);
  -            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: Content-Length set to %s", size);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: Content-Length set to %s", size);
           }
       }
       if (r->content_encoding != NULL && r->content_encoding[0] != '\0') {
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: Content-Encoding set to %s", r->content_encoding);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: Content-Encoding set to %s", r->content_encoding);
           ap_table_setn(resp_hdrs, "Content-Encoding", r->content_encoding);
       }
   
  @@ -1285,10 +1292,10 @@
           for (i = 0; i < conf->nocaches->nelts; i++) {
               if (destaddr.s_addr == ncent[i].addr.s_addr ||
                   (ncent[i].name != NULL &&
  -                  (ncent[i].name[0] == '*' ||
  -                   strstr(host, ncent[i].name) != NULL))) {
  -               nocache = 1;
  -               break;
  +                 (ncent[i].name[0] == '*' ||
  +                  strstr(host, ncent[i].name) != NULL))) {
  +                nocache = 1;
  +                break;
               }
           }
       }
  @@ -1303,11 +1310,11 @@
           ap_hard_timeout("proxy ftp data connect", r);
           clen = sizeof(struct sockaddr_in);
           do
  -            csd = accept(dsock, (struct sockaddr *) &server, &clen);
  +            csd = accept(dsock, (struct sockaddr *)&server, &clen);
           while (csd == -1 && errno == EINTR);
           if (csd == -1) {
               ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                         "proxy: failed to accept data connection");
  +                          "proxy: failed to accept data connection");
               if (c != NULL)
                   c = ap_proxy_cache_error(c);
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
  @@ -1327,15 +1334,15 @@
       /* send response */
       /* write status line and headers to the cache file */
       ap_proxy_write_headers(c, ap_pstrcat(p, "HTTP/1.1 ", r->status_line, NULL), resp_hdrs);
  -    
  +
       /* Setup the headers for our client from upstreams response-headers */
       ap_overlap_tables(r->headers_out, resp_hdrs, AP_OVERLAP_TABLES_SET);
       /* Add X-Cache header */
       ap_table_setn(r->headers_out, "X-Cache",
                     ap_pstrcat(r->pool, "MISS from ",
  -                             ap_get_server_name(r), NULL)); 
  +                             ap_get_server_name(r), NULL));
       /* The Content-Type of this response is the upstream one. */
  -    r->content_type = ap_table_get (r->headers_out, "Content-Type");
  +    r->content_type = ap_table_get(r->headers_out, "Content-Type");
       /* finally output the headers to the client */
       ap_send_http_header(r);
   
  @@ -1357,8 +1364,9 @@
           data = NULL;
           dsock = -1;
   
  -        /* We checked for 125||150||226||250 above.
  -         * See if another rc is pending, and fetch it:
  +        /*
  +         * We checked for 125||150||226||250 above. See if another rc is
  +         * pending, and fetch it:
            */
           if (rc == 125 || rc == 150)
               rc = ftp_getrc(ctrl);
  @@ -1372,16 +1380,16 @@
               data = NULL;
               dsock = -1;
           }
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: ABOR");
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: ABOR");
   /* responses: 225, 226, 421, 500, 501, 502 */
  -    /* 225 Data connection open; no transfer in progress. */
  -    /* 226 Closing data connection. */
  -    /* 421 Service not available, closing control connection. */
  -    /* 500 Syntax error, command unrecognized. */
  -    /* 501 Syntax error in parameters or arguments. */
  -    /* 502 Command not implemented. */
  +        /* 225 Data connection open; no transfer in progress. */
  +        /* 226 Closing data connection. */
  +        /* 421 Service not available, closing control connection. */
  +        /* 500 Syntax error, command unrecognized. */
  +        /* 501 Syntax error in parameters or arguments. */
  +        /* 502 Command not implemented. */
           i = ftp_getrc(ctrl);
  -        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
  +        ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: returned status %d", i);
       }
   
       ap_kill_timeout(r);
  @@ -1390,16 +1398,16 @@
   /* finish */
       ap_bputs("QUIT" CRLF, ctrl);
       ap_bflush(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: QUIT");
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: QUIT");
   /* responses: 221, 500 */
       /* 221 Service closing control connection. */
       /* 500 Syntax error, command unrecognized. */
       i = ftp_getrc(ctrl);
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "FTP: QUIT: status %d", i);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: QUIT: status %d", i);
   
       ap_bclose(ctrl);
   
  -    ap_rflush(r);        /* flush before garbage collection */
  +    ap_rflush(r);               /* flush before garbage collection */
   
       ap_proxy_garbage_coll(r);
   
  
  
  
  1.89      +122 -105  apache-1.3/src/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_http.c,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- proxy_http.c	21 Mar 2002 11:38:03 -0000	1.88
  +++ proxy_http.c	25 Mar 2002 09:21:58 -0000	1.89
  @@ -76,8 +76,8 @@
       const char *err;
       int port;
   
  -    /* do syntatic check.
  -     * We break the URL into host, port, path, search
  +    /*
  +     * do syntatic check. We break the URL into host, port, path, search
        */
       port = def_port;
       err = ap_proxy_canon_netloc(r->pool, &url, NULL, NULL, &host, &port);
  @@ -85,9 +85,10 @@
           return HTTP_BAD_REQUEST;
   
       /* now parse path/search args, according to rfc1738 */
  -    /* N.B. if this isn't a true proxy request, then the URL _path_
  -     * has already been decoded.  True proxy requests have r->uri
  -     * == r->unparsed_uri, and no others have that property.
  +    /*
  +     * N.B. if this isn't a true proxy request, then the URL _path_ has
  +     * already been decoded.  True proxy requests have r->uri ==
  +     * r->unparsed_uri, and no others have that property.
        */
       if (r->uri == r->unparsed_uri) {
           search = strchr(url, '?');
  @@ -146,7 +147,7 @@
    * route.)
    */
   int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
  -                       const char *proxyhost, int proxyport)
  +                              const char *proxyhost, int proxyport)
   {
       const char *strp;
       char *strp2;
  @@ -169,12 +170,13 @@
   
       void *sconf = r->server->module_config;
       proxy_server_conf *conf =
  -    (proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
  +    (proxy_server_conf *)ap_get_module_config(sconf, &proxy_module);
       struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
       struct nocache_entry *ncent = (struct nocache_entry *) conf->nocaches->elts;
       int nocache = 0;
   
  -    if (conf->cache.root == NULL) nocache = 1;
  +    if (conf->cache.root == NULL)
  +        nocache = 1;
   
       memset(&server, '\0', sizeof(server));
       server.sin_family = AF_INET;
  @@ -213,7 +215,7 @@
       for (i = 0; i < conf->noproxies->nelts; i++) {
           if (destaddr.s_addr == npent[i].addr.s_addr ||
               (npent[i].name != NULL &&
  -              (npent[i].name[0] == '*' || strstr(desthost, npent[i].name) != NULL)))
  +             (npent[i].name[0] == '*' || strstr(desthost, npent[i].name) != NULL)))
               return ap_proxyerror(r, HTTP_FORBIDDEN,
                                    "Connect to remote machine blocked");
       }
  @@ -232,30 +234,31 @@
       }
   
   
  -    /* we have worked out who exactly we are going to connect to, now
  -     * make that connection...
  +    /*
  +     * we have worked out who exactly we are going to connect to, now make
  +     * that connection...
        */
       sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (sock == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                    "proxy: error creating socket");
  +                      "proxy: error creating socket");
           return HTTP_INTERNAL_SERVER_ERROR;
       }
   
   #if !defined(TPF) && !defined(BEOS)
       if (conf->recv_buffer_size) {
           if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
  -                       (const char *) &conf->recv_buffer_size, sizeof(int))
  +                       (const char *)&conf->recv_buffer_size, sizeof(int))
               == -1) {
               ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                         "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
  +                          "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
           }
       }
   #endif
   
   #ifdef SINIX_D_RESOLVER_BUG
       {
  -        struct in_addr *ip_addr = (struct in_addr *) *server_hp.h_addr_list;
  +        struct in_addr *ip_addr = (struct in_addr *)*server_hp.h_addr_list;
   
           for (; ip_addr->s_addr != 0; ++ip_addr) {
               memcpy(&server.sin_addr, ip_addr, sizeof(struct in_addr));
  @@ -280,30 +283,31 @@
               return DECLINED;    /* try again another way */
           else
               return ap_proxyerror(r, HTTP_BAD_GATEWAY, ap_pstrcat(r->pool,
  -                                "Could not connect to remote machine: ",
  -                                strerror(errno), NULL));
  +                                    "Could not connect to remote machine: ",
  +                                                    strerror(errno), NULL));
       }
   
       /* record request_time for HTTP/1.1 age calculation */
       c->req_time = time(NULL);
   
  -    /* build upstream-request headers by stripping r->headers_in from
  -     * connection specific headers.
  -     * We must not remove the Connection: header from r->headers_in,
  -     * we still have to react to Connection: close
  +    /*
  +     * build upstream-request headers by stripping r->headers_in from
  +     * connection specific headers. We must not remove the Connection: header
  +     * from r->headers_in, we still have to react to Connection: close
        */
       req_hdrs = ap_copy_table(r->pool, r->headers_in);
       ap_proxy_clear_connection(r->pool, req_hdrs);
   
  -    /* At this point, we start sending the HTTP/1.1 request to the
  -     * remote server (proxy or otherwise).
  +    /*
  +     * At this point, we start sending the HTTP/1.1 request to the remote
  +     * server (proxy or otherwise).
        */
       f = ap_bcreate(p, B_RDWR | B_SOCKET);
       ap_bpushfd(f, sock, sock);
   
       ap_hard_timeout("proxy send", r);
       ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.1" CRLF,
  -           NULL);
  +              NULL);
       /* Send Host: now, adding it to req_hdrs wouldn't be much better */
       if (destportstr != NULL && destport != DEFAULT_HTTP_PORT)
           ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL);
  @@ -313,60 +317,65 @@
       if (conf->viaopt == via_block) {
           /* Block all outgoing Via: headers */
           ap_table_unset(req_hdrs, "Via");
  -    } else if (conf->viaopt != via_off) {
  +    }
  +    else if (conf->viaopt != via_off) {
           /* Create a "Via:" request header entry and merge it */
           i = ap_get_server_port(r);
  -        if (ap_is_default_port(i,r)) {
  -            strcpy(portstr,"");
  -        } else {
  +        if (ap_is_default_port(i, r)) {
  +            strcpy(portstr, "");
  +        }
  +        else {
               ap_snprintf(portstr, sizeof portstr, ":%d", i);
           }
           /* Generate outgoing Via: header with/without server comment: */
           ap_table_mergen(req_hdrs, "Via",
  -                    (conf->viaopt == via_full)
  +                        (conf->viaopt == via_full)
                           ? ap_psprintf(p, "%d.%d %s%s (%s)",
  -                                HTTP_VERSION_MAJOR(r->proto_num),
  -                                HTTP_VERSION_MINOR(r->proto_num),
  -                                ap_get_server_name(r), portstr,
  -                                SERVER_BASEVERSION)
  +                                      HTTP_VERSION_MAJOR(r->proto_num),
  +                                      HTTP_VERSION_MINOR(r->proto_num),
  +                                      ap_get_server_name(r), portstr,
  +                                      SERVER_BASEVERSION)
                           : ap_psprintf(p, "%d.%d %s%s",
  -                                HTTP_VERSION_MAJOR(r->proto_num),
  -                                HTTP_VERSION_MINOR(r->proto_num),
  -                                ap_get_server_name(r), portstr)
  -                        );
  +                                      HTTP_VERSION_MAJOR(r->proto_num),
  +                                      HTTP_VERSION_MINOR(r->proto_num),
  +                                      ap_get_server_name(r), portstr)
  +            );
       }
   
  -    /* Add X-Forwarded-For: so that the upstream has a chance to
  -       determine, where the original request came from. */
  +    /*
  +     * Add X-Forwarded-For: so that the upstream has a chance to determine,
  +     * where the original request came from.
  +     */
       ap_table_mergen(req_hdrs, "X-Forwarded-For", r->connection->remote_ip);
  -    
  +
       /* we don't yet support keepalives - but we will soon, I promise! */
       ap_table_set(req_hdrs, "Connection", "close");
   
       reqhdrs_arr = ap_table_elts(req_hdrs);
  -    reqhdrs_elts = (table_entry *) reqhdrs_arr->elts;
  +    reqhdrs_elts = (table_entry *)reqhdrs_arr->elts;
       for (i = 0; i < reqhdrs_arr->nelts; i++) {
           if (reqhdrs_elts[i].key == NULL || reqhdrs_elts[i].val == NULL
   
  -        /* Clear out hop-by-hop request headers not to send:
  -         * RFC2616 13.5.1 says we should strip these headers:
  +        /*
  +         * Clear out hop-by-hop request headers not to send: RFC2616 13.5.1
  +         * says we should strip these headers:
            */
               || !strcasecmp(reqhdrs_elts[i].key, "Host") /* Already sent */
  -            || !strcasecmp(reqhdrs_elts[i].key, "Keep-Alive")
  +            ||!strcasecmp(reqhdrs_elts[i].key, "Keep-Alive")
               || !strcasecmp(reqhdrs_elts[i].key, "TE")
               || !strcasecmp(reqhdrs_elts[i].key, "Trailer")
               || !strcasecmp(reqhdrs_elts[i].key, "Transfer-Encoding")
               || !strcasecmp(reqhdrs_elts[i].key, "Upgrade")
  -
  -            /* XXX: @@@ FIXME: "Proxy-Authorization" should *only* be 
  -             * suppressed if THIS server requested the authentication,
  -             * not when a frontend proxy requested it!
  -             *
  -             * The solution to this problem is probably to strip out
  -             * the Proxy-Authorisation header in the authorisation
  -             * code itself, not here. This saves us having to signal
  -             * somehow whether this request was authenticated or not.
  -             */
  +        /*
  +         * XXX: @@@ FIXME: "Proxy-Authorization" should *only* be suppressed
  +         * if THIS server requested the authentication, not when a frontend
  +         * proxy requested it!
  +         * 
  +         * The solution to this problem is probably to strip out the
  +         * Proxy-Authorisation header in the authorisation code itself, not
  +         * here. This saves us having to signal somehow whether this request
  +         * was authenticated or not.
  +         */
               || !strcasecmp(reqhdrs_elts[i].key, "Proxy-Authorization"))
               continue;
           ap_bvputs(f, reqhdrs_elts[i].key, ": ", reqhdrs_elts[i].val, CRLF, NULL);
  @@ -384,7 +393,8 @@
       ap_kill_timeout(r);
   
   
  -    /* Right - now it's time to listen for a response.
  +    /*
  +     * Right - now it's time to listen for a response.
        */
       ap_hard_timeout("proxy receive", r);
   
  @@ -393,20 +403,21 @@
           ap_bclose(f);
           ap_kill_timeout(r);
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                     "ap_bgets() - proxy receive - Error reading from remote server %s (length %d)",
  -                     proxyhost ? proxyhost : desthost, len);
  +                      "ap_bgets() - proxy receive - Error reading from remote server %s (length %d)",
  +                      proxyhost ? proxyhost : desthost, len);
           return ap_proxyerror(r, HTTP_BAD_GATEWAY,
                                "Error reading from remote server");
  -    } else if (len == 0) {
  +    }
  +    else if (len == 0) {
           ap_bclose(f);
           ap_kill_timeout(r);
           return ap_proxyerror(r, HTTP_BAD_GATEWAY,
                                "Document contains no data");
       }
   
  -    /* Is it an HTTP/1 response?
  -     * Do some sanity checks on the response.
  -     * (This is buggy if we ever see an HTTP/1.10)
  +    /*
  +     * Is it an HTTP/1 response? Do some sanity checks on the response. (This
  +     * is buggy if we ever see an HTTP/1.10)
        */
       if (ap_checkmask(buffer, "HTTP/#.# ###*")) {
           int major, minor;
  @@ -436,39 +447,40 @@
   
           resp_hdrs = ap_proxy_read_headers(r, buffer, HUGE_STRING_LEN, f);
           if (resp_hdrs == NULL) {
  -            ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, r->server,
  -                 "proxy: Bad HTTP/%d.%d header returned by %s (%s)",
  -                 major, minor, r->uri, r->method);
  +            ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, r->server,
  +                         "proxy: Bad HTTP/%d.%d header returned by %s (%s)",
  +                         major, minor, r->uri, r->method);
               resp_hdrs = ap_make_table(p, 20);
  -            nocache = 1;    /* do not cache this broken file */
  +            nocache = 1;        /* do not cache this broken file */
           }
   
           /* handle Via header in the response */
           if (conf->viaopt != via_off && conf->viaopt != via_block) {
               /* Create a "Via:" response header entry and merge it */
               i = ap_get_server_port(r);
  -            if (ap_is_default_port(i,r)) {
  -                strcpy(portstr,"");
  -            } else {
  +            if (ap_is_default_port(i, r)) {
  +                strcpy(portstr, "");
  +            }
  +            else {
                   ap_snprintf(portstr, sizeof portstr, ":%d", i);
               }
               ap_table_mergen((table *)resp_hdrs, "Via",
                               (conf->viaopt == via_full)
                               ? ap_psprintf(p, "%d.%d %s%s (%s)",
  -                                major, minor,
  -                                ap_get_server_name(r), portstr,
  -                                SERVER_BASEVERSION)
  +                                          major, minor,
  +                                          ap_get_server_name(r), portstr,
  +                                          SERVER_BASEVERSION)
                               : ap_psprintf(p, "%d.%d %s%s",
  -                                major, minor,
  -                                ap_get_server_name(r), portstr)
  -                            );
  +                                          major, minor,
  +                                          ap_get_server_name(r), portstr)
  +                );
           }
   
           /* strip hop-by-hop headers defined by Connection */
           ap_proxy_clear_connection(p, resp_hdrs);
           /* Now add out bound headers set by other modules */
           resp_hdrs = ap_overlay_tables(r->pool, r->err_headers_out, resp_hdrs);
  -}
  +    }
       else {
           /* an http/0.9 response */
           backasswards = 1;
  @@ -482,10 +494,11 @@
       ap_kill_timeout(r);
   
       /*
  -     * HTTP/1.1 requires us to accept 3 types of dates, but only generate
  -     * one type
  +     * HTTP/1.1 requires us to accept 3 types of dates, but only generate one
  +     * type
        */
  -    /* we SET the dates here, obliterating possible multiple dates, as only
  +    /*
  +     * we SET the dates here, obliterating possible multiple dates, as only
        * one of each date makes sense in each response.
        */
       if ((datestr = ap_table_get(resp_hdrs, "Date")) != NULL)
  @@ -497,33 +510,34 @@
   
       /* handle the ProxyPassReverse mappings */
       if ((urlstr = ap_table_get(resp_hdrs, "Location")) != NULL)
  -      ap_table_set(resp_hdrs, "Location", proxy_location_reverse_map(r, urlstr));
  +        ap_table_set(resp_hdrs, "Location", proxy_location_reverse_map(r, urlstr));
       if ((urlstr = ap_table_get(resp_hdrs, "URI")) != NULL)
  -      ap_table_set(resp_hdrs, "URI", proxy_location_reverse_map(r, urlstr));
  +        ap_table_set(resp_hdrs, "URI", proxy_location_reverse_map(r, urlstr));
       if ((urlstr = ap_table_get(resp_hdrs, "Content-Location")) != NULL)
  -      ap_table_set(resp_hdrs, "Content-Location", proxy_location_reverse_map(r , urlstr));
  +        ap_table_set(resp_hdrs, "Content-Location", proxy_location_reverse_map(r, urlstr));
   
   /* check if NoCache directive on this host */
       if (nocache == 0) {
           for (i = 0; i < conf->nocaches->nelts; i++) {
               if (destaddr.s_addr == ncent[i].addr.s_addr ||
                   (ncent[i].name != NULL &&
  -                  (ncent[i].name[0] == '*' ||
  -                   strstr(desthost, ncent[i].name) != NULL))) {
  -               nocache = 1;
  -               break;
  +                 (ncent[i].name[0] == '*' ||
  +                  strstr(desthost, ncent[i].name) != NULL))) {
  +                nocache = 1;
  +                break;
               }
           }
   
  -    /* update the cache file, possibly even fulfilling the request if
  -     * it turns out a conditional allowed us to serve the object from the
  -     * cache...
  -     */
  -    i = ap_proxy_cache_update(c, resp_hdrs, !backasswards, nocache);
  -    if (i != DECLINED) {
  -        ap_bclose(f);
  -        return i;
  -    }
  +        /*
  +         * update the cache file, possibly even fulfilling the request if it
  +         * turns out a conditional allowed us to serve the object from the
  +         * cache...
  +         */
  +        i = ap_proxy_cache_update(c, resp_hdrs, !backasswards, nocache);
  +        if (i != DECLINED) {
  +            ap_bclose(f);
  +            return i;
  +        }
   
           /* write status line and headers to the cache file */
           ap_proxy_write_headers(c, ap_pstrcat(p, "HTTP/1.1 ", r->status_line, NULL), resp_hdrs);
  @@ -533,24 +547,26 @@
       ap_overlap_tables(r->headers_out, resp_hdrs, AP_OVERLAP_TABLES_SET);
       /* Add X-Cache header - be careful not to obliterate any upstream headers */
       ap_table_mergen(r->headers_out, "X-Cache",
  -                  ap_pstrcat(r->pool, "MISS from ",
  -                             ap_get_server_name(r), NULL));
  +                    ap_pstrcat(r->pool, "MISS from ",
  +                               ap_get_server_name(r), NULL));
       /* The Content-Type of this response is the upstream one. */
  -    r->content_type = ap_table_get (r->headers_out, "Content-Type");
  -    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "Content-Type: %s", r->content_type);
  +    r->content_type = ap_table_get(r->headers_out, "Content-Type");
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "Content-Type: %s", r->content_type);
   
       /* finally output the headers to the client */
       ap_send_http_header(r);
   
  -    /* Is it an HTTP/0.9 respose? If so, send the extra data we read
  -       from upstream as the start of the reponse to client */
  +    /*
  +     * Is it an HTTP/0.9 respose? If so, send the extra data we read from
  +     * upstream as the start of the reponse to client
  +     */
       if (backasswards) {
           ap_hard_timeout("proxy send assbackward", r);
   
           ap_bwrite(r->connection->client, buffer, len);
           if (c != NULL && c->fp != NULL && ap_bwrite(c->fp, buffer, len) != len) {
               ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                "proxy: error writing extra data to %s", c->tempfile);
  +                      "proxy: error writing extra data to %s", c->tempfile);
               c = ap_proxy_cache_error(c);
           }
           ap_kill_timeout(r);
  @@ -558,11 +574,12 @@
   
   
   #ifdef CHARSET_EBCDIC
  -    /* What we read/write after the header should not be modified
  -     * (i.e., the cache copy is ASCII, not EBCDIC, even for text/html)
  +    /*
  +     * What we read/write after the header should not be modified (i.e., the
  +     * cache copy is ASCII, not EBCDIC, even for text/html)
        */
  -    ap_bsetflag(f, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0);
  -    ap_bsetflag(r->connection->client, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0);
  +    ap_bsetflag(f, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 0);
  +    ap_bsetflag(r->connection->client, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 0);
   #endif
   
   /* send body */
  
  
  
  1.110     +161 -132  apache-1.3/src/modules/proxy/proxy_util.c
  
  Index: proxy_util.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_util.c,v
  retrieving revision 1.109
  retrieving revision 1.110
  diff -u -r1.109 -r1.110
  --- proxy_util.c	21 Mar 2002 11:38:03 -0000	1.109
  +++ proxy_util.c	25 Mar 2002 09:21:59 -0000	1.110
  @@ -63,7 +63,7 @@
   #include "multithread.h"
   #include "http_log.h"
   #include "util_uri.h"
  -#include "util_date.h"  /* get ap_checkmask() decl. */
  +#include "util_date.h"          /* get ap_checkmask() decl. */
   
   static int proxy_match_ipaddr(struct dirconn_entry *This, request_rec *r);
   static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r);
  @@ -93,9 +93,9 @@
       else
           i += ch - ('a' - 10);
       return i;
  -#else /*CHARSET_EBCDIC*/
  -    return (1 == sscanf(x, "%2x", &i)) ? os_toebcdic[i&0xFF] : 0;
  -#endif /*CHARSET_EBCDIC*/
  +#else                           /* CHARSET_EBCDIC */
  +    return (1 == sscanf(x, "%2x", &i)) ? os_toebcdic[i & 0xFF] : 0;
  +#endif                          /* CHARSET_EBCDIC */
   }
   
   void ap_proxy_c2hex(int ch, char *x)
  @@ -115,14 +115,14 @@
           x[2] = ('A' - 10) + i;
       else
           x[2] = '0' + i;
  -#else /*CHARSET_EBCDIC*/
  -    static const char ntoa[] = { "0123456789ABCDEF" };
  +#else                           /* CHARSET_EBCDIC */
  +    static const char ntoa[] = {"0123456789ABCDEF"};
       ch = os_toascii[ch & 0xFF];
       x[0] = '%';
  -    x[1] = ntoa[(ch>>4)&0x0F];
  -    x[2] = ntoa[ch&0x0F];
  +    x[1] = ntoa[(ch >> 4) & 0x0F];
  +    x[2] = ntoa[ch & 0x0F];
       x[3] = '\0';
  -#endif /*CHARSET_EBCDIC*/
  +#endif                          /* CHARSET_EBCDIC */
   }
   
   /*
  @@ -136,7 +136,7 @@
    * those which must not be touched.
    */
   char *ap_proxy_canonenc(pool *p, const char *x, int len, enum enctype t,
  -                        enum proxyreqtype isenc)
  +                             enum proxyreqtype isenc)
   {
       int i, j, ch;
       char *y;
  @@ -145,7 +145,7 @@
   
   /* N.B. in addition to :@&=, this allows ';' in an http path
    * and '?' in an ftp path -- this may be revised
  - * 
  + *
    * Also, it makes a '+' character in a search string reserved, as
    * it may be form-encoded. (Although RFC 1738 doesn't allow this -
    * it only permits ; / ? : @ = & as reserved chars.)
  @@ -213,7 +213,7 @@
    */
   char *
        ap_proxy_canon_netloc(pool *p, char **const urlp, char **userp,
  -                        char **passwordp, char **hostp, int *port)
  +                                char **passwordp, char **hostp, int *port)
   {
       int i;
       char *strp, *host, *url = *urlp;
  @@ -267,13 +267,14 @@
           /* if (i == 0) the no port was given; keep default */
           if (strp[i] != '\0') {
               return "Bad port number in URL";
  -        } else if (i > 0) {
  +        }
  +        else if (i > 0) {
               *port = atoi(strp);
               if (*port > 65535)
                   return "Port number in URL > 65535";
           }
       }
  -    ap_str_tolower(host);                /* DNS names are case-insensitive */
  +    ap_str_tolower(host);       /* DNS names are case-insensitive */
       if (*host == '\0')
           return "Missing host in URL";
   /* check hostname syntax */
  @@ -299,7 +300,7 @@
       return NULL;
   }
   
  -static const char * const lwday[7] =
  +static const char *const lwday[7] =
   {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
   
   /*
  @@ -391,7 +392,7 @@
       pos = s;
   
       do {
  -        retval = ap_bgets(pos, n, in);     /* retval == -1 if error, 0 if EOF */
  +        retval = ap_bgets(pos, n, in);  /* retval == -1 if error, 0 if EOF */
   
           if (retval <= 0)
               return ((retval < 0) && (total == 0)) ? -1 : total;
  @@ -410,13 +411,14 @@
           else
               return total;       /* if not, input line exceeded buffer size */
   
  -        /* Continue appending if line folding is desired and
  -         * the last line was not empty and we have room in the buffer and
  -         * the next line begins with a continuation character.
  +        /*
  +         * Continue appending if line folding is desired and the last line
  +         * was not empty and we have room in the buffer and the next line
  +         * begins with a continuation character.
            */
       } while (fold && (retval != 1) && (n > 1)
  -                  && (ap_blookc(&next, in) == 1)
  -                  && ((next == ' ') || (next == '\t')));
  +             && (ap_blookc(&next, in) == 1)
  +             && ((next == ' ') || (next == '\t')));
   
       return total;
   }
  @@ -446,21 +448,23 @@
        * the connection closes (EOF), or we timeout.
        */
       while ((len = proxy_getline(buffer, size, f, 1)) > 0) {
  -        
  -        if (!(value = strchr(buffer, ':'))) {     /* Find the colon separator */
   
  -            /* Buggy MS IIS servers sometimes return invalid headers
  -             * (an extra "HTTP/1.0 200, OK" line sprinkled in between
  -             * the usual MIME headers). Try to deal with it in a sensible
  -             * way, but log the fact.
  -             * XXX: The mask check is buggy if we ever see an HTTP/1.10 */
  +        if (!(value = strchr(buffer, ':'))) {   /* Find the colon separator */
  +
  +            /*
  +             * Buggy MS IIS servers sometimes return invalid headers (an
  +             * extra "HTTP/1.0 200, OK" line sprinkled in between the usual
  +             * MIME headers). Try to deal with it in a sensible way, but log
  +             * the fact. XXX: The mask check is buggy if we ever see an
  +             * HTTP/1.10
  +             */
   
               if (!ap_checkmask(buffer, "HTTP/#.# ###*")) {
                   /* Nope, it wasn't even an extra HTTP header. Give up. */
                   return NULL;
               }
   
  -            ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, r->server,
  +            ap_log_error(APLOG_MARK, APLOG_WARNING | APLOG_NOERRNO, r->server,
                            "proxy: Ignoring duplicate HTTP header "
                            "returned by %s (%s)", r->uri, r->method);
               continue;
  @@ -468,26 +472,27 @@
   
           *value = '\0';
           ++value;
  -        /* XXX: RFC2068 defines only SP and HT as whitespace, this test is
  +        /*
  +         * XXX: RFC2068 defines only SP and HT as whitespace, this test is
            * wrong... and so are many others probably.
            */
           while (ap_isspace(*value))
               ++value;            /* Skip to start of value   */
   
           /* should strip trailing whitespace as well */
  -        for (end = &value[strlen(value)-1]; end > value && ap_isspace(*end); --end)
  +        for (end = &value[strlen(value) - 1]; end > value && ap_isspace(*end); --end)
               *end = '\0';
   
           /* make sure we add so as not to destroy duplicated headers */
           ap_table_add(resp_hdrs, buffer, value);
   
           /* the header was too long; at the least we should skip extra data */
  -        if (len >= size - 1) { 
  +        if (len >= size - 1) {
               while ((len = proxy_getline(field, MAX_STRING_LEN, f, 1))
  -                    >= MAX_STRING_LEN - 1) {
  +                   >= MAX_STRING_LEN - 1) {
                   /* soak up the extra data */
               }
  -            if (len == 0) /* time to exit the larger loop as well */
  +            if (len == 0)       /* time to exit the larger loop as well */
                   break;
           }
       }
  @@ -501,16 +506,20 @@
   
   long int ap_proxy_send_fb(BUFF *f, request_rec *r, cache_req *c, off_t len, int nowrite, size_t recv_buffer_size)
   {
  -    int  ok;
  +    int ok;
       char *buf;
       size_t buf_size;
       long total_bytes_rcvd;
       register int n, o, w;
       conn_rec *con = r->connection;
  -    int alternate_timeouts = 1; /* 1 if we alternate between soft & hard timeouts */
  +    int alternate_timeouts = 1; /* 1 if we alternate between soft & hard
  +                                 * timeouts */
   
       /* allocate a buffer to store the bytes in */
  -    /* make sure it is at least IOBUFSIZE, as recv_buffer_size may be zero for system default */
  +    /*
  +     * make sure it is at least IOBUFSIZE, as recv_buffer_size may be zero
  +     * for system default
  +     */
       buf_size = MAX(recv_buffer_size, IOBUFSIZE);
       buf = ap_palloc(r->pool, buf_size);
   
  @@ -520,15 +529,16 @@
   
   #ifdef CHARSET_EBCDIC
       /* The cache copy is ASCII, not EBCDIC, even for text/html) */
  -    ap_bsetflag(f, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0);
  +    ap_bsetflag(f, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 0);
       if (c != NULL && c->fp != NULL)
  -        ap_bsetflag(c->fp, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0);
  -    ap_bsetflag(con->client, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0);
  +        ap_bsetflag(c->fp, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 0);
  +    ap_bsetflag(con->client, B_ASCII2EBCDIC | B_EBCDIC2ASCII, 0);
   #endif
   
  -    /* Since we are reading from one buffer and writing to another,
  -     * it is unsafe to do a soft_timeout here, at least until the proxy
  -     * has its own timeout handler which can set both buffers to EOUT.
  +    /*
  +     * Since we are reading from one buffer and writing to another, it is
  +     * unsafe to do a soft_timeout here, at least until the proxy has its own
  +     * timeout handler which can set both buffers to EOUT.
        */
   
       ap_kill_timeout(r);
  @@ -538,12 +548,13 @@
       ap_hard_timeout("proxy send body", r);
       alternate_timeouts = 0;
   #else
  -    /* CHECKME! Since hard_timeout won't work in unix on sends with partial
  -     * cache completion, we have to alternate between hard_timeout
  -     * for reads, and soft_timeout for send.  This is because we need
  -     * to get a return from ap_bwrite to be able to continue caching.
  -     * BUT, if we *can't* continue anyway, just use hard_timeout.
  -     * (Also, if no cache file is written, use hard timeouts)
  +    /*
  +     * CHECKME! Since hard_timeout won't work in unix on sends with partial
  +     * cache completion, we have to alternate between hard_timeout for reads,
  +     * and soft_timeout for send.  This is because we need to get a return
  +     * from ap_bwrite to be able to continue caching. BUT, if we *can't*
  +     * continue anyway, just use hard_timeout. (Also, if no cache file is
  +     * written, use hard timeouts)
        */
   
       if (c == NULL || c->len <= 0 || c->cache_completion == 1.0) {
  @@ -552,11 +563,12 @@
       }
   #endif
   
  -    /* Loop and ap_bread() while we can successfully read and write,
  -     * or (after the client aborted) while we can successfully
  -     * read and finish the configured cache_completion.
  +    /*
  +     * Loop and ap_bread() while we can successfully read and write, or
  +     * (after the client aborted) while we can successfully read and finish
  +     * the configured cache_completion.
        */
  -    for (ok = 1; ok; ) {
  +    for (ok = 1; ok;) {
           if (alternate_timeouts)
               ap_hard_timeout("proxy recv body from upstream server", r);
   
  @@ -576,22 +588,23 @@
           if (n == -1) {          /* input error */
               if (c != NULL) {
                   ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                    "proxy: error reading from %s", c->url);
  +                              "proxy: error reading from %s", c->url);
                   c = ap_proxy_cache_error(c);
               }
               break;
           }
           if (n == 0)
  -            break;                /* EOF */
  +            break;              /* EOF */
           o = 0;
           total_bytes_rcvd += n;
   
           /* if we've received everything... */
  -        /* in the case of slow frontends and expensive backends,
  -         * we want to avoid leaving a backend connection hanging
  -         * while the frontend takes it's time to absorb the bytes.
  -         * so: if we just read the last block, we close the backend
  -         * connection now instead of later - it's no longer needed.
  +        /*
  +         * in the case of slow frontends and expensive backends, we want to
  +         * avoid leaving a backend connection hanging while the frontend
  +         * takes it's time to absorb the bytes. so: if we just read the last
  +         * block, we close the backend connection now instead of later - it's
  +         * no longer needed.
            */
           if (total_bytes_rcvd == len) {
               ap_bclose(f);
  @@ -599,13 +612,17 @@
           }
   
           /* Write to cache first. */
  -        /*@@@ XXX FIXME: Assuming that writing the cache file won't time out?!!? */
  +        /*
  +         * @@@ XXX FIXME: Assuming that writing the cache file won't time
  +         * out?!!?
  +         */
           if (c != NULL && c->fp != NULL) {
               if (ap_bwrite(c->fp, &buf[0], n) != n) {
                   ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                    "proxy: error writing to %s", c->tempfile);
  +                              "proxy: error writing to %s", c->tempfile);
                   c = ap_proxy_cache_error(c);
  -            } else {
  +            }
  +            else {
                   c->written += n;
               }
           }
  @@ -624,18 +641,19 @@
   
               if (w <= 0) {
                   if (c != NULL) {
  -                    /* when a send failure occurs, we need to decide
  -                     * whether to continue loading and caching the
  -                     * document, or to abort the whole thing
  +                    /*
  +                     * when a send failure occurs, we need to decide whether
  +                     * to continue loading and caching the document, or to
  +                     * abort the whole thing
                        */
                       ok = (c->len > 0) &&
  -                         (c->cache_completion > 0) &&
  -                         (c->len * c->cache_completion < total_bytes_rcvd);
  +                        (c->cache_completion > 0) &&
  +                        (c->len * c->cache_completion < total_bytes_rcvd);
   
  -                    if (! ok) {
  -                        if (c->fp!=NULL) {
  -                        ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));
  -                        c->fp = NULL;
  +                    if (!ok) {
  +                        if (c->fp != NULL) {
  +                            ap_pclosef(c->req->pool, ap_bfileno(c->fp, B_WR));
  +                            c->fp = NULL;
                           }
                           unlink(c->tempfile);
                           c = NULL;
  @@ -646,13 +664,13 @@
               }
               n -= w;
               o += w;
  -        } /* while client alive and more data to send */
  +        }                       /* while client alive and more data to send */
   
           /* if we've received everything, leave now */
           if (total_bytes_rcvd == len)
               break;
   
  -    } /* loop and ap_bread while "ok" */
  +    }                           /* loop and ap_bread while "ok" */
   
       /* if the backend connection is still open, close it */
       if (f) {
  @@ -677,11 +695,11 @@
       /* write status line */
       if (respline && c->fp != NULL &&
           ap_bvputs(c->fp, respline, CRLF, NULL) == -1) {
  -            ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                          "proxy: error writing status line to %s", c->tempfile);
  -            c = ap_proxy_cache_error(c);
  +        ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  +                      "proxy: error writing status line to %s", c->tempfile);
  +        c = ap_proxy_cache_error(c);
           return;
  -        }
  +    }
   
       /* write response headers to the cache file */
       ap_table_do(ap_proxy_send_hdr_line, c, t, NULL);
  @@ -706,7 +724,7 @@
       int len, i;
       const char *p;
       char valbuf[HUGE_STRING_LEN];
  -    valbuf[sizeof(valbuf)-1] = 0; /* safety terminating zero */
  +    valbuf[sizeof(valbuf) - 1] = 0;     /* safety terminating zero */
   
       len = strlen(key);
   
  @@ -734,7 +752,7 @@
                   while (ap_isspace(*list)) {
                       list++;
                   }
  -                strncpy(valbuf, list, MIN(p-list, sizeof(valbuf)-1));
  +                strncpy(valbuf, list, MIN(p - list, sizeof(valbuf) - 1));
                   *val = valbuf;
               }
               return 1;
  @@ -760,7 +778,7 @@
       static const char enc_table[32] = "abcdefghijklmnopqrstuvwxyz012345";
   
       ap_MD5Init(&context);
  -    ap_MD5Update(&context, (const unsigned char *) it, strlen(it));
  +    ap_MD5Update(&context, (const unsigned char *)it, strlen(it));
       ap_MD5Final(digest, &context);
   
   /* encode 128 bits as 26 characters, using a modified uuencoding */
  @@ -805,17 +823,19 @@
       int i, k, d;
       unsigned int x;
   #if defined(MPE) || (defined(AIX) && defined(__ps2__))
  -    /* Believe it or not, AIX 1.x does not allow you to name a file '@',
  -     * so hack around it in the encoding. */
  +    /*
  +     * Believe it or not, AIX 1.x does not allow you to name a file '@', so
  +     * hack around it in the encoding.
  +     */
       static const char enc_table[64] =
  -        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_%";
  +    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_%";
   #else
       static const char enc_table[64] =
  -        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@";
  +    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_@";
   #endif
   
       ap_MD5Init(&context);
  -    ap_MD5Update(&context, (const unsigned char *) it, strlen(it));
  +    ap_MD5Update(&context, (const unsigned char *)it, strlen(it));
       ap_MD5Final(digest, &context);
   
   /* encode 128 bits as 22 characters, using a modified uuencoding */
  @@ -831,7 +851,7 @@
       }
   /* one byte left */
       x = digest[15];
  -    tmp[k++] = enc_table[x >> 2];        /* use up 6 bits */
  +    tmp[k++] = enc_table[x >> 2];       /* use up 6 bits */
       tmp[k++] = enc_table[(x << 4) & 0x3f];
       /* now split into directory levels */
   
  @@ -845,7 +865,7 @@
       val[i + 22 - k] = '\0';
   }
   
  -#endif /* CASE_BLIND_FILESYSTEM */
  +#endif                          /* CASE_BLIND_FILESYSTEM */
   
   /*
    * Converts 16 hex digits to a time integer
  @@ -867,9 +887,9 @@
       }
   /* no longer necessary, as the source hex is 8-byte int */
   /*    if (j == 0xffffffff)*/
  -/*      return -1;*/            /* so that it works with 8-byte ints */
  +    /*      return -1;*//* so that it works with 8-byte ints */
   /*    else */
  -        return j;
  +    return j;
   }
   
   /*
  @@ -917,14 +937,14 @@
   int ap_proxyerror(request_rec *r, int statuscode, const char *message)
   {
       ap_table_setn(r->notes, "error-notes",
  -                  ap_pstrcat(r->pool, 
  +                  ap_pstrcat(r->pool,
                                "The proxy server could not handle the request "
  -                             "<EM><A HREF=\"", ap_escape_uri(r->pool, r->uri),
  +                           "<EM><A HREF=\"", ap_escape_uri(r->pool, r->uri),
                                "\">", ap_escape_html(r->pool, r->method),
  -                             "&nbsp;", 
  -                             ap_escape_html(r->pool, r->uri), "</A></EM>.<P>\n"
  +                             "&nbsp;",
  +                          ap_escape_html(r->pool, r->uri), "</A></EM>.<P>\n"
                                "Reason: <STRONG>",
  -                             ap_escape_html(r->pool, message), 
  +                             ap_escape_html(r->pool, message),
                                "</STRONG>", NULL));
   
       /* Allow "error-notes" string to be printed by ap_send_error_response() */
  @@ -938,7 +958,7 @@
    * This routine returns its own error message
    */
   const char *
  -     ap_proxy_host2addr(const char *host, struct hostent *reqhp)
  +     ap_proxy_host2addr(const char *host, struct hostent * reqhp)
   {
       int i;
       struct hostent *hp;
  @@ -955,14 +975,14 @@
       }
       else {
           ptd->ipaddr = ap_inet_addr(host);
  -        hp = gethostbyaddr((char *) &ptd->ipaddr, sizeof(ptd->ipaddr), AF_INET);
  +        hp = gethostbyaddr((char *)&ptd->ipaddr, sizeof(ptd->ipaddr), AF_INET);
           if (hp == NULL) {
               memset(&ptd->hpbuf, 0, sizeof(ptd->hpbuf));
               ptd->hpbuf.h_name = 0;
               ptd->hpbuf.h_addrtype = AF_INET;
               ptd->hpbuf.h_length = sizeof(ptd->ipaddr);
               ptd->hpbuf.h_addr_list = ptd->charpbuf;
  -            ptd->hpbuf.h_addr_list[0] = (char *) &ptd->ipaddr;
  +            ptd->hpbuf.h_addr_list[0] = (char *)&ptd->ipaddr;
               ptd->hpbuf.h_addr_list[1] = 0;
               hp = &ptd->hpbuf;
           }
  @@ -985,13 +1005,14 @@
           || url[1] != '/' || url[2] != '/')
           return NULL;
   
  -    url = ap_pstrdup(r->pool, &url[1]); /* make it point to "//", which is what proxy_canon_netloc expects */
  +    url = ap_pstrdup(r->pool, &url[1]); /* make it point to "//", which is
  +                                         * what proxy_canon_netloc expects */
   
       err = ap_proxy_canon_netloc(r->pool, &url, &user, &password, &host, &port);
   
       if (err != NULL)
  -        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r,
  -                     "%s", err);
  +        ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, r,
  +                      "%s", err);
   
       r->hostname = host;
   
  @@ -1011,9 +1032,12 @@
       /* "partial" addresses (with less than 4 quads) correctly, i.e.  */
       /* 192.168.123 is parsed as 192.168.0.123, which is not what I want. */
       /* I therefore have to parse the IP address manually: */
  -    /*if (proxy_readmask(This->name, &This->addr.s_addr, &This->mask.s_addr) == 0) */
  +    /*
  +     * if (proxy_readmask(This->name, &This->addr.s_addr, &This->mask.s_addr)
  +     * == 0)
  +     */
       /* addr and mask were set by proxy_readmask() */
  -    /*return 1; */
  +    /* return 1; */
   
       /* Parse IP addr manually, optionally allowing */
       /* abbreviated net addresses like 192.168. */
  @@ -1070,7 +1094,10 @@
           while (quads > 0 && ip_addr[quads - 1] == 0)
               --quads;
   
  -        /* "IP Address should be given in dotted-quad form, optionally followed by a netmask (e.g., 192.168.111.0/24)"; */
  +        /*
  +         * "IP Address should be given in dotted-quad form, optionally
  +         * followed by a netmask (e.g., 192.168.111.0/24)";
  +         */
           if (quads < 1)
               return 0;
   
  @@ -1111,8 +1138,8 @@
       const char *found;
       const char *host = proxy_get_host_of_request(r);
   
  -    if (host == NULL)   /* oops! */
  -       return 0;
  +    if (host == NULL)           /* oops! */
  +        return 0;
   
       memset(&addr, '\0', sizeof addr);
       memset(ip_addr, '\0', sizeof ip_addr);
  @@ -1157,7 +1184,7 @@
   
           /* Try to deal with multiple IP addr's for a host */
           for (ip_listptr = the_host.h_addr_list; *ip_listptr; ++ip_listptr) {
  -            ip_list = (struct in_addr *) *ip_listptr;
  +            ip_list = (struct in_addr *)*ip_listptr;
               if (This->addr.s_addr == (ip_list->s_addr & This->mask.s_addr)) {
   #if DEBUGGING
                   fprintf(stderr, "3)IP-Match: %s[%s] <-> ", found, inet_ntoa(*ip_list));
  @@ -1256,7 +1283,7 @@
       if (addr[i] != '\0' || ap_proxy_host2addr(addr, &host) != NULL)
           return 0;
   
  -    This->hostentry = ap_pduphostent (p, &host);
  +    This->hostentry = ap_pduphostent(p, &host);
   
       /* Strip trailing dots */
       for (i = strlen(addr) - 1; i > 0 && addr[i] == '.'; --i)
  @@ -1275,7 +1302,7 @@
       int h1_len;
   
       if (host == NULL || host2 == NULL)
  -       return 0; /* oops! */
  +        return 0;               /* oops! */
   
       h2_len = strlen(host2);
       h1_len = strlen(host);
  @@ -1318,16 +1345,16 @@
   
       ap_hard_timeout("proxy connect", r);
       do {
  -        i = connect(sock, (struct sockaddr *) addr, sizeof(struct sockaddr_in));
  +        i = connect(sock, (struct sockaddr *)addr, sizeof(struct sockaddr_in));
   #if defined(WIN32) || defined(NETWARE)
           if (i == SOCKET_ERROR)
               errno = WSAGetLastError();
  -#endif /* WIN32 */
  +#endif                          /* WIN32 */
       } while (i == -1 && errno == EINTR);
       if (i == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
  -                     "proxy connect to %s port %d failed",
  -                     inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
  +                      "proxy connect to %s port %d failed",
  +                      inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
       }
       ap_kill_timeout(r);
   
  @@ -1342,16 +1369,17 @@
   {
       cache_req *c = (cache_req *)p;
   
  -      if (key == NULL || value == NULL || value[0] == '\0')
  +    if (key == NULL || value == NULL || value[0] == '\0')
           return 1;
  -      if (c->fp != NULL &&
  +    if (c->fp != NULL &&
           ap_bvputs(c->fp, key, ": ", value, CRLF, NULL) == -1) {
  -            ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  -                    "proxy: error writing header to %s", c->tempfile);
  -          c = ap_proxy_cache_error(c);
  -            return 0; /* no need to continue, it failed already */
  +        ap_log_rerror(APLOG_MARK, APLOG_ERR, c->req,
  +                      "proxy: error writing header to %s", c->tempfile);
  +        c = ap_proxy_cache_error(c);
  +        return 0;               /* no need to continue, it failed already */
       }
  -    return 1; /* tell ap_table_do() to continue calling us for more headers */
  +    return 1;                   /* tell ap_table_do() to continue calling us
  +                                 * for more headers */
   }
   
   /* send a text line to one or two BUFF's; return line length */
  @@ -1366,7 +1394,8 @@
   /* do a HTTP/1.1 age calculation */
   time_t ap_proxy_current_age(cache_req *c, const time_t age_value)
   {
  -    time_t apparent_age, corrected_received_age, response_delay, corrected_initial_age, resident_time, current_age;
  +    time_t apparent_age, corrected_received_age, response_delay, corrected_initial_age,
  +           resident_time, current_age;
   
       /* Perform an HTTP/1.1 age calculation. (RFC2616 13.2.3) */
   
  @@ -1398,7 +1427,7 @@
                             "proxy: error opening cache file %s",
                             filename);
           else
  -            ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, "File %s not found", filename);
  +            ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "File %s not found", filename);
   
       }
       return cachefp;
  @@ -1432,10 +1461,10 @@
       char *next = ap_pstrdup(p, ap_table_get(headers, "Connection"));
   
       ap_table_unset(headers, "Proxy-Connection");
  -        if (!next) 
  +    if (!next)
           return;
   
  -    while (*next) { 
  +    while (*next) {
           name = next;
           while (*next && !ap_isspace(*next) && (*next != ','))
               ++next;
  @@ -1467,7 +1496,7 @@
    */
   int ap_proxy_table_replace(table *base, table *overlay)
   {
  -    table_entry *elts = (table_entry *) overlay->a.elts;
  +    table_entry *elts = (table_entry *)overlay->a.elts;
       int i, q = 0;
       const char *val;
   
  @@ -1523,21 +1552,21 @@
   
   static DWORD tls_index;
   
  -BOOL WINAPI DllMain (HINSTANCE dllhandle, DWORD reason, LPVOID reserved)
  +BOOL WINAPI DllMain(HINSTANCE dllhandle, DWORD reason, LPVOID reserved)
   {
       LPVOID memptr;
   
       switch (reason) {
       case DLL_PROCESS_ATTACH:
           tls_index = TlsAlloc();
  -    case DLL_THREAD_ATTACH: /* intentional no break */
  -        TlsSetValue (tls_index, malloc (sizeof (struct per_thread_data)));
  +    case DLL_THREAD_ATTACH:     /* intentional no break */
  +        TlsSetValue(tls_index, malloc(sizeof(struct per_thread_data)));
           break;
       case DLL_THREAD_DETACH:
  -        memptr = TlsGetValue (tls_index);
  +        memptr = TlsGetValue(tls_index);
           if (memptr) {
  -            free (memptr);
  -            TlsSetValue (tls_index, 0);
  +            free(memptr);
  +            TlsSetValue(tls_index, 0);
           }
           break;
       }
  @@ -1551,7 +1580,7 @@
   {
   #if defined(WIN32)
   
  -    return (struct per_thread_data *) TlsGetValue (tls_index);
  +    return (struct per_thread_data *)TlsGetValue(tls_index);
   
   #else