1 /*
2  * ProFTPD - mod_snmp database tables
3  * Copyright (c) 2008-2016 TJ Saunders
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, Suite 500, Boston, MA 02110-1335, USA.
18  *
19  * As a special exemption, TJ Saunders and other respective copyright holders
20  * give permission to link this program with OpenSSL, and distribute the
21  * resulting executable, without including the source code for OpenSSL in the
22  * source distribution.
23  */
24 
25 #ifndef MOD_SNMP_DB_H
26 #define MOD_SNMP_DB_H
27 
28 #include "mod_snmp.h"
29 
30 /* Database IDs */
31 #define SNMP_DB_ID_UNKNOWN		0
32 #define SNMP_DB_ID_NOTIFY		1
33 #define SNMP_DB_ID_CONN			2
34 #define SNMP_DB_ID_DAEMON		3
35 #define SNMP_DB_ID_TIMEOUTS		4
36 #define SNMP_DB_ID_FTP			5
37 #define SNMP_DB_ID_SNMP			6
38 #define SNMP_DB_ID_TLS			7
39 #define SNMP_DB_ID_SSH			8
40 #define SNMP_DB_ID_SFTP			9
41 #define SNMP_DB_ID_SCP			10
42 #define SNMP_DB_ID_BAN			11
43 
44 #if 0
45 #define SNMP_DB_ID_SQL			11
46 #define SNMP_DB_ID_QUOTA		12
47 #define SNMP_DB_ID_GEOIP		14
48 #endif
49 
50 extern int snmp_table_ids[];
51 
52 /* Miscellaneous non-proftpd database "fields" */
53 #define SNMP_DB_NOTIFY_F_SYS_UPTIME				1
54 
55 /* connection database fields */
56 #define SNMP_DB_CONN_F_SERVER_NAME				11
57 #define SNMP_DB_CONN_F_SERVER_ADDR				12
58 #define SNMP_DB_CONN_F_SERVER_PORT				13
59 #define SNMP_DB_CONN_F_CLIENT_ADDR				14
60 #define SNMP_DB_CONN_F_CLIENT_PORT				15
61 #define SNMP_DB_CONN_F_PID					16
62 #define SNMP_DB_CONN_F_USER_NAME				17
63 #define SNMP_DB_CONN_F_PROTOCOL					18
64 
65 /* daemon database fields */
66 #define SNMP_DB_DAEMON_F_SOFTWARE				101
67 #define SNMP_DB_DAEMON_F_VERSION				102
68 #define SNMP_DB_DAEMON_F_ADMIN					103
69 #define SNMP_DB_DAEMON_F_UPTIME					104
70 #define SNMP_DB_DAEMON_F_VHOST_COUNT				105
71 #define SNMP_DB_DAEMON_F_CONN_COUNT				106
72 #define SNMP_DB_DAEMON_F_CONN_TOTAL				107
73 #define SNMP_DB_DAEMON_F_CONN_REFUSED_TOTAL			108
74 #define SNMP_DB_DAEMON_F_RESTART_COUNT				109
75 #define SNMP_DB_DAEMON_F_SEGFAULT_COUNT				110
76 #define SNMP_DB_DAEMON_F_MAXINST_TOTAL				111
77 #define SNMP_DB_DAEMON_F_MAXINST_CONF				112
78 
79 /* timeouts database fields */
80 #define SNMP_DB_TIMEOUTS_F_IDLE_TOTAL				120
81 #define SNMP_DB_TIMEOUTS_F_LOGIN_TOTAL				121
82 #define SNMP_DB_TIMEOUTS_F_NOXFER_TOTAL				122
83 #define SNMP_DB_TIMEOUTS_F_STALLED_TOTAL			123
84 
85 /* ftp.sessions database fields */
86 #define SNMP_DB_FTP_SESS_F_SESS_COUNT				130
87 #define SNMP_DB_FTP_SESS_F_SESS_TOTAL				131
88 #define SNMP_DB_FTP_SESS_F_CMD_INVALID_TOTAL			132
89 
90 /* ftp.logins database fields */
91 #define SNMP_DB_FTP_LOGINS_F_TOTAL				140
92 #define SNMP_DB_FTP_LOGINS_F_ERR_TOTAL				141
93 #define SNMP_DB_FTP_LOGINS_F_ERR_BAD_USER_TOTAL			142
94 #define SNMP_DB_FTP_LOGINS_F_ERR_BAD_PASSWD_TOTAL		143
95 #define SNMP_DB_FTP_LOGINS_F_ERR_GENERAL_TOTAL			144
96 #define SNMP_DB_FTP_LOGINS_F_ANON_COUNT				145
97 #define SNMP_DB_FTP_LOGINS_F_ANON_TOTAL				146
98 
99 /* ftp.dataTransfers database fields */
100 #define SNMP_DB_FTP_XFERS_F_DIR_LIST_COUNT			150
101 #define SNMP_DB_FTP_XFERS_F_DIR_LIST_TOTAL			151
102 #define SNMP_DB_FTP_XFERS_F_DIR_LIST_ERR_TOTAL			152
103 #define SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_COUNT			153
104 #define SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_TOTAL			154
105 #define SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_ERR_TOTAL		155
106 #define SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_COUNT			156
107 #define SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_TOTAL			157
108 #define SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL		158
109 #define SNMP_DB_FTP_XFERS_F_KB_UPLOAD_TOTAL			159
110 #define SNMP_DB_FTP_XFERS_F_KB_DOWNLOAD_TOTAL			160
111 
112 /* snmp database fields */
113 #define SNMP_DB_SNMP_F_PKTS_RECVD_TOTAL				200
114 #define SNMP_DB_SNMP_F_PKTS_SENT_TOTAL				201
115 #define SNMP_DB_SNMP_F_TRAPS_SENT_TOTAL				202
116 #define SNMP_DB_SNMP_F_PKTS_AUTH_ERR_TOTAL			203
117 #define SNMP_DB_SNMP_F_PKTS_DROPPED_TOTAL			204
118 
119 /* ftps.tlsSessions database fields */
120 #define SNMP_DB_FTPS_SESS_F_SESS_COUNT				310
121 #define SNMP_DB_FTPS_SESS_F_SESS_TOTAL				311
122 #define SNMP_DB_FTPS_SESS_F_CTRL_HANDSHAKE_ERR_TOTAL		312
123 #define SNMP_DB_FTPS_SESS_F_DATA_HANDSHAKE_ERR_TOTAL		313
124 #define SNMP_DB_FTPS_SESS_F_CCC_TOTAL				314
125 #define SNMP_DB_FTPS_SESS_F_CCC_ERR_TOTAL			315
126 #define SNMP_DB_FTPS_SESS_F_VERIFY_CLIENT_TOTAL			316
127 #define SNMP_DB_FTPS_SESS_F_VERIFY_CLIENT_ERR_TOTAL		317
128 
129 /* ftps.tlsLogins database fields */
130 #define SNMP_DB_FTPS_LOGINS_F_TOTAL				320
131 #define SNMP_DB_FTPS_LOGINS_F_ERR_TOTAL				321
132 #define SNMP_DB_FTPS_LOGINS_F_ERR_BAD_USER_TOTAL		322
133 #define SNMP_DB_FTPS_LOGINS_F_ERR_BAD_PASSWD_TOTAL		323
134 #define SNMP_DB_FTPS_LOGINS_F_ERR_GENERAL_TOTAL			324
135 #define SNMP_DB_FTPS_LOGINS_F_CERT_TOTAL			325
136 
137 /* ftps.tlsDataTransfers database fields */
138 #define SNMP_DB_FTPS_XFERS_F_DIR_LIST_COUNT			330
139 #define SNMP_DB_FTPS_XFERS_F_DIR_LIST_TOTAL			331
140 #define SNMP_DB_FTPS_XFERS_F_DIR_LIST_ERR_TOTAL			332
141 #define SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_COUNT			333
142 #define SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_TOTAL			334
143 #define SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_ERR_TOTAL		335
144 #define SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_COUNT		336
145 #define SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_TOTAL		337
146 #define SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL		338
147 #define SNMP_DB_FTPS_XFERS_F_KB_UPLOAD_TOTAL			339
148 #define SNMP_DB_FTPS_XFERS_F_KB_DOWNLOAD_TOTAL			340
149 
150 /* ssh.sshSessions database fields */
151 #define SNMP_DB_SSH_SESS_F_KEX_ERR_TOTAL			400
152 #define SNMP_DB_SSH_SESS_F_C2S_COMPRESS_TOTAL			401
153 #define SNMP_DB_SSH_SESS_F_S2C_COMPRESS_TOTAL			402
154 
155 /* ssh.sshSessions.sshAuth database fields */
156 #define SNMP_DB_SSH_LOGINS_F_HOSTBASED_TOTAL			450
157 #define SNMP_DB_SSH_LOGINS_F_HOSTBASED_ERR_TOTAL		451
158 #define SNMP_DB_SSH_LOGINS_F_KBDINT_TOTAL			452
159 #define SNMP_DB_SSH_LOGINS_F_KBDINT_ERR_TOTAL			453
160 #define SNMP_DB_SSH_LOGINS_F_PASSWD_TOTAL			454
161 #define SNMP_DB_SSH_LOGINS_F_PASSWD_ERR_TOTAL			455
162 #define SNMP_DB_SSH_LOGINS_F_PUBLICKEY_TOTAL			456
163 #define SNMP_DB_SSH_LOGINS_F_PUBLICKEY_ERR_TOTAL		457
164 
165 /* sftp.sftpSessions database fields */
166 #define SNMP_DB_SFTP_SESS_F_SESS_COUNT				500
167 #define SNMP_DB_SFTP_SESS_F_SESS_TOTAL				501
168 #define SNMP_DB_SFTP_SESS_F_SFTP_V3_TOTAL			502
169 #define SNMP_DB_SFTP_SESS_F_SFTP_V4_TOTAL			503
170 #define SNMP_DB_SFTP_SESS_F_SFTP_V5_TOTAL			504
171 #define SNMP_DB_SFTP_SESS_F_SFTP_V6_TOTAL			505
172 
173 /* sftp.sftpDataTransfers database fields */
174 #define SNMP_DB_SFTP_XFERS_F_DIR_LIST_COUNT			530
175 #define SNMP_DB_SFTP_XFERS_F_DIR_LIST_TOTAL			531
176 #define SNMP_DB_SFTP_XFERS_F_DIR_LIST_ERR_TOTAL			532
177 #define SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_COUNT			533
178 #define SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_TOTAL			534
179 #define SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_ERR_TOTAL		535
180 #define SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_COUNT		536
181 #define SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_TOTAL		537
182 #define SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL		538
183 #define SNMP_DB_SFTP_XFERS_F_KB_UPLOAD_TOTAL			539
184 #define SNMP_DB_SFTP_XFERS_F_KB_DOWNLOAD_TOTAL			540
185 
186 /* scp.scpSessions database fields */
187 #define SNMP_DB_SCP_SESS_F_SESS_COUNT				600
188 #define SNMP_DB_SCP_SESS_F_SESS_TOTAL				601
189 
190 /* scp.scpDataTransfers database fields */
191 #define SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_COUNT			630
192 #define SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_TOTAL			631
193 #define SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_ERR_TOTAL		632
194 #define SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_COUNT			633
195 #define SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_TOTAL			634
196 #define SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL		635
197 #define SNMP_DB_SCP_XFERS_F_KB_UPLOAD_TOTAL			636
198 #define SNMP_DB_SCP_XFERS_F_KB_DOWNLOAD_TOTAL			637
199 
200 /* ban.connections database fields */
201 #define SNMP_DB_BAN_CONNS_F_CONN_BAN_TOTAL			700
202 #define SNMP_DB_BAN_CONNS_F_USER_BAN_TOTAL			701
203 #define SNMP_DB_BAN_CONNS_F_HOST_BAN_TOTAL			702
204 #define SNMP_DB_BAN_CONNS_F_CLASS_BAN_TOTAL			703
205 
206 /* ban.bans database fields */
207 #define SNMP_DB_BAN_BANS_F_BAN_COUNT				710
208 #define SNMP_DB_BAN_BANS_F_BAN_TOTAL				711
209 #define SNMP_DB_BAN_BANS_F_USER_BAN_COUNT			712
210 #define SNMP_DB_BAN_BANS_F_USER_BAN_TOTAL			713
211 #define SNMP_DB_BAN_BANS_F_HOST_BAN_COUNT			714
212 #define SNMP_DB_BAN_BANS_F_HOST_BAN_TOTAL			715
213 #define SNMP_DB_BAN_BANS_F_CLASS_BAN_COUNT			716
214 #define SNMP_DB_BAN_BANS_F_CLASS_BAN_TOTAL			717
215 
216 /* XXX sql database fields */
217 
218 /* XXX quota database fields */
219 
220 /* XXX geoip database fields */
221 
222 /* For a given field ID, return the database ID. */
223 int snmp_db_get_field_db_id(unsigned int field);
224 
225 const char *snmp_db_get_fieldstr(pool *p, unsigned int field);
226 
227 int snmp_db_rlock(unsigned int field);
228 int snmp_db_wlock(unsigned int field);
229 int snmp_db_unlock(unsigned int field);
230 
231 int snmp_db_close(pool *p, int db_id);
232 int snmp_db_open(pool *p, int db_id);
233 int snmp_db_get_value(pool *p, unsigned int field, int32_t *int_value,
234   char **str_value, size_t *str_valuelen);
235 int snmp_db_incr_value(pool *p, unsigned int field, int32_t incr);
236 
237 /* Used to reset/clear counters. */
238 int snmp_db_reset_value(pool *p, unsigned int field);
239 
240 /* Configure the SNMPTables path to use as the root/parent directory for the
241  * various database table files.
242  */
243 int snmp_db_set_root(const char *path);
244 
245 #endif /* MOD_SNMP_DB_H */
246