gpt4 book ai didi

module - 在 FreeRADIUS C 模块中以编程方式将 VSA(供应商特定属性)添加到访问接受回复

转载 作者:行者123 更新时间:2023-12-03 00:14:47 27 4
gpt4 key购买 nike

我有一个 FreeRADIUS C 语言模块,它实现了 MOD_AUTHENTICATE 和 MOD_AUTHORIZE 方法以用于自定义身份验证目的。我需要能够以编程方式将 VSA 添加到访问接受回复。

我对 radius_pair_create() 和 fr_pair_add() 方法进行了一些尝试(请参阅下面的代码片段),但这并没有对回复内容产生任何更改,可能是因为我指定了在 a 中不存在的临时值供应商特定的字典。或者是因为我没有正确使用它们。

我的 FreeRADIUS 版本是 3_0_19

任何信息、指针,尤其是语法示例都将受到高度赞赏。

void test_vsa(REQUEST *request)
{
VALUE_PAIR *vp = NULL;

vp = radius_pair_create(request->reply, NULL, 18, 0);

if (vp)
{
log("Created VALUE_PAIR");
vp->vp_integer = 96;
fr_pair_add(&request->reply->vps, vp);
}
else
{
log("Failed to create VALUE_PAIR");
}
}

最佳答案

因此,首先您将整数值写入字符串属性,这是错误的。服务器不进行 SEGVing 的唯一原因是 VP 的长度已保留为零,因此 RADIUS 编码器不会费心取消引用该对内的 char * ,该对应包含对的值。

fr_pair_make 是这里更容易使用的函数,因为它将属性名称和值都作为字符串,因此您无需担心 C 类型。

下面的代码片段应该可以满足您的要求。

void test_avp(REQUEST *request)
{
VALUE_PAIR *vp = NULL;

vp = fr_pair_make(request->reply, &request->reply->vps, "Reply-Message", "Hello from FreeRADIUS", T_OP_SET);
if (vp)
{
log("Created VALUE_PAIR");
}
else
{
log("Failed to create VALUE_PAIR");
}
}

为了获得更多解释,让我们看看 doxygen header :

/** Create a VALUE_PAIR from ASCII strings
*
* Converts an attribute string identifier (with an optional tag qualifier)
* and value string into a VALUE_PAIR.
*
* The string value is parsed according to the type of VALUE_PAIR being created.
*
* @param[in] ctx for talloc
* @param[in] vps list where the attribute will be added (optional)
* @param[in] attribute name.
* @param[in] value attribute value (may be NULL if value will be set later).
* @param[in] op to assign to new VALUE_PAIR.
* @return a new VALUE_PAIR.
*/
VALUE_PAIR *fr_pair_make(TALLOC_CTX *ctx, VALUE_PAIR **vps,
char const *attribute, char const *value, FR_TOKEN op)
  • ctx - 这是 vps 所属的数据包或请求。如果您要向请求添加属性,则应为 request->packet,回复为 request->reply,控制为 request .
  • vps - 如果指定,这将是将新 VP 插入到的列表中。如果这是 NULL fr_pair_make 将只返回该对并让您将其插入到列表中。
  • attribute - 字符串形式的属性名称。
  • value - 字符串形式的属性值。对于非字符串类型,fr_pair_make 将尝试执行转换。因此,例如,为整数类型传递“12345”将导致整数值 12345 被写入属性中的 int 字段。
  • op - 您通常需要使用T_OP_SET,这意味着覆盖相同属性的现有实例。如果您想了解不同的运算符及其用途,请参阅 FR_TOKENT_OP_* 值以及使用它们的代码。

关于module - 在 FreeRADIUS C 模块中以编程方式将 VSA(供应商特定属性)添加到访问接受回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com