plugin_version

Marcus Kool marcus.kool at urlfilterdb.com
Thu Dec 15 20:47:58 UTC 2022


Hi Ondrej,

yeah, I was kinda expecting "no guarantees", but isn't the plugin_version() function a good method candidate to enforce compatibility?
I mean, isn't increasing NS_PLUGIN_VERSION when a (plugin visible) data structure changes, a good way to enforce that only compatible plugins are used?

Thanks,

Marcus


On 15/12/2022 19:32, Ondřej Surý wrote:
> Hi Marcus,
>
> I am afraid that we can’t provide any guarantees about the BIND 9 internal libraries. We made a decision to drop the layers and layers of compatibility for the sake of maintainability.
>
> That said, once the release is pronounced ESV (roughly a year from initial release), we try to minimize changes to that branch, but it could still happen if needed by a security fix.
>
> As for the binary compatibility, there’s no guarantee whatsoever, I think you need to match the full version to check whether the plug-in should be loaded.
>
> Honestly, the best way how to keep the plug-in that’s useful for wider audience maintained would be to contribute it to the BIND 9 with a promise that the authors will keep helping maintaining the 
> plug-in. (We would like to avoid the situations where the author just dumps the code on us and don’t care anymore - there’s associated maintenance cost with any new feature.)
>
> Ondrej
> --
> Ondřej Surý — ISC (He/Him)
>
> My working hours and your working hours may be different. Please do not feel obligated to reply outside your normal working hours.
>
>> On 15. 12. 2022, at 20:10, Marcus Kool <marcus.kool at urlfilterdb.com> wrote:
>>
>> 
>>
>> Hi,
>>
>> I have written a plugin for named and was wondering what the policy behind the usage of plugin_version() is and what kind of compatibility check it intends to perform.
>>
>> It is common for plugins to use query_ctx_t and its members fname, view, client (client.message, client.query) etc.
>> Since these data structures may change between (patch) versions, a plugin compiled for version A can get a SEGV signal because a data structure changed and the plugin is used inside named version B.
>> I have little experience with data structure changes of named and observed only the addition of refresh_rrset in query_ctx (somewhere between 9.16.1 and 9.16.35) which did not cause an issue since 
>> its 1-byte size did not change offsets of most members inside the query_ctx struct.
>>
>> In our plugin, plugin_register() checks for the major and minor version number in named_g_version so a plugin compiled with 9.16.x refuses to initialize inside a 9.18.y named process and vice 
>> versa.  But I have the impression that this might not be a 100% guarantee that all is well.
>>
>> Because we like to release as few as possible versions of the plugin I have a second question: how can we be sure that a plugin compiled with 9.X.1 will have no issues accessing named data 
>> structures for all patch versions of 9.X?
>>
>> Thanks,
>>
>> Marcus
>>
>>
>>
>> -- 
>> Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from this list
>>
>> ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.
>>
>>
>> bind-users mailing list
>> bind-users at lists.isc.org
>> https://lists.isc.org/mailman/listinfo/bind-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.isc.org/pipermail/bind-users/attachments/20221215/2195bbb1/attachment-0001.htm>


More information about the bind-users mailing list