Hi there,

There is a package in Debian: modsecurity. This is a library and provides a
-dev and a runtime packages (libmodsecurity-dev, libmodsecurity3t64).

ModSecurity is an open source WAF (Web Application Firewall) "engine". You
can write rules (in a special language called "SecLang") and control HTTP
traffic with them. To use it the HTTP server/proxy needs a "connector".
Actually there is only one stable connector, for Nginx - this is also part
of Debian.

ModSecurity has a special feature: users can store data in "collections".
Eg. if you want to protect your application against DoS, you can store the
client IP's in a collection and store the number of requests. After a
previously set time, these data are automatically deleted.

Here comes the problem: libmodsecurity3 has two types of collection stores:
in-memory and LMDB. It's VERY important: you MUST decide the type of
choosed backend in compilation time, later you can't change it in runtime!

If you choose the in-memory storage, you will lose your stored data when
you restart the web server, but it does not need any dependency.

If you use LMDB then data will be preserved after restart - but there was a
missing feature: you couldn't remove the data from storage, because that
feature wasn't implemented. If you wanted to remove the data you should
have removed the database itself.

This is why we chose the in-memory solution when creating the package for
Debian.

But in the meantime the developers implemented the missing feature, so now
the engine is ready to use LMDB too.

I don't want to force users to use LMDB, rather I prefer to deliver two
library packages: one with in-memory and one with LMDB.

I couldn't find any guideline in Debian packaging documentation but found
the libcurl-dev as a pattern.

Based on that I created a simple test package to emulate the behavior
(compiling libmodsecurity takes more time - this package is very simple and
anyone can build few seconds):

https://salsa.debian.org/airween/testlib/

This is only one source and produces 4 binary packages:

libtestlib0_0.0.0-1_amd64.deb
libtestlib0-lmdb_0.0.0-1_amd64.deb
libtestlib-dev_0.0.0-1_amd64.deb
libtestliblmdb-dev_0.0.0-1_amd64.deb


Before I send the modified package structure, I would like to ask few
questions:

* in this case the API hides the differences between two solutions; Is it
enough to make one -dev package and two different runtime packages?
* are the names acceptable "libmodsecurity3t64" and
"libmodsecurity3-lmdbt64"?
* based on the test package, are there any comments or advice to be
considered?


Thanks for all,



a.

Reply via email to