martin 98/05/27 15:56:07
Modified: src CHANGES
src/include compat.h
src/main http_protocol.c http_request.c
src/modules/proxy mod_proxy.c mod_proxy.h proxy_cache.c
proxy_connect.c proxy_ftp.c proxy_http.c
proxy_util.c
Log:
Make ErrorDocuments work for proxy error messages.
Define "error-notes" as a communication channel modules->core
PR: 494, 1259
Reviewed by: Dean Gaudet, Marc Slemco, Chuck Murcko
Revision Changes Path
1.866 +12 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.865
retrieving revision 1.866
diff -u -u -r1.865 -r1.866
--- CHANGES 1998/05/27 15:29:28 1.865
+++ CHANGES 1998/05/27 22:55:50 1.866
@@ -1,5 +1,17 @@
Changes with Apache 1.3b8
+ *) Proxy Fix: The proxy special failure routine ap_proxyerror()
+ was updated to use the normal apache error processing, thereby allowing
+ proxy errors to be treated by ErrorDocument's as well. For this
+ purpose, a new module-to-core communication variable "error-notes"
+ was introduced; the proxy (and possibly other modules) communicates
+ its error text using this variable. Its content is copied to a new
+ cgi-env-var REDIRECT_ERROR_NOTES for use by ErrorDocuments.
+ The old proxy special error routine ap_proxy_log_uerror()
+ was replaced by regular ap_log_error() calls, many messages were made
+ more informative.
+ [Martin Kraemer] PR#494, 1259
+
*) [SECURITY] A possible buffer overflow in the ftp proxy was fixed.
[Martin Kraemer]
1.9 +0 -1 apache-1.3/src/include/compat.h
Index: compat.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/compat.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -u -r1.8 -r1.9
--- compat.h 1998/05/27 14:01:30 1.8
+++ compat.h 1998/05/27 22:55:59 1.9
@@ -284,7 +284,6 @@
#define proxy_is_ipaddr ap_proxy_is_ipaddr
#define proxy_is_word ap_proxy_is_word
#define proxy_liststr ap_proxy_liststr
-#define proxy_log_uerror ap_proxy_log_uerror
#define proxy_read_headers ap_proxy_read_headers
#define proxy_sec2hex ap_proxy_sec2hex
#define proxy_send_fb ap_proxy_send_fb
1.217 +165 -144 apache-1.3/src/main/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.216
retrieving revision 1.217
diff -u -u -r1.216 -r1.217
--- http_protocol.c 1998/05/27 14:01:33 1.216
+++ http_protocol.c 1998/05/27 22:55:59 1.217
@@ -1950,25 +1950,25 @@
if (status == HTTP_NOT_MODIFIED) {
if (!is_empty_table(r->err_headers_out))
r->headers_out = ap_overlay_tables(r->pool, r->err_headers_out,
- r->headers_out);
+ r->headers_out);
ap_hard_timeout("send 304", r);
ap_basic_http_header(r);
ap_set_keepalive(r);
- ap_table_do((int (*)(void *, const char *, const char
*))ap_send_header_field,
- (void *) r, r->headers_out,
- "Connection",
- "Keep-Alive",
- "ETag",
- "Content-Location",
- "Expires",
- "Cache-Control",
- "Vary",
- "Warning",
- "WWW-Authenticate",
- "Proxy-Authenticate",
- NULL);
+ ap_table_do((int (*)(void *, const char *, const char *))
ap_send_header_field,
+ (void *) r, r->headers_out,
+ "Connection",
+ "Keep-Alive",
+ "ETag",
+ "Content-Location",
+ "Expires",
+ "Cache-Control",
+ "Vary",
+ "Warning",
+ "WWW-Authenticate",
+ "Proxy-Authenticate",
+ NULL);
terminate_header(r->connection->client);
@@ -2044,144 +2044,165 @@
}
{
char *title = status_lines[idx];
+ char *h1;
+ char *error_notes;
+
+ /* Accept a status_line set by a module, but only if it begins
+ * with the 3 digit status code
+ */
+ if (r->status_line != NULL
+ && strlen(r->status_line) > 4 /* long enough */
+ && isdigit(r->status_line[0])
+ && isdigit(r->status_line[1])
+ && isdigit(r->status_line[2])
+ && isspace(r->status_line[3])
+ && isalnum(r->status_line[4])) {
+ title = r->status_line;
+ }
+
/* folks decided they didn't want the error code in the H1 text */
+ h1 = &title[4];
- char *h1 = 4 + status_lines[idx];
+ ap_bvputs(fd,
+ "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+ "<HTML><HEAD>\n<TITLE>", title,
+ "</TITLE>\n</HEAD><BODY>\n<H1>", h1, "</H1>\n",
+ NULL);
- ap_bvputs(fd, "<HTML><HEAD>\n<TITLE>", title,
- "</TITLE>\n</HEAD><BODY>\n<H1>", h1, "</H1>\n",
- NULL);
-
- switch (status) {
- case REDIRECT:
- case MOVED:
- ap_bvputs(fd, "The document has moved <A HREF=\"",
- ap_escape_html(r->pool, location), "\">here</A>.<P>\n",
NULL);
- break;
- case HTTP_SEE_OTHER:
- ap_bvputs(fd, "The answer to your request is located <A HREF=\"",
- ap_escape_html(r->pool, location), "\">here</A>.<P>\n",
NULL);
- break;
- case HTTP_USE_PROXY:
- ap_bvputs(fd, "This resource is only accessible through the
proxy\n",
- ap_escape_html(r->pool, location), "<BR>\nYou will need
to ",
- "configure your client to use that proxy.<P>\n", NULL);
- break;
- case HTTP_PROXY_AUTHENTICATION_REQUIRED:
- case AUTH_REQUIRED:
- ap_bputs("This server could not verify that you\n", fd);
- ap_bputs("are authorized to access the document you\n", fd);
- ap_bputs("requested. Either you supplied the wrong\n", fd);
- ap_bputs("credentials (e.g., bad password), or your\n", fd);
- ap_bputs("browser doesn't understand how to supply\n", fd);
- ap_bputs("the credentials required.<P>\n", fd);
- break;
- case BAD_REQUEST:
- ap_bputs("Your browser sent a request that\n", fd);
- ap_bputs("this server could not understand.<P>\n", fd);
- break;
- case HTTP_FORBIDDEN:
- ap_bvputs(fd, "You don't have permission to access ",
- ap_escape_html(r->pool, r->uri), "\non this server.<P>\n",
- NULL);
- break;
- case NOT_FOUND:
- ap_bvputs(fd, "The requested URL ", ap_escape_html(r->pool,
r->uri),
- " was not found on this server.<P>\n", NULL);
- break;
- case METHOD_NOT_ALLOWED:
- ap_bvputs(fd, "The requested method ", r->method, " is not
allowed "
- "for the URL ", ap_escape_html(r->pool, r->uri),
- ".<P>\n", NULL);
- break;
- case NOT_ACCEPTABLE:
- ap_bvputs(fd,
- "An appropriate representation of the requested resource
",
- ap_escape_html(r->pool, r->uri),
- " could not be found on this server.<P>\n", NULL);
- /* fall through */
- case MULTIPLE_CHOICES:
- {
- char *list;
- if ((list = ap_table_get(r->notes, "variant-list")))
- ap_bputs(list, fd);
- }
- break;
- case LENGTH_REQUIRED:
- ap_bvputs(fd, "A request of the requested method ", r->method,
- " requires a valid Content-length.<P>\n", NULL);
- break;
- case PRECONDITION_FAILED:
- ap_bvputs(fd, "The precondition on the request for the URL ",
- ap_escape_html(r->pool, r->uri), " evaluated to
false.<P>\n",
- NULL);
- break;
- case NOT_IMPLEMENTED:
- ap_bvputs(fd, ap_escape_html(r->pool, r->method), " to ",
- ap_escape_html(r->pool, r->uri), " not supported.<P>\n",
NULL);
- break;
- case BAD_GATEWAY:
- ap_bputs("The proxy server received an invalid\015\012", fd);
- ap_bputs("response from an upstream server.<P>\015\012", fd);
- break;
- case VARIANT_ALSO_VARIES:
- ap_bvputs(fd, "A variant for the requested entity ",
- ap_escape_html(r->pool, r->uri), " is itself a ",
- "transparently negotiable resource.<P>\n", NULL);
- break;
- case HTTP_REQUEST_TIME_OUT:
- ap_bputs("I'm tired of waiting for your request.\n", fd);
- break;
- case HTTP_GONE:
- ap_bvputs(fd, "The requested resource<BR>",
- ap_escape_html(r->pool, r->uri),
- "<BR>\nis no longer available on this server ",
- "and there is no forwarding address.\n",
- "Please remove all references to this resource.\n", NULL);
- break;
- case HTTP_REQUEST_ENTITY_TOO_LARGE:
- ap_bvputs(fd, "The requested resource<BR>",
- ap_escape_html(r->pool, r->uri), "<BR>\n",
- "does not allow request data with ", r->method,
- " requests, or the amount of data provided in\n",
- "the request exceeds the capacity limit.\n", NULL);
- break;
- case HTTP_REQUEST_URI_TOO_LARGE:
- ap_bputs("The requested URL's length exceeds the capacity\n",
fd);
- ap_bputs("limit for this server.\n", fd);
- break;
- case HTTP_UNSUPPORTED_MEDIA_TYPE:
- ap_bputs("The supplied request data is not in a format\n", fd);
- ap_bputs("acceptable for processing by this resource.\n", fd);
- break;
- case HTTP_SERVICE_UNAVAILABLE:
- ap_bputs("The server is temporarily unable to service your\n",
fd);
- ap_bputs("request due to maintenance downtime or capacity\n",
fd);
- ap_bputs("problems. Please try again later.\n", fd);
- break;
- case HTTP_GATEWAY_TIME_OUT:
- ap_bputs("The proxy server did not receive a timely response\n",
fd);
- ap_bputs("from the upstream server.<P>\n", fd);
- break;
- default: /* HTTP_INTERNAL_SERVER_ERROR */
- ap_bputs("The server encountered an internal error or\n", fd);
- ap_bputs("misconfiguration and was unable to complete\n", fd);
- ap_bputs("your request.<P>\n", fd);
- ap_bputs("Please contact the server administrator,\n ", fd);
- ap_bputs(ap_escape_html(r->pool, r->server->server_admin), fd);
- ap_bputs(" and inform them of the time the error occurred,\n",
fd);
- ap_bputs("and anything you might have done that may have\n", fd);
- ap_bputs("caused the error.<P>\n", fd);
- break;
+ if ((error_notes = ap_table_get(r->notes, "error-notes"))) {
+ ap_bputs(error_notes, fd);
}
+ else
+ switch (status) {
+ case REDIRECT:
+ case MOVED:
+ ap_bvputs(fd, "The document has moved <A HREF=\"",
+ ap_escape_html(r->pool, location),
"\">here</A>.<P>\n", NULL);
+ break;
+ case HTTP_SEE_OTHER:
+ ap_bvputs(fd, "The answer to your request is located <A
HREF=\"",
+ ap_escape_html(r->pool, location),
"\">here</A>.<P>\n", NULL);
+ break;
+ case HTTP_USE_PROXY:
+ ap_bvputs(fd, "This resource is only accessible through the
proxy\n",
+ ap_escape_html(r->pool, location), "<BR>\nYou will need to ",
+ "configure your client to use that proxy.<P>\n", NULL);
+ break;
+ case HTTP_PROXY_AUTHENTICATION_REQUIRED:
+ case AUTH_REQUIRED:
+ ap_bputs("This server could not verify that you\n", fd);
+ ap_bputs("are authorized to access the document you\n", fd);
+ ap_bputs("requested. Either you supplied the wrong\n", fd);
+ ap_bputs("credentials (e.g., bad password), or your\n", fd);
+ ap_bputs("browser doesn't understand how to supply\n", fd);
+ ap_bputs("the credentials required.<P>\n", fd);
+ break;
+ case BAD_REQUEST:
+ ap_bputs("Your browser sent a request that\n", fd);
+ ap_bputs("this server could not understand.<P>\n", fd);
+ break;
+ case HTTP_FORBIDDEN:
+ ap_bvputs(fd, "You don't have permission to access ",
+ ap_escape_html(r->pool, r->uri), "\non this server.<P>\n",
+ NULL);
+ break;
+ case NOT_FOUND:
+ ap_bvputs(fd, "The requested URL ", ap_escape_html(r->pool,
r->uri),
+ " was not found on this server.<P>\n", NULL);
+ break;
+ case METHOD_NOT_ALLOWED:
+ ap_bvputs(fd, "The requested method ", r->method, " is not
allowed "
+ "for the URL ", ap_escape_html(r->pool, r->uri),
+ ".<P>\n", NULL);
+ break;
+ case NOT_ACCEPTABLE:
+ ap_bvputs(fd,
+ "An appropriate representation of the requested resource ",
+ ap_escape_html(r->pool, r->uri),
+ " could not be found on this server.<P>\n", NULL);
+ /* fall through */
+ case MULTIPLE_CHOICES:
+ {
+ char *list;
+ if ((list = ap_table_get(r->notes, "variant-list")))
+ ap_bputs(list, fd);
+ }
+ break;
+ case LENGTH_REQUIRED:
+ ap_bvputs(fd, "A request of the requested method ",
r->method,
+ " requires a valid Content-length.<P>\n", NULL);
+ break;
+ case PRECONDITION_FAILED:
+ ap_bvputs(fd, "The precondition on the request for the URL ",
+ ap_escape_html(r->pool, r->uri), " evaluated to false.<P>\n",
+ NULL);
+ break;
+ case NOT_IMPLEMENTED:
+ ap_bvputs(fd, ap_escape_html(r->pool, r->method), " to ",
+ ap_escape_html(r->pool, r->uri), " not
supported.<P>\n", NULL);
+ break;
+ case BAD_GATEWAY:
+ ap_bputs("The proxy server received an invalid\015\012", fd);
+ ap_bputs("response from an upstream server.<P>\015\012", fd);
+ break;
+ case VARIANT_ALSO_VARIES:
+ ap_bvputs(fd, "A variant for the requested entity ",
+ ap_escape_html(r->pool, r->uri), " is itself a ",
+ "transparently negotiable resource.<P>\n", NULL);
+ break;
+ case HTTP_REQUEST_TIME_OUT:
+ ap_bputs("I'm tired of waiting for your request.\n", fd);
+ break;
+ case HTTP_GONE:
+ ap_bvputs(fd, "The requested resource<BR>",
+ ap_escape_html(r->pool, r->uri),
+ "<BR>\nis no longer available on this server ",
+ "and there is no forwarding address.\n",
+ "Please remove all references to this resource.\n", NULL);
+ break;
+ case HTTP_REQUEST_ENTITY_TOO_LARGE:
+ ap_bvputs(fd, "The requested resource<BR>",
+ ap_escape_html(r->pool, r->uri), "<BR>\n",
+ "does not allow request data with ", r->method,
+ " requests, or the amount of data provided in\n",
+ "the request exceeds the capacity limit.\n", NULL);
+ break;
+ case HTTP_REQUEST_URI_TOO_LARGE:
+ ap_bputs("The requested URL's length exceeds the
capacity\n", fd);
+ ap_bputs("limit for this server.\n", fd);
+ break;
+ case HTTP_UNSUPPORTED_MEDIA_TYPE:
+ ap_bputs("The supplied request data is not in a format\n",
fd);
+ ap_bputs("acceptable for processing by this resource.\n",
fd);
+ break;
+ case HTTP_SERVICE_UNAVAILABLE:
+ ap_bputs("The server is temporarily unable to service
your\n", fd);
+ ap_bputs("request due to maintenance downtime or
capacity\n", fd);
+ ap_bputs("problems. Please try again later.\n", fd);
+ break;
+ case HTTP_GATEWAY_TIME_OUT:
+ ap_bputs("The proxy server did not receive a timely
response\n", fd);
+ ap_bputs("from the upstream server.<P>\n", fd);
+ break;
+ default: /* HTTP_INTERNAL_SERVER_ERROR */
+ ap_bputs("The server encountered an internal error or\n",
fd);
+ ap_bputs("misconfiguration and was unable to complete\n",
fd);
+ ap_bputs("your request.<P>\n", fd);
+ ap_bputs("Please contact the server administrator,\n ", fd);
+ ap_bputs(ap_escape_html(r->pool, r->server->server_admin),
fd);
+ ap_bputs(" and inform them of the time the error
occurred,\n", fd);
+ ap_bputs("and anything you might have done that may have\n",
fd);
+ ap_bputs("caused the error.<P>\n", fd);
+ break;
+ }
if (recursive_error) {
ap_bvputs(fd, "<P>Additionally, a ",
- status_lines[ap_index_of_response(recursive_error)],
- "\nerror was encountered while trying to use an "
- "ErrorDocument to handle the request.\n", NULL);
+ status_lines[ap_index_of_response(recursive_error)],
+ "\nerror was encountered while trying to use an "
+ "ErrorDocument to handle the request.\n", NULL);
}
- ap_bputs(ap_psignature("<HR>\n", r), fd);
+ ap_bputs(ap_psignature("<HR>\n", r), fd);
ap_bputs("</BODY></HTML>\n", fd);
}
ap_kill_timeout(r);
1.122 +10 -0 apache-1.3/src/main/http_request.c
Index: http_request.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_request.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -u -u -r1.121 -r1.122
--- http_request.c 1998/05/02 23:25:46 1.121
+++ http_request.c 1998/05/27 22:56:00 1.122
@@ -943,6 +943,7 @@
ap_table_setn(r->headers_out, "Location", custom_response);
}
else if (custom_response[0] == '/') {
+ char *error_notes;
r->no_local_copy = 1; /* Do NOT send USE_LOCAL_COPY for
* error documents! */
/*
@@ -950,6 +951,15 @@
* method was.
*/
ap_table_setn(r->subprocess_env, "REQUEST_METHOD", r->method);
+
+ /*
+ * Provide a special method for modules to communicate
+ * more informative (than the plain canned) messages to us.
+ * Propagate them to ErrorDocuments via the ERROR_NOTES variable:
+ */
+ if ((error_notes = ap_table_get(r->notes, "error-notes")) !=
NULL) {
+ ap_table_setn(r->subprocess_env, "ERROR_NOTES", error_notes);
+ }
r->method = ap_pstrdup(r->pool, "GET");
r->method_number = M_GET;
ap_internal_redirect(custom_response, r);
1.53 +15 -16 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.52
retrieving revision 1.53
diff -u -u -r1.52 -r1.53
--- mod_proxy.c 1998/05/27 14:01:37 1.52
+++ mod_proxy.c 1998/05/27 22:56:02 1.53
@@ -266,7 +266,7 @@
UNP_REVEALPASSWORD);
ap_table_set(r->headers_out, "Location", nuri);
- ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r->server,
+ ap_log_error(APLOG_MARK, APLOG_INFO|APLOG_NOERRNO, r->server,
"Domain missing: %s sent to %s%s%s", r->uri,
ap_unparse_uri_components(r->pool, &r->parsed_uri,
UNP_OMITUSERINFO),
@@ -328,11 +328,9 @@
direct_connect = list[ii].matcher(&list[ii], r);
}
#if DEBUGGING
- {
- char msg[256];
- sprintf(msg, (direct_connect) ? "NoProxy for %s" : "UseProxy for
%s", r->uri);
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server, msg);
- }
+ ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r->server,
+ (direct_connect) ? "NoProxy for %s" : "UseProxy for %s",
+ r->uri);
#endif
}
@@ -422,11 +420,11 @@
p = strchr(r, ':');
if (p == NULL || p[1] != '/' || p[2] != '/' || p[3] == '\0')
- return "Bad syntax for a remote proxy server";
+ return "ProxyRemote: Bad syntax for a remote proxy server";
q = strchr(p + 3, ':');
if (q != NULL) {
if (sscanf(q + 1, "%u", &port) != 1 || port > 65535)
- return "Bad syntax for a remote proxy server (bad port number)";
+ return "ProxyRemote: Bad syntax for a remote proxy server (bad port
number)";
*q = '\0';
}
else
@@ -504,6 +502,7 @@
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
*/
memcpy(&new->addr, hp.h_addr, sizeof(struct in_addr));
else
new->addr.s_addr = 0;
@@ -571,7 +570,7 @@
ap_get_module_config(parms->server->module_config, &proxy_module);
if (arg[0] != '.')
- return "Domain name must start with a dot.";
+ return "ProxyDomain: domain name must start with a dot.";
psf->domain = arg;
return NULL;
@@ -596,7 +595,7 @@
int val;
if (sscanf(arg, "%d", &val) != 1)
- return "Value must be an integer";
+ return "CacheSize value must be an integer (kBytes)";
psf->cache.space = val;
return NULL;
}
@@ -620,7 +619,7 @@
double val;
if (sscanf(arg, "%lg", &val) != 1)
- return "Value must be a float";
+ return "CacheLastModifiedFactor value must be a float";
psf->cache.lmfactor = val;
return NULL;
@@ -634,7 +633,7 @@
double val;
if (sscanf(arg, "%lg", &val) != 1)
- return "Value must be a float";
+ return "CacheMaxExpire value must be a float";
psf->cache.maxexpire = (int) (val * (double) SEC_ONE_HR);
return NULL;
}
@@ -647,7 +646,7 @@
double val;
if (sscanf(arg, "%lg", &val) != 1)
- return "Value must be a float";
+ return "CacheDefaultExpire value must be a float";
psf->cache.defaultexpire = (int) (val * (double) SEC_ONE_HR);
return NULL;
}
@@ -660,7 +659,7 @@
double val;
if (sscanf(arg, "%lg", &val) != 1)
- return "Value must be a float";
+ return "CacheGcInterval value must be a float";
psf->cache.gcinterval = (int) (val * (double) SEC_ONE_HR);
return NULL;
}
@@ -674,7 +673,7 @@
val = atoi(arg);
if (val < 1)
- return "Value must be an integer greater than 0";
+ return "CacheDirLevels value must be an integer greater than 0";
if (val * psf->cache.dirlength > CACHEFILE_LEN)
return "CacheDirLevels*CacheDirLength value must not be higher than 20";
psf->cache.dirlevels = val;
@@ -690,7 +689,7 @@
val = atoi(arg);
if (val < 1)
- return "Value must be an integer greater than 0";
+ return "CacheDirLength value must be an integer greater than 0";
if (val * psf->cache.dirlevels > CACHEFILE_LEN)
return "CacheDirLevels*CacheDirLength value must not be higher than 20";
psf->cache.dirlength = val;
1.34 +0 -2 apache-1.3/src/modules/proxy/mod_proxy.h
Index: mod_proxy.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/modules/proxy/mod_proxy.h,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -u -r1.33 -r1.34
--- mod_proxy.h 1998/04/11 12:00:39 1.33
+++ mod_proxy.h 1998/05/27 22:56:04 1.34
@@ -285,8 +285,6 @@
void ap_proxy_hash(const char *it, char *val, int ndepth, int nlength);
int ap_proxy_hex2sec(const char *x);
void ap_proxy_sec2hex(int t, char *y);
-void ap_proxy_log_uerror(const char *routine, const char *file, const char
*err,
- server_rec *s);
BUFF *ap_proxy_cache_error(struct cache_req *r);
int ap_proxyerror(request_rec *r, const char *message);
const char *ap_proxy_host2addr(const char *host, struct hostent *reqhp);
1.40 +71 -48 apache-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.39
retrieving revision 1.40
diff -u -u -r1.39 -r1.40
--- proxy_cache.c 1998/05/15 09:01:38 1.39
+++ proxy_cache.c 1998/05/27 22:56:04 1.40
@@ -166,13 +166,15 @@
strcat(filename, "/.time");
if (stat(filename, &buf) == -1) { /* does not exist */
if (errno != ENOENT) {
- ap_proxy_log_uerror("stat", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: stat(%s)", filename);
ap_unblock_alarms();
return;
}
if ((timefd = creat(filename, 0666)) == -1) {
if (errno != EEXIST)
- ap_proxy_log_uerror("creat", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: creat(%s)", filename);
else
lastcheck = abs(garbage_now); /* someone else got in there */
ap_unblock_alarms();
@@ -187,7 +189,8 @@
return;
}
if (utime(filename, NULL) == -1)
- ap_proxy_log_uerror("utimes", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: utimes(%s)", filename);
}
files = ap_make_array(r->pool, 100, sizeof(struct gc_ent *));
curblocks = 0;
@@ -212,7 +215,8 @@
#else
if (unlink(filename) == -1) {
if (errno != ENOENT)
- ap_proxy_log_uerror("unlink", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: unlink(%s)", filename);
}
else
#endif
@@ -250,7 +254,8 @@
Explain1("GC Examining directory %s", cachedir);
dir = opendir(cachedir);
if (dir == NULL) {
- ap_proxy_log_uerror("opendir", cachedir, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: opendir(%s)", cachedir);
return 0;
}
@@ -264,11 +269,14 @@
/* then stat it to see how old it is; delete temporary files > 1 day old */
if (stat(filename, &buf) == -1) {
if (errno != ENOENT)
- ap_proxy_log_uerror("stat", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: stat(%s)", filename);
}
else if (garbage_now != -1 && buf.st_atime < garbage_now -
SEC_ONE_DAY &&
buf.st_mtime < garbage_now - SEC_ONE_DAY) {
Explain1("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
@@ -307,12 +315,13 @@
fd = open(filename, O_RDONLY | O_BINARY);
if (fd == -1) {
if (errno != ENOENT)
- ap_proxy_log_uerror("open", filename, NULL,
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: open(%s)", filename);
continue;
}
if (fstat(fd, &buf) == -1) {
- ap_proxy_log_uerror("fstat", filename, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: fstat(%s)", filename);
close(fd);
continue;
}
@@ -339,12 +348,12 @@
#endif
i = read(fd, line, 26);
+ close(fd);
if (i == -1) {
- ap_proxy_log_uerror("read", filename, NULL, r->server);
- close(fd);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy gc: read(%s)", filename);
continue;
}
- close(fd);
line[i] = '\0';
garbage_expire = ap_proxy_hex2sec(line + 18);
if (!ap_checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&&") ||
@@ -352,7 +361,8 @@
/* 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_old("proxy: deleting bad cache file", r->server);
+ 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);
#else
@@ -532,8 +542,9 @@
ap_bpushfd(cachefp, cfd, cfd);
}
else if (errno != ENOENT)
- ap_proxy_log_uerror("open", c->filename,
- "proxy: error opening cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error opening cache file %s",
+ c->filename);
#ifdef EXPLAIN
else
Explain1("File %s not found", c->filename);
@@ -543,10 +554,12 @@
if (cachefp != NULL) {
i = rdcache(r->pool, cachefp, c);
if (i == -1)
- ap_proxy_log_uerror("read", c->filename,
- "proxy: error reading cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error reading cache file %s",
+ c->filename);
else if (i == 0)
- ap_log_error_old("proxy: bad cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r->server,
+ "proxy: bad (short?) cache file: %s", c->filename);
if (i != 1) {
ap_pclosef(r->pool, cachefp->fd);
cachefp = NULL;
@@ -796,11 +809,13 @@
if (lmod != c->lmod || expc != c->expire || date != c->date) {
off_t curpos = lseek(c->fp->fd, 0, SEEK_SET);
if (curpos == -1)
- ap_proxy_log_uerror("lseek", c->filename,
- "proxy: error seeking on cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error seeking on cache file %s",
+ c->filename);
else if (write(c->fp->fd, buff, 35) == -1)
- ap_proxy_log_uerror("write", c->filename,
- "proxy: error updating cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error updating cache file %s",
+ c->filename);
}
ap_pclosef(r->pool, c->fp->fd);
Explain0("Remote document not modified, use local copy");
@@ -827,11 +842,13 @@
off_t curpos = lseek(c->fp->fd, 0, SEEK_SET);
if (curpos == -1)
- ap_proxy_log_uerror("lseek", c->filename,
- "proxy: error seeking on cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error seeking on cache file %s",
+ c->filename);
else if (write(c->fp->fd, buff, 35) == -1)
- ap_proxy_log_uerror("write", c->filename,
- "proxy: error updating cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error updating cache file %s",
+ c->filename);
}
ap_pclosef(r->pool, c->fp->fd);
return OK;
@@ -862,8 +879,9 @@
i = open(c->tempfile, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, 0622);
if (i == -1) {
- ap_proxy_log_uerror("open", c->tempfile,
- "proxy: error creating cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error creating cache file %s",
+ c->tempfile);
return DECLINED;
}
ap_note_cleanups_for_fd(r->pool, i);
@@ -871,8 +889,8 @@
ap_bpushfd(c->fp, -1, i);
if (ap_bvputs(c->fp, buff, "X-URL: ", c->url, "\n", NULL) == -1) {
- ap_proxy_log_uerror("write", c->tempfile,
- "proxy: error writing cache file", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error writing cache file(%s)", c->tempfile);
ap_pclosef(r->pool, c->fp->fd);
unlink(c->tempfile);
c->fp = NULL;
@@ -913,31 +931,33 @@
ap_proxy_sec2hex(c->len, buff);
curpos = lseek(c->fp->fd, 36, SEEK_SET);
if (curpos == -1)
- ap_proxy_log_uerror("lseek", c->tempfile,
- "proxy: error seeking on cache file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error seeking on cache file %s", c->tempfile);
else if (write(c->fp->fd, buff, 8) == -1)
- ap_proxy_log_uerror("write", c->tempfile,
- "proxy: error updating cache file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error updating cache file %s", c->tempfile);
}
if (ap_bflush(c->fp) == -1) {
- ap_proxy_log_uerror("write", c->tempfile,
- "proxy: error writing to cache file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error writing to cache file %s",
+ c->tempfile);
ap_pclosef(c->req->pool, c->fp->fd);
unlink(c->tempfile);
return;
}
if (ap_pclosef(c->req->pool, c->fp->fd) == -1) {
- ap_proxy_log_uerror("close", c->tempfile,
- "proxy: error closing cache file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error closing cache file %s", c->tempfile);
unlink(c->tempfile);
return;
}
if (unlink(c->filename) == -1 && errno != ENOENT) {
- ap_proxy_log_uerror("unlink", c->filename,
- "proxy: error deleting old cache file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error deleting old cache file %s",
+ c->tempfile);
}
else {
char *p;
@@ -954,27 +974,30 @@
#else
if (mkdir(c->filename, S_IREAD | S_IWRITE | S_IEXEC) < 0 && errno
!= EEXIST)
#endif /* WIN32 */
- ap_proxy_log_uerror("mkdir", c->filename,
- "proxy: error creating cache directory", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error creating cache directory %s",
+ c->filename);
*p = '/';
++p;
}
#if defined(__EMX__) || defined(WIN32)
/* Under OS/2 use rename. */
if (rename(c->tempfile, c->filename) == -1)
- ap_proxy_log_uerror("rename", c->filename,
- "proxy: error renaming cache file", s);
+ 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_proxy_log_uerror("link", c->filename,
- "proxy: error linking cache file", s);
+ 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_proxy_log_uerror("unlink", c->tempfile,
- "proxy: error deleting temp file", s);
+ ap_log_error(APLOG_MARK, APLOG_ERR, s,
+ "proxy: error deleting temp file %s", c->tempfile);
#endif
}
1.28 +3 -1 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.27
retrieving revision 1.28
diff -u -u -r1.27 -r1.28
--- proxy_connect.c 1998/04/11 12:00:40 1.27
+++ proxy_connect.c 1998/05/27 22:56:04 1.28
@@ -188,7 +188,9 @@
}
if (i == -1) {
ap_pclosesocket(r->pool, sock);
- return ap_proxyerror(r, "Could not connect to remote machine");
+ return ap_proxyerror(r, ap_pstrcat(r->pool,
+ "Could not connect to remote
machine:<br>",
+ strerror(errno), NULL));
}
/* If we are connecting through a remote proxy, we need to pass
1.60 +29 -25 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.59
retrieving revision 1.60
diff -u -u -r1.59 -r1.60
--- proxy_ftp.c 1998/05/27 15:29:30 1.59
+++ proxy_ftp.c 1998/05/27 22:56:05 1.60
@@ -59,6 +59,7 @@
#include "mod_proxy.h"
#include "http_main.h"
+#include "http_log.h"
DEF_Explain
@@ -569,8 +570,8 @@
sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
- ap_proxy_log_uerror("socket", NULL, "proxy: error creating socket",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error creating socket");
return SERVER_ERROR;
}
@@ -578,17 +579,16 @@
if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
(const char *) &conf->recv_buffer_size, sizeof(int))
== -1) {
- ap_proxy_log_uerror("setsockopt", "(SO_RCVBUF)",
- "Failed to set ProxyReceiveBufferSize, using
default",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "setsockopt(SO_RCVBUF): Failed to set
ProxyReceiveBufferSize, using default");
}
}
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &one,
sizeof(one)) == -1) {
#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
- ap_proxy_log_uerror("setsockopt", NULL,
- "proxy: error setting reuseaddr option", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error setting reuseaddr option:
setsockopt(SO_REUSEADDR)");
ap_pclosesocket(p, sock);
return SERVER_ERROR;
#endif /*_OSD_POSIX*/
@@ -618,7 +618,9 @@
#endif
if (i == -1) {
ap_pclosesocket(p, sock);
- return ap_proxyerror(r, "Could not connect to remote machine");
+ return ap_proxyerror(r, /*HTTP_BAD_GATEWAY*/ ap_pstrcat(r->pool,
+ "Could not connect to remote machine: ",
+ strerror(errno), NULL));
}
f = ap_bcreate(p, B_RDWR | B_SOCKET);
@@ -769,8 +771,8 @@
/* try to set up PASV data connection first */
dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (dsock == -1) {
- ap_proxy_log_uerror("socket", NULL, "proxy: error creating PASV socket",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error creating PASV socket");
ap_bclose(f);
ap_kill_timeout(r);
return SERVER_ERROR;
@@ -779,8 +781,8 @@
if (conf->recv_buffer_size) {
if (setsockopt(dsock, SOL_SOCKET, SO_RCVBUF,
(const char *) &conf->recv_buffer_size, sizeof(int)) == -1) {
- ap_proxy_log_uerror("setsockopt", "(SO_RCVBUF)",
- "Failed to set ProxyReceiveBufferSize, using default",
r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "setsockopt(SO_RCVBUF): Failed to set
ProxyReceiveBufferSize, using default");
}
}
@@ -791,8 +793,8 @@
i = ap_bgets(pasv, sizeof(pasv), f);
if (i == -1) {
- ap_proxy_log_uerror("command", NULL, "PASV: control connection is
toast",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r->server,
+ "PASV: control connection is toast");
ap_pclosesocket(p, dsock);
ap_bclose(f);
ap_kill_timeout(r);
@@ -831,7 +833,9 @@
if (i == -1) {
ap_kill_timeout(r);
- return ap_proxyerror(r, "Could not connect to remote machine");
+ return ap_proxyerror(r, /*HTTP_BAD_GATEWAY*/ ap_pstrcat(r->pool,
+ "Could not connect to remote machine: ",
+ strerror(errno), NULL));
}
else {
pasvmode = 1;
@@ -844,8 +848,8 @@
if (!pasvmode) { /* set up data connection */
clen = sizeof(struct sockaddr_in);
if (getsockname(sock, (struct sockaddr *) &server, &clen) < 0) {
- ap_proxy_log_uerror("getsockname", NULL,
- "proxy: error getting socket address", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error getting socket address");
ap_bclose(f);
ap_kill_timeout(r);
return SERVER_ERROR;
@@ -853,8 +857,8 @@
dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (dsock == -1) {
- ap_proxy_log_uerror("socket", NULL, "proxy: error creating socket",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error creating socket");
ap_bclose(f);
ap_kill_timeout(r);
return SERVER_ERROR;
@@ -863,8 +867,8 @@
if (setsockopt(dsock, SOL_SOCKET, SO_REUSEADDR, (void *) &one,
sizeof(one)) == -1) {
#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
- ap_proxy_log_uerror("setsockopt", NULL,
- "proxy: error setting reuseaddr option", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error setting reuseaddr option");
ap_pclosesocket(p, dsock);
ap_bclose(f);
ap_kill_timeout(r);
@@ -877,8 +881,8 @@
char buff[22];
ap_snprintf(buff, sizeof(buff), "%s:%d",
inet_ntoa(server.sin_addr), server.sin_port);
- ap_proxy_log_uerror("bind", buff,
- "proxy: error binding to ftp data socket", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: error binding to ftp data socket %s", buff);
ap_bclose(f);
ap_pclosesocket(p, dsock);
return SERVER_ERROR;
@@ -1035,8 +1039,8 @@
csd = accept(dsock, (struct sockaddr *) &server, &clen);
while (csd == -1 && errno == EINTR);
if (csd == -1) {
- ap_proxy_log_uerror("accept", NULL,
- "proxy: failed to accept data connection", r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy: failed to accept data connection");
ap_pclosesocket(p, dsock);
ap_bclose(f);
ap_kill_timeout(r);
1.47 +5 -4 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.46
retrieving revision 1.47
diff -u -u -r1.46 -r1.47
--- proxy_http.c 1998/04/11 12:00:40 1.46
+++ proxy_http.c 1998/05/27 22:56:05 1.47
@@ -256,9 +256,8 @@
if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
(const char *) &conf->recv_buffer_size, sizeof(int))
== -1) {
- ap_proxy_log_uerror("setsockopt", "(SO_RCVBUF)",
- "Failed to set ReceiveBufferSize, using default",
- r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "setsockopt(SO_RCVBUF): Failed to set
ProxyReceiveBufferSize, using default");
}
}
@@ -288,7 +287,9 @@
if (proxyhost != NULL)
return DECLINED; /* try again another way */
else
- return ap_proxyerror(r, "Could not connect to remote machine");
+ return ap_proxyerror(r, /*HTTP_BAD_GATEWAY*/ ap_pstrcat(r->pool,
+ "Could not connect to remote machine: ",
+ strerror(errno), NULL));
}
clear_connection(r->headers_in); /* Strip connection-based headers */
1.61 +14 -50 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.60
retrieving revision 1.61
diff -u -u -r1.60 -r1.61
--- proxy_util.c 1998/05/05 02:57:34 1.60
+++ proxy_util.c 1998/05/27 22:56:05 1.61
@@ -766,36 +766,11 @@
y[8] = '\0';
}
-void ap_proxy_log_uerror(const char *routine, const char *file, const char
*err,
- server_rec *s)
-{
- char *p, *q;
-
- q = ap_get_time();
- p = strerror(errno);
-
- if (err != NULL) {
- fprintf(s->error_log, "[%s] %s\n", q, err);
- if (file != NULL)
- fprintf(s->error_log, "- %s: %s: %s\n", routine, file, p);
- else
- fprintf(s->error_log, "- %s: %s\n", routine, p);
- }
- else {
- if (file != NULL)
- fprintf(s->error_log, "[%s] %s: %s: %s\n", q, routine, file, p);
- else
- fprintf(s->error_log, "[%s] %s: %s\n", q, routine, p);
- }
-
- fflush(s->error_log);
-}
-
BUFF *
ap_proxy_cache_error(struct cache_req *c)
{
- ap_proxy_log_uerror("write", c->tempfile, "proxy: error writing to cache
file",
- c->req->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, c->req->server,
+ "proxy: error writing to cache file %s", c->tempfile);
ap_pclosef(c->req->pool, c->fp->fd);
c->fp = NULL;
unlink(c->tempfile);
@@ -804,24 +779,14 @@
int ap_proxyerror(request_rec *r, const char *message)
{
- r->status = SERVER_ERROR;
+ ap_table_setn(r->notes, "error-notes",
+ ap_pstrcat(r->pool,
+ "The proxy server could not handle the request "
+ "<EM><A HREF=\"", r->uri, "\">",
+ r->method, " ", r->uri, "</A></EM>.<P>\n"
+ "Reason: <STRONG>", message, "</STRONG>", NULL));
r->status_line = "500 Proxy Error";
- r->content_type = "text/html";
-
- ap_send_http_header(r);
- ap_soft_timeout("proxy error", r);
-
- ap_rvputs(r, "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
- "<html><head><title>Proxy Error</title><head>\n<body>"
- "<h1>Proxy Error</h1>\n"
- "The proxy server could not handle this request.\n<p>\n"
- "Reason: <b>", message, "</b>\n",
- ap_psignature("<HR>\n", r),
- "</body><html>\n",
- NULL);
-
- ap_kill_timeout(r);
- return OK;
+ return HTTP_INTERNAL_SERVER_ERROR;
}
/*
@@ -882,7 +847,8 @@
err = ap_proxy_canon_netloc(r->pool, &url, &user, &password, &host,
&port);
if (err != NULL)
- ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r->server, err);
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r->server,
+ "%s", err);
r->hostname = host;
@@ -1216,11 +1182,9 @@
#endif /* WIN32 */
} while (i == -1 && errno == EINTR);
if (i == -1) {
- char details[128];
-
- ap_snprintf(details, sizeof(details), "%s port %d",
- inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
- ap_proxy_log_uerror("connect", details, NULL, r->server);
+ ap_log_error(APLOG_MARK, APLOG_ERR, r->server,
+ "proxy connect to %s port %d failed",
+ inet_ntoa(addr->sin_addr), ntohs(addr->sin_port));
}
ap_kill_timeout(r);