-const char jcc_rcs[] = "$Id: jcc.c,v 1.9 2001/05/26 00:28:36 jongfoster Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.10 2001/05/26 15:26:15 jongfoster Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jcc.c,v $
*
* Revisions :
* $Log: jcc.c,v $
+ * Revision 1.10 2001/05/26 15:26:15 jongfoster
+ * ACL feature now provides more security by immediately dropping
+ * connections from untrusted hosts.
+ *
* Revision 1.9 2001/05/26 00:28:36 jongfoster
* Automatic reloading of config file.
* Removed obsolete SIGHUP support (Unix) and Reload menu option (Win32).
char *err = NULL;
char *eno;
fd_set rfds;
- int n, maxfd, server_body, ms_iis5_hack = 0;
+ int n, maxfd, server_body;
+ int ms_iis5_hack = 0;
+ int byte_count = 0;
const struct gateway *gw;
struct http_request *http;
#ifdef KILLPOPUPS
{
strcpy(buf, CHEADER);
write_socket(csp->cfd, buf, strlen(buf));
+
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 400 0", csp->ip_addr_str);
+
return;
}
log_error(LOG_LEVEL_GPC, "%s%s crunch!", http->hostport, http->path);
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 1",
+ csp->ip_addr_str, http->cmd);
+
#if defined(DETECT_MSIE_IMAGES) || defined(USE_IMAGE_LIST)
/* Block as image? */
if ( (csp->config->tinygif > 0) && block_imageurl(http, csp) )
write_socket(csp->cfd, p, strlen(p));
}
- log_error(LOG_LEVEL_LOG, "%s", p);
-
freez(p);
freez(hdr);
return;
{
err = zalloc(strlen(CNXDOM) + strlen(http->host));
sprintf(err, CNXDOM, http->host);
+
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 404 0",
+ csp->ip_addr_str, http->cmd);
}
else
{
eno = safe_strerror(errno);
err = zalloc(strlen(CFAIL) + strlen(http->hostport) + strlen(eno));
sprintf(err, CFAIL, http->hostport, eno);
+
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+ csp->ip_addr_str, http->cmd);
}
write_socket(csp->cfd, err, strlen(err));
- log_error(LOG_LEVEL_LOG, err);
-
freez(err);
freez(hdr);
return;
sprintf(err, CFAIL, http->hostport, eno);
write_socket(csp->cfd, err, strlen(err));
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+ csp->ip_addr_str, http->cmd);
+
freez(err);
freez(hdr);
return;
* so just send the "connect succeeded" message to the
* client, flush the rest, and get out of the way.
*/
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 2\n",
+ csp->ip_addr_str, http->cmd);
+
if (write_socket(csp->cfd, CSUCCEED, sizeof(CSUCCEED)-1) < 0)
{
freez(hdr);
{
n = read_socket(csp->cfd, buf, sizeof(buf));
- if (n <= 0) break; /* "game over, man" */
+ if (n <= 0)
+ {
+ break; /* "game over, man" */
+ }
if (write_socket(csp->sfd, buf, n) != n)
{
eno = safe_strerror(errno);
sprintf(buf, CFAIL, http->hostport, eno);
freez(eno);
+
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+ csp->ip_addr_str, http->cmd);
+
write_socket(csp->cfd, buf, strlen(buf));
return;
}
return;
}
}
+ byte_count += n;
continue;
}
else
#endif /* def PCRS */
-
if ((write_socket(csp->cfd, hdr, n) != n)
- || (NOT_FILTERING_AND (flush_socket(csp->cfd, csp) < 0)))
+ || (NOT_FILTERING_AND (n = flush_socket(csp->cfd, csp) < 0)))
{
log_error(LOG_LEVEL_CONNECT, "write header to client failed: %E");
return;
}
+ NOT_FILTERING_AND (byte_count += n);
+
/* we're finished with the server's header */
freez(hdr);
return; /* huh? we should never get here */
}
-
+ log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 %d",
+ csp->ip_addr_str, http->cmd, byte_count);
}
if ( NULL == (csp = (struct client_state *) malloc(sizeof(*csp))) )
{
- log_error(LOG_LEVEL_ERROR, "malloc(%d) for csp failed: %E", sizeof(*csp));
+ log_error(LOG_LEVEL_FATAL, "malloc(%d) for csp failed: %E", sizeof(*csp));
continue;
}
{
exit(1);
}
-#endif\r
+#endif
freez(csp);
continue;
}
else
{
log_error(LOG_LEVEL_CONNECT, "OK");
- }\r
+ }
#if defined(TOGGLE)
/* by haroon - most of credit to srt19170 */
log_error(LOG_LEVEL_FATAL, "a loader failed - must exit");
/* Never get here - LOG_LEVEL_FATAL causes program exit */
}
-\r
- if (block_acl(NULL,csp))\r
- {\r
- log_error(LOG_LEVEL_CONNECT, "Connection dropped due to ACL");\r
- close_socket(csp->cfd);\r
- freez(csp);\r
- continue;\r
- }\r
-
- /* add it to the list of clients */\r
- csp->next = clients->next;\r
- clients->next = csp;\r
-\r
+
+ if (block_acl(NULL,csp))
+ {
+ log_error(LOG_LEVEL_CONNECT, "Connection dropped due to ACL");
+ close_socket(csp->cfd);
+ freez(csp);
+ continue;
+ }
+
+ /* add it to the list of clients */
+ csp->next = clients->next;
+ clients->next = csp;
+
if (config->multi_threaded)
{
int child_id;