mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 18:07:52 +00:00
uspot: add mac-auth support
Fixes: WIFI-11895 Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -19,6 +19,19 @@ function request_start(ctx) {
|
|||||||
include('radius.uc', ctx);
|
include('radius.uc', ctx);
|
||||||
return;
|
return;
|
||||||
case 'uam':
|
case 'uam':
|
||||||
|
if (portal.config?.uam.mac_auth) {
|
||||||
|
let payload = portal.radius_init(ctx);
|
||||||
|
payload.username = ctx.format_mac;
|
||||||
|
payload.password = ctx.format_mac;
|
||||||
|
payload.service_type = 2;
|
||||||
|
let radius = portal.radius_call(ctx, payload);
|
||||||
|
if (radius['access-accept']) {
|
||||||
|
if (portal.config.uam.final_redirect_url == 'uam')
|
||||||
|
ctx.query_string.userurl = portal.uam_url(ctx, 'success');
|
||||||
|
portal.allow_client(ctx, { radius: { reply: radius.reply, request: payload } } );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
ctx.redir_location = portal.uam_url(ctx, 'notyet');
|
ctx.redir_location = portal.uam_url(ctx, 'notyet');
|
||||||
include('redir.uc', ctx);
|
include('redir.uc', ctx);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ enum {
|
|||||||
RADIUS_OUTPUT_PACKETS,
|
RADIUS_OUTPUT_PACKETS,
|
||||||
RADIUS_LOGOFF_URL,
|
RADIUS_LOGOFF_URL,
|
||||||
RADIUS_CLASS,
|
RADIUS_CLASS,
|
||||||
|
RADIUS_SERVICE_TYPE,
|
||||||
__RADIUS_MAX,
|
__RADIUS_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -61,6 +62,7 @@ static const struct blobmsg_policy radius_policy[__RADIUS_MAX] = {
|
|||||||
[RADIUS_OUTPUT_PACKETS] = { .name = "output_packets", .type = BLOBMSG_TYPE_INT32 },
|
[RADIUS_OUTPUT_PACKETS] = { .name = "output_packets", .type = BLOBMSG_TYPE_INT32 },
|
||||||
[RADIUS_LOGOFF_URL] = { .name = "logoff_url", .type = BLOBMSG_TYPE_STRING },
|
[RADIUS_LOGOFF_URL] = { .name = "logoff_url", .type = BLOBMSG_TYPE_STRING },
|
||||||
[RADIUS_CLASS] = { .name = "class", .type = BLOBMSG_TYPE_STRING },
|
[RADIUS_CLASS] = { .name = "class", .type = BLOBMSG_TYPE_STRING },
|
||||||
|
[RADIUS_SERVICE_TYPE] = { .name = "service_type", .type = BLOBMSG_TYPE_INT32 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct blob_buf b = {};
|
static struct blob_buf b = {};
|
||||||
@@ -138,7 +140,7 @@ radius(void)
|
|||||||
rc_add_config(rh, "acctserver", blobmsg_get_string(tb[RADIUS_ACCT_SERVER]), "code", __LINE__);
|
rc_add_config(rh, "acctserver", blobmsg_get_string(tb[RADIUS_ACCT_SERVER]), "code", __LINE__);
|
||||||
rc_add_config(rh, "servers", "/tmp/radius.servers", "code", __LINE__);
|
rc_add_config(rh, "servers", "/tmp/radius.servers", "code", __LINE__);
|
||||||
rc_add_config(rh, "dictionary", "/etc/radcli/dictionary", "code", __LINE__);
|
rc_add_config(rh, "dictionary", "/etc/radcli/dictionary", "code", __LINE__);
|
||||||
rc_add_config(rh, "radius_timeout", "2", "code", __LINE__);
|
rc_add_config(rh, "radius_timeout", "5", "code", __LINE__);
|
||||||
rc_add_config(rh, "radius_retries", "1", "code", __LINE__);
|
rc_add_config(rh, "radius_retries", "1", "code", __LINE__);
|
||||||
rc_add_config(rh, "bindaddr", "*", "code", __LINE__);
|
rc_add_config(rh, "bindaddr", "*", "code", __LINE__);
|
||||||
|
|
||||||
@@ -253,6 +255,12 @@ radius(void)
|
|||||||
return result(rh, 0, NULL);
|
return result(rh, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tb[RADIUS_SERVICE_TYPE]) {
|
||||||
|
val = blobmsg_get_u32(tb[RADIUS_SERVICE_TYPE]);
|
||||||
|
if (rc_avpair_add(rh, &send, PW_SERVICE_TYPE, &val, 4, 0) == NULL)
|
||||||
|
return result(rh, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (tb[RADIUS_CLASS])
|
if (tb[RADIUS_CLASS])
|
||||||
if (rc_avpair_add(rh, &send, PW_CLASS, blobmsg_get_string(tb[RADIUS_CLASS]), -1, 0) == NULL)
|
if (rc_avpair_add(rh, &send, PW_CLASS, blobmsg_get_string(tb[RADIUS_CLASS]), -1, 0) == NULL)
|
||||||
return result(rh, 0, NULL);
|
return result(rh, 0, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user