webalizer.c
来自「统计日志的工具」· C语言 代码 · 共 1,572 行 · 第 1/5 页
C
1,572 行
if (cur_month != rec_month) { clear_month(); cur_sec = rec_sec; /* set current counters */ cur_min = rec_min; cur_hour = rec_hour; cur_day = rec_day; cur_month = rec_month; cur_year = rec_year; cur_tstamp= rec_tstamp; f_day=l_day=rec_day; /* reset first and last day */ } } } /* check for out of sequence records */ if (rec_tstamp/3600 < cur_tstamp/3600) { if (!fold_seq_err && ((rec_tstamp+SLOP_VAL)/3600<cur_tstamp/3600) ) { total_ignore++; continue; } else { rec_sec = cur_sec; /* if folding sequence */ rec_min = cur_min; /* errors, just make it */ rec_hour = cur_hour; /* look like the last */ rec_day = cur_day; /* good records timestamp */ rec_month = cur_month; rec_year = cur_year; rec_tstamp= cur_tstamp; } } cur_tstamp=rec_tstamp; /* update current timestamp */ /*********************************************/ /* DO SOME PRE-PROCESS FORMATTING */ /*********************************************/ /* fix URL field */ cp1 = cp2 = log_rec.url; /* handle null '-' case here... */ if (*++cp1 == '-') { *cp2++ = '-'; *cp2 = '\0'; } else { /* strip actual URL out of request */ while ( (*cp1 != ' ') && (*cp1 != '\0') ) cp1++; if (*cp1 != '\0') { /* scan to begin of actual URL field */ while ((*cp1 == ' ') && (*cp1 != '\0')) cp1++; /* remove duplicate / if needed */ if (( *cp1=='/') && (*(cp1+1)=='/')) cp1++; while ((*cp1 != ' ')&&(*cp1 != '"')&&(*cp1 != '\0')) *cp2++ = *cp1++; *cp2 = '\0'; } } /* un-escape URL */ unescape(log_rec.url); /* check for service (ie: http://) and lowercase if found */ if ( (cp2=strstr(log_rec.url,"://")) != NULL) { cp1=log_rec.url; while (cp1!=cp2) { if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; cp1++; } } /* strip query portion of cgi scripts */ cp1 = log_rec.url; while (*cp1 != '\0') if (!isurlchar(*cp1)) { *cp1 = '\0'; break; } else cp1++; if (log_rec.url[0]=='\0') { log_rec.url[0]='/'; log_rec.url[1]='\0'; } /* strip off index.html (or any aliases) */ lptr=index_alias; while (lptr!=NULL) { if ((cp1=strstr(log_rec.url,lptr->string))!=NULL) { if ((cp1==log_rec.url)||(*(cp1-1)=='/')) { *cp1='\0'; if (log_rec.url[0]=='\0') { log_rec.url[0]='/'; log_rec.url[1]='\0'; } break; } } lptr=lptr->next; } /* unescape referrer */ unescape(log_rec.refer); /* fix referrer field */ cp1 = log_rec.refer; cp3 = cp2 = cp1++; if ( (*cp2 != '\0') && (*cp2 == '"') ) { while ( *cp1 != '\0' ) { cp3=cp2; if ((*cp1<32&&*cp1>0) || *cp1==127 || *cp1=='<') *cp1=0; else *cp2++=*cp1++; } *cp3 = '\0'; } /* strip query portion of cgi referrals */ cp1 = log_rec.refer; if (*cp1 != '\0') { while (*cp1 != '\0') { if (!isurlchar(*cp1)) { /* Save query portion in log.rec.srchstr */ strncpy(log_rec.srchstr,cp1,MAXSRCH); *cp1++='\0'; break; } else cp1++; } /* handle null referrer */ if (log_rec.refer[0]=='\0') { log_rec.refer[0]='-'; log_rec.refer[1]='\0'; } } /* if HTTP request, lowercase http://sitename/ portion */ cp1 = log_rec.refer; if ( (*cp1=='h') || (*cp1=='H')) { while ( (*cp1!='/') && (*cp1!='\0')) { if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; cp1++; } /* now do hostname */ if ( (*cp1=='/') && ( *(cp1+1)=='/')) {cp1++; cp1++;} while ( (*cp1!='/') && (*cp1!='\0')) { if ( (*cp1>='A') && (*cp1<='Z')) *cp1 += 'a'-'A'; cp1++; } } /* Do we need to mangle? */ if (mangle_agent) { str=cp2=log_rec.agent; cp1=strstr(str,"ompatible"); /* check known fakers */ if (cp1!=NULL) { while (*cp1!=';'&&*cp1!='\0') cp1++; /* kludge for Mozilla/3.01 (compatible;) */ if (*cp1++==';' && strcmp(cp1,")\"")) { /* success! */ while (*cp1 == ' ') cp1++; /* eat spaces */ while (*cp1!='.'&&*cp1!='\0'&&*cp1!=';') *cp2++=*cp1++; if (mangle_agent<5) { while (*cp1!='.'&&*cp1!=';'&&*cp1!='\0') *cp2++=*cp1++; if (*cp1!=';'&&*cp1!='\0') { *cp2++=*cp1++; *cp2++=*cp1++; } } if (mangle_agent<4) if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; if (mangle_agent<3) while (*cp1!=';'&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++; if (mangle_agent<2) { /* Level 1 - try to get OS */ cp1=strstr(str,")"); if (cp1!=NULL) { *cp2++=' '; *cp2++='('; while (*cp1!=';'&&*cp1!='('&&cp1!=str) cp1--; if (cp1!=str&&*cp1!='\0') cp1++; while (*cp1==' '&&*cp1!='\0') cp1++; while (*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; *cp2++=')'; } } *cp2='\0'; } else { /* nothing after "compatible", should we mangle? */ /* not for now */ } } else { cp1=strstr(str,"Opera"); /* Opera flavor */ if (cp1!=NULL) { while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++; while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; if (mangle_agent<5) { while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; *cp2++=*cp1++; *cp2++=*cp1++; } if (mangle_agent<4) if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; if (mangle_agent<3) while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++; if (mangle_agent<2) { cp1=strstr(str,"("); if (cp1!=NULL) { cp1++; *cp2++=' '; *cp2++='('; while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; *cp2++=')'; } } *cp2='\0'; } else { cp1=strstr(str,"Mozilla"); /* Netscape flavor */ if (cp1!=NULL) { while (*cp1!='/'&&*cp1!=' '&&*cp1!='\0') *cp2++=*cp1++; if (*cp1==' ') *cp1='/'; while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; if (mangle_agent<5) { while (*cp1!='.'&&*cp1!='\0') *cp2++=*cp1++; *cp2++=*cp1++; *cp2++=*cp1++; } if (mangle_agent<4) if (*cp1>='0'&&*cp1<='9') *cp2++=*cp1++; if (mangle_agent<3) while (*cp1!=' '&&*cp1!='\0'&&*cp1!='(') *cp2++=*cp1++; if (mangle_agent<2) { /* Level 1 - Try to get OS */ cp1=strstr(str,"("); if (cp1!=NULL) { cp1++; *cp2++=' '; *cp2++='('; while (*cp1!=';'&&*cp1!=')'&&*cp1!='\0') *cp2++=*cp1++; *cp2++=')'; } } *cp2='\0'; } } } } /* if necessary, shrink referrer to fit storage */ if (strlen(log_rec.refer)>=MAXREFH) { if (verbose) fprintf(stderr,"%s [%lu]\n", msg_big_ref,total_rec); log_rec.refer[MAXREFH-1]='\0'; } /* if necessary, shrink URL to fit storage */ if (strlen(log_rec.url)>=MAXURLH) { if (verbose) fprintf(stderr,"%s [%lu]\n", msg_big_req,total_rec); log_rec.url[MAXURLH-1]='\0'; } /* fix user agent field */ cp1 = log_rec.agent; cp3 = cp2 = cp1++; if ( (*cp2 != '\0') && ((*cp2 == '"')||(*cp2 == '(')) ) { while (*cp1 |= '\0') { cp3 = cp2; *cp2++ = *cp1++; } *cp3 = '\0'; } cp1 = log_rec.agent; /* CHANGE !!! */ while (*cp1 != 0) /* get rid of more common _bad_ chars ;) */ { if ( (*cp1 < 32) || (*cp1==127) || (*cp1=='<') || (*cp1=='>') ) { *cp1='\0'; break; } else cp1++; } /* fix username if needed */ if (log_rec.ident[0]==0) { log_rec.ident[0]='-'; log_rec.ident[1]='\0'; } else { cp3=log_rec.ident; while (*cp3>=32 && *cp3!='"') cp3++; *cp3='\0'; } /* unescape user name */ unescape(log_rec.ident); /********************************************/ /* PROCESS RECORD */ /********************************************/ /* first time through? */ if (cur_month == 0) { /* if yes, init our date vars */ cur_month=rec_month; cur_year=rec_year;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?