2016-01-13 53 views
1

我正在使用mosquitto 1.4.5构建。蚊子验证插入ACL检查不会被要求订阅

我想要有一个单独的插件做mosquitto broker的主题订阅和发布使用提供的标头的ACL检查。

只是为了测试auth插件的集成,我刚刚使用提供的用于mosquitto auth插件的头文件(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; 
} 

使得共享对象和具有配置文件的auth_plugin属性之后改变了我与客户的模拟尝试,看看是否订阅和发布将调用mosquitto_auth_acl_check。 我意识到尽管它在提供的标题的评论中说了什么,但它永远不会被要求订阅。

在发布场景中,我可以看到ACL检查称为消息被记录,因此可以假定它调用该函数。

enter image description here

在认购方案没有被记录的消息,因此我假设的功能不会被调用。

enter image description here

有什么能为它仅被认购不叫的原因是什么?

回答

3

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

在邮件即将发送给客户端的时候检查ACL,这相当于同一件事但效率不高。

+0

哦,我似乎误解了插件头的评论,“访问将是MOSQ_ACL_READ(用于订阅)或MOSQ_ACL_WRITE(用于发布)之一”我认为该函数也会被调用订阅消息。现在我意识到这是为了识别收到的发布消息和发送发布消息。我希望我明白了吗? 但是,如果我要实现对SUBSCRIBE消息的ACL检查,并且可能在SUBACK中发送失败/成功返回码,那么它将有多实用?蚊子会在不久的将来支持这个功能吗? –