1 /*
2  * ProFTPD - mod_snmp MIB support
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 #include "mod_snmp.h"
26 #include "asn1.h"
27 #include "mib.h"
28 #include "smi.h"
29 #include "db.h"
30 
31 /* This table maps the OIDs in the PROFTPD-MIB to the database field where
32  * that value is stored.
33  *
34  * SNMP conventions identify a MIB object using "x.y", where "x" is the OID
35  * and "y" is the instance identifier.  We don't have any rows of data, just
36  * scalars, so the instance identifier will always be zero for our MIB
37  * objects.
38  */
39 
40 #define SNMP_MIB_FIRST_IDX		10
41 
42 static struct snmp_mib snmp_mibs[] = {
43   { { }, 0, 0, -1, -1, NULL, NULL, 0 },
44 
45   /* Miscellaneous non-mod_snmp MIBs */
46   { { SNMP_MGMT_SYS_OID_UPTIME, 0 },
47     SNMP_MGMT_SYS_OIDLEN_UPTIME + 1,
48     0, TRUE, TRUE,
49     SNMP_MGMT_SYS_MIB_NAME_PREFIX "sysUpTime",
50     SNMP_MGMT_SYS_MIB_NAME_PREFIX "sysUpTime.0",
51     SNMP_SMI_TIMETICKS },
52 
53   { { SNMP_SNMP2_TRAP_OID_OID, 0 },
54     SNMP_SNMP2_TRAP_OIDLEN_OID + 1,
55     0, TRUE, TRUE,
56     SNMP_SNMP2_TRAP_MIB_NAME_PREFIX "snmpTrapOID",
57     SNMP_SNMP2_TRAP_MIB_NAME_PREFIX "snmpTrapOID.0",
58     SNMP_SMI_OID },
59 
60   /* Connection MIBs */
61   { { SNMP_MIB_CONN_OID_SERVER_NAME, 0 },
62     SNMP_MIB_CONN_OIDLEN_SERVER_NAME + 1,
63     SNMP_DB_CONN_F_SERVER_NAME, TRUE, TRUE,
64     SNMP_MIB_NAME_PREFIX "connection.serverName",
65     SNMP_MIB_NAME_PREFIX "connection.serverName.0",
66     SNMP_SMI_STRING },
67 
68   { { SNMP_MIB_CONN_OID_SERVER_ADDR, 0 },
69     SNMP_MIB_CONN_OIDLEN_SERVER_ADDR + 1,
70     SNMP_DB_CONN_F_SERVER_ADDR, TRUE, TRUE,
71     SNMP_MIB_NAME_PREFIX "connection.serverAddress",
72     SNMP_MIB_NAME_PREFIX "connection.serverAddress.0",
73     SNMP_SMI_STRING },
74 
75   { { SNMP_MIB_CONN_OID_SERVER_PORT, 0 },
76     SNMP_MIB_CONN_OIDLEN_SERVER_PORT + 1,
77     SNMP_DB_CONN_F_SERVER_PORT, TRUE, TRUE,
78     SNMP_MIB_NAME_PREFIX "connection.serverPort",
79     SNMP_MIB_NAME_PREFIX "connection.serverPort.0",
80     SNMP_SMI_INTEGER },
81 
82   { { SNMP_MIB_CONN_OID_CLIENT_ADDR, 0 },
83     SNMP_MIB_CONN_OIDLEN_CLIENT_ADDR + 1,
84     SNMP_DB_CONN_F_CLIENT_ADDR, TRUE, TRUE,
85     SNMP_MIB_NAME_PREFIX "connection.clientAddress",
86     SNMP_MIB_NAME_PREFIX "connection.clientAddress.0",
87     SNMP_SMI_STRING },
88 
89   { { SNMP_MIB_CONN_OID_PID, 0 },
90     SNMP_MIB_CONN_OIDLEN_PID + 1,
91     SNMP_DB_CONN_F_PID, TRUE, TRUE,
92     SNMP_MIB_NAME_PREFIX "connection.processId",
93     SNMP_MIB_NAME_PREFIX "connection.processId.0",
94     SNMP_SMI_INTEGER },
95 
96   { { SNMP_MIB_CONN_OID_USER_NAME, 0 },
97     SNMP_MIB_CONN_OIDLEN_USER_NAME + 1,
98     SNMP_DB_CONN_F_USER_NAME, TRUE, TRUE,
99     SNMP_MIB_NAME_PREFIX "connection.userName",
100     SNMP_MIB_NAME_PREFIX "connection.userName.0",
101     SNMP_SMI_STRING },
102 
103   { { SNMP_MIB_CONN_OID_PROTOCOL, 0 },
104     SNMP_MIB_CONN_OIDLEN_PROTOCOL + 1,
105     SNMP_DB_CONN_F_PROTOCOL, TRUE, TRUE,
106     SNMP_MIB_NAME_PREFIX "connection.protocol",
107     SNMP_MIB_NAME_PREFIX "connection.protocol.0",
108     SNMP_SMI_STRING },
109 
110   /* Daemon MIBs */
111   { { SNMP_MIB_DAEMON_OID_SOFTWARE, 0 },
112     SNMP_MIB_DAEMON_OIDLEN_SOFTWARE + 1,
113     SNMP_DB_DAEMON_F_SOFTWARE, TRUE, FALSE,
114     SNMP_MIB_NAME_PREFIX "daemon.software",
115     SNMP_MIB_NAME_PREFIX "daemon.software.0",
116     SNMP_SMI_STRING },
117 
118   { { SNMP_MIB_DAEMON_OID_VERSION, 0 },
119     SNMP_MIB_DAEMON_OIDLEN_VERSION + 1,
120     SNMP_DB_DAEMON_F_VERSION, TRUE, FALSE,
121     SNMP_MIB_NAME_PREFIX "daemon.version",
122     SNMP_MIB_NAME_PREFIX "daemon.version.0",
123     SNMP_SMI_STRING },
124 
125   { { SNMP_MIB_DAEMON_OID_ADMIN, 0 },
126     SNMP_MIB_DAEMON_OIDLEN_ADMIN + 1,
127     SNMP_DB_DAEMON_F_ADMIN, TRUE, FALSE,
128     SNMP_MIB_NAME_PREFIX "daemon.admin",
129     SNMP_MIB_NAME_PREFIX "daemon.admin.0",
130     SNMP_SMI_STRING },
131 
132   { { SNMP_MIB_DAEMON_OID_UPTIME, 0 },
133     SNMP_MIB_DAEMON_OIDLEN_UPTIME + 1,
134     SNMP_DB_DAEMON_F_UPTIME, TRUE, FALSE,
135     SNMP_MIB_NAME_PREFIX "daemon.uptime",
136     SNMP_MIB_NAME_PREFIX "daemon.uptime.0",
137     SNMP_SMI_TIMETICKS },
138 
139   { { SNMP_MIB_DAEMON_OID_VHOST_COUNT, 0 },
140     SNMP_MIB_DAEMON_OIDLEN_VHOST_COUNT + 1,
141     SNMP_DB_DAEMON_F_VHOST_COUNT, TRUE, FALSE,
142     SNMP_MIB_NAME_PREFIX "daemon.vhostCount",
143     SNMP_MIB_NAME_PREFIX "daemon.vhostCount.0",
144     SNMP_SMI_INTEGER },
145 
146   { { SNMP_MIB_DAEMON_OID_CONN_COUNT, 0 },
147     SNMP_MIB_DAEMON_OIDLEN_CONN_COUNT + 1,
148     SNMP_DB_DAEMON_F_CONN_COUNT, TRUE, FALSE,
149     SNMP_MIB_NAME_PREFIX "daemon.connectionCount",
150     SNMP_MIB_NAME_PREFIX "daemon.connectionCount.0",
151     SNMP_SMI_GAUGE32 },
152 
153   { { SNMP_MIB_DAEMON_OID_CONN_TOTAL, 0 },
154     SNMP_MIB_DAEMON_OIDLEN_CONN_TOTAL + 1,
155     SNMP_DB_DAEMON_F_CONN_TOTAL, TRUE, FALSE,
156     SNMP_MIB_NAME_PREFIX "daemon.connectionTotal",
157     SNMP_MIB_NAME_PREFIX "daemon.connectionTotal.0",
158     SNMP_SMI_COUNTER32 },
159 
160   { { SNMP_MIB_DAEMON_OID_CONN_REFUSED_TOTAL, 0 },
161     SNMP_MIB_DAEMON_OIDLEN_CONN_REFUSED_TOTAL + 1,
162     SNMP_DB_DAEMON_F_CONN_REFUSED_TOTAL, TRUE, FALSE,
163     SNMP_MIB_NAME_PREFIX "daemon.connectionRefusedTotal",
164     SNMP_MIB_NAME_PREFIX "daemon.connectionRefusedTotal.0",
165     SNMP_SMI_COUNTER32 },
166 
167   { { SNMP_MIB_DAEMON_OID_RESTART_COUNT, 0 },
168     SNMP_MIB_DAEMON_OIDLEN_RESTART_COUNT + 1,
169     SNMP_DB_DAEMON_F_RESTART_COUNT, TRUE, FALSE,
170     SNMP_MIB_NAME_PREFIX "daemon.restartCount",
171     SNMP_MIB_NAME_PREFIX "daemon.restartCount.0",
172     SNMP_SMI_COUNTER32 },
173 
174   { { SNMP_MIB_DAEMON_OID_SEGFAULT_COUNT, 0 },
175     SNMP_MIB_DAEMON_OIDLEN_SEGFAULT_COUNT + 1,
176     SNMP_DB_DAEMON_F_SEGFAULT_COUNT, TRUE, FALSE,
177     SNMP_MIB_NAME_PREFIX "daemon.segfaultCount",
178     SNMP_MIB_NAME_PREFIX "daemon.segfaultCount.0",
179     SNMP_SMI_COUNTER32 },
180 
181   { { SNMP_MIB_DAEMON_OID_MAXINST_TOTAL, 0 },
182     SNMP_MIB_DAEMON_OIDLEN_MAXINST_TOTAL + 1,
183     SNMP_DB_DAEMON_F_MAXINST_TOTAL, TRUE, FALSE,
184     SNMP_MIB_NAME_PREFIX "daemon.maxInstancesLimitTotal",
185     SNMP_MIB_NAME_PREFIX "daemon.maxInstancesLimitTotal.0",
186     SNMP_SMI_COUNTER32 },
187 
188   { { SNMP_MIB_DAEMON_OID_MAXINST_CONF, 0 },
189     SNMP_MIB_DAEMON_OIDLEN_MAXINST_CONF + 1,
190     SNMP_DB_DAEMON_F_MAXINST_CONF, TRUE, TRUE,
191     SNMP_MIB_NAME_PREFIX "daemon.maxInstancesConfig",
192     SNMP_MIB_NAME_PREFIX "daemon.maxInstancesConfig.0",
193     SNMP_SMI_INTEGER },
194 
195   /* daemon.daemonNotifications MIBs */
196   { { SNMP_MIB_DAEMON_NOTIFY_OID_MAX_INSTANCES, 0 },
197     SNMP_MIB_DAEMON_NOTIFY_OIDLEN_MAX_INSTANCES + 1,
198     0, TRUE, TRUE,
199     SNMP_MIB_NAME_PREFIX "daemon.daemonNotifications.maxInstancesExceeded",
200     SNMP_MIB_NAME_PREFIX "daemon.daemonNotifications.maxInstancesExceeded.0",
201     SNMP_SMI_NULL },
202 
203   /* timeouts MIBs */
204   { { SNMP_MIB_TIMEOUTS_OID_IDLE_TOTAL, 0 },
205     SNMP_MIB_TIMEOUTS_OIDLEN_IDLE_TOTAL + 1,
206     SNMP_DB_TIMEOUTS_F_IDLE_TOTAL, TRUE, FALSE,
207     SNMP_MIB_NAME_PREFIX "timeouts.idleTimeoutTotal",
208     SNMP_MIB_NAME_PREFIX "timeouts.idleTimeoutTotal.0",
209     SNMP_SMI_COUNTER32 },
210 
211   { { SNMP_MIB_TIMEOUTS_OID_LOGIN_TOTAL, 0 },
212     SNMP_MIB_TIMEOUTS_OIDLEN_LOGIN_TOTAL + 1,
213     SNMP_DB_TIMEOUTS_F_LOGIN_TOTAL, TRUE, FALSE,
214     SNMP_MIB_NAME_PREFIX "timeouts.loginTimeoutTotal",
215     SNMP_MIB_NAME_PREFIX "timeouts.loginTimeoutTotal.0",
216     SNMP_SMI_COUNTER32 },
217 
218   { { SNMP_MIB_TIMEOUTS_OID_NOXFER_TOTAL, 0 },
219     SNMP_MIB_TIMEOUTS_OIDLEN_NOXFER_TOTAL + 1,
220     SNMP_DB_TIMEOUTS_F_NOXFER_TOTAL, TRUE, FALSE,
221     SNMP_MIB_NAME_PREFIX "timeouts.noTransferTimeoutTotal",
222     SNMP_MIB_NAME_PREFIX "timeouts.noTransferTimeoutTotal.0",
223     SNMP_SMI_COUNTER32 },
224 
225   { { SNMP_MIB_TIMEOUTS_OID_STALLED_TOTAL, 0 },
226     SNMP_MIB_TIMEOUTS_OIDLEN_STALLED_TOTAL + 1,
227     SNMP_DB_TIMEOUTS_F_STALLED_TOTAL, TRUE, FALSE,
228     SNMP_MIB_NAME_PREFIX "timeouts.stalledTimeoutTotal",
229     SNMP_MIB_NAME_PREFIX "timeouts.stalledTimeoutTotal.0",
230     SNMP_SMI_COUNTER32 },
231 
232   /* ftp.sessions MIBs */
233   { { SNMP_MIB_FTP_SESS_OID_SESS_COUNT, 0 },
234     SNMP_MIB_FTP_SESS_OIDLEN_SESS_COUNT + 1,
235     SNMP_DB_FTP_SESS_F_SESS_COUNT, TRUE, FALSE,
236     SNMP_MIB_NAME_PREFIX "ftp.sessions.sessionCount",
237     SNMP_MIB_NAME_PREFIX "ftp.sessions.sessionCount.0",
238     SNMP_SMI_GAUGE32 },
239 
240   { { SNMP_MIB_FTP_SESS_OID_SESS_TOTAL, 0 },
241     SNMP_MIB_FTP_SESS_OIDLEN_SESS_TOTAL + 1,
242     SNMP_DB_FTP_SESS_F_SESS_TOTAL, TRUE, FALSE,
243     SNMP_MIB_NAME_PREFIX "ftp.sessions.sessionTotal",
244     SNMP_MIB_NAME_PREFIX "ftp.sessions.sessionTotal.0",
245     SNMP_SMI_COUNTER32 },
246 
247   { { SNMP_MIB_FTP_SESS_OID_CMD_INVALID_TOTAL, 0 },
248     SNMP_MIB_FTP_SESS_OIDLEN_CMD_INVALID_TOTAL + 1,
249     SNMP_DB_FTP_SESS_F_CMD_INVALID_TOTAL, TRUE, FALSE,
250     SNMP_MIB_NAME_PREFIX "ftp.sessions.commandInvalidTotal",
251     SNMP_MIB_NAME_PREFIX "ftp.sessions.commandInvalidTotal.0",
252     SNMP_SMI_COUNTER32 },
253 
254   /* ftp.logins MIBs */
255   { { SNMP_MIB_FTP_LOGINS_OID_TOTAL, 0 },
256     SNMP_MIB_FTP_LOGINS_OIDLEN_TOTAL + 1,
257     SNMP_DB_FTP_LOGINS_F_TOTAL, TRUE, FALSE,
258     SNMP_MIB_NAME_PREFIX "ftp.logins.loginTotal",
259     SNMP_MIB_NAME_PREFIX "ftp.logins.loginTotal.0",
260     SNMP_SMI_COUNTER32 },
261 
262   { { SNMP_MIB_FTP_LOGINS_OID_ERR_TOTAL, 0 },
263     SNMP_MIB_FTP_LOGINS_OIDLEN_ERR_TOTAL + 1,
264     SNMP_DB_FTP_LOGINS_F_ERR_TOTAL, TRUE, FALSE,
265     SNMP_MIB_NAME_PREFIX "ftp.logins.loginFailedTotal",
266     SNMP_MIB_NAME_PREFIX "ftp.logins.loginFailedTotal.0",
267     SNMP_SMI_COUNTER32 },
268 
269   { { SNMP_MIB_FTP_LOGINS_OID_ERR_BAD_USER_TOTAL, 0 },
270     SNMP_MIB_FTP_LOGINS_OIDLEN_ERR_BAD_USER_TOTAL + 1,
271     SNMP_DB_FTP_LOGINS_F_ERR_BAD_USER_TOTAL, TRUE, FALSE,
272     SNMP_MIB_NAME_PREFIX "ftp.logins.loginBadUserTotal",
273     SNMP_MIB_NAME_PREFIX "ftp.logins.loginBadUserTotal.0",
274     SNMP_SMI_COUNTER32 },
275 
276   { { SNMP_MIB_FTP_LOGINS_OID_ERR_BAD_PASSWD_TOTAL, 0 },
277     SNMP_MIB_FTP_LOGINS_OIDLEN_ERR_BAD_PASSWD_TOTAL + 1,
278     SNMP_DB_FTP_LOGINS_F_ERR_BAD_PASSWD_TOTAL, TRUE, FALSE,
279     SNMP_MIB_NAME_PREFIX "ftp.logins.loginBadPasswordTotal",
280     SNMP_MIB_NAME_PREFIX "ftp.logins.loginBadPasswordTotal.0",
281     SNMP_SMI_COUNTER32 },
282 
283   { { SNMP_MIB_FTP_LOGINS_OID_ERR_GENERAL_TOTAL, 0 },
284     SNMP_MIB_FTP_LOGINS_OIDLEN_ERR_GENERAL_TOTAL + 1,
285     SNMP_DB_FTP_LOGINS_F_ERR_GENERAL_TOTAL, TRUE, FALSE,
286     SNMP_MIB_NAME_PREFIX "ftp.logins.loginGeneralErrorTotal",
287     SNMP_MIB_NAME_PREFIX "ftp.logins.loginGeneralErrorTotal.0",
288     SNMP_SMI_COUNTER32 },
289 
290   { { SNMP_MIB_FTP_LOGINS_OID_ANON_COUNT, 0 },
291     SNMP_MIB_FTP_LOGINS_OIDLEN_ANON_COUNT + 1,
292     SNMP_DB_FTP_LOGINS_F_ANON_COUNT, TRUE, FALSE,
293     SNMP_MIB_NAME_PREFIX "ftp.logins.anonLoginCount",
294     SNMP_MIB_NAME_PREFIX "ftp.logins.anonLoginCount.0",
295     SNMP_SMI_GAUGE32 },
296 
297   { { SNMP_MIB_FTP_LOGINS_OID_ANON_TOTAL, 0 },
298     SNMP_MIB_FTP_LOGINS_OIDLEN_ANON_TOTAL + 1,
299     SNMP_DB_FTP_LOGINS_F_ANON_TOTAL, TRUE, FALSE,
300     SNMP_MIB_NAME_PREFIX "ftp.logins.anonLoginTotal",
301     SNMP_MIB_NAME_PREFIX "ftp.logins.anonLoginTotal.0",
302     SNMP_SMI_COUNTER32 },
303 
304   /* ftp.dataTransfers MIBs */
305   { { SNMP_MIB_FTP_XFERS_OID_DIR_LIST_COUNT, 0 },
306     SNMP_MIB_FTP_XFERS_OIDLEN_DIR_LIST_COUNT + 1,
307     SNMP_DB_FTP_XFERS_F_DIR_LIST_COUNT, TRUE, FALSE,
308     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListCount",
309     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListCount.0",
310     SNMP_SMI_GAUGE32 },
311 
312   { { SNMP_MIB_FTP_XFERS_OID_DIR_LIST_TOTAL, 0 },
313     SNMP_MIB_FTP_XFERS_OIDLEN_DIR_LIST_TOTAL + 1,
314     SNMP_DB_FTP_XFERS_F_DIR_LIST_TOTAL, TRUE, FALSE,
315     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListTotal",
316     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListTotal.0",
317     SNMP_SMI_COUNTER32 },
318 
319   { { SNMP_MIB_FTP_XFERS_OID_DIR_LIST_ERR_TOTAL, 0 },
320     SNMP_MIB_FTP_XFERS_OIDLEN_DIR_LIST_ERR_TOTAL + 1,
321     SNMP_DB_FTP_XFERS_F_DIR_LIST_ERR_TOTAL, TRUE, FALSE,
322     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListFailedTotal",
323     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.dirListFailedTotal.0",
324     SNMP_SMI_COUNTER32 },
325 
326   { { SNMP_MIB_FTP_XFERS_OID_FILE_UPLOAD_COUNT, 0 },
327     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_UPLOAD_COUNT + 1,
328     SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_COUNT, TRUE, FALSE,
329     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadCount",
330     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadCount.0",
331     SNMP_SMI_GAUGE32 },
332 
333   { { SNMP_MIB_FTP_XFERS_OID_FILE_UPLOAD_TOTAL, 0 },
334     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_UPLOAD_TOTAL + 1,
335     SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_TOTAL, TRUE, FALSE,
336     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadTotal",
337     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadTotal.0",
338     SNMP_SMI_COUNTER32 },
339 
340   { { SNMP_MIB_FTP_XFERS_OID_FILE_UPLOAD_ERR_TOTAL, 0 },
341     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_UPLOAD_ERR_TOTAL + 1,
342     SNMP_DB_FTP_XFERS_F_FILE_UPLOAD_ERR_TOTAL, TRUE, FALSE,
343     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadFailedTotal",
344     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileUploadFailedTotal.0",
345     SNMP_SMI_COUNTER32 },
346 
347   { { SNMP_MIB_FTP_XFERS_OID_FILE_DOWNLOAD_COUNT, 0 },
348     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_DOWNLOAD_COUNT + 1,
349     SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_COUNT, TRUE, FALSE,
350     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadCount",
351     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadCount.0",
352     SNMP_SMI_GAUGE32 },
353 
354   { { SNMP_MIB_FTP_XFERS_OID_FILE_DOWNLOAD_TOTAL, 0 },
355     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_DOWNLOAD_TOTAL + 1,
356     SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_TOTAL, TRUE, FALSE,
357     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadTotal",
358     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadTotal.0",
359     SNMP_SMI_COUNTER32 },
360 
361   { { SNMP_MIB_FTP_XFERS_OID_FILE_DOWNLOAD_ERR_TOTAL, 0 },
362     SNMP_MIB_FTP_XFERS_OIDLEN_FILE_DOWNLOAD_ERR_TOTAL + 1,
363     SNMP_DB_FTP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL, TRUE, FALSE,
364     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadFailedTotal",
365     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.fileDownloadFailedTotal.0",
366     SNMP_SMI_COUNTER32 },
367 
368   { { SNMP_MIB_FTP_XFERS_OID_KB_UPLOAD_TOTAL, 0 },
369     SNMP_MIB_FTP_XFERS_OIDLEN_KB_UPLOAD_TOTAL + 1,
370     SNMP_DB_FTP_XFERS_F_KB_UPLOAD_TOTAL, TRUE, FALSE,
371     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.kbUploadTotal",
372     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.kbUploadTotal.0",
373     SNMP_SMI_COUNTER32 },
374 
375   { { SNMP_MIB_FTP_XFERS_OID_KB_DOWNLOAD_TOTAL, 0 },
376     SNMP_MIB_FTP_XFERS_OIDLEN_KB_DOWNLOAD_TOTAL + 1,
377     SNMP_DB_FTP_XFERS_F_KB_DOWNLOAD_TOTAL, TRUE, FALSE,
378     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.kbDownloadTotal",
379     SNMP_MIB_NAME_PREFIX "ftp.dataTransfers.kbDownloadTotal.0",
380     SNMP_SMI_COUNTER32 },
381 
382   /* ftp.ftpNotifications MIBs */
383   { { SNMP_MIB_FTP_NOTIFY_OID_LOGIN_BAD_PASSWORD, 0 },
384     SNMP_MIB_FTP_NOTIFY_OIDLEN_LOGIN_BAD_PASSWORD + 1,
385     0, TRUE, TRUE,
386     SNMP_MIB_NAME_PREFIX "ftp.ftpNotifications.loginBadPassword",
387     SNMP_MIB_NAME_PREFIX "ftp.ftpNotifications.loginBadPassword.0",
388     SNMP_SMI_NULL },
389 
390   { { SNMP_MIB_FTP_NOTIFY_OID_LOGIN_BAD_USER, 0 },
391     SNMP_MIB_FTP_NOTIFY_OIDLEN_LOGIN_BAD_USER + 1,
392     0, TRUE, TRUE,
393     SNMP_MIB_NAME_PREFIX "ftp.ftpNotifications.loginBadUser",
394     SNMP_MIB_NAME_PREFIX "ftp.ftpNotifications.loginBadUser.0",
395     SNMP_SMI_NULL },
396 
397   /* snmp MIBs */
398   { { SNMP_MIB_SNMP_OID_PKTS_RECVD_TOTAL, 0 },
399     SNMP_MIB_SNMP_OIDLEN_PKTS_RECVD_TOTAL + 1,
400     SNMP_DB_SNMP_F_PKTS_RECVD_TOTAL, TRUE, FALSE,
401     SNMP_MIB_NAME_PREFIX "snmp.packetsReceivedTotal",
402     SNMP_MIB_NAME_PREFIX "snmp.packetsReceivedTotal.0",
403     SNMP_SMI_COUNTER32 },
404 
405   { { SNMP_MIB_SNMP_OID_PKTS_SENT_TOTAL, 0 },
406     SNMP_MIB_SNMP_OIDLEN_PKTS_SENT_TOTAL + 1,
407     SNMP_DB_SNMP_F_PKTS_SENT_TOTAL, TRUE, FALSE,
408     SNMP_MIB_NAME_PREFIX "snmp.packetsSentTotal",
409     SNMP_MIB_NAME_PREFIX "snmp.packetsSentTotal.0",
410     SNMP_SMI_COUNTER32 },
411 
412   { { SNMP_MIB_SNMP_OID_TRAPS_SENT_TOTAL, 0 },
413     SNMP_MIB_SNMP_OIDLEN_TRAPS_SENT_TOTAL + 1,
414     SNMP_DB_SNMP_F_TRAPS_SENT_TOTAL, TRUE, FALSE,
415     SNMP_MIB_NAME_PREFIX "snmp.trapsSentTotal",
416     SNMP_MIB_NAME_PREFIX "snmp.trapsSentTotal.0",
417     SNMP_SMI_COUNTER32 },
418 
419   { { SNMP_MIB_SNMP_OID_PKTS_AUTH_ERR_TOTAL, 0 },
420     SNMP_MIB_SNMP_OIDLEN_PKTS_AUTH_ERR_TOTAL + 1,
421     SNMP_DB_SNMP_F_PKTS_AUTH_ERR_TOTAL, TRUE, FALSE,
422     SNMP_MIB_NAME_PREFIX "snmp.packetsAuthFailedTotal",
423     SNMP_MIB_NAME_PREFIX "snmp.packetsAuthFailedTotal.0",
424     SNMP_SMI_COUNTER32 },
425 
426   { { SNMP_MIB_SNMP_OID_PKTS_DROPPED_TOTAL, 0 },
427     SNMP_MIB_SNMP_OIDLEN_PKTS_DROPPED_TOTAL + 1,
428     SNMP_DB_SNMP_F_PKTS_DROPPED_TOTAL, TRUE, FALSE,
429     SNMP_MIB_NAME_PREFIX "snmp.packetsDroppedTotal",
430     SNMP_MIB_NAME_PREFIX "snmp.packetsDroppedTotal.0",
431     SNMP_SMI_COUNTER32 },
432 
433   /* ftps.tlsSessions MIBs */
434   { { SNMP_MIB_FTPS_SESS_OID_SESS_COUNT, 0 },
435     SNMP_MIB_FTPS_SESS_OIDLEN_SESS_COUNT + 1,
436     SNMP_DB_FTPS_SESS_F_SESS_COUNT, FALSE, FALSE,
437     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.sessionCount",
438     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.sessionCount.0",
439     SNMP_SMI_GAUGE32 },
440 
441   { { SNMP_MIB_FTPS_SESS_OID_SESS_TOTAL, 0 },
442     SNMP_MIB_FTPS_SESS_OIDLEN_SESS_TOTAL + 1,
443     SNMP_DB_FTPS_SESS_F_SESS_TOTAL, FALSE, FALSE,
444     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.sessionTotal",
445     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.sessionTotal.0",
446     SNMP_SMI_COUNTER32 },
447 
448   { { SNMP_MIB_FTPS_SESS_OID_CTRL_HANDSHAKE_ERR_TOTAL, 0 },
449     SNMP_MIB_FTPS_SESS_OIDLEN_CTRL_HANDSHAKE_ERR_TOTAL + 1,
450     SNMP_DB_FTPS_SESS_F_CTRL_HANDSHAKE_ERR_TOTAL, FALSE, FALSE,
451     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.ctrlHandshakeFailedTotal",
452     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.ctrlHandshakeFailedTotal.0",
453     SNMP_SMI_COUNTER32 },
454 
455   { { SNMP_MIB_FTPS_SESS_OID_DATA_HANDSHAKE_ERR_TOTAL, 0 },
456     SNMP_MIB_FTPS_SESS_OIDLEN_DATA_HANDSHAKE_ERR_TOTAL + 1,
457     SNMP_DB_FTPS_SESS_F_DATA_HANDSHAKE_ERR_TOTAL, FALSE, FALSE,
458     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.dataHandshakeFailedTotal",
459     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.dataHandshakeFailedTotal.0",
460     SNMP_SMI_COUNTER32 },
461 
462   { { SNMP_MIB_FTPS_SESS_OID_CCC_TOTAL, 0 },
463     SNMP_MIB_FTPS_SESS_OIDLEN_CCC_TOTAL + 1,
464     SNMP_DB_FTPS_SESS_F_CCC_TOTAL, FALSE, FALSE,
465     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.clearCommandChannelTotal",
466     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.clearCommandChannelTotal.0",
467     SNMP_SMI_COUNTER32 },
468 
469   { { SNMP_MIB_FTPS_SESS_OID_CCC_ERR_TOTAL, 0 },
470     SNMP_MIB_FTPS_SESS_OIDLEN_CCC_ERR_TOTAL + 1,
471     SNMP_DB_FTPS_SESS_F_CCC_ERR_TOTAL, FALSE, FALSE,
472     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.clearCommandChannelFailedTotal",
473     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.clearCommandChannelFailedTotal.0",
474     SNMP_SMI_COUNTER32 },
475 
476   { { SNMP_MIB_FTPS_SESS_OID_VERIFY_CLIENT_TOTAL, 0 },
477     SNMP_MIB_FTPS_SESS_OIDLEN_VERIFY_CLIENT_TOTAL + 1,
478     SNMP_DB_FTPS_SESS_F_VERIFY_CLIENT_TOTAL, FALSE, FALSE,
479     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.verifyClientTotal",
480     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.verifyClientTotal.0",
481     SNMP_SMI_COUNTER32 },
482 
483   { { SNMP_MIB_FTPS_SESS_OID_VERIFY_CLIENT_ERR_TOTAL, 0 },
484     SNMP_MIB_FTPS_SESS_OIDLEN_VERIFY_CLIENT_ERR_TOTAL + 1,
485     SNMP_DB_FTPS_SESS_F_VERIFY_CLIENT_ERR_TOTAL, FALSE, FALSE,
486     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.verifyClientFailedTotal",
487     SNMP_MIB_NAME_PREFIX "ftps.tlsSessions.verifyClientFailedTotal.0",
488     SNMP_SMI_COUNTER32 },
489 
490   /* ftps.tlsLogins MIBs */
491   { { SNMP_MIB_FTPS_LOGINS_OID_TOTAL, 0 },
492     SNMP_MIB_FTPS_LOGINS_OIDLEN_TOTAL + 1,
493     SNMP_DB_FTPS_LOGINS_F_TOTAL, FALSE, FALSE,
494     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginTotal",
495     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginTotal.0",
496     SNMP_SMI_COUNTER32 },
497 
498   { { SNMP_MIB_FTPS_LOGINS_OID_ERR_TOTAL, 0 },
499     SNMP_MIB_FTPS_LOGINS_OIDLEN_ERR_TOTAL + 1,
500     SNMP_DB_FTPS_LOGINS_F_ERR_TOTAL, FALSE, FALSE,
501     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginFailedTotal",
502     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginFailedTotal.0",
503     SNMP_SMI_COUNTER32 },
504 
505   { { SNMP_MIB_FTPS_LOGINS_OID_ERR_BAD_USER_TOTAL, 0 },
506     SNMP_MIB_FTPS_LOGINS_OIDLEN_ERR_BAD_USER_TOTAL + 1,
507     SNMP_DB_FTPS_LOGINS_F_ERR_BAD_USER_TOTAL, FALSE, FALSE,
508     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginBadUserTotal",
509     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginBadUserTotal.0",
510     SNMP_SMI_COUNTER32 },
511 
512   { { SNMP_MIB_FTPS_LOGINS_OID_ERR_BAD_PASSWD_TOTAL, 0 },
513     SNMP_MIB_FTPS_LOGINS_OIDLEN_ERR_BAD_PASSWD_TOTAL + 1,
514     SNMP_DB_FTPS_LOGINS_F_ERR_BAD_PASSWD_TOTAL, FALSE, FALSE,
515     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginBadPasswordTotal",
516     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginBadPasswordTotal.0",
517     SNMP_SMI_COUNTER32 },
518 
519   { { SNMP_MIB_FTPS_LOGINS_OID_ERR_GENERAL_TOTAL, 0 },
520     SNMP_MIB_FTPS_LOGINS_OIDLEN_ERR_GENERAL_TOTAL + 1,
521     SNMP_DB_FTPS_LOGINS_F_ERR_GENERAL_TOTAL, FALSE, FALSE,
522     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginGeneralErrorTotal",
523     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginGeneralErrorTotal.0",
524     SNMP_SMI_COUNTER32 },
525 
526   { { SNMP_MIB_FTPS_LOGINS_OID_CERT_TOTAL, 0 },
527     SNMP_MIB_FTPS_LOGINS_OIDLEN_CERT_TOTAL + 1,
528     SNMP_DB_FTPS_LOGINS_F_ERR_GENERAL_TOTAL, FALSE, FALSE,
529     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginCertTotal",
530     SNMP_MIB_NAME_PREFIX "ftps.tlsLogins.loginCertTotal.0",
531     SNMP_SMI_COUNTER32 },
532 
533   /* ftps.tlsDataTransfers MIBs */
534   { { SNMP_MIB_FTPS_XFERS_OID_DIR_LIST_COUNT, 0 },
535     SNMP_MIB_FTPS_XFERS_OIDLEN_DIR_LIST_COUNT + 1,
536     SNMP_DB_FTPS_XFERS_F_DIR_LIST_COUNT, FALSE, FALSE,
537     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListCount",
538     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListCount.0",
539     SNMP_SMI_GAUGE32 },
540 
541   { { SNMP_MIB_FTPS_XFERS_OID_DIR_LIST_TOTAL, 0 },
542     SNMP_MIB_FTPS_XFERS_OIDLEN_DIR_LIST_TOTAL + 1,
543     SNMP_DB_FTPS_XFERS_F_DIR_LIST_TOTAL, FALSE, FALSE,
544     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListTotal",
545     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListTotal.0",
546     SNMP_SMI_COUNTER32 },
547 
548   { { SNMP_MIB_FTPS_XFERS_OID_DIR_LIST_ERR_TOTAL, 0 },
549     SNMP_MIB_FTPS_XFERS_OIDLEN_DIR_LIST_ERR_TOTAL + 1,
550     SNMP_DB_FTPS_XFERS_F_DIR_LIST_ERR_TOTAL, FALSE, FALSE,
551     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListFailedTotal",
552     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.dirListFailedTotal.0",
553     SNMP_SMI_COUNTER32 },
554 
555   { { SNMP_MIB_FTPS_XFERS_OID_FILE_UPLOAD_COUNT, 0 },
556     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_UPLOAD_COUNT + 1,
557     SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_COUNT, FALSE, FALSE,
558     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadCount",
559     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadCount.0",
560     SNMP_SMI_GAUGE32 },
561 
562   { { SNMP_MIB_FTPS_XFERS_OID_FILE_UPLOAD_TOTAL, 0 },
563     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_UPLOAD_TOTAL + 1,
564     SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_TOTAL, FALSE, FALSE,
565     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadTotal",
566     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadTotal.0",
567     SNMP_SMI_COUNTER32 },
568 
569   { { SNMP_MIB_FTPS_XFERS_OID_FILE_UPLOAD_ERR_TOTAL, 0 },
570     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_UPLOAD_ERR_TOTAL + 1,
571     SNMP_DB_FTPS_XFERS_F_FILE_UPLOAD_ERR_TOTAL, FALSE, FALSE,
572     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadFailedTotal",
573     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileUploadFailedTotal.0",
574     SNMP_SMI_COUNTER32 },
575 
576   { { SNMP_MIB_FTPS_XFERS_OID_FILE_DOWNLOAD_COUNT, 0 },
577     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_DOWNLOAD_COUNT + 1,
578     SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_COUNT, FALSE, FALSE,
579     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadCount",
580     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadCount.0",
581     SNMP_SMI_GAUGE32 },
582 
583   { { SNMP_MIB_FTPS_XFERS_OID_FILE_DOWNLOAD_TOTAL, 0 },
584     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_DOWNLOAD_TOTAL + 1,
585     SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_TOTAL, FALSE, FALSE,
586     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadTotal",
587     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadTotal.0",
588     SNMP_SMI_COUNTER32 },
589 
590   { { SNMP_MIB_FTPS_XFERS_OID_FILE_DOWNLOAD_ERR_TOTAL, 0 },
591     SNMP_MIB_FTPS_XFERS_OIDLEN_FILE_DOWNLOAD_ERR_TOTAL + 1,
592     SNMP_DB_FTPS_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL, FALSE, FALSE,
593     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadFailedTotal",
594     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.fileDownloadFailedTotal.0",
595     SNMP_SMI_COUNTER32 },
596 
597   { { SNMP_MIB_FTPS_XFERS_OID_KB_UPLOAD_TOTAL, 0 },
598     SNMP_MIB_FTPS_XFERS_OIDLEN_KB_UPLOAD_TOTAL + 1,
599     SNMP_DB_FTPS_XFERS_F_KB_UPLOAD_TOTAL, FALSE, FALSE,
600     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.kbUploadTotal",
601     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.kbUploadTotal.0",
602     SNMP_SMI_COUNTER32 },
603 
604   { { SNMP_MIB_FTPS_XFERS_OID_KB_DOWNLOAD_TOTAL, 0 },
605     SNMP_MIB_FTPS_XFERS_OIDLEN_KB_DOWNLOAD_TOTAL + 1,
606     SNMP_DB_FTPS_XFERS_F_KB_DOWNLOAD_TOTAL, FALSE, FALSE,
607     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.kbDownloadTotal",
608     SNMP_MIB_NAME_PREFIX "ftps.tlsDataTransfers.kbDownloadTotal.0",
609     SNMP_SMI_COUNTER32 },
610 
611   /* ssh.sshSessions MIBs */
612   { { SNMP_MIB_SSH_SESS_OID_KEX_ERR_TOTAL, 0 },
613     SNMP_MIB_SSH_SESS_OIDLEN_KEX_ERR_TOTAL + 1,
614     SNMP_DB_SSH_SESS_F_KEX_ERR_TOTAL, FALSE, FALSE,
615     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.keyExchangeFailedTotal",
616     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.keyExchangeFailedTotal.0",
617     SNMP_SMI_COUNTER32 },
618 
619   { { SNMP_MIB_SSH_SESS_OID_C2S_COMPRESS_TOTAL, 0 },
620     SNMP_MIB_SSH_SESS_OIDLEN_C2S_COMPRESS_TOTAL + 1,
621     SNMP_DB_SSH_SESS_F_C2S_COMPRESS_TOTAL, FALSE, FALSE,
622     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.clientCompressionTotal",
623     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.clientCompressionTotal.0",
624     SNMP_SMI_COUNTER32 },
625 
626   { { SNMP_MIB_SSH_SESS_OID_S2C_COMPRESS_TOTAL, 0 },
627     SNMP_MIB_SSH_SESS_OIDLEN_S2C_COMPRESS_TOTAL + 1,
628     SNMP_DB_SSH_SESS_F_S2C_COMPRESS_TOTAL, FALSE, FALSE,
629     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.serverCompressionTotal",
630     SNMP_MIB_NAME_PREFIX "ssh.sshSessions.serverCompressionTotal.0",
631     SNMP_SMI_COUNTER32 },
632 
633   /* ssh.sshLogins MIBs */
634   { { SNMP_MIB_SSH_LOGINS_OID_HOSTBASED_TOTAL, 0 },
635     SNMP_MIB_SSH_LOGINS_OIDLEN_HOSTBASED_TOTAL + 1,
636     SNMP_DB_SSH_LOGINS_F_HOSTBASED_TOTAL, FALSE, FALSE,
637     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.hostbasedAuthTotal",
638     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.hostbasedAuthTotal.0",
639     SNMP_SMI_COUNTER32 },
640 
641   { { SNMP_MIB_SSH_LOGINS_OID_HOSTBASED_ERR_TOTAL, 0 },
642     SNMP_MIB_SSH_LOGINS_OIDLEN_HOSTBASED_ERR_TOTAL + 1,
643     SNMP_DB_SSH_LOGINS_F_HOSTBASED_ERR_TOTAL, FALSE, FALSE,
644     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.hostbasedAuthFailedTotal",
645     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.hostbasedAuthFailedTotal.0",
646     SNMP_SMI_COUNTER32 },
647 
648   { { SNMP_MIB_SSH_LOGINS_OID_KBDINT_TOTAL, 0 },
649     SNMP_MIB_SSH_LOGINS_OIDLEN_KBDINT_TOTAL + 1,
650     SNMP_DB_SSH_LOGINS_F_KBDINT_TOTAL, FALSE, FALSE,
651     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.keyboardInteractiveAuthTotal",
652     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.keyboardInteractiveAuthTotal.0",
653     SNMP_SMI_COUNTER32 },
654 
655   { { SNMP_MIB_SSH_LOGINS_OID_KBDINT_ERR_TOTAL, 0 },
656     SNMP_MIB_SSH_LOGINS_OIDLEN_KBDINT_ERR_TOTAL + 1,
657     SNMP_DB_SSH_LOGINS_F_KBDINT_ERR_TOTAL, FALSE, FALSE,
658     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.keyboardInteractiveAuthFailedTotal",
659     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.keyboardInteractiveAuthFailedTotal.0",
660     SNMP_SMI_COUNTER32 },
661 
662   { { SNMP_MIB_SSH_LOGINS_OID_PASSWD_TOTAL, 0 },
663     SNMP_MIB_SSH_LOGINS_OIDLEN_PASSWD_TOTAL + 1,
664     SNMP_DB_SSH_LOGINS_F_PASSWD_TOTAL, FALSE, FALSE,
665     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.passwordAuthTotal",
666     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.passwordAuthTotal.0",
667     SNMP_SMI_COUNTER32 },
668 
669   { { SNMP_MIB_SSH_LOGINS_OID_PASSWD_ERR_TOTAL, 0 },
670     SNMP_MIB_SSH_LOGINS_OIDLEN_PASSWD_ERR_TOTAL + 1,
671     SNMP_DB_SSH_LOGINS_F_PASSWD_ERR_TOTAL, FALSE, FALSE,
672     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.passwordAuthFailedTotal",
673     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.passwordAuthFailedTotal.0",
674     SNMP_SMI_COUNTER32 },
675 
676   { { SNMP_MIB_SSH_LOGINS_OID_PUBLICKEY_TOTAL, 0 },
677     SNMP_MIB_SSH_LOGINS_OIDLEN_PUBLICKEY_TOTAL + 1,
678     SNMP_DB_SSH_LOGINS_F_PUBLICKEY_TOTAL, FALSE, FALSE,
679     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.publickeyAuthTotal",
680     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.publickeyAuthTotal.0",
681     SNMP_SMI_COUNTER32 },
682 
683   { { SNMP_MIB_SSH_LOGINS_OID_PUBLICKEY_ERR_TOTAL, 0 },
684     SNMP_MIB_SSH_LOGINS_OIDLEN_PUBLICKEY_ERR_TOTAL + 1,
685     SNMP_DB_SSH_LOGINS_F_PUBLICKEY_ERR_TOTAL, FALSE, FALSE,
686     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.publickeyAuthFailedTotal",
687     SNMP_MIB_NAME_PREFIX "ssh.sshLogins.publickeyAuthFailedTotal.0",
688     SNMP_SMI_COUNTER32 },
689 
690   { { SNMP_MIB_SFTP_SESS_OID_COUNT, 0 },
691     SNMP_MIB_SFTP_SESS_OIDLEN_COUNT + 1,
692     SNMP_DB_SFTP_SESS_F_SESS_COUNT, FALSE, FALSE,
693     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.sessionCount",
694     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.sessionCount.0",
695     SNMP_SMI_GAUGE32 },
696 
697   { { SNMP_MIB_SFTP_SESS_OID_TOTAL, 0 },
698     SNMP_MIB_SFTP_SESS_OIDLEN_TOTAL + 1,
699     SNMP_DB_SFTP_SESS_F_SESS_TOTAL, FALSE, FALSE,
700     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.sessionTotal",
701     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.sessionTotal.0",
702     SNMP_SMI_COUNTER32 },
703 
704   { { SNMP_MIB_SFTP_SESS_OID_V3_TOTAL, 0 },
705     SNMP_MIB_SFTP_SESS_OIDLEN_V3_TOTAL + 1,
706     SNMP_DB_SFTP_SESS_F_SFTP_V3_TOTAL, FALSE, FALSE,
707     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion3Total",
708     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion3Total.0",
709     SNMP_SMI_COUNTER32 },
710 
711   { { SNMP_MIB_SFTP_SESS_OID_V4_TOTAL, 0 },
712     SNMP_MIB_SFTP_SESS_OIDLEN_V4_TOTAL + 1,
713     SNMP_DB_SFTP_SESS_F_SFTP_V4_TOTAL, FALSE, FALSE,
714     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion4Total",
715     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion4Total.0",
716     SNMP_SMI_COUNTER32 },
717 
718   { { SNMP_MIB_SFTP_SESS_OID_V5_TOTAL, 0 },
719     SNMP_MIB_SFTP_SESS_OIDLEN_V5_TOTAL + 1,
720     SNMP_DB_SFTP_SESS_F_SFTP_V5_TOTAL, FALSE, FALSE,
721     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion5Total",
722     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion5Total.0",
723     SNMP_SMI_COUNTER32 },
724 
725   { { SNMP_MIB_SFTP_SESS_OID_V6_TOTAL, 0 },
726     SNMP_MIB_SFTP_SESS_OIDLEN_V6_TOTAL + 1,
727     SNMP_DB_SFTP_SESS_F_SFTP_V6_TOTAL, FALSE, FALSE,
728     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion6Total",
729     SNMP_MIB_NAME_PREFIX "sftp.sftpSessions.protocolVersion6Total.0",
730     SNMP_SMI_COUNTER32 },
731 
732   /* sftp.sftpDataTransfers MIBs */
733   { { SNMP_MIB_SFTP_XFERS_OID_DIR_LIST_COUNT, 0 },
734     SNMP_MIB_SFTP_XFERS_OIDLEN_DIR_LIST_COUNT + 1,
735     SNMP_DB_SFTP_XFERS_F_DIR_LIST_COUNT, FALSE, FALSE,
736     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListCount",
737     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListCount.0",
738     SNMP_SMI_GAUGE32 },
739 
740   { { SNMP_MIB_SFTP_XFERS_OID_DIR_LIST_TOTAL, 0 },
741     SNMP_MIB_SFTP_XFERS_OIDLEN_DIR_LIST_TOTAL + 1,
742     SNMP_DB_SFTP_XFERS_F_DIR_LIST_TOTAL, FALSE, FALSE,
743     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListTotal",
744     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListTotal.0",
745     SNMP_SMI_COUNTER32 },
746 
747   { { SNMP_MIB_SFTP_XFERS_OID_DIR_LIST_ERR_TOTAL, 0 },
748     SNMP_MIB_SFTP_XFERS_OIDLEN_DIR_LIST_ERR_TOTAL + 1,
749     SNMP_DB_SFTP_XFERS_F_DIR_LIST_ERR_TOTAL, FALSE, FALSE,
750     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListFailedTotal",
751     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.dirListFailedTotal.0",
752     SNMP_SMI_COUNTER32 },
753 
754   { { SNMP_MIB_SFTP_XFERS_OID_FILE_UPLOAD_COUNT, 0 },
755     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_UPLOAD_COUNT + 1,
756     SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_COUNT, FALSE, FALSE,
757     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadCount",
758     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadCount.0",
759     SNMP_SMI_GAUGE32 },
760 
761   { { SNMP_MIB_SFTP_XFERS_OID_FILE_UPLOAD_TOTAL, 0 },
762     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_UPLOAD_TOTAL + 1,
763     SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_TOTAL, FALSE, FALSE,
764     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadTotal",
765     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadTotal.0",
766     SNMP_SMI_COUNTER32 },
767 
768   { { SNMP_MIB_SFTP_XFERS_OID_FILE_UPLOAD_ERR_TOTAL, 0 },
769     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_UPLOAD_ERR_TOTAL + 1,
770     SNMP_DB_SFTP_XFERS_F_FILE_UPLOAD_ERR_TOTAL, FALSE, FALSE,
771     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadFailedTotal",
772     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileUploadFailedTotal.0",
773     SNMP_SMI_COUNTER32 },
774 
775   { { SNMP_MIB_SFTP_XFERS_OID_FILE_DOWNLOAD_COUNT, 0 },
776     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_DOWNLOAD_COUNT + 1,
777     SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_COUNT, FALSE, FALSE,
778     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadCount",
779     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadCount.0",
780     SNMP_SMI_GAUGE32 },
781 
782   { { SNMP_MIB_SFTP_XFERS_OID_FILE_DOWNLOAD_TOTAL, 0 },
783     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_DOWNLOAD_TOTAL + 1,
784     SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_TOTAL, FALSE, FALSE,
785     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadTotal",
786     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadTotal.0",
787     SNMP_SMI_COUNTER32 },
788 
789   { { SNMP_MIB_SFTP_XFERS_OID_FILE_DOWNLOAD_ERR_TOTAL, 0 },
790     SNMP_MIB_SFTP_XFERS_OIDLEN_FILE_DOWNLOAD_ERR_TOTAL + 1,
791     SNMP_DB_SFTP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL, FALSE, FALSE,
792     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadFailedTotal",
793     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.fileDownloadFailedTotal.0",
794     SNMP_SMI_COUNTER32 },
795 
796   { { SNMP_MIB_SFTP_XFERS_OID_KB_UPLOAD_TOTAL, 0 },
797     SNMP_MIB_SFTP_XFERS_OIDLEN_KB_UPLOAD_TOTAL + 1,
798     SNMP_DB_SFTP_XFERS_F_KB_UPLOAD_TOTAL, FALSE, FALSE,
799     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.kbUploadTotal",
800     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.kbUploadTotal.0",
801     SNMP_SMI_COUNTER32 },
802 
803   { { SNMP_MIB_SFTP_XFERS_OID_KB_DOWNLOAD_TOTAL, 0 },
804     SNMP_MIB_SFTP_XFERS_OIDLEN_KB_DOWNLOAD_TOTAL + 1,
805     SNMP_DB_SFTP_XFERS_F_KB_DOWNLOAD_TOTAL, FALSE, FALSE,
806     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.kbDownloadTotal",
807     SNMP_MIB_NAME_PREFIX "sftp.sftpDataTransfers.kbDownloadTotal.0",
808     SNMP_SMI_COUNTER32 },
809 
810   /* scp.scpSessions MIBs */
811   { { SNMP_MIB_SCP_SESS_OID_COUNT, 0 },
812     SNMP_MIB_SCP_SESS_OIDLEN_COUNT + 1,
813     SNMP_DB_SCP_SESS_F_SESS_COUNT, FALSE, FALSE,
814     SNMP_MIB_NAME_PREFIX "scp.scpSessions.sessionCount",
815     SNMP_MIB_NAME_PREFIX "scp.scpSessions.sessionCount.0",
816     SNMP_SMI_GAUGE32 },
817 
818   { { SNMP_MIB_SCP_SESS_OID_TOTAL, 0 },
819     SNMP_MIB_SCP_SESS_OIDLEN_TOTAL + 1,
820     SNMP_DB_SCP_SESS_F_SESS_TOTAL, FALSE, FALSE,
821     SNMP_MIB_NAME_PREFIX "scp.scpSessions.sessionTotal",
822     SNMP_MIB_NAME_PREFIX "scp.scpSessions.sessionTotal.0",
823     SNMP_SMI_COUNTER32 },
824 
825   /* scp.scpDataTransfers MIBs */
826   { { SNMP_MIB_SCP_XFERS_OID_FILE_UPLOAD_COUNT, 0 },
827     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_UPLOAD_COUNT + 1,
828     SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_COUNT, FALSE, FALSE,
829     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadCount",
830     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadCount.0",
831     SNMP_SMI_GAUGE32 },
832 
833   { { SNMP_MIB_SCP_XFERS_OID_FILE_UPLOAD_TOTAL, 0 },
834     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_UPLOAD_TOTAL + 1,
835     SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_TOTAL, FALSE, FALSE,
836     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadTotal",
837     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadTotal.0",
838     SNMP_SMI_COUNTER32 },
839 
840   { { SNMP_MIB_SCP_XFERS_OID_FILE_UPLOAD_ERR_TOTAL, 0 },
841     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_UPLOAD_ERR_TOTAL + 1,
842     SNMP_DB_SCP_XFERS_F_FILE_UPLOAD_ERR_TOTAL, FALSE, FALSE,
843     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadFailedTotal",
844     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileUploadFailedTotal.0",
845     SNMP_SMI_COUNTER32 },
846 
847   { { SNMP_MIB_SCP_XFERS_OID_FILE_DOWNLOAD_COUNT, 0 },
848     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_DOWNLOAD_COUNT + 1,
849     SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_COUNT, FALSE, FALSE,
850     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadCount",
851     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadCount.0",
852     SNMP_SMI_GAUGE32 },
853 
854   { { SNMP_MIB_SCP_XFERS_OID_FILE_DOWNLOAD_TOTAL, 0 },
855     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_DOWNLOAD_TOTAL + 1,
856     SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_TOTAL, FALSE, FALSE,
857     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadTotal",
858     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadTotal.0",
859     SNMP_SMI_COUNTER32 },
860 
861   { { SNMP_MIB_SCP_XFERS_OID_FILE_DOWNLOAD_ERR_TOTAL, 0 },
862     SNMP_MIB_SCP_XFERS_OIDLEN_FILE_DOWNLOAD_ERR_TOTAL + 1,
863     SNMP_DB_SCP_XFERS_F_FILE_DOWNLOAD_ERR_TOTAL, FALSE, FALSE,
864     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadFailedTotal",
865     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.fileDownloadFailedTotal.0",
866     SNMP_SMI_COUNTER32 },
867 
868   { { SNMP_MIB_SCP_XFERS_OID_KB_UPLOAD_TOTAL, 0 },
869     SNMP_MIB_SCP_XFERS_OIDLEN_KB_UPLOAD_TOTAL + 1,
870     SNMP_DB_SCP_XFERS_F_KB_UPLOAD_TOTAL, FALSE, FALSE,
871     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.kbUploadTotal",
872     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.kbUploadTotal.0",
873     SNMP_SMI_COUNTER32 },
874 
875   { { SNMP_MIB_SCP_XFERS_OID_KB_DOWNLOAD_TOTAL, 0 },
876     SNMP_MIB_SCP_XFERS_OIDLEN_KB_DOWNLOAD_TOTAL + 1,
877     SNMP_DB_SCP_XFERS_F_KB_DOWNLOAD_TOTAL, FALSE, FALSE,
878     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.kbDownloadTotal",
879     SNMP_MIB_NAME_PREFIX "scp.scpDataTransfers.kbDownloadTotal.0",
880     SNMP_SMI_COUNTER32 },
881 
882   /* ban.connections MIBs */
883   { { SNMP_MIB_BAN_CONNS_OID_CONN_BAN_TOTAL, 0 },
884     SNMP_MIB_BAN_CONNS_OIDLEN_CONN_BAN_TOTAL + 1,
885     SNMP_DB_BAN_CONNS_F_CONN_BAN_TOTAL, FALSE, FALSE,
886     SNMP_MIB_NAME_PREFIX "ban.connections.connectionBannedTotal",
887     SNMP_MIB_NAME_PREFIX "ban.connections.connectionBannedTotal.0",
888     SNMP_SMI_COUNTER32 },
889 
890   { { SNMP_MIB_BAN_CONNS_OID_USER_BAN_TOTAL, 0 },
891     SNMP_MIB_BAN_CONNS_OIDLEN_USER_BAN_TOTAL + 1,
892     SNMP_DB_BAN_CONNS_F_USER_BAN_TOTAL, FALSE, FALSE,
893     SNMP_MIB_NAME_PREFIX "ban.connections.userBannedTotal",
894     SNMP_MIB_NAME_PREFIX "ban.connections.userBannedTotal.0",
895     SNMP_SMI_COUNTER32 },
896 
897   { { SNMP_MIB_BAN_CONNS_OID_HOST_BAN_TOTAL, 0 },
898     SNMP_MIB_BAN_CONNS_OIDLEN_HOST_BAN_TOTAL + 1,
899     SNMP_DB_BAN_CONNS_F_HOST_BAN_TOTAL, FALSE, FALSE,
900     SNMP_MIB_NAME_PREFIX "ban.connections.hostBannedTotal",
901     SNMP_MIB_NAME_PREFIX "ban.connections.hostBannedTotal.0",
902     SNMP_SMI_COUNTER32 },
903 
904   { { SNMP_MIB_BAN_CONNS_OID_CLASS_BAN_TOTAL, 0 },
905     SNMP_MIB_BAN_CONNS_OIDLEN_CLASS_BAN_TOTAL + 1,
906     SNMP_DB_BAN_CONNS_F_CLASS_BAN_TOTAL, FALSE, FALSE,
907     SNMP_MIB_NAME_PREFIX "ban.connections.classBannedTotal",
908     SNMP_MIB_NAME_PREFIX "ban.connections.classBannedTotal.0",
909     SNMP_SMI_COUNTER32 },
910 
911   /* ban.bans MIBs */
912   { { SNMP_MIB_BAN_BANS_OID_BAN_COUNT, 0 },
913     SNMP_MIB_BAN_BANS_OIDLEN_BAN_COUNT + 1,
914     SNMP_DB_BAN_BANS_F_BAN_COUNT, FALSE, FALSE,
915     SNMP_MIB_NAME_PREFIX "ban.bans.banCount",
916     SNMP_MIB_NAME_PREFIX "ban.bans.banCount.0",
917     SNMP_SMI_GAUGE32 },
918 
919   { { SNMP_MIB_BAN_BANS_OID_BAN_TOTAL, 0 },
920     SNMP_MIB_BAN_BANS_OIDLEN_BAN_TOTAL + 1,
921     SNMP_DB_BAN_BANS_F_BAN_TOTAL, FALSE, FALSE,
922     SNMP_MIB_NAME_PREFIX "ban.bans.banTotal",
923     SNMP_MIB_NAME_PREFIX "ban.bans.banTotal.0",
924     SNMP_SMI_COUNTER32 },
925 
926   { { SNMP_MIB_BAN_BANS_OID_USER_BAN_COUNT, 0 },
927     SNMP_MIB_BAN_BANS_OIDLEN_USER_BAN_COUNT + 1,
928     SNMP_DB_BAN_BANS_F_USER_BAN_COUNT, FALSE, FALSE,
929     SNMP_MIB_NAME_PREFIX "ban.bans.userBanCount",
930     SNMP_MIB_NAME_PREFIX "ban.bans.userBanCount.0",
931     SNMP_SMI_GAUGE32 },
932 
933   { { SNMP_MIB_BAN_BANS_OID_USER_BAN_TOTAL, 0 },
934     SNMP_MIB_BAN_BANS_OIDLEN_USER_BAN_TOTAL + 1,
935     SNMP_DB_BAN_BANS_F_USER_BAN_TOTAL, FALSE, FALSE,
936     SNMP_MIB_NAME_PREFIX "ban.bans.userBanTotal",
937     SNMP_MIB_NAME_PREFIX "ban.bans.userBanTotal.0",
938     SNMP_SMI_COUNTER32 },
939 
940   { { SNMP_MIB_BAN_BANS_OID_HOST_BAN_COUNT, 0 },
941     SNMP_MIB_BAN_BANS_OIDLEN_HOST_BAN_COUNT + 1,
942     SNMP_DB_BAN_BANS_F_HOST_BAN_COUNT, FALSE, FALSE,
943     SNMP_MIB_NAME_PREFIX "ban.bans.hostBanCount",
944     SNMP_MIB_NAME_PREFIX "ban.bans.hostBanCount.0",
945     SNMP_SMI_GAUGE32 },
946 
947   { { SNMP_MIB_BAN_BANS_OID_HOST_BAN_TOTAL, 0 },
948     SNMP_MIB_BAN_BANS_OIDLEN_HOST_BAN_TOTAL + 1,
949     SNMP_DB_BAN_BANS_F_HOST_BAN_TOTAL, FALSE, FALSE,
950     SNMP_MIB_NAME_PREFIX "ban.bans.hostBanTotal",
951     SNMP_MIB_NAME_PREFIX "ban.bans.hostBanTotal.0",
952     SNMP_SMI_COUNTER32 },
953 
954   { { SNMP_MIB_BAN_BANS_OID_CLASS_BAN_COUNT, 0 },
955     SNMP_MIB_BAN_BANS_OIDLEN_CLASS_BAN_COUNT + 1,
956     SNMP_DB_BAN_BANS_F_CLASS_BAN_COUNT, FALSE, FALSE,
957     SNMP_MIB_NAME_PREFIX "ban.bans.classBanCount",
958     SNMP_MIB_NAME_PREFIX "ban.bans.classBanCount.0",
959     SNMP_SMI_GAUGE32 },
960 
961   { { SNMP_MIB_BAN_BANS_OID_CLASS_BAN_TOTAL, 0 },
962     SNMP_MIB_BAN_BANS_OIDLEN_CLASS_BAN_TOTAL + 1,
963     SNMP_DB_BAN_BANS_F_CLASS_BAN_TOTAL, FALSE, FALSE,
964     SNMP_MIB_NAME_PREFIX "ban.bans.classBanTotal",
965     SNMP_MIB_NAME_PREFIX "ban.bans.classBanTotal.0",
966     SNMP_SMI_COUNTER32 },
967 
968   /* This sentinel entry is always enabled. */
969   { { }, 0, 0, TRUE, FALSE, NULL, NULL, 0 }
970 };
971 
972 /* We only need to look this up once. */
973 static int snmp_mib_max_idx = -1;
974 
975 static const char *trace_channel = "snmp.mib";
976 
snmp_mib_get_nearest_idx(oid_t * mib_oid,unsigned int mib_oidlen)977 int snmp_mib_get_nearest_idx(oid_t *mib_oid, unsigned int mib_oidlen) {
978   register unsigned int i;
979   int mib_idx = -1;
980 
981   /* In this case, the caller is requesting that we treat the given OID
982    * as not being specific enough, e.g. not having an instance identifier.
983    *
984    * This is done to handle the case where we received e.g.
985    * "GetNext 1.2.3", and the next OID is "1.2.3.0".  Or when we
986    * receive a "GetNext proftpd-arc" request from snmpwalk.
987    *
988    * If we find a match, we return the index of the matching entry.
989    */
990 
991   /* First, make sure the requested OID is within the proftpd arc. */
992   if (mib_oidlen >= (SNMP_OID_BASELEN - 2)) {
993 
994     /* First, look for OIDs which are at the level of 'proftpd.modules.snmp',
995      * then for 'proftpd.modules', then just 'proftpd'.  These we can handle
996      * by treating the "next" OID as the first index.
997      */
998     if (mib_oidlen <= SNMP_OID_BASELEN) {
999       oid_t base_oid[] = { SNMP_OID_BASE };
1000 
1001       for (i = 0; i <= 2; i++) {
1002         if (memcmp(base_oid, mib_oid, (SNMP_OID_BASELEN - i) *
1003               sizeof(oid_t)) == 0) {
1004           mib_idx = SNMP_MIB_FIRST_IDX;
1005           break;
1006         }
1007       }
1008 
1009     } else {
1010       /* In this case, the OID being looked up is longer than SNMP_OID_BASELEN,
1011        * yet still might be too "short" to exactly match a defined OID.  So
1012        * we still need to look for partial prefix matches, e.g.
1013        * 1.3.6.1.4.1.17852.2.2.2, and Do The Right Thing(tm).
1014        */
1015       for (i = SNMP_MIB_FIRST_IDX; snmp_mibs[i].mib_oidlen != 0; i++) {
1016         register unsigned int j;
1017         unsigned int nsubids, oidlen;
1018         int prefix_matched = FALSE;
1019 
1020         pr_signals_handle();
1021 
1022         /* Skip any disabled MIBs. */
1023         if (snmp_mibs[i].mib_enabled == FALSE) {
1024           continue;
1025         }
1026 
1027         /* Skip any 'notify only' MIBs, which are only for notifications. */
1028         if (snmp_mibs[i].notify_only == TRUE) {
1029           continue;
1030         }
1031 
1032         if (mib_oidlen > snmp_mibs[i].mib_oidlen) {
1033           nsubids = mib_oidlen - snmp_mibs[i].mib_oidlen;
1034           oidlen = mib_oidlen;
1035 
1036         } else {
1037           nsubids = snmp_mibs[i].mib_oidlen - mib_oidlen;
1038           oidlen = snmp_mibs[i].mib_oidlen;
1039         }
1040 
1041         for (j = 0; j <= nsubids; j++) {
1042           if (memcmp(snmp_mibs[i].mib_oid, mib_oid,
1043               (oidlen - j) * sizeof(oid_t)) == 0) {
1044             mib_idx = i;
1045             prefix_matched = TRUE;
1046             break;
1047           }
1048         }
1049 
1050         if (prefix_matched) {
1051           break;
1052         }
1053       }
1054     }
1055   }
1056 
1057   if (mib_idx < 0) {
1058     errno = ENOENT;
1059   }
1060 
1061   return mib_idx;
1062 }
1063 
snmp_mib_get_idx(oid_t * mib_oid,unsigned int mib_oidlen,int * lacks_instance_id)1064 int snmp_mib_get_idx(oid_t *mib_oid, unsigned int mib_oidlen,
1065     int *lacks_instance_id) {
1066   register unsigned int i;
1067   int mib_idx = -1;
1068 
1069   if (lacks_instance_id != NULL) {
1070     *lacks_instance_id = FALSE;
1071   }
1072 
1073   for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1074     pr_signals_handle();
1075 
1076     /* Skip any disabled MIBs. */
1077     if (snmp_mibs[i].mib_enabled == FALSE) {
1078       continue;
1079     }
1080 
1081     if (snmp_mibs[i].mib_oidlen == mib_oidlen) {
1082       if (memcmp(snmp_mibs[i].mib_oid, mib_oid,
1083           mib_oidlen * sizeof(oid_t)) == 0) {
1084         mib_idx = i;
1085         break;
1086       }
1087     }
1088 
1089     /* Check for the case where the given OID might be missing the final
1090      * ".0" instance identifier.  This is done to support the slightly
1091      * more user-friendly NO_SUCH_INSTANCE exception for SNMPv2/SNMPv3
1092      * responses.
1093      */
1094 
1095     if (lacks_instance_id != NULL) {
1096       if (snmp_mibs[i].mib_oidlen == (mib_oidlen + 1)) {
1097         if (memcmp(snmp_mibs[i].mib_oid, mib_oid,
1098             mib_oidlen * sizeof(oid_t)) == 0) {
1099           *lacks_instance_id = TRUE;
1100           break;
1101         }
1102       }
1103     }
1104   }
1105 
1106   if (mib_idx < 0) {
1107     errno = ENOENT;
1108   }
1109 
1110   return mib_idx;
1111 }
1112 
snmp_mib_get_max_idx(void)1113 int snmp_mib_get_max_idx(void) {
1114   register unsigned int i;
1115 
1116   if (snmp_mib_max_idx >= 0) {
1117     return snmp_mib_max_idx;
1118   }
1119 
1120   for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1121     /* Skip any disabled MIBs. */
1122     if (snmp_mibs[i].mib_enabled == FALSE) {
1123       continue;
1124     }
1125   }
1126 
1127   /* We subtract one, since the for loop iterates one time more than
1128    * necessary, in order to find the end-of-loop condition.
1129    */
1130   snmp_mib_max_idx = i-1;
1131 
1132   return snmp_mib_max_idx;
1133 }
1134 
snmp_mib_get_by_idx(unsigned int mib_idx)1135 struct snmp_mib *snmp_mib_get_by_idx(unsigned int mib_idx) {
1136   if (mib_idx > (unsigned int) snmp_mib_get_max_idx()) {
1137     errno = EINVAL;
1138     return NULL;
1139   }
1140 
1141   return &snmp_mibs[mib_idx];
1142 }
1143 
snmp_mib_get_by_oid(oid_t * mib_oid,unsigned int mib_oidlen,int * lacks_instance_id)1144 struct snmp_mib *snmp_mib_get_by_oid(oid_t *mib_oid, unsigned int mib_oidlen,
1145     int *lacks_instance_id) {
1146   int mib_idx;
1147 
1148   mib_idx = snmp_mib_get_idx(mib_oid, mib_oidlen, lacks_instance_id);
1149   if (mib_idx < 0) {
1150     return NULL;
1151   }
1152 
1153   return snmp_mib_get_by_idx(mib_idx);
1154 }
1155 
snmp_mib_reset_counters(void)1156 int snmp_mib_reset_counters(void) {
1157   register unsigned int i;
1158 
1159   for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1160     pr_signals_handle();
1161 
1162     /* Explicitly skip the restart counter; that's the one counter that is
1163      * preserved.
1164      */
1165     if (snmp_mibs[i].mib_oidlen == SNMP_MIB_DAEMON_OIDLEN_RESTART_COUNT) {
1166       oid_t restart_oid[] = { SNMP_MIB_DAEMON_OID_RESTART_COUNT };
1167 
1168       if (memcmp(snmp_mibs[i].mib_oid, restart_oid,
1169           SNMP_MIB_DAEMON_OIDLEN_RESTART_COUNT * sizeof(oid_t)) == 0) {
1170         continue;
1171       }
1172     }
1173 
1174     if (snmp_mibs[i].smi_type == SNMP_SMI_COUNTER32 ||
1175         snmp_mibs[i].smi_type == SNMP_SMI_COUNTER64) {
1176       pr_trace_msg(trace_channel, 17, "resetting '%s' counter",
1177         snmp_mibs[i].instance_name);
1178       (void) snmp_db_reset_value(snmp_pool, snmp_mibs[i].db_field);
1179     }
1180   }
1181 
1182   return 0;
1183 }
1184 
snmp_mib_init(void)1185 int snmp_mib_init(void) {
1186   /* Iterate through all of the MIBs, deactivating some of them
1187    * if the related module is not loaded.
1188    */
1189 
1190   if (pr_module_exists("mod_tls.c") == TRUE) {
1191     register unsigned int i;
1192 
1193     /* Handle mod_tls-related MIBs. */
1194     for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1195       int db_id = snmp_db_get_field_db_id(snmp_mibs[i].db_field);
1196       switch (db_id) {
1197         case SNMP_DB_ID_TLS:
1198           snmp_mibs[i].mib_enabled = TRUE;
1199           break;
1200       }
1201     }
1202   }
1203 
1204   if (pr_module_exists("mod_sftp.c") == TRUE) {
1205     register unsigned int i;
1206 
1207     /* Handle mod_sftp-related MIBs. */
1208     for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1209       int db_id = snmp_db_get_field_db_id(snmp_mibs[i].db_field);
1210       switch (db_id) {
1211         case SNMP_DB_ID_SSH:
1212         case SNMP_DB_ID_SFTP:
1213         case SNMP_DB_ID_SCP:
1214           snmp_mibs[i].mib_enabled = TRUE;
1215           break;
1216       }
1217     }
1218   }
1219 
1220   if (pr_module_exists("mod_ban.c") == TRUE) {
1221     register unsigned int i;
1222 
1223     /* Handle mod_ban-related MIBs. */
1224     for (i = 1; snmp_mibs[i].mib_oidlen != 0; i++) {
1225       int db_id = snmp_db_get_field_db_id(snmp_mibs[i].db_field);
1226       switch (db_id) {
1227         case SNMP_DB_ID_BAN:
1228           snmp_mibs[i].mib_enabled = TRUE;
1229           break;
1230       }
1231     }
1232   }
1233 
1234   return 0;
1235 }
1236