我目前在我的 Radius 配置中遇到問題,想向您尋求幫助。
我正在使用FreeRadius-Version 3.0.23
在我嘗試創建以下 unlang 運算式的authorize部分中。radiusd.conf
我有以下格式的用戶:
super1
super2
...
user1
user2
NAS 識別符號:
SUP-A
SUP-B
SUP-C
SUP-D
我想使用正則運算式從 NAS 識別符號中提取一些內容并附加到用戶。
=> super1-A
=> super2-D
但是,它不適用于以下運算式,因為提取的值在第二個 IF 陳述句中不再可用。
if ( NAS-Identifier =~ /^SUP\\-([ABCD])/ ) {
=> The extracted value is only available at this point
=> Or is it possible to define a local variable with the value?
if ( "%{User-Name}" !~ /^super\\d / )
update request {
User-Name := "%{User-Name}-%{1}" (However, I need the value here)
}
}
}
這是我的解決方法:
if ( "%{User-Name}" !~ /^super\\d / && NAS-Identifier =~ /^SUP\\-([ABCD])/ ) {
update request {
User-Name := "%{User-Name}-%{1}"
}
}
非常感謝您的幫助,因為我在 FreeRadius 檔案中找不到任何內容。
提前致謝。
uj5u.com熱心網友回復:
根據FreeRadius 檔案:
每次評估正則運算式時,無論是否匹配,捕獲組值都將被清除。
因此,在您的情況下,您可以顛倒條件的順序:
if ( "%{User-Name}" !~ /^super\\d / ) {
if ( NAS-Identifier =~ /^SUP-([ABCD])/ ) {
update request {
User-Name := "%{User-Name}-%{1}"
}
}
}
請注意,在-字符類之外使用時,char 不是任何特殊的正則運算式元字符,此處無需對其進行轉義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457118.html
