summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authoralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-11-01 12:46:14 +0000
committeralex <alex@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-11-01 12:46:14 +0000
commitda4011aa50486b5658e9a78138d2f4891aae18bf (patch)
tree7a00621c9e4459e825a9e75bf0b33819aa358180 /src
parent9a0c02001ca1c35985be6a20e8d3edd63b7730ed (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')
-rwxr-xr-xsrc/libs/zbxcommon/alias.c8
-rwxr-xr-xsrc/libs/zbxcommon/gnuregex.c3
-rw-r--r--src/libs/zbxcommon/str.c104
-rw-r--r--src/libs/zbxcommon/xml.c2
-rw-r--r--src/libs/zbxlog/log.c2
-rw-r--r--src/libs/zbxsysinfo/aix/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/common/common.c36
-rw-r--r--src/libs/zbxsysinfo/common/file.c2
-rw-r--r--src/libs/zbxsysinfo/common/http.c3
-rw-r--r--src/libs/zbxsysinfo/freebsd/proc.c8
-rw-r--r--src/libs/zbxsysinfo/freebsd/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/hpux/proc.c8
-rw-r--r--src/libs/zbxsysinfo/hpux/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/linux/proc.c16
-rw-r--r--src/libs/zbxsysinfo/linux/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/netbsd/proc.c8
-rw-r--r--src/libs/zbxsysinfo/netbsd/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/openbsd/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/osf/proc.c4
-rw-r--r--src/libs/zbxsysinfo/osf/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/osx/proc.c8
-rw-r--r--src/libs/zbxsysinfo/osx/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/solaris/diskio.c2
-rw-r--r--src/libs/zbxsysinfo/solaris/proc.c8
-rw-r--r--src/libs/zbxsysinfo/solaris/sensors.c4
-rw-r--r--src/libs/zbxsysinfo/unknown/proc.c8
-rw-r--r--src/libs/zbxsysinfo/unknown/sensors.c4
-rwxr-xr-xsrc/libs/zbxsysinfo/win32/proc.c3
-rw-r--r--src/zabbix_agent/diskdevices.c10
-rw-r--r--src/zabbix_agent/interfaces.c6
-rw-r--r--src/zabbix_server/alerter/alerter.c4
-rw-r--r--src/zabbix_server/evalfunc.c2
-rw-r--r--src/zabbix_server/events.c4
-rw-r--r--src/zabbix_server/expression.c12
-rw-r--r--src/zabbix_server/nodewatcher/events.c4
-rw-r--r--src/zabbix_server/nodewatcher/history.c12
-rw-r--r--src/zabbix_server/nodewatcher/nodecomms.c2
-rw-r--r--src/zabbix_server/nodewatcher/nodesender.c12
-rw-r--r--src/zabbix_server/nodewatcher/nodewatcher.c8
-rw-r--r--src/zabbix_server/poller/checks_simple.c6
-rw-r--r--src/zabbix_server/trapper/nodesync.c10
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