使用命令替换

优质
小牛编辑
142浏览
2023-12-01

行动时刻 - 使用命令替换

到目前为止,我们使用双引号来包含将被引用的变量。 Unlang还具有反引号字符串,允许命令替换。这些反引号内的字符串的计算方式类似于可以进行字符串扩展的双引号字符串。 让我们修改上一个练习,以显示操作中的命令替换: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容:

if(control:Auth-Type == 'PAP'){
    update reply {
        Reply-Message := `/bin/echo We are using %{control:AuthType}`
    }
}

2.在调试模式下重新启动FreeRADIUS并尝试作为alice进行身份验证。 现在,echo命令的反馈将分配给Reply-Message属性。

刚刚发生了什么?

我们使用反引号来执行命令替换。此命令的输出已分配给属性。 请注意unlang中命令替换的以下几点:

  • 该命令在FreeRADIUS服务器的子shell中执行。字符串的内容在此子shell中传递和执行。
  • 该字符串被分成命令和参数。在我们的示例中,命令将是/ bin / echo,而参数我们正在使用PAP。
  • 指定可执行文件时使用完整路径。
  • 可执行文件以运行FreeRADIUS服务器的用户身份运行。
  • 您可以在命令替换字符串中包含其他变量。
  • 如果命令执行失败,则会带来问题。这取决于被调用的可执行文件的退出代码。 Unlang测试可执行文件的退出代码,如果它不为零则返回拒绝。如本章开头所列,拒绝会导致请求立即被拒绝。
  • 退出代码和命令输出是两个不同的东西。如果退出代码为零,则将命令输出分配给变量。
  • 仅返回并分配多行输出中的第一行。
  • 小心使用命令替换,因为它会影响性能。