From f95122885a6ff906b7273f204bb1ef048667c896 Mon Sep 17 00:00:00 2001 From: jongfoster Date: Sat, 26 May 2001 17:27:53 +0000 Subject: [PATCH] Added support for CLF and fixed LOG_LEVEL_LOG. Also did CRLF->LF fix of my previous patch. --- jcc.c | 82 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 26 deletions(-) diff --git a/jcc.c b/jcc.c index 0970e0be..75e48a29 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -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 $ @@ -33,6 +33,10 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.9 2001/05/26 00:28:36 jongfoster Exp $"; * * 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). @@ -251,7 +255,9 @@ static void chat(struct client_state *csp) 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 @@ -316,6 +322,9 @@ static void chat(struct client_state *csp) { strcpy(buf, CHEADER); write_socket(csp->cfd, buf, strlen(buf)); + + log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 400 0", csp->ip_addr_str); + return; } @@ -448,6 +457,9 @@ static void chat(struct client_state *csp) 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) ) @@ -485,8 +497,6 @@ static void chat(struct client_state *csp) write_socket(csp->cfd, p, strlen(p)); } - log_error(LOG_LEVEL_LOG, "%s", p); - freez(p); freez(hdr); return; @@ -517,18 +527,22 @@ static void chat(struct client_state *csp) { 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; @@ -555,6 +569,9 @@ static void chat(struct client_state *csp) 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; @@ -567,6 +584,9 @@ static void chat(struct client_state *csp) * 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); @@ -609,7 +629,10 @@ static void chat(struct client_state *csp) { 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) { @@ -638,6 +661,10 @@ static void chat(struct client_state *csp) 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; } @@ -720,6 +747,7 @@ static void chat(struct client_state *csp) return; } } + byte_count += n; continue; } else @@ -818,9 +846,8 @@ static void chat(struct client_state *csp) #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"); @@ -832,6 +859,8 @@ static void chat(struct client_state *csp) return; } + NOT_FILTERING_AND (byte_count += n); + /* we're finished with the server's header */ freez(hdr); @@ -853,7 +882,8 @@ static void chat(struct client_state *csp) 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); } @@ -1062,7 +1092,7 @@ static void listen_loop(void) 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; } @@ -1120,14 +1150,14 @@ static void listen_loop(void) { exit(1); } -#endif +#endif freez(csp); continue; } else { log_error(LOG_LEVEL_CONNECT, "OK"); - } + } #if defined(TOGGLE) /* by haroon - most of credit to srt19170 */ @@ -1139,19 +1169,19 @@ static void listen_loop(void) log_error(LOG_LEVEL_FATAL, "a loader failed - must exit"); /* Never get here - LOG_LEVEL_FATAL causes program exit */ } - - 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 (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; -- 2.39.2