You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FreeRADIUS的sites-available/default中获取Perl模块变量

解决FreeRADIUS中自定义属性读取失败的问题

1. 把属性明确注入请求/回复结构

你的Perl函数不能只返回属性值,得把它加到FreeRADIUS的请求哈希里,不然后续阶段读不到。改下my_custom_function的写法:

sub my_custom_function {
    my $request = shift;
    # 直接把属性塞进请求结构
    $request->{'CustomAttribute'} = 'your_hardcoded_value';
    # 或者用官方推荐的add_attr方法,更规范
    # $request->add_attr('CustomAttribute', 'your_hardcoded_value');
    return RLM_MODULE_OK;
}

记得在authorize块里调用这个函数,确保属性在授权阶段就被注入。

2. 对齐属性设置和条件判断的执行时机

如果CustomAttribute是在post_auth阶段才设置的,那authorize阶段的if条件肯定读不到。要确认:调用函数的步骤,必须在你用%{CustomAttribute}做判断的代码之前。比如条件在authorize块里,函数就得在同一个块的前面执行。

3. 用带前缀的变量引用格式

默认的%{CustomAttribute}会优先找回复属性,如果你是存在请求里的,就会报错。得明确指定前缀:

  • 请求属性用%{request:CustomAttribute}
  • 回复属性用%{reply:CustomAttribute}

正确的条件写法示例:

if (%{request:CustomAttribute} == "expected_value") {
    # 这里写你的逻辑
}

4. 调试确认属性是否真的被注入

在Perl模块里加个日志,看看属性有没有被正确设置:

use Data::Dumper;
sub my_custom_function {
    my $request = shift;
    $request->{'CustomAttribute'} = 'test_value';
    # 把请求结构打日志里,调试用
    $RADIUS::log->info("Request after setting attr: " . Dumper($request));
    return RLM_MODULE_OK;
}

然后用radiusd -X启动调试模式,跑radtest后看日志,确认CustomAttribute在请求结构里。

5. 检查字典定义是否正确

确保你加的字典条目格式没问题,比如:

ATTRIBUTE       CustomAttribute       1000    string

属性编号别和现有属性冲突,类型(string/integer)要和你设置的值匹配。


内容的提问来源于stack exchange,提问作者Sundararajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:13:12