1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/*
** Zabbix
** Copyright (C) 2001-2021 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
//#include "zbxipcservice.h"
//#include "zbxjson.h"
//#include "daemon.h"
//#include "zbxrtc.h"
#include "rtc.h"
//#include "log.h"
//#include "zbxdiag.h"
#include "common.h"
/******************************************************************************
* *
* Function: zbx_rtc_parse_loglevel_option *
* *
* Purpose: parse loglevel runtime control option *
* *
* Parameters: opt - [IN] the runtime control option *
* len - [IN] the runtime control option length without *
* parameter *
* pid - [OUT] the target pid (if specified) *
* proc_type - [OUT] the target process type (if specified) *
* proc_num - [OUT] the target process num (if specified) *
* error - [OUT] the error message *
* *
* Return value: SUCCEED - the runtime control option was processed *
* FAIL - otherwise *
* *
******************************************************************************/
int zbx_rtc_parse_loglevel_option(const char *opt, size_t len, pid_t *pid, int *proc_type, int *proc_num,
char **error)
{
const char *rtc_options;
rtc_options = opt + len;
if ('\0' == *rtc_options)
return SUCCEED;
if ('=' != *rtc_options)
{
*error = zbx_dsprintf(NULL, "invalid runtime control option \"%s\"", opt);
return FAIL;
}
else if (0 != isdigit(*(++rtc_options)))
{
/* convert PID */
if (FAIL == is_uint32(rtc_options, pid) || 0 == *pid)
{
*error = zbx_dsprintf(NULL, "invalid log level control target -"
" invalid or unsupported process identifier");
return FAIL;
}
}
else
{
char proc_name[MAX_STRING_LEN], *proc_num_ptr;
if ('\0' == *rtc_options)
{
*error = zbx_dsprintf(NULL, "invalid log level control target -"
" unspecified process identifier or type");
return FAIL;
}
zbx_strlcpy(proc_name, rtc_options, sizeof(proc_name));
if (NULL != (proc_num_ptr = strchr(proc_name, ',')))
*proc_num_ptr++ = '\0';
if ('\0' == *proc_name)
{
*error = zbx_dsprintf(NULL, "invalid log level control target - unspecified process type");
return FAIL;
}
if (ZBX_PROCESS_TYPE_UNKNOWN == (*proc_type = get_process_type_by_name(proc_name)))
{
*error = zbx_dsprintf(NULL, "invalid log level control target - unknown process type \"%s\"",
proc_name);
return FAIL;
}
if (NULL != proc_num_ptr)
{
if ('\0' == *proc_num_ptr)
{
*error = zbx_dsprintf(NULL, "invalid log level control target -"
" unspecified process number");
return FAIL;
}
/* convert Zabbix process number (e.g. "2" in "poller,2") */
if (FAIL == is_uint32(proc_num_ptr, proc_num) || 0 == *proc_num)
{
*error = zbx_dsprintf(NULL, "invalid log level control target -"
" invalid or unsupported process number \"%s\"", proc_num_ptr);
return FAIL;
}
}
}
return SUCCEED;
}
|