The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.
--- Begin Message ---
odhcpd only calls the lease trigger script when a lease with an
associated hostname is changed.  Enabling the lease trigger script to
also be called when a lease without an associated hostname is changed
allows for greater flexibility.

Add a new global odhcpd configuration parameter, "leasetrigger_mode",
with a default value of 0 which retains current behavior.  Setting the
parameter to 1 causes the lease trigger script to instead be called
every time any lease is changed, no matter whether it is associated with
a hostname or not.

Signed-off-by: Michał Kępień <l...@kempniu.pl>
---
The configuration parameter added by this patch could obviously be a
boolean, but it occurred to me that if the flexibility of the lease
trigger script is further improved in the future [1], more lease trigger
modes may be added (e.g. upon every single DHCP event, even if one does
not cause any lease to be modified).

[1] see e.g. https://bugs.openwrt.org/index.php?do=details&task_id=401

 README          | 18 ++++++++++--------
 src/config.c    | 10 ++++++++--
 src/dhcpv6-ia.c |  6 ++++++
 src/odhcpd.h    |  1 +
 4 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/README b/README
index 0c562e6..a43f2e7 100644
--- a/README
+++ b/README
@@ -57,14 +57,16 @@ and may also receive information from ubus
 
 Section of type odhcpd
 
-Option         Type    Default                 Description
-legacy         bool    0                       Enable DHCPv4 if start but
-                                               no dhcpv4 option set
-maindhcp       bool    0                       Use odhcpd as the main DHCPv4
-                                               service
-leasefile      string                          DHCP/v6 lease/hostfile
-leasetrigger   string                          Lease trigger script
-loglevel       integer 6                       Syslog level priority (0-7)
+Option                 Type    Default                 Description
+legacy                 bool    0                       Enable DHCPv4 if start 
but
+                                                       no dhcpv4 option set
+maindhcp               bool    0                       Use odhcpd as the main 
DHCPv4
+                                                       service
+leasefile              string                          DHCP/v6 lease/hostfile
+leasetrigger           string                          Lease trigger script
+leasetrigger_mode      integer 0                       Lease trigger mode
+                       0: lease with hostname changed, 1: any lease changed
+loglevel               integer 6                       Syslog level priority 
(0-7)
 
 
 Sections of type dhcp (configure DHCP / DHCPv6 / RA / NDP service)
diff --git a/src/config.c b/src/config.c
index 118349a..78488b7 100644
--- a/src/config.c
+++ b/src/config.c
@@ -20,8 +20,8 @@ static int reload_pipe[2];
 struct list_head leases = LIST_HEAD_INIT(leases);
 struct list_head interfaces = LIST_HEAD_INIT(interfaces);
 struct config config = {.legacy = false, .main_dhcpv4 = false,
-                       .dhcp_cb = NULL, .dhcp_statefile = NULL,
-                       .log_level = LOG_INFO};
+                       .dhcp_cb = NULL, .dhcp_cb_mode = 0,
+                       .dhcp_statefile = NULL, .log_level = LOG_INFO};
 
 enum {
        IFACE_ATTR_INTERFACE,
@@ -149,6 +149,7 @@ enum {
        ODHCPD_ATTR_MAINDHCP,
        ODHCPD_ATTR_LEASEFILE,
        ODHCPD_ATTR_LEASETRIGGER,
+       ODHCPD_ATTR_LEASETRIGGER_MODE,
        ODHCPD_ATTR_LOGLEVEL,
        ODHCPD_ATTR_MAX
 };
@@ -158,6 +159,7 @@ static const struct blobmsg_policy 
odhcpd_attrs[LEASE_ATTR_MAX] = {
        [ODHCPD_ATTR_MAINDHCP] = { .name = "maindhcp", .type = 
BLOBMSG_TYPE_BOOL },
        [ODHCPD_ATTR_LEASEFILE] = { .name = "leasefile", .type = 
BLOBMSG_TYPE_STRING },
        [ODHCPD_ATTR_LEASETRIGGER] = { .name = "leasetrigger", .type = 
BLOBMSG_TYPE_STRING },
+       [ODHCPD_ATTR_LEASETRIGGER_MODE] = { .name = "leasetrigger_mode", .type 
= BLOBMSG_TYPE_INT32 },
        [ODHCPD_ATTR_LOGLEVEL] = { .name = "loglevel", .type = 
BLOBMSG_TYPE_INT32 },
 };
 
@@ -290,6 +292,10 @@ static void set_config(struct uci_section *s)
                config.dhcp_cb = strdup(blobmsg_get_string(c));
        }
 
+       if ((c = tb[ODHCPD_ATTR_LEASETRIGGER_MODE])) {
+               config.dhcp_cb_mode = blobmsg_get_u32(c);
+       }
+
        if ((c = tb[ODHCPD_ATTR_LOGLEVEL])) {
                int log_level = (blobmsg_get_u32(c) & LOG_PRIMASK);
 
diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c
index 4ee6dd2..e51be79 100644
--- a/src/dhcpv6-ia.c
+++ b/src/dhcpv6-ia.c
@@ -408,6 +408,9 @@ void dhcpv6_write_statefile(void)
 
                                        ctxt.buf[ctxt.buf_idx - 1] = '\n';
                                        fwrite(ctxt.buf, 1, ctxt.buf_idx, 
ctxt.fp);
+                                       if (config.dhcp_cb_mode > 0) {
+                                               md5_hash(ctxt.buf, 
ctxt.buf_idx, &ctxt.md5);
+                                       }
                                }
                        }
 
@@ -453,6 +456,9 @@ void dhcpv6_write_statefile(void)
                                                                        "%s/32 
", ipbuf);
                                        ctxt.buf[ctxt.buf_idx - 1] = '\n';
                                        fwrite(ctxt.buf, 1, ctxt.buf_idx, 
ctxt.fp);
+                                       if (config.dhcp_cb_mode > 0) {
+                                               md5_hash(ctxt.buf, 
ctxt.buf_idx, &ctxt.md5);
+                                       }
                                }
                        }
                }
diff --git a/src/odhcpd.h b/src/odhcpd.h
index 91fdcbf..0f23667 100644
--- a/src/odhcpd.h
+++ b/src/odhcpd.h
@@ -138,6 +138,7 @@ struct config {
        bool legacy;
        bool main_dhcpv4;
        char *dhcp_cb;
+       int dhcp_cb_mode;
        char *dhcp_statefile;
        int log_level;
 } config;
-- 
2.18.0



--- End Message ---
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/listinfo/openwrt-devel

Reply via email to