- FILE *tmp, *fp, *fp_usr;
- char template1[255]="/var/tmp/sargtpl1.XXXXXX";
- char template2[255]="/var/tmp/sargtpl2.XXXXXX";
- char cmd[512];
- char buf[512];
- int fd1,fd2,nreg;
- int cstatus;
-
- if(UserTabFile[0] != '\0') {
- if(debug) {
- sprintf(msg,"%s: %s",text[86],UserTabFile);
- debuga(msg);
- }
- if((fp_usr=fopen(UserTabFile,"r"))==NULL) {
- fprintf(stderr, "SARG: (realtime) %s: %s - %s\n",text[45],UserTabFile,strerror(errno));
- exit(1);
- }
- nreg = lseek(fileno(fp_usr), 0, SEEK_END);
- lseek(fileno(fp_usr), 0, 0);
- if((userfile=(char *) malloc(nreg+100))==NULL){
- fprintf(stderr, "SARG ERROR: %s",text[87]);
- exit(1);
- }
- bzero(userfile,nreg+100);
- strncat(userfile,":",1);
- z1=0;
- z2=1;
- while(fgets(buf,MAXLEN,fp_usr)!=NULL){
- buf[strlen(buf)-1]='\0';
- if(strstr(buf,"\r") != 0) buf[strlen(buf)-1]='\0';
- if (getword(bufy,sizeof(bufy),buf,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",UserTabFile);
- exit(1);
- }
- for(z1=0; z1<=strlen(bufy); z1++) {
- userfile[z2]=bufy[z1];
- z2++;
- }
- strncat(userfile,":",1);
- for(z1=0; z1<=strlen(buf); z1++) {
- userfile[z2]=buf[z1];
- z2++;
- }
- strncat(userfile,":",1);
- }
- fclose(fp_usr);
- }
-
- fd1 = mkstemp(template1);
- fd2 = mkstemp(template2);
-
- if((fd1 == -1 ) || ((tmp = fdopen (fd1, "w+" )) == NULL) ) { /* failure, bail out */
- fprintf(stderr, "SARG: (realtime) mkstemp error - %s\n",strerror(errno));
- exit(1);
- }
-
- sprintf(cmd,"tail -%d %s",realtime_access_log_lines,AccessLog);
- fp = popen(cmd, "r");
- while(fgets(buf,sizeof(buf),fp) != NULL )
- if (getdata(buf,tmp)<0) {
- printf("SARG: Maybe a broken record or garbage was returned by %s.\n",cmd);
- exit(1);
- }
- pclose(fp);
- fclose(tmp);
-
- sprintf(cmd,"sort -r -k 1,1 -k 2,2 -o %s %s",template2,template1);
- cstatus=system(cmd);
- if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
- fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
- fprintf(stderr, "SARG: sort command: %s\n",cmd);
- exit(1);
- }
- unlink(template1);
- datashow(template2);
+ memcpy(&Dest->EntryTime,&Entry->EntryTime,sizeof(Dest->EntryTime));
+ safe_strcpy(Dest->Ip,Entry->Ip,sizeof(Dest->Ip));
+ if (Entry->Url)
+ {
+ int i;
+ const char *url=Entry->Url;
+
+ // skip the scheme
+ for (i=0 ; i<8 && url[i] && (isalnum(url[i]) || url[i]=='+' || url[i]=='-' || url[i]=='.') ; i++);
+ if (url[i]==':' && url[i+1]=='/' && url[i+2]=='/')
+ {
+ url+=i+3;
+ for (i=0 ; url[i] && url[i]!='/' ; i++);
+ }
+ if (i>=sizeof(Dest->Url)) i=sizeof(Dest->Url)-1;
+ strncpy(Dest->Url,url,i);
+ Dest->Url[i]='\0';
+ }
+ safe_strcpy(Dest->User,Entry->User,sizeof(Dest->User));
+ safe_strcpy(Dest->HttpMethod,Entry->HttpMethod,sizeof(Dest->HttpMethod));