Mosquitto 身份验证插件 ACL 检查不会被调用订阅

Mosquitto auth plug in ACL check wont get called for subscriptions

我正在使用 mosquitto 1.4.5 版本。

我正在尝试让一个单独的 plug-in 对 mosquitto 代理的主题订阅进行 ACL 检查,并使用提供的 header 进行发布。

只是为了测试 auth plug-in 的集成,我刚刚使用为 mosquitto auth 插件提供的 header 打印了如下消息(mosquitto_plugin.h)。

int mosquitto_auth_acl_check(void *user_data, const char *clientid, const char *username, const char *topic, int access)
{
   mosquitto_log_printf( MOSQ_LOG_INFO , "ACL Check called");
   return MOSQ_ERR_SUCCESS;
}

创建共享 object 并更改配置文件的 auth_plugin 属性后,我尝试使用客户端模拟来查看订阅和发布是否会调用mosquitto_auth_acl_check。 我意识到,尽管它在所提供的 header 的评论中是这么说的,但它从来没有被要求订阅。

在发布场景中,我可以看到记录了 ACL Check called 消息,因此可以假设它调用了函数。

在订阅方案中,消息没有被记录,因此我假设该函数没有被调用。

订阅不调用的原因是什么?

由于将通配符订阅与通配符 acl 进行比较相对困难,因此当前未在订阅时调用它。

在将消息发送到客户端时检查 ACL,这相当于同一件事,但效率不高。