X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fshared%2Fcustom_output_search_replace.c;fp=src%2Fshared%2Fcustom_output_search_replace.c;h=5fd6319d33a37b0dbf6c460f832c9d817ccda4db;hp=0000000000000000000000000000000000000000;hb=789cbc8e52da68eba3517b920ef22e000cf3c9fd;hpb=ef70704f0b31b59bb719b884d6a99cb9e3e2044a diff --git a/src/shared/custom_output_search_replace.c b/src/shared/custom_output_search_replace.c new file mode 100644 index 0000000..5fd6319 --- /dev/null +++ b/src/shared/custom_output_search_replace.c @@ -0,0 +1,201 @@ +#include "shared.h" +char * searchAndReplace2(char* orig, char* search, char*value) +{ + char *p; + size_t total_len = strlen(orig); + size_t token_len = strlen(search); + size_t value_len = strlen(value); + + int inx_start = 0; + char * tmp = NULL; + int tmp_offset = 0; + int total_bytes_allocated = 0; + int from = 0; + p = strstr(orig, search); + if(p==NULL) + { + os_strdup(orig,tmp); + + return tmp; + } + if (value==NULL) + { + value=""; + } + inx_start = p - orig; + + while (p != NULL) + { + if (inx_start > 0) + { + if (tmp == NULL) + { + int len_to_add = (inx_start); + + tmp = (char*) malloc(sizeof(char) * len_to_add); + total_bytes_allocated += len_to_add; + + strncpy(tmp, orig + tmp_offset, inx_start); + tmp_offset = inx_start; + } + + total_bytes_allocated += value_len; + tmp = (char*) realloc(tmp, total_bytes_allocated); + + strncpy(tmp + tmp_offset, value, value_len); + tmp_offset += value_len; + + + p = strstr(orig + inx_start + token_len, search); + + if(p!=NULL) + { + inx_start = p - orig; + from = inx_start + token_len; + if (inx_start - tmp_offset > 0) + { + total_bytes_allocated += inx_start - from; + tmp = (char*) realloc(tmp, total_bytes_allocated); + strncpy(tmp + tmp_offset, orig + from, inx_start - from); + tmp_offset += inx_start - from; + } + }//No more coincidences. + else + { + from = inx_start + token_len; + } + } + + } + if ((from < total_len) && from>0) + { + total_bytes_allocated += total_len - from;//((from - (int)token_len) + (int)value_len); + tmp = (char*) realloc(tmp, total_bytes_allocated+1); + strncpy(tmp + tmp_offset, orig + from, total_len - from); + } + tmp[total_bytes_allocated]='\0'; + + return tmp; +} +#include "shared.h" +char * searchAndReplace(char* orig, char* search, char*value) +{ + char *p; + size_t total_len = strlen(orig); + size_t token_len = strlen(search); + size_t value_len = strlen(value); + + int inx_start = 0; + char * tmp = NULL; + int tmp_offset = 0; + int total_bytes_allocated = 0; + int from = 0; + p = strstr(orig, search); + if(p==NULL) + { + os_strdup(orig,tmp); + + return tmp; + } + if (value==NULL) + { + value=""; + } + inx_start = p - orig; + + while (p != NULL) + { + if (inx_start > 0) + { + if (tmp == NULL) + { + int len_to_add = (inx_start); + + tmp = (char*) malloc(sizeof(char) * len_to_add); + total_bytes_allocated += len_to_add; + + strncpy(tmp, orig + tmp_offset, inx_start); + tmp_offset = inx_start; + } + + total_bytes_allocated += value_len; + tmp = (char*) realloc(tmp, total_bytes_allocated); + + strncpy(tmp + tmp_offset, value, value_len); + tmp_offset += value_len; + + + p = strstr(orig + inx_start + token_len, search); + + if(p!=NULL) + { + inx_start = p - orig; + from = inx_start + token_len; + if (inx_start - tmp_offset > 0) + { + total_bytes_allocated += inx_start - from; + tmp = (char*) realloc(tmp, total_bytes_allocated); + strncpy(tmp + tmp_offset, orig + from, inx_start - from); + tmp_offset += inx_start - from; + } + }//No more coincidences. + else + { + from = inx_start + token_len; + } + } + + } + if ((from < total_len) && from>0) + { + total_bytes_allocated += total_len - from;//((from - (int)token_len) + (int)value_len); + tmp = (char*) realloc(tmp, total_bytes_allocated+1); + strncpy(tmp + tmp_offset, orig + from, total_len - from); + } + tmp[total_bytes_allocated]='\0'; + + return tmp; +} + +//escape newlines characters. Returns a new allocated string. +char* escape_newlines(char *orig) +{ + const char *ptr; + char *ret, *retptr; + int size; + + ptr = orig; + size = 1; + while (*ptr) + { + if ((*ptr == '\n') ||(*ptr == '\r')) + size += 2; + else + size += 1; + ptr++; + } + + ret = malloc (size); + ptr = orig; + retptr = ret; + while (*ptr) { + if (*ptr == '\n') { + *retptr = '\\'; + *(retptr+1) = 'n'; + retptr += 2; + } + else if (*ptr == '\r') { + *retptr = '\\'; + *(retptr+1) = 'n'; + retptr += 2; + } + else { + *retptr = *ptr; + retptr ++; + } + ptr++; + } + *retptr = '\0'; + + return ret; +}