static const int JRADIUS_pre_proxy = 6;
static const int JRADIUS_post_proxy = 7;
static const int JRADIUS_post_auth = 8;
+#ifdef WITH_COA
+static const int JRADIUS_recv_coa = 9;
+static const int JRADIUS_send_coa = 10;
+#endif
#define LOG_PREFIX "rlm_jradius: "
#define MAX_HOSTS 4
/*
* Create new attribute
*/
- vp = paircreate(atype, -1);
+ vp = paircreate(atype, 0, -1);
vp->operator = aop;
if (vp->type == -1) {
}
/*
+ * WiMAX combo-ip address
+ * paircreate() cannot recognize the real type of the address.
+ * ..ugly code...
+ */
+ if (vp->type==PW_TYPE_COMBO_IP) {
+ switch (alen) {
+ case 4:
+ vp->type = PW_TYPE_IPADDR;
+ break;
+ case 16:
+ vp->type = PW_TYPE_IPV6ADDR;
+ break;
+ }
+ }
+
+ /*
* Fill in the attribute value based on type
*/
switch (vp->type) {
static int rlm_jradius_call(char func, void *instance, REQUEST *req, int isproxy)
{
JRADIUS * inst = instance;
- RADIUS_PACKET * request = isproxy ? req->proxy : req->packet;
- RADIUS_PACKET * reply = isproxy ? req->proxy_reply : req->reply;
+ RADIUS_PACKET * request = req->packet;
+ RADIUS_PACKET * reply = req->reply;
JRSOCK * jrsock = 0;
JRSOCK sjrsock;
#define W_ERR(s) { err=s; goto packerror; }
#define R_ERR(s) { err=s; goto parseerror; }
+#ifdef WITH_PROXY
+ if (isproxy) {
+ request = req->proxy;
+ reply = req->proxy_reply;
+ }
+#endif
+
if (inst->keepalive) {
jrsock = get_socket(inst);
if (!jrsock) return exitstatus;
* we need to reconfigure a few pointers in the REQUEST object
*/
if (req->username) {
- req->username = pairfind(request->vps, PW_USER_NAME);
+ req->username = pairfind(request->vps, PW_USER_NAME, 0);
}
if (req->password) {
- req->password = pairfind(request->vps, PW_PASSWORD);
- if (!req->password) req->password = pairfind(request->vps, PW_CHAP_PASSWORD);
+ req->password = pairfind(request->vps, PW_PASSWORD, 0);
+ if (!req->password) req->password = pairfind(request->vps, PW_CHAP_PASSWORD, 0);
}
/*
return rlm_jradius_call(JRADIUS_post_auth, instance, request, 0);
}
+#ifdef WITH_COA
+static int jradius_recv_coa(void *instance, REQUEST *request)
+{
+ return rlm_jradius_call(JRADIUS_recv_coa, instance, request, 0);
+}
+static int jradius_send_coa(void *instance, REQUEST *request)
+{
+ return rlm_jradius_call(JRADIUS_send_coa, instance, request, 0);
+}
+#endif
+
static int jradius_detach(void *instance)
{
JRADIUS *inst = (JRADIUS *) instance;
jradius_pre_proxy,
jradius_post_proxy,
jradius_post_auth
+#ifdef WITH_COA
+ , jradius_recv_coa,
+ jradius_send_coa
+#endif
},
};