/* passlogd - passive syslog capture daemon copyright (c) 2005 - christian void file: util.c history: 07jun01 cvoid: added sanitize_buffer(). 04jun01 cvoid: added reverse_lookup(). 03jun01 cvoid: created. */ #include "passlog.h" #include #include #include extern int debug; /* INIT_BUF */ void init_buf(char x[], int size) { register int n; for(n = 0; n < size; n++) { x[n] = '\0'; } } /* FIND_HEADER_LENGTH */ int find_header_length(int d) { switch(d) { case DLT_NULL: return(4); /* loopback header 4 bytes */ break; case DLT_EN10MB: return(14); /* ethernet 10mb header 14 bytes */ break; case DLT_FDDI: return(21); /* fddi header 21 bytes */ break; case DLT_PPP: return(0); /* ppp header 0 or 24 bytes? */ break; default: return(14); /* ethernet 10mb header 14 bytes */ break; } } int reverse_lookup(char * addrstr) { /* do reverse lookup */ struct hostent *hostname, *hostaddr; /* resolve the src and destination addresses */ hostaddr = gethostbyname(addrstr); hostname = gethostbyaddr(hostaddr->h_addr, 4, AF_INET); if(!hostname){ return 1; } else { strncpy(addrstr, hostname->h_name, strlen(hostname->h_name) + 1); /* plus one to get the null byte */ return 0; } } void sanitize_buffer(char * buffer, int buflen) { /* sanitize the buffer - replace any bytes in the buffer */ /* that are not printable, NULL or LF with space (0x20) */ /* this probably isn't neccessary, done as a result of an */ /* error in the parser -- left here for the hell of it */ /* even though it is expensive */ int c = 0; for(c = 0; c <= buflen; c++){ if ((!isprint(buffer[c])) && (buffer[c] != '\0') && (buffer[c] != '\n')){ if(debug) printf("tweaked byte %d\n", c); buffer[c]=0x20; } } }