diff options
| author | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-11-01 12:46:14 +0000 |
|---|---|---|
| committer | alex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2006-11-01 12:46:14 +0000 |
| commit | da4011aa50486b5658e9a78138d2f4891aae18bf (patch) | |
| tree | 7a00621c9e4459e825a9e75bf0b33819aa358180 /src | |
| parent | 9a0c02001ca1c35985be6a20e8d3edd63b7730ed (diff) | |
- introduced secure strcat and strcpy: zbx_strlcat, zbx_strlcpy (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@3423 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
41 files changed, 228 insertions, 137 deletions
diff --git a/src/libs/zbxcommon/alias.c b/src/libs/zbxcommon/alias.c index 1b4ea33a..d9f84107 100755 --- a/src/libs/zbxcommon/alias.c +++ b/src/libs/zbxcommon/alias.c @@ -58,7 +58,7 @@ int add_alias(const char *name, const char *value) if (NULL != alias) { memset(alias,0,sizeof(ALIAS)); - strncpy(alias->name, name, MAX_ALIAS_NAME-1); + zbx_strlcpy(alias->name, name, MAX_ALIAS_NAME-1); alias->value = (char *)malloc(strlen(value)+1); strcpy(alias->value,value); alias->next=aliasList; @@ -77,7 +77,7 @@ int add_alias(const char *name, const char *value) memset(alias, 0, sizeof(ALIAS)); - strncpy(alias->name, name, MAX_ALIAS_NAME-1); + zbx_strlcpy(alias->name, name, MAX_ALIAS_NAME-1); alias->value = (char *)malloc(strlen(value)+1); strcpy(alias->value, value); @@ -118,9 +118,9 @@ void alias_expand(const char *orig, char *expanded, int exp_buf_len) { if (!strcmp(alias->name,orig)) { - strsncpy(expanded, alias->value, exp_buf_len); + zbx_strlcpy(expanded, alias->value, exp_buf_len); return; } } - strsncpy(expanded, orig, exp_buf_len); + zbx_strlcpy(expanded, orig, exp_buf_len); } diff --git a/src/libs/zbxcommon/gnuregex.c b/src/libs/zbxcommon/gnuregex.c index 7789dd9e..d4a89702 100755 --- a/src/libs/zbxcommon/gnuregex.c +++ b/src/libs/zbxcommon/gnuregex.c @@ -4908,8 +4908,7 @@ regerror (errcode, preg, errbuf, errbuf_size) { if (msg_size > errbuf_size) { - strncpy (errbuf, msg, errbuf_size - 1); - errbuf[errbuf_size - 1] = 0; + zbx_strlcpy (errbuf, msg, errbuf_size - 1); } else strcpy (errbuf, msg); diff --git a/src/libs/zbxcommon/str.c b/src/libs/zbxcommon/str.c index c95efa45..65cb4a6e 100644 --- a/src/libs/zbxcommon/str.c +++ b/src/libs/zbxcommon/str.c @@ -329,7 +329,7 @@ int get_param(const char *param, int num, char *buf, int maxlen) if(idx == num) { tmp[i]='\0'; - strncpy(buf, s, maxlen); + zbx_strlcpy(buf, s, maxlen); tmp[i]=','; /* restore source string */ ret = 0; break; @@ -344,7 +344,7 @@ int get_param(const char *param, int num, char *buf, int maxlen) idx++; if(idx == num) { - strncpy(buf, s, maxlen); + zbx_strlcpy(buf, s, maxlen); ret = 0; } } @@ -539,3 +539,103 @@ int zbx_get_field(char *line, char *result, int num, char separator) return ret; } +/* + * Function: strlcpy, strlcat + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/****************************************************************************** + * * + * Function: zbx_strlcpy * + * * + * Purpose: replacement of insecure strncpy, same os OpenBSD's strlcpy * + * * + * Copy src to string dst of size siz. At most siz-1 characters * + * will be copied. Always NUL terminates (unless siz == 0). * + * Returns strlen(src); if retval >= siz, truncation occurred. * + * * + * Author: Todd C. Miller <Todd.Miller@courtesan.com> * + * * + * Comments: * + * * + ******************************************************************************/ +size_t zbx_strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0) { + while (--n != 0) { + if ((*d++ = *s++) == '\0') + break; + } + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} + +/****************************************************************************** + * * + * Function: zbx_strlcat * + * * + * Purpose: replacement of insecure strncat, same os OpenBSD's strlcat * + * * + * Appends src to string dst of size siz (unlike strncat, size is the * + * full size of dst, not space left). At most siz-1 characters * + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). * + * Returns strlen(src) + MIN(siz, strlen(initial dst)). * + * If retval >= siz, truncation occurred. * + * * + * Author: Todd C. Miller <Todd.Miller@courtesan.com> * + * * + * Comments: * + * * + */ +size_t zbx_strlcat(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} diff --git a/src/libs/zbxcommon/xml.c b/src/libs/zbxcommon/xml.c index 4d242d76..c87f95e5 100644 --- a/src/libs/zbxcommon/xml.c +++ b/src/libs/zbxcommon/xml.c @@ -56,7 +56,7 @@ int xml_get_data(char *xml,char *tag, char *data, int maxlen) if(len>maxlen) len=maxlen; - strncpy(data, start+strlen(tag_open),len); + zbx_strlcpy(data, start+strlen(tag_open),len+1); } return ret; diff --git a/src/libs/zbxlog/log.c b/src/libs/zbxlog/log.c index 991fbda3..c51d17b5 100644 --- a/src/libs/zbxlog/log.c +++ b/src/libs/zbxlog/log.c @@ -224,7 +224,7 @@ void zabbix_log(int level, const char *fmt, ...) if(buf.st_size > MAX_LOG_FILE_LEN) { strscpy(filename_old,log_filename); - strncat(filename_old,".old",MAX_STRING_LEN); + zbx_strlcat(filename_old,".old",MAX_STRING_LEN); remove(filename_old); if(rename(log_filename,filename_old) != 0) { diff --git a/src/libs/zbxsysinfo/aix/sensors.c b/src/libs/zbxsysinfo/aix/sensors.c index 0b594605..5d0aa7d6 100644 --- a/src/libs/zbxsysinfo/aix/sensors.c +++ b/src/libs/zbxsysinfo/aix/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/common/common.c b/src/libs/zbxsysinfo/common/common.c index 8cff5f32..9469cd39 100644 --- a/src/libs/zbxsysinfo/common/common.c +++ b/src/libs/zbxsysinfo/common/common.c @@ -268,12 +268,12 @@ int parse_command( /* return value: 0 - error; 1 - command without parameters; 2 char localstr[MAX_STRING_LEN]; int ret = 2; - strncpy(localstr, command, MAX_STRING_LEN); + zbx_strlcpy(localstr, command, MAX_STRING_LEN); if(cmd) - strncpy(cmd, "", cmd_max_len); + zbx_strlcpy(cmd, "", cmd_max_len); if(param) - strncpy(param, "", param_max_len); + zbx_strlcpy(param, "", param_max_len); pl = strstr(localstr, "["); pr = strstr(localstr, "]"); @@ -290,10 +290,10 @@ int parse_command( /* return value: 0 - error; 1 - command without parameters; 2 pr[0] = 0; if(cmd) - strncpy(cmd, localstr, cmd_max_len); + zbx_strlcpy(cmd, localstr, cmd_max_len); if(pl && pr && param) - strncpy(param, &pl[1] , param_max_len); + zbx_strlcpy(param, &pl[1] , param_max_len); if(!pl && !pr) ret = 1; @@ -388,13 +388,13 @@ int replace_param(const char *cmd, const char *param, char *out, int outlen) if(!cmd && !param) return ret; - strncpy(command, cmd, MAX_STRING_LEN); + zbx_strlcpy(command, cmd, MAX_STRING_LEN); pl = command; while((pr = strchr(pl, '$')) && outlen > 0) { pr[0] = '\0'; - strncat(out, pl, outlen); + zbx_strlcat(out, pl, outlen); outlen -= MIN((int)strlen(pl), (int)outlen); pr[0] = '$'; @@ -404,14 +404,14 @@ int replace_param(const char *cmd, const char *param, char *out, int outlen) if(pr[1] == '0') { - strncpy(buf, command, MAX_STRING_LEN); + zbx_strlcpy(buf, command, MAX_STRING_LEN); } else { get_param(param, (int)(pr[1] - '0'), buf, MAX_STRING_LEN); } - strncat(out, buf, outlen); + zbx_strlcat(out, buf, outlen); outlen -= MIN((int)strlen(buf), (int)outlen); pl = pr + 2; @@ -422,10 +422,10 @@ int replace_param(const char *cmd, const char *param, char *out, int outlen) } pl = pr + 1; - strncat(out, "$", outlen); + zbx_strlcat(out, "$", outlen); outlen -= 1; } - strncat(out, pl, outlen); + zbx_strlcat(out, pl, outlen); outlen -= MIN((int)strlen(pl), (int)outlen); return ret; @@ -485,7 +485,7 @@ int process(const char *in_command, unsigned flags, AGENT_RESULT *result) { if((flags & PROCESS_TEST) && (flags & PROCESS_USE_TEST_PARAM) && commands[i].test_param) { - strncpy(usr_param, commands[i].test_param, MAX_STRING_LEN); + zbx_strlcpy(usr_param, commands[i].test_param, MAX_STRING_LEN); } } else @@ -897,7 +897,7 @@ int TCP_LISTEN(const char *cmd, const char *param, unsigned flags, AGENT_RESULT } strscpy(pattern,porthex); - strncat(pattern," 00000000:0000 0A", MAX_STRING_LEN); + zbx_strlcat(pattern," 00000000:0000 0A", MAX_STRING_LEN); if(NULL == (f = fopen("/proc/net/tcp","r"))) { @@ -1014,8 +1014,8 @@ int PROCCOUNT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT * while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/psinfo",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/psinfo",MAX_STRING_LEN); if(stat(filename,&buf)==0) { @@ -1069,8 +1069,8 @@ int PROCCOUNT(const char *cmd, const char *param, unsigned flags, AGENT_RESULT * while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { @@ -1225,7 +1225,7 @@ int EXECUTE_STR(const char *cmd, const char *param, unsigned flags, AGENT_RESULT cmd_result[len] = '\0'; #else /* not _WINDOWS */ - strsncpy(command, param, sizeof(command)); + zbx_strlcpy(command, param, sizeof(command)); if(0 == (f = popen(command,"r"))) { diff --git a/src/libs/zbxsysinfo/common/file.c b/src/libs/zbxsysinfo/common/file.c index af225a1f..c3a20694 100644 --- a/src/libs/zbxsysinfo/common/file.c +++ b/src/libs/zbxsysinfo/common/file.c @@ -191,7 +191,7 @@ int VFS_FILE_REGEXP(const char *cmd, const char *param, unsigned flags, AGENT_RE } else { - strncpy(tmp,c,len); + zbx_strlcpy(tmp,c,len); } SET_STR_RESULT(result, strdup(tmp)); diff --git a/src/libs/zbxsysinfo/common/http.c b/src/libs/zbxsysinfo/common/http.c index a2f8fe81..f38de138 100644 --- a/src/libs/zbxsysinfo/common/http.c +++ b/src/libs/zbxsysinfo/common/http.c @@ -263,8 +263,7 @@ int WEB_PAGE_REGEXP(const char *cmd, const char *param, unsigned flags, AGENT_RE found = zbx_regexp_match(buffer,regexp,&l); if(NULL != found) { - strncpy(back,found, l); - back[l] = '\0'; + zbx_strlcpy(back,found, l); SET_STR_RESULT(result, strdup(back)); } else diff --git a/src/libs/zbxsysinfo/freebsd/proc.c b/src/libs/zbxsysinfo/freebsd/proc.c index bcb6e6c6..18cc19d5 100644 --- a/src/libs/zbxsysinfo/freebsd/proc.c +++ b/src/libs/zbxsysinfo/freebsd/proc.c @@ -131,8 +131,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -393,8 +393,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/freebsd/sensors.c b/src/libs/zbxsysinfo/freebsd/sensors.c index 4df957a9..ca1d6010 100644 --- a/src/libs/zbxsysinfo/freebsd/sensors.c +++ b/src/libs/zbxsysinfo/freebsd/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/hpux/proc.c b/src/libs/zbxsysinfo/hpux/proc.c index 8f8d4511..97318510 100644 --- a/src/libs/zbxsysinfo/hpux/proc.c +++ b/src/libs/zbxsysinfo/hpux/proc.c @@ -131,8 +131,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -394,8 +394,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/hpux/sensors.c b/src/libs/zbxsysinfo/hpux/sensors.c index 5b4e3eb5..6c4232f2 100644 --- a/src/libs/zbxsysinfo/hpux/sensors.c +++ b/src/libs/zbxsysinfo/hpux/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/linux/proc.c b/src/libs/zbxsysinfo/linux/proc.c index f50876f8..8ec0b9de 100644 --- a/src/libs/zbxsysinfo/linux/proc.c +++ b/src/libs/zbxsysinfo/linux/proc.c @@ -140,8 +140,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -212,8 +212,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE if(proccomm[0] != '\0') { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/cmdline",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/cmdline",MAX_STRING_LEN); if(stat(filename,&buf)!=0) continue; @@ -425,8 +425,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)!=0) { @@ -525,8 +525,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL if(proccomm[0] != '\0') { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/cmdline",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/cmdline",MAX_STRING_LEN); if(stat(filename,&buf)!=0) continue; diff --git a/src/libs/zbxsysinfo/linux/sensors.c b/src/libs/zbxsysinfo/linux/sensors.c index b01bfecc..da51e970 100644 --- a/src/libs/zbxsysinfo/linux/sensors.c +++ b/src/libs/zbxsysinfo/linux/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/netbsd/proc.c b/src/libs/zbxsysinfo/netbsd/proc.c index 1f9b90e6..a702a555 100644 --- a/src/libs/zbxsysinfo/netbsd/proc.c +++ b/src/libs/zbxsysinfo/netbsd/proc.c @@ -131,8 +131,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -394,8 +394,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/netbsd/sensors.c b/src/libs/zbxsysinfo/netbsd/sensors.c index d0357b6c..c3dc5be1 100644 --- a/src/libs/zbxsysinfo/netbsd/sensors.c +++ b/src/libs/zbxsysinfo/netbsd/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/openbsd/sensors.c b/src/libs/zbxsysinfo/openbsd/sensors.c index 665e1d47..8597ca21 100644 --- a/src/libs/zbxsysinfo/openbsd/sensors.c +++ b/src/libs/zbxsysinfo/openbsd/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/osf/proc.c b/src/libs/zbxsysinfo/osf/proc.c index 26fb3bd2..d916ec90 100644 --- a/src/libs/zbxsysinfo/osf/proc.c +++ b/src/libs/zbxsysinfo/osf/proc.c @@ -127,7 +127,7 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { @@ -299,7 +299,7 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/osf/sensors.c b/src/libs/zbxsysinfo/osf/sensors.c index d0357b6c..c3dc5be1 100644 --- a/src/libs/zbxsysinfo/osf/sensors.c +++ b/src/libs/zbxsysinfo/osf/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/osx/proc.c b/src/libs/zbxsysinfo/osx/proc.c index c0a98716..577fc462 100644 --- a/src/libs/zbxsysinfo/osx/proc.c +++ b/src/libs/zbxsysinfo/osx/proc.c @@ -131,8 +131,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -394,8 +394,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/osx/sensors.c b/src/libs/zbxsysinfo/osx/sensors.c index d0357b6c..c3dc5be1 100644 --- a/src/libs/zbxsysinfo/osx/sensors.c +++ b/src/libs/zbxsysinfo/osx/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/solaris/diskio.c b/src/libs/zbxsysinfo/solaris/diskio.c index 29f986dc..16c7269f 100644 --- a/src/libs/zbxsysinfo/solaris/diskio.c +++ b/src/libs/zbxsysinfo/solaris/diskio.c @@ -94,7 +94,7 @@ static DISK_DATA *get_disk_data_record(const char *device) if (p) { - strncpy(p->name, device, MAX_STRING_LEN); + zbx_strlcpy(p->name, device, MAX_STRING_LEN); if (p->name) { diff --git a/src/libs/zbxsysinfo/solaris/proc.c b/src/libs/zbxsysinfo/solaris/proc.c index 4ad43d93..822ccad0 100644 --- a/src/libs/zbxsysinfo/solaris/proc.c +++ b/src/libs/zbxsysinfo/solaris/proc.c @@ -139,8 +139,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RESULT comm_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/psinfo",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/psinfo",MAX_STRING_LEN); if(stat(filename,&buf)==0) { @@ -359,8 +359,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *r comm_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/psinfo",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/psinfo",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/solaris/sensors.c b/src/libs/zbxsysinfo/solaris/sensors.c index d0357b6c..c3dc5be1 100644 --- a/src/libs/zbxsysinfo/solaris/sensors.c +++ b/src/libs/zbxsysinfo/solaris/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/unknown/proc.c b/src/libs/zbxsysinfo/unknown/proc.c index 1f9b90e6..a702a555 100644 --- a/src/libs/zbxsysinfo/unknown/proc.c +++ b/src/libs/zbxsysinfo/unknown/proc.c @@ -131,8 +131,8 @@ int PROC_MEMORY(const char *cmd, const char *param, unsigned flags, AGENT_RE usr_ok = 0; strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); /* Self is a symbolic link. It leads to incorrect results for proc_cnt[zabbix_agentd] */ /* Better approach: check if /proc/x/ is symbolic link */ @@ -394,8 +394,8 @@ int PROC_NUM(const char *cmd, const char *param, unsigned flags, AGENT_RESUL } strscpy(filename,"/proc/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,"/status",MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,"/status",MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/unknown/sensors.c b/src/libs/zbxsysinfo/unknown/sensors.c index b01bfecc..da51e970 100644 --- a/src/libs/zbxsysinfo/unknown/sensors.c +++ b/src/libs/zbxsysinfo/unknown/sensors.c @@ -48,8 +48,8 @@ static int get_sensor(const char *name, unsigned flags, AGENT_RESULT *result) while((entries=readdir(dir))!=NULL) { strscpy(filename,"/proc/sys/dev/sensors/"); - strncat(filename,entries->d_name,MAX_STRING_LEN); - strncat(filename,name,MAX_STRING_LEN); + zbx_strlcat(filename,entries->d_name,MAX_STRING_LEN); + zbx_strlcat(filename,name,MAX_STRING_LEN); if(stat(filename,&buf)==0) { diff --git a/src/libs/zbxsysinfo/win32/proc.c b/src/libs/zbxsysinfo/win32/proc.c index b071d98e..eb1a9ce9 100755 --- a/src/libs/zbxsysinfo/win32/proc.c +++ b/src/libs/zbxsysinfo/win32/proc.c @@ -60,8 +60,7 @@ static int GetProcessUsername(HANDLE hProcess, char *userName, int userNameLen) nlen = min(userNameLen-1,(int)nlen); - strncpy(userName, name, nlen); - userName[nlen] = 0; + zbx_strlcpy(userName, name, nlen); return 1; diff --git a/src/zabbix_agent/diskdevices.c b/src/zabbix_agent/diskdevices.c index 14a63a42..ffa758b1 100644 --- a/src/zabbix_agent/diskdevices.c +++ b/src/zabbix_agent/diskdevices.c @@ -91,8 +91,8 @@ int get_device_name(char *device,int mjr,int diskno) dir=opendir("/dev"); while((entries=readdir(dir))!=NULL) { - strncpy(filename,"/dev/",1024); - strncat(filename,entries->d_name,1024); + zbx_strlcpy(filename,"/dev/",1024); + zbx_strlcat(filename,entries->d_name,1024); if(stat(filename,&buf)==0) { @@ -161,8 +161,7 @@ void init_stats_diskdevices() break; s2++; - strncpy(device,s,s2-s); - device[s2-s]=0; + zbx_strlcpy(device,s,s2-s); sscanf(device,"(%d,%d):(%d,%d,%d,%d,%d)",&major,&diskno,&noinfo,&read_io_ops,&blks_read,&write_io_ops,&blks_write); /* printf("Major:[%d] Minor:[%d] read_io_ops[%d]\n",major,diskno,read_io_ops);*/ @@ -505,8 +504,7 @@ void collect_stats_diskdevices(FILE *outfile) break; s2++; - strncpy(device,s,s2-s); - device[s2-s]=0; + zbx_strlcpy(device,s,s2-s); sscanf(device,"(%d,%d):(%d,%d,%d,%d,%d)",&major,&diskno,&noinfo,&read_io_ops,&blks_read,&write_io_ops,&blks_write); /* printf("Major:[%d] Minor:[%d] read_io_ops[%d]\n",major,diskno,read_io_ops);*/ add_values_diskdevices(now,major,diskno,read_io_ops,blks_read,write_io_ops,blks_write); diff --git a/src/zabbix_agent/interfaces.c b/src/zabbix_agent/interfaces.c index 43c6cd47..4d733e35 100644 --- a/src/zabbix_agent/interfaces.c +++ b/src/zabbix_agent/interfaces.c @@ -129,8 +129,7 @@ void init_stats_interfaces() { if( (s=strstr(line,":")) == NULL) continue; - strncpy(interface,line,s-line); - interface[s-line]=0; + zbx_strlcpy(interface,line,s-line); j1=0; for(j=0;j<(int)strlen(interface);j++) { @@ -367,8 +366,7 @@ void collect_stats_interfaces(FILE *outfile) { if( (s=strstr(line,":")) == NULL) continue; - strncpy(interface,line,s-line); - interface[s-line]=0; + zbx_strncpy(interface,line,s-line); j1=0; for(i1=0;i1<(int)strlen(interface);i1++) { diff --git a/src/zabbix_server/alerter/alerter.c b/src/zabbix_server/alerter/alerter.c index 07705907..1cf2a884 100644 --- a/src/zabbix_server/alerter/alerter.c +++ b/src/zabbix_server/alerter/alerter.c @@ -113,8 +113,8 @@ static int execute_action(DB_ALERT *alert,DB_MEDIATYPE *mediatype, char *error, else { strscpy(full_path,CONFIG_ALERT_SCRIPTS_PATH); - strncat(full_path,"/",MAX_STRING_LEN); - strncat(full_path,mediatype->exec_path,MAX_STRING_LEN); + zbx_strlcat(full_path,"/",MAX_STRING_LEN); + zbx_strlcat(full_path,mediatype->exec_path,MAX_STRING_LEN); ltrim_spaces(full_path); zabbix_log( LOG_LEVEL_DEBUG, "Before executing [%s]", full_path); diff --git a/src/zabbix_server/evalfunc.c b/src/zabbix_server/evalfunc.c index 78668b61..7582baa0 100644 --- a/src/zabbix_server/evalfunc.c +++ b/src/zabbix_server/evalfunc.c @@ -1240,7 +1240,7 @@ int replace_value_by_map(char *value, zbx_uint64_t valuemapid) del_zeroes(new_value); or_value = sql; /* sql variarbvle used as tmp - original value */ - strncpy(sql,value,MAX_STRING_LEN); + zbx_strlcpy(sql,value,MAX_STRING_LEN); zbx_snprintf(value, MAX_STRING_LEN, "%s (%s)", new_value, or_value); diff --git a/src/zabbix_server/events.c b/src/zabbix_server/events.c index 1462e3a8..3816a8ec 100644 --- a/src/zabbix_server/events.c +++ b/src/zabbix_server/events.c @@ -74,9 +74,9 @@ static void add_trigger_info(DB_EVENT *event) if(row) { - strncpy(event->trigger_description, row[0], TRIGGER_DESCRIPTION_LEN_MAX); + zbx_strlcpy(event->trigger_description, row[0], TRIGGER_DESCRIPTION_LEN_MAX); event->trigger_priority = atoi(row[1]); - strncpy(event->trigger_comments, row[2], TRIGGER_COMMENTS_LEN_MAX); + zbx_strlcpy(event->trigger_comments, row[2], TRIGGER_COMMENTS_LEN_MAX); } DBfree_result(result); diff --git a/src/zabbix_server/expression.c b/src/zabbix_server/expression.c index a61be4cd..a979f633 100644 --- a/src/zabbix_server/expression.c +++ b/src/zabbix_server/expression.c @@ -602,7 +602,7 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in while((pr = strchr(pl, '{')) && outlen > 0) { pr[0] = '\0'; - strncat(str_out, pl, outlen); + zbx_strlcat(str_out, pl, outlen); outlen -= MIN(strlen(pl), outlen); pr[0] = '{'; @@ -794,11 +794,11 @@ void substitute_simple_macros(DB_EVENT *event, DB_ACTION *action, char *data, in else zbx_snprintf(replace_to, sizeof(replace_to), "Unknown"); } - strncat(str_out, replace_to, outlen); + zbx_strlcat(str_out, replace_to, outlen); outlen -= MIN(strlen(replace_to), outlen); pl = pr + var_len; } - strncat(str_out, pl, outlen); + zbx_strlcat(str_out, pl, outlen); outlen -= MIN(strlen(pl), outlen); zbx_snprintf(data, dala_max_len, "%s", str_out); @@ -864,7 +864,7 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int dala_ /* copy left side */ pr[0] = '\0'; - strncat(str_out, pl, outlen); + zbx_strlcat(str_out, pl, outlen); outlen -= MIN(strlen(pl), outlen); pr[0] = '{'; @@ -910,11 +910,11 @@ void substitute_macros(DB_EVENT *event, DB_ACTION *action, char *data, int dala_ } pme[0] = '}'; - strncat(str_out, replace_to, outlen); + zbx_strlcat(str_out, replace_to, outlen); outlen -= MIN(strlen(replace_to), outlen); pl = pr + var_len; } - strncat(str_out, pl, outlen); + zbx_strlcat(str_out, pl, outlen); outlen -= MIN(strlen(pl), outlen); zbx_snprintf(data, dala_max_len, "%s", str_out); diff --git a/src/zabbix_server/nodewatcher/events.c b/src/zabbix_server/nodewatcher/events.c index 9f2fe65f..a453d2dd 100644 --- a/src/zabbix_server/nodewatcher/events.c +++ b/src/zabbix_server/nodewatcher/events.c @@ -92,7 +92,7 @@ static int process_node(int nodeid, int master_nodeid, zbx_uint64_t event_lastid memset(data,0,DATA_MAX); zbx_snprintf(tmp,sizeof(tmp),"Events|%d|%d\n", CONFIG_NODEID, nodeid); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); result = DBselect("select eventid,triggerid,clock,value,acknowledged from events where eventid>" ZBX_FS_UI64 " and " ZBX_COND_NODEID " order by eventid", event_lastid, ZBX_NODE("eventid", nodeid)); while((row=DBfetch(result))) @@ -101,7 +101,7 @@ static int process_node(int nodeid, int master_nodeid, zbx_uint64_t event_lastid // zabbix_log( LOG_LEVEL_WARNING, "Processing eventid " ZBX_FS_UI64, eventid); found = 1; zbx_snprintf(tmp,sizeof(tmp),"%s|%s|%s|%s|%s\n", row[0],row[1],row[2],row[3],row[4]); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); } if(found == 1) { diff --git a/src/zabbix_server/nodewatcher/history.c b/src/zabbix_server/nodewatcher/history.c index 69dcfaa4..5b1946f3 100644 --- a/src/zabbix_server/nodewatcher/history.c +++ b/src/zabbix_server/nodewatcher/history.c @@ -91,7 +91,7 @@ static int process_node_history_str(int nodeid, int master_nodeid) memset(data,0,DATA_MAX); zbx_snprintf(tmp,sizeof(tmp),"History|%d|%d\n", CONFIG_NODEID, nodeid); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); zbx_snprintf(sql,sizeof(sql),"select id,itemid,clock,value from history_str_sync where nodeid=%d order by id", nodeid); @@ -103,7 +103,7 @@ static int process_node_history_str(int nodeid, int master_nodeid) // zabbix_log( LOG_LEVEL_WARNING, "Processing itemid " ZBX_FS_UI64, itemid); found = 1; zbx_snprintf(tmp,sizeof(tmp),"%d|%s|%s|%s\n", ZBX_TABLE_HISTORY_STR,row[1],row[2],row[3]); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); } if(found == 1) { @@ -162,7 +162,7 @@ static int process_node_history_uint(int nodeid, int master_nodeid) memset(data,0,DATA_MAX); zbx_snprintf(tmp,sizeof(tmp),"History|%d|%d\n", CONFIG_NODEID, nodeid); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); zbx_snprintf(sql,sizeof(sql),"select id,itemid,clock,value from history_uint_sync where nodeid=%d order by id", nodeid); @@ -174,7 +174,7 @@ static int process_node_history_uint(int nodeid, int master_nodeid) // zabbix_log( LOG_LEVEL_WARNING, "Processing itemid " ZBX_FS_UI64, itemid); found = 1; zbx_snprintf(tmp,sizeof(tmp),"%d|%s|%s|%s\n", ZBX_TABLE_HISTORY_UINT,row[1],row[2],row[3]); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); } if(found == 1) { @@ -233,7 +233,7 @@ static int process_node_history(int nodeid, int master_nodeid) memset(data,0,DATA_MAX); zbx_snprintf(tmp,sizeof(tmp),"History|%d|%d\n", CONFIG_NODEID, nodeid); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); zbx_snprintf(sql,sizeof(sql),"select id,itemid,clock,value from history_sync where nodeid=%d order by id", nodeid); @@ -245,7 +245,7 @@ static int process_node_history(int nodeid, int master_nodeid) // zabbix_log( LOG_LEVEL_WARNING, "Processing itemid " ZBX_FS_UI64, itemid); found = 1; zbx_snprintf(tmp,sizeof(tmp),"%d|%s|%s|%s\n", ZBX_TABLE_HISTORY,row[1],row[2],row[3]); - strncat(data,tmp,DATA_MAX); + zbx_strlcat(data,tmp,DATA_MAX); } if(found == 1) { diff --git a/src/zabbix_server/nodewatcher/nodecomms.c b/src/zabbix_server/nodewatcher/nodecomms.c index 5bde4ac4..511cf8b0 100644 --- a/src/zabbix_server/nodewatcher/nodecomms.c +++ b/src/zabbix_server/nodewatcher/nodecomms.c @@ -98,7 +98,7 @@ int send_to_node(int dest_nodeid, int nodeid, char *data) zabbix_log( LOG_LEVEL_WARNING, "Node [%d] in unknown", dest_nodeid); return FAIL; } - strncpy(ip,row[0],sizeof(ip)); + zbx_strlcpy(ip,row[0],sizeof(ip)); port=atoi(row[1]); DBfree_result(result); diff --git a/src/zabbix_server/nodewatcher/nodesender.c b/src/zabbix_server/nodewatcher/nodesender.c index 7d8035d9..e342c201 100644 --- a/src/zabbix_server/nodewatcher/nodesender.c +++ b/src/zabbix_server/nodewatcher/nodesender.c @@ -105,7 +105,7 @@ static int send_config_data(int nodeid, int dest_nodeid, zbx_uint64_t maxlogid, // snprintf(tmp,sizeof(tmp),"<Data type='config'>\n<Node id='%d'>\n</Node>\n<Version>1.4</Version>\n<Records>\n", nodeid); zbx_snprintf(tmp,sizeof(tmp),"Data|%d|%d\n", CONFIG_NODEID, nodeid); - strncat(xml,tmp,ZBX_XML_MAX); + zbx_strlcat(xml,tmp,ZBX_XML_MAX); while((row=DBfetch(result))) { @@ -128,8 +128,8 @@ static int send_config_data(int nodeid, int dest_nodeid, zbx_uint64_t maxlogid, continue; }*/ - strncat(fields,tables[i].fields[j].name,sizeof(fields)); - strncat(fields,",",sizeof(fields)); + zbx_strlcat(fields,tables[i].fields[j].name,sizeof(fields)); + zbx_strlcat(fields,",",sizeof(fields)); } if(fields[0]!=0) fields[strlen(fields)-1]=0; @@ -142,7 +142,7 @@ static int send_config_data(int nodeid, int dest_nodeid, zbx_uint64_t maxlogid, zbx_snprintf(tmp,sizeof(tmp),"%s|%s|%s", row[0], row[1], row[2]); // zabbix_log( LOG_LEVEL_WARNING, "TMP [%s]",tmp); - strncat(xml,tmp,ZBX_XML_MAX); + zbx_strlcat(xml,tmp,ZBX_XML_MAX); /* for each field */ for(j=0;tables[i].fields[j].name!=0;j++) { @@ -170,9 +170,9 @@ static int send_config_data(int nodeid, int dest_nodeid, zbx_uint64_t maxlogid, // } } // zabbix_log( LOG_LEVEL_WARNING, "TMP [%s]",tmp); - strncat(xml,tmp,ZBX_XML_MAX); + zbx_strlcat(xml,tmp,ZBX_XML_MAX); } - strncat(xml,"\n",ZBX_XML_MAX); + zbx_strlcat(xml,"\n",ZBX_XML_MAX); } else { diff --git a/src/zabbix_server/nodewatcher/nodewatcher.c b/src/zabbix_server/nodewatcher/nodewatcher.c index 8c874d9a..5af392cd 100644 --- a/src/zabbix_server/nodewatcher/nodewatcher.c +++ b/src/zabbix_server/nodewatcher/nodewatcher.c @@ -119,9 +119,9 @@ static int calculate_checksums() j++; continue; } - strncat(fields,"quote(",sizeof(fields)); - strncat(fields,tables[i].fields[j].name,sizeof(fields)); - strncat(fields,"),",sizeof(fields)); + zbx_strlcat(fields,"quote(",sizeof(fields)); + zbx_strlcat(fields,tables[i].fields[j].name,sizeof(fields)); + zbx_strlcat(fields,"),",sizeof(fields)); j++; } if(fields[0]!=0) fields[strlen(fields)-1] = 0; @@ -132,7 +132,7 @@ static int calculate_checksums() tables[i].recid, (zbx_uint64_t)__UINT64_C(100000000000000)*(zbx_uint64_t)nodeid, tables[i].recid, (zbx_uint64_t)__UINT64_C(100000000000000)*(zbx_uint64_t)nodeid+99999999999999); // zabbix_log( LOG_LEVEL_WARNING, "TMP [%s]", tmp); - strncat(sql,tmp,sizeof(sql)); + zbx_strlcat(sql,tmp,sizeof(sql)); } // zabbix_log( LOG_LEVEL_WARNING, "SQL [%s]", sql); diff --git a/src/zabbix_server/poller/checks_simple.c b/src/zabbix_server/poller/checks_simple.c index abd0a9ba..376482c4 100644 --- a/src/zabbix_server/poller/checks_simple.c +++ b/src/zabbix_server/poller/checks_simple.c @@ -46,8 +46,7 @@ int get_value_simple(DB_ITEM *item, AGENT_RESULT *result) zbx_snprintf(c,sizeof(c),"net.tcp.service[%s]",item->key); else { - strncpy( param,l+1, r-l-1); - param[r-l-1]=0; + zbx_strlcpy( param,l+1, r-l-1); if(item->useip==1) { zbx_snprintf(c,sizeof(c),"net.tcp.service[%s,%s]",item->key,item->ip); @@ -68,8 +67,7 @@ int get_value_simple(DB_ITEM *item, AGENT_RESULT *result) zbx_snprintf(c,sizeof(c),"%s",item->key); else { - strncpy( param,l+1, r-l-1); - param[r-l-1]=0; + zbx_strlcpy( param,l+1, r-l-1); /* zbx_snprintf(c,sizeof(c),"dns[%s,%s]",item->ip,param);*/ zbx_snprintf(c,sizeof(c),"dns[%s]",param); } diff --git a/src/zabbix_server/trapper/nodesync.c b/src/zabbix_server/trapper/nodesync.c index 775bce2b..05573743 100644 --- a/src/zabbix_server/trapper/nodesync.c +++ b/src/zabbix_server/trapper/nodesync.c @@ -124,7 +124,7 @@ static int process_record(int nodeid, char *record) if(strcmp(value,"NULL")==0) { zbx_snprintf(tmp,sizeof(tmp),"%s=NULL,", fieldname); - strncat(fields_update,tmp,sizeof(fields)); + zbx_strlcat(fields_update,tmp,sizeof(fields)); zbx_snprintf(tmp,sizeof(tmp),"NULL,", value); } @@ -133,7 +133,7 @@ static int process_record(int nodeid, char *record) if(valuetype == ZBX_TYPE_INT || valuetype == ZBX_TYPE_UINT) { zbx_snprintf(tmp,sizeof(tmp),"%s=%s,", fieldname, value); - strncat(fields_update,tmp,sizeof(fields)); + zbx_strlcat(fields_update,tmp,sizeof(fields)); zbx_snprintf(tmp,sizeof(tmp),"%s,", value); } @@ -142,16 +142,16 @@ static int process_record(int nodeid, char *record) DBescape_string(value, value_esc,MAX_STRING_LEN); zbx_snprintf(tmp,sizeof(tmp),"%s='%s',", fieldname, value_esc); - strncat(fields_update,tmp,sizeof(fields)); + zbx_strlcat(fields_update,tmp,sizeof(fields)); zbx_snprintf(tmp,sizeof(tmp),"'%s',", value_esc); } } - strncat(values,tmp,sizeof(values)); + zbx_strlcat(values,tmp,sizeof(values)); // zabbix_log( LOG_LEVEL_WARNING, "VALUES [%s]", values); zbx_snprintf(tmp,sizeof(tmp),"%s,", fieldname); - strncat(fields,tmp,sizeof(fields)); + zbx_strlcat(fields,tmp,sizeof(fields)); // zabbix_log( LOG_LEVEL_WARNING, "FIELDS [%s]", fields); } else |
