mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
tweak Lua script argument passing and add --dhcp-luascript sectino to manpage.
This commit is contained in:
@@ -1082,7 +1082,7 @@ If the client provides vendor-class, DNSMASQ_VENDOR_CLASS_ID,
|
|||||||
containing the IANA enterprise id for the class, and
|
containing the IANA enterprise id for the class, and
|
||||||
DNSMASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn for the data.
|
DNSMASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn for the data.
|
||||||
|
|
||||||
DNSMASQ_DUID containing the DUID of the server: this is the same for
|
DNSMASQ_SERVER_DUID containing the DUID of the server: this is the same for
|
||||||
every call to the script.
|
every call to the script.
|
||||||
|
|
||||||
DNSMASQ_IAID containing the IAID for the lease. If the lease is a
|
DNSMASQ_IAID containing the IAID for the lease. If the lease is a
|
||||||
@@ -1115,8 +1115,43 @@ leases will be called with "del" and others with "old". When dnsmasq
|
|||||||
receives a HUP signal, the script will be invoked for existing leases
|
receives a HUP signal, the script will be invoked for existing leases
|
||||||
with an "old " event.
|
with an "old " event.
|
||||||
.TP
|
.TP
|
||||||
|
.B --dhcp-luascript=<path>
|
||||||
|
Specify a script written in Lua, to be run when leases are created,
|
||||||
|
destroyed or changed. To use this option, dnsmasq must be compiled
|
||||||
|
with the correct support. The Lua interpreter is intialised once, when
|
||||||
|
dnsmasq starts, so that global variables persist between lease
|
||||||
|
events. The Lua code must define a
|
||||||
|
.B lease
|
||||||
|
function, and may provide
|
||||||
|
.B init
|
||||||
|
and
|
||||||
|
.B shutdown
|
||||||
|
functions, which are called, without arguments when dnsmasq starts up
|
||||||
|
and terminates.
|
||||||
|
|
||||||
|
The
|
||||||
|
.B lease
|
||||||
|
method receives the information detailed in
|
||||||
|
.B --dhcp-script.
|
||||||
|
It gets two arguments, firstly the action, which is a string
|
||||||
|
containing, "add", "old" or "del", and secondly a table of tag value
|
||||||
|
pairs. The tags mostly correspond to the environment variables
|
||||||
|
detailed above, for instance the tag "domain" holds the same data as
|
||||||
|
the environment variable DNSMASQ_DOMAIN. There are a few extra tags
|
||||||
|
which hold the data supplied as arguments to
|
||||||
|
.B --dhcp-script.
|
||||||
|
These are
|
||||||
|
.B mac_address, ip_address
|
||||||
|
and
|
||||||
|
.B hostname
|
||||||
|
for IPv4, and
|
||||||
|
.B client_duid, ip_address
|
||||||
|
and
|
||||||
|
.B hostname
|
||||||
|
for IPv6.
|
||||||
|
.TP
|
||||||
.B --dhcp-scriptuser
|
.B --dhcp-scriptuser
|
||||||
Specify the user as which to run the lease-change script. This defaults to root, but can be changed to another user using this flag.
|
Specify the user as which to run the lease-change script or Lua script. This defaults to root, but can be changed to another user using this flag.
|
||||||
.TP
|
.TP
|
||||||
.B \-9, --leasefile-ro
|
.B \-9, --leasefile-ro
|
||||||
Completely suppress use of the lease database file. The file will not
|
Completely suppress use of the lease database file. The file will not
|
||||||
|
|||||||
@@ -298,8 +298,10 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
|
|||||||
|
|
||||||
if (is6)
|
if (is6)
|
||||||
{
|
{
|
||||||
|
lua_pushstring(lua, daemon->dhcp_buff);
|
||||||
|
lua_setfield(lua, -2, "client_duid");
|
||||||
lua_pushstring(lua, daemon->packet);
|
lua_pushstring(lua, daemon->packet);
|
||||||
lua_setfield(lua, -2, "duid");
|
lua_setfield(lua, -2, "server_duid");
|
||||||
lua_pushstring(lua, daemon->dhcp_buff3);
|
lua_pushstring(lua, daemon->dhcp_buff3);
|
||||||
lua_setfield(lua, -2, "iaid");
|
lua_setfield(lua, -2, "iaid");
|
||||||
}
|
}
|
||||||
@@ -440,7 +442,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
|
|||||||
if (is6)
|
if (is6)
|
||||||
{
|
{
|
||||||
my_setenv("DNSMASQ_IAID", daemon->dhcp_buff3, &err);
|
my_setenv("DNSMASQ_IAID", daemon->dhcp_buff3, &err);
|
||||||
my_setenv("DNSMASQ_DUID", daemon->packet, &err);
|
my_setenv("DNSMASQ_SERVER_DUID", daemon->packet, &err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is6 && data.clid_len != 0)
|
if (!is6 && data.clid_len != 0)
|
||||||
|
|||||||
@@ -2096,7 +2096,7 @@ static void do_options(struct dhcp_context *context,
|
|||||||
|
|
||||||
/* filter options based on tags, those we want get DHOPT_TAGOK bit set */
|
/* filter options based on tags, those we want get DHOPT_TAGOK bit set */
|
||||||
context->netid.next = NULL;
|
context->netid.next = NULL;
|
||||||
tagif = option_filter(netid, context->netid.net ? &context->netid : NULL, config_opts);
|
tagif = option_filter(netid, context && context->netid.net ? &context->netid : NULL, config_opts);
|
||||||
|
|
||||||
/* logging */
|
/* logging */
|
||||||
if (option_bool(OPT_LOG_OPTS) && req_options)
|
if (option_bool(OPT_LOG_OPTS) && req_options)
|
||||||
|
|||||||
Reference in New Issue
Block a user