2016-01-13 19 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中發送失敗/成功返回碼,那麼它將有多實用?蚊子會在不久的將來支持這個功能嗎? –