1 /*
2 ** Zabbix
3 ** Copyright (C) 2001-2021 Zabbix SIA
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 **/
19 
20 #include "common.h"
21 #include "zbxserialize.h"
22 #include "db.h"
23 
zbx_db_mediatype_clean(DB_MEDIATYPE * mt)24 void 	zbx_db_mediatype_clean(DB_MEDIATYPE *mt)
25 {
26 	zbx_free(mt->smtp_server);
27 	zbx_free(mt->smtp_helo);
28 	zbx_free(mt->smtp_email);
29 	zbx_free(mt->exec_path);
30 	zbx_free(mt->gsm_modem);
31 	zbx_free(mt->username);
32 	zbx_free(mt->passwd);
33 	zbx_free(mt->exec_params);
34 	zbx_free(mt->attempt_interval);
35 	zbx_free(mt->script);
36 	zbx_free(mt->timeout);
37 }
38 
zbx_serialize_mediatype(unsigned char ** data,zbx_uint32_t * data_alloc,zbx_uint32_t * data_offset,const DB_MEDIATYPE * mt)39 void	zbx_serialize_mediatype(unsigned char **data, zbx_uint32_t *data_alloc, zbx_uint32_t *data_offset,
40 		const DB_MEDIATYPE *mt)
41 {
42 	zbx_uint32_t	data_len = 0, smtp_server_len, smtp_helo_len, smtp_email_len, exec_path_len, gsm_modem_len,
43 			username_len, passwd_len, exec_params_len, script_len, attempt_interval_len, timeout_len;
44 	unsigned char	*ptr, type = mt->type;
45 
46 	zbx_serialize_prepare_value(data_len, mt->mediatypeid);
47 	zbx_serialize_prepare_value(data_len, type);
48 	zbx_serialize_prepare_str_len(data_len, mt->smtp_server, smtp_server_len);
49 	zbx_serialize_prepare_str_len(data_len, mt->smtp_helo, smtp_helo_len);
50 	zbx_serialize_prepare_str_len(data_len, mt->smtp_email, smtp_email_len);
51 	zbx_serialize_prepare_str_len(data_len, mt->exec_path, exec_path_len);
52 	zbx_serialize_prepare_str_len(data_len, mt->gsm_modem, gsm_modem_len);
53 	zbx_serialize_prepare_str_len(data_len, mt->username, username_len);
54 	zbx_serialize_prepare_str_len(data_len, mt->passwd, passwd_len);
55 	zbx_serialize_prepare_value(data_len, mt->smtp_port);
56 	zbx_serialize_prepare_value(data_len, mt->smtp_security);
57 	zbx_serialize_prepare_value(data_len, mt->smtp_verify_peer);
58 	zbx_serialize_prepare_value(data_len, mt->smtp_verify_host);
59 	zbx_serialize_prepare_value(data_len, mt->smtp_authentication);
60 	zbx_serialize_prepare_str_len(data_len, mt->exec_params, exec_params_len);
61 	zbx_serialize_prepare_value(data_len, mt->maxsessions);
62 	zbx_serialize_prepare_value(data_len, mt->maxattempts);
63 	zbx_serialize_prepare_str_len(data_len, mt->attempt_interval, attempt_interval_len);
64 	zbx_serialize_prepare_value(data_len, mt->content_type);
65 	zbx_serialize_prepare_str_len(data_len, mt->script, script_len);
66 	zbx_serialize_prepare_str_len(data_len, mt->timeout, timeout_len);
67 
68 	while (data_len > *data_alloc - *data_offset)
69 	{
70 		*data_alloc *= 2;
71 		*data = (unsigned char *)zbx_realloc(*data, *data_alloc);
72 	}
73 
74 	ptr = *data + *data_offset;
75 	ptr += zbx_serialize_value(ptr, mt->mediatypeid);
76 	ptr += zbx_serialize_value(ptr, type);
77 	ptr += zbx_serialize_str(ptr, mt->smtp_server, smtp_server_len);
78 	ptr += zbx_serialize_str(ptr, mt->smtp_helo, smtp_helo_len);
79 	ptr += zbx_serialize_str(ptr, mt->smtp_email, smtp_email_len);
80 	ptr += zbx_serialize_str(ptr, mt->exec_path, exec_path_len);
81 	ptr += zbx_serialize_str(ptr, mt->gsm_modem, gsm_modem_len);
82 	ptr += zbx_serialize_str(ptr, mt->username, username_len);
83 	ptr += zbx_serialize_str(ptr, mt->passwd, passwd_len);
84 	ptr += zbx_serialize_value(ptr, mt->smtp_port);
85 	ptr += zbx_serialize_value(ptr, mt->smtp_security);
86 	ptr += zbx_serialize_value(ptr, mt->smtp_verify_peer);
87 	ptr += zbx_serialize_value(ptr, mt->smtp_verify_host);
88 	ptr += zbx_serialize_value(ptr, mt->smtp_authentication);
89 	ptr += zbx_serialize_str(ptr, mt->exec_params, exec_params_len);
90 	ptr += zbx_serialize_value(ptr, mt->maxsessions);
91 	ptr += zbx_serialize_value(ptr, mt->maxattempts);
92 	ptr += zbx_serialize_str(ptr, mt->attempt_interval, attempt_interval_len);
93 	ptr += zbx_serialize_value(ptr, mt->content_type);
94 	ptr += zbx_serialize_str(ptr, mt->script, script_len);
95 	(void)zbx_serialize_str(ptr, mt->timeout, timeout_len);
96 
97 	*data_offset += data_len;
98 }
99 
zbx_deserialize_mediatype(const unsigned char * data,DB_MEDIATYPE * mt)100 zbx_uint32_t	zbx_deserialize_mediatype(const unsigned char *data, DB_MEDIATYPE *mt)
101 {
102 	zbx_uint32_t		len;
103 	const unsigned char	*start = data;
104 	unsigned char		type;
105 
106 	data += zbx_deserialize_value(data, &mt->mediatypeid);
107 	data += zbx_deserialize_value(data, &type);
108 	data += zbx_deserialize_str(data, &mt->smtp_server, len);
109 	data += zbx_deserialize_str(data, &mt->smtp_helo, len);
110 	data += zbx_deserialize_str(data, &mt->smtp_email, len);
111 	data += zbx_deserialize_str(data, &mt->exec_path, len);
112 	data += zbx_deserialize_str(data, &mt->gsm_modem, len);
113 	data += zbx_deserialize_str(data, &mt->username, len);
114 	data += zbx_deserialize_str(data, &mt->passwd, len);
115 	data += zbx_deserialize_value(data, &mt->smtp_port);
116 	data += zbx_deserialize_value(data, &mt->smtp_security);
117 	data += zbx_deserialize_value(data, &mt->smtp_verify_peer);
118 	data += zbx_deserialize_value(data, &mt->smtp_verify_host);
119 	data += zbx_deserialize_value(data, &mt->smtp_authentication);
120 	data += zbx_deserialize_str(data, &mt->exec_params, len);
121 	data += zbx_deserialize_value(data, &mt->maxsessions);
122 	data += zbx_deserialize_value(data, &mt->maxattempts);
123 	data += zbx_deserialize_str(data, &mt->attempt_interval, len);
124 	data += zbx_deserialize_value(data, &mt->content_type);
125 	data += zbx_deserialize_str(data, &mt->script, len);
126 	data += zbx_deserialize_str(data, &mt->timeout, len);
127 
128 	mt->type = type;
129 
130 	return (zbx_uint32_t)(data - start);
131 }
132