<varlistentry>
<term><varname>SendOption=</varname></term>
<listitem>
- <para>Send a raw option with value via DHCPv4 client. Takes a DHCP option and base64 encoded
- data separated with a colon (option:value). The option ranges [1-254]. This option can be
- specified multiple times. If an empty string is specified, then all options specified earlier
- are cleared. Defaults to unset.</para>
+ <para>Send an arbitrary option in the DHCPv4 request. Takes a DHCP option number and an arbitrary
+ data string separated with a colon
+ (<literal><replaceable>option</replaceable>:<replaceable>value</replaceable></literal>). The
+ option number must be an interger in the range 1..254. Special characters in the data string may
+ be escaped using
+ <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+ escapes</ulink>. This option can be specified multiple times. If an empty string is specified,
+ then all options specified earlier are cleared. Defaults to unset.</para>
</listitem>
</varlistentry>
</variablelist>
#include "alloc-util.h"
#include "dhcp-client-internal.h"
-#include "hexdecoct.h"
+#include "escape.h"
#include "hostname-util.h"
#include "parse-util.h"
#include "network-internal.h"
void *userdata) {
_cleanup_(sd_dhcp_option_unrefp) sd_dhcp_option *opt = NULL, *old = NULL;
- _cleanup_free_ char *word = NULL;
- _cleanup_free_ void *q = NULL;
+ _cleanup_free_ char *word = NULL, *q = NULL;
Network *network = data;
const char *p;
uint8_t u;
- size_t sz;
+ ssize_t sz;
int r;
assert(filename);
return 0;
}
- r = unbase64mem(p, (size_t) -1, &q, &sz);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to decode base64 data, ignoring assignment: %s", p);
+ sz = cunescape(p, 0, &q);
+ if (sz < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, sz,
+ "Failed to decode option data, ignoring assignment: %s", p);
return 0;
}