📄 radius_snmp.c
字号:
case RADIUSACCSERVRESETTIME: rad_snmp.acct.reset_time = (time(NULL) - rad_snmp.acct.last_reset_time) * 100; *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.reset_time; case RADIUSACCSERVCONFIGRESET: *write_method = radServReset; result = 4; return (unsigned char *) &result; case RADIUSACCSERVTOTALREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_requests; case RADIUSACCSERVTOTALINVALIDREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_invalid_requests; case RADIUSACCSERVTOTALDUPREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_dup_requests; case RADIUSACCSERVTOTALRESPONSES: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_responses; case RADIUSACCSERVTOTALMALFORMEDREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_malformed_requests; case RADIUSACCSERVTOTALBADAUTHENTICATORS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_bad_authenticators; case RADIUSACCSERVTOTALPACKETSDROPPED: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_packets_dropped; case RADIUSACCSERVTOTALNORECORDS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_no_records; case RADIUSACCSERVTOTALUNKNOWNTYPES: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.acct.total_unknown_types; } return NULL;}static const unsigned char *radAccEntry(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { RADCLIENT *c; *write_method = NULL; /* table is read only */ c = get_client(vp, name, length, exact); if (!c) return NULL; /* return the current value of the variable */ switch (vp->magic) { case RADIUSACCCLIENTADDRESS: *var_len = sizeof(c->ipaddr); return (unsigned char *)&(c->ipaddr); case RADIUSACCCLIENTID: if (strlen(c->shortname)) { *var_len = strlen(c->shortname); return c->shortname; } *var_len = strlen(c->longname); return c->longname; case RADIUSACCSERVPACKETSDROPPED: return (unsigned char *) NULL; case RADIUSACCSERVREQUESTS: return (unsigned char *) NULL; case RADIUSACCSERVDUPREQUESTS: return (unsigned char *) NULL; case RADIUSACCSERVRESPONSES: return (unsigned char *) NULL; case RADIUSACCSERVBADAUTHENTICATORS: return (unsigned char *) NULL; case RADIUSACCSERVMALFORMEDREQUESTS: return (unsigned char *) NULL; case RADIUSACCSERVNORECORDS: return (unsigned char *) NULL; case RADIUSACCSERVUNKNOWNTYPES: return (unsigned char *) NULL; } return NULL;}static const unsigned char *radAuthServ(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { static int result; /* check whether the instance identifier is valid */ if (smux_header_generic(vp, name, length, exact, var_len, write_method) == MATCH_FAILED) { return NULL; } /* return the current value of the variable */ switch (vp->magic) { case RADIUSAUTHSERVIDENT: *var_len = strlen(rad_snmp.auth.ident); return (const unsigned char *) rad_snmp.auth.ident; case RADIUSAUTHSERVUPTIME: rad_snmp.auth.uptime = (time(NULL) - rad_snmp.auth.start_time) * 100; *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.uptime; case RADIUSAUTHSERVRESETTIME: rad_snmp.auth.reset_time = (time(NULL) - rad_snmp.auth.last_reset_time) * 100; *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.reset_time; case RADIUSAUTHSERVCONFIGRESET: *write_method = radServReset; result = 4; return (unsigned char *) &result; case RADIUSAUTHSERVTOTALACCESSREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_requests; case RADIUSAUTHSERVTOTALINVALIDREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_invalid_requests; case RADIUSAUTHSERVTOTALDUPACCESSREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_dup_requests; case RADIUSAUTHSERVTOTALACCESSACCEPTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_access_accepts; case RADIUSAUTHSERVTOTALACCESSREJECTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_access_rejects; case RADIUSAUTHSERVTOTALACCESSCHALLENGES: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_access_challenges; case RADIUSAUTHSERVTOTALMALFORMEDACCESSREQUESTS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_malformed_requests; case RADIUSAUTHSERVTOTALBADAUTHENTICATORS: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_bad_authenticators; case RADIUSAUTHSERVTOTALPACKETSDROPPED: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_packets_dropped; case RADIUSAUTHSERVTOTALUNKNOWNTYPES: *var_len = sizeof(int32_t); return (unsigned char *) &rad_snmp.auth.total_unknown_types; } return NULL;}static const unsigned char *radAuthEntry(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { RADCLIENT *c; *write_method = NULL; /* table is read only */ c = get_client(vp, name, length, exact); if (!c) return NULL; /* return the current value of the variable */ switch (vp->magic) { case RADIUSAUTHCLIENTADDRESS: *var_len = sizeof(c->ipaddr); return (unsigned char *)&(c->ipaddr); case RADIUSAUTHCLIENTID: if (strlen(c->shortname)) { *var_len = strlen(c->shortname); return c->shortname; } *var_len = strlen(c->longname); return c->longname; case RADIUSAUTHSERVACCESSREQUESTS: return (unsigned char *) NULL; case RADIUSAUTHSERVDUPACCESSREQUESTS: return (unsigned char *) NULL; case RADIUSAUTHSERVACCESSACCEPTS: return (unsigned char *) NULL; case RADIUSAUTHSERVACCESSREJECTS: return (unsigned char *) NULL; case RADIUSAUTHSERVACCESSCHALLENGES: return (unsigned char *) NULL; case RADIUSAUTHSERVMALFORMEDACCESSREQUESTS: return (unsigned char *) NULL; case RADIUSAUTHSERVBADAUTHENTICATORS: return (unsigned char *) NULL; case RADIUSAUTHSERVPACKETSDROPPED: return (unsigned char *) NULL; case RADIUSAUTHSERVUNKNOWNTYPES: return (unsigned char *) NULL; } return NULL;}static CONF_PARSER snmp_config[] = { { "smux_password", PW_TYPE_STRING_PTR, 0, &rad_snmp.smux_password, "" }, { "snmp_write_access", PW_TYPE_BOOLEAN, 0, &rad_snmp.snmp_write_access, "no" }, { NULL, -1, 0, NULL, NULL }};/* Register RADIUS MIBs. */voidradius_snmp_init (void) { CONF_SECTION *cs; /* * Initialize the RADIUS SNMP data structure. */ memset(&rad_snmp, 0, sizeof(rad_snmp)); rad_snmp.auth.ident = radiusd_version; rad_snmp.acct.ident = radiusd_version; rad_snmp.smux_event = SMUX_NONE; rad_snmp.smux_password = NULL; rad_snmp.snmp_write_access = FALSE; rad_snmp.smux_fd = -1; rad_snmp.smux_max_failures = 3; /* FIXME! get from config */ rad_snmp.smux_failures = 0; /* * We really should get better clock resolution.. */ rad_snmp.auth.start_time = time(NULL); rad_snmp.auth.last_reset_time = rad_snmp.auth.start_time; rad_snmp.acct.start_time = rad_snmp.auth.start_time; rad_snmp.acct.last_reset_time = rad_snmp.auth.start_time; /* * Parse the SNMP configuration information. */ cs = cf_section_find(NULL); if (cs != NULL) cf_section_parse(cs, NULL, snmp_config); /* * Do SMUX initialization. */ smux_init (radius_oid, sizeof (radius_oid) / sizeof (oid)); REGISTER_MIB("mibII/radius-acc-server", radiusacc_variables, variable, radacc_oid); REGISTER_MIB("mibII/radius-auth-server", radiusauth_variables, variable, radauth_oid); smux_start ();}#endif /* WITH_SNMP */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -