static rlm_rcode_t mod_accounting(void * instance, REQUEST * request) { rlm_rcode_t rcode; VALUE_PAIR * vp; DICT_VALUE *dv; CONF_SECTION *cs; char const *insert, *trim, *expire; rlm_rediswho_t *inst = (rlm_rediswho_t *) instance; REDISSOCK *dissocket; vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE, 0, TAG_ANY); if (!vp) { RDEBUG("Could not find account status type in packet."); return RLM_MODULE_NOOP; } dv = dict_valbyattr(vp->da->attr, vp->da->vendor, vp->vp_integer); if (!dv) { RDEBUG("Unknown Acct-Status-Type %u", vp->vp_integer); return RLM_MODULE_NOOP; } cs = cf_section_sub_find(inst->cs, dv->name); if (!cs) { RDEBUG("No subsection %s", dv->name); return RLM_MODULE_NOOP; } dissocket = fr_connection_get(inst->redis_inst->pool); if (!dissocket) { RDEBUG("cannot allocate redis connection"); return RLM_MODULE_FAIL; } insert = cf_pair_value(cf_pair_find(cs, "insert")); trim = cf_pair_value(cf_pair_find(cs, "trim")); expire = cf_pair_value(cf_pair_find(cs, "expire")); rcode = mod_accounting_all(&dissocket, inst, request, insert, trim, expire); if (dissocket) fr_connection_release(inst->redis_inst->pool, dissocket); return rcode; }
static rlm_rcode_t CC_HINT(nonnull) mod_accounting(void * instance, REQUEST * request) { rlm_rcode_t rcode; VALUE_PAIR * vp; DICT_VALUE *dv; CONF_SECTION *cs; rlm_rediswho_t *inst = (rlm_rediswho_t *) instance; REDISSOCK *dissocket; vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE, 0, TAG_ANY); if (!vp) { RDEBUG("Could not find account status type in packet"); return RLM_MODULE_NOOP; } dv = dict_valbyattr(vp->da->attr, vp->da->vendor, vp->vp_integer); if (!dv) { RDEBUG("Unknown Acct-Status-Type %u", vp->vp_integer); return RLM_MODULE_NOOP; } cs = cf_section_sub_find(inst->cs, dv->name); if (!cs) { RDEBUG("No subsection %s", dv->name); return RLM_MODULE_NOOP; } dissocket = fr_connection_get(inst->redis_inst->pool); if (!dissocket) return RLM_MODULE_FAIL; rcode = mod_accounting_all(&dissocket, inst, request); if (dissocket) fr_connection_release(inst->redis_inst->pool, dissocket); return rcode; }