mirror of
https://github.com/systemd/systemd
synced 2025-10-03 18:54:45 +02:00
Compare commits
No commits in common. "275334c562907c174ec34a81a00e734e0b89ba36" and "329998b36585c460781521ee075fba73bb36929a" have entirely different histories.
275334c562
...
329998b365
@ -28,9 +28,6 @@
|
|||||||
<para><filename>/run/systemd/journald.conf.d/*.conf</filename></para>
|
<para><filename>/run/systemd/journald.conf.d/*.conf</filename></para>
|
||||||
<para><filename>/usr/lib/systemd/journald.conf.d/*.conf</filename></para>
|
<para><filename>/usr/lib/systemd/journald.conf.d/*.conf</filename></para>
|
||||||
<para><filename>/etc/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf</filename></para>
|
<para><filename>/etc/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf</filename></para>
|
||||||
<para><filename>/etc/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf.d/*.conf</filename></para>
|
|
||||||
<para><filename>/run/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf.d/*.conf</filename></para>
|
|
||||||
<para><filename>/usr/lib/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf.d/*.conf</filename></para>
|
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
@ -44,9 +41,8 @@
|
|||||||
|
|
||||||
<para>The <command>systemd-journald</command> instance managing the default namespace is configured by
|
<para>The <command>systemd-journald</command> instance managing the default namespace is configured by
|
||||||
<filename>/etc/systemd/journald.conf</filename> and associated drop-ins. Instances managing other
|
<filename>/etc/systemd/journald.conf</filename> and associated drop-ins. Instances managing other
|
||||||
namespaces read <filename>/etc/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf</filename>
|
namespaces read <filename>/etc/systemd/journald@<replaceable>NAMESPACE</replaceable>.conf</filename> with
|
||||||
and associated drop-ins with the namespace identifier filled in. This allows each namespace to carry
|
the namespace identifier filled in. This allows each namespace to carry a distinct configuration. See
|
||||||
a distinct configuration. See
|
|
||||||
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||||
for details about journal namespaces.</para>
|
for details about journal namespaces.</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
@ -32,31 +32,23 @@
|
|||||||
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry> for a
|
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry> for a
|
||||||
general description of the syntax.</para>
|
general description of the syntax.</para>
|
||||||
|
|
||||||
<para>The link files are read from the files located in the system network directory
|
<para>The link files are read from the files located in the system
|
||||||
<filename>/usr/lib/systemd/network</filename>, the volatile runtime network directory
|
network directory <filename>/usr/lib/systemd/network</filename>,
|
||||||
<filename>/run/systemd/network</filename>, and the local administration network directory
|
the volatile runtime network directory
|
||||||
<filename>/etc/systemd/network</filename>. Link files must have the extension
|
<filename>/run/systemd/network</filename>, and the local
|
||||||
<filename>.link</filename>; other extensions are ignored. All link files are collectively sorted
|
administration network directory
|
||||||
and processed in lexical order, regardless of the directories in which they live. However, files
|
<filename>/etc/systemd/network</filename>. Link files must have
|
||||||
with identical filenames replace each other. Files in <filename>/etc/</filename> have the highest
|
the extension <filename>.link</filename>; other extensions are
|
||||||
priority, files in <filename>/run/</filename> take precedence over files with the same name in
|
ignored. All link files are collectively sorted and processed in
|
||||||
<filename>/usr/lib/</filename>. This can be used to override a system-supplied link file with a
|
lexical order, regardless of the directories in which they live.
|
||||||
local file if needed. As a special case, an empty file (file size 0) or symlink with the same name
|
However, files with identical filenames replace each other. Files
|
||||||
pointing to <filename>/dev/null</filename> disables the configuration file entirely (it is
|
in <filename>/etc/</filename> have the highest priority, files in
|
||||||
"masked").</para>
|
<filename>/run/</filename> take precedence over files with the same
|
||||||
|
name in <filename>/usr/lib/</filename>. This can be used to
|
||||||
<para>Along with the link file <filename>foo.link</filename>, a "drop-in" directory
|
override a system-supplied link file with a local file if needed.
|
||||||
<filename>foo.link.d/</filename> may exist. All files with the suffix <literal>.conf</literal>
|
As a special case, an empty file (file size 0) or symlink with the
|
||||||
from this directory will be parsed after the file itself is parsed. This is useful to alter or add
|
same name pointing to <filename>/dev/null</filename> disables the
|
||||||
configuration settings, without having to modify the main configuration file. Each drop-in file
|
configuration file entirely (it is "masked").</para>
|
||||||
must have appropriate section headers.</para>
|
|
||||||
|
|
||||||
<para>In addition to <filename>/etc/systemd/network</filename>, drop-in <literal>.d</literal>
|
|
||||||
directories can be placed in <filename>/usr/lib/systemd/network</filename> or
|
|
||||||
<filename>/run/systemd/network</filename> directories. Drop-in files in <filename>/etc/</filename>
|
|
||||||
take precedence over those in <filename>/run/</filename> which in turn take precedence over those
|
|
||||||
in <filename>/usr/lib/</filename>. Drop-in files under any of these directories take precedence
|
|
||||||
over the main link file wherever located.</para>
|
|
||||||
|
|
||||||
<para>The link file contains a [Match] section, which determines if a given link file may be applied to a
|
<para>The link file contains a [Match] section, which determines if a given link file may be applied to a
|
||||||
given device, as well as a [Link] section specifying how the device should be configured. The first (in
|
given device, as well as a [Link] section specifying how the device should be configured. The first (in
|
||||||
|
@ -1625,19 +1625,17 @@ static int server_parse_config_file(Server *s) {
|
|||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
if (s->namespace) {
|
if (s->namespace) {
|
||||||
const char *namespaced, *dropin_dirname;
|
const char *namespaced;
|
||||||
|
|
||||||
/* If we are running in namespace mode, load the namespace specific configuration file, and nothing else */
|
/* If we are running in namespace mode, load the namespace specific configuration file, and nothing else */
|
||||||
namespaced = strjoina(PKGSYSCONFDIR "/journald@", s->namespace, ".conf");
|
namespaced = strjoina(PKGSYSCONFDIR "/journald@", s->namespace, ".conf");
|
||||||
dropin_dirname = strjoina("journald@", s->namespace, ".conf.d");
|
|
||||||
|
|
||||||
r = config_parse_many(
|
r = config_parse(NULL,
|
||||||
STRV_MAKE_CONST(namespaced),
|
namespaced, NULL,
|
||||||
(const char* const*) CONF_PATHS_STRV("systemd"),
|
|
||||||
dropin_dirname,
|
|
||||||
"Journal\0",
|
"Journal\0",
|
||||||
config_item_perf_lookup, journald_gperf_lookup,
|
config_item_perf_lookup, journald_gperf_lookup,
|
||||||
CONFIG_PARSE_WARN, s, NULL);
|
CONFIG_PARSE_WARN, s,
|
||||||
|
NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -425,23 +425,14 @@ static int server_message_init(sd_dhcp_server *server, DHCPPacket **ret,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int server_send_offer_or_ack(
|
static int server_send_offer(sd_dhcp_server *server, DHCPRequest *req,
|
||||||
sd_dhcp_server *server,
|
be32_t address) {
|
||||||
DHCPRequest *req,
|
|
||||||
be32_t address,
|
|
||||||
uint8_t type) {
|
|
||||||
|
|
||||||
_cleanup_free_ DHCPPacket *packet = NULL;
|
_cleanup_free_ DHCPPacket *packet = NULL;
|
||||||
sd_dhcp_option *j;
|
|
||||||
be32_t lease_time;
|
|
||||||
size_t offset;
|
size_t offset;
|
||||||
|
be32_t lease_time;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(server);
|
r = server_message_init(server, &packet, DHCP_OFFER, &offset, req);
|
||||||
assert(req);
|
|
||||||
assert(IN_SET(type, DHCP_OFFER, DHCP_ACK));
|
|
||||||
|
|
||||||
r = server_message_init(server, &packet, type, &offset, req);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
@ -466,7 +457,18 @@ static int server_send_offer_or_ack(
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == DHCP_ACK) {
|
r = dhcp_server_send_packet(server, req, packet, DHCP_OFFER, offset);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int server_send_ack(
|
||||||
|
sd_dhcp_server *server,
|
||||||
|
DHCPRequest *req,
|
||||||
|
be32_t address) {
|
||||||
|
|
||||||
static const uint8_t option_map[_SD_DHCP_LEASE_SERVER_TYPE_MAX] = {
|
static const uint8_t option_map[_SD_DHCP_LEASE_SERVER_TYPE_MAX] = {
|
||||||
[SD_DHCP_LEASE_DNS] = SD_DHCP_OPTION_DOMAIN_NAME_SERVER,
|
[SD_DHCP_LEASE_DNS] = SD_DHCP_OPTION_DOMAIN_NAME_SERVER,
|
||||||
[SD_DHCP_LEASE_NTP] = SD_DHCP_OPTION_NTP_SERVER,
|
[SD_DHCP_LEASE_NTP] = SD_DHCP_OPTION_NTP_SERVER,
|
||||||
@ -476,15 +478,46 @@ static int server_send_offer_or_ack(
|
|||||||
[SD_DHCP_LEASE_LPR] = SD_DHCP_OPTION_LPR_SERVER,
|
[SD_DHCP_LEASE_LPR] = SD_DHCP_OPTION_LPR_SERVER,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_cleanup_free_ DHCPPacket *packet = NULL;
|
||||||
|
be32_t lease_time;
|
||||||
|
sd_dhcp_option *j;
|
||||||
|
size_t offset;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = server_message_init(server, &packet, DHCP_ACK, &offset, req);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
packet->dhcp.yiaddr = address;
|
||||||
|
|
||||||
|
lease_time = htobe32(req->lifetime);
|
||||||
|
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
|
SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME, 4,
|
||||||
|
&lease_time);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
|
SD_DHCP_OPTION_SUBNET_MASK, 4, &server->netmask);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (server->emit_router) {
|
||||||
|
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
|
SD_DHCP_OPTION_ROUTER, 4, &server->address);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
for (sd_dhcp_lease_server_type_t k = 0; k < _SD_DHCP_LEASE_SERVER_TYPE_MAX; k++) {
|
for (sd_dhcp_lease_server_type_t k = 0; k < _SD_DHCP_LEASE_SERVER_TYPE_MAX; k++) {
|
||||||
|
|
||||||
if (server->servers[k].size <= 0)
|
if (server->servers[k].size <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
r = dhcp_option_append(
|
r = dhcp_option_append(
|
||||||
&packet->dhcp, req->max_optlen, &offset, 0,
|
&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
option_map[k],
|
option_map[k],
|
||||||
sizeof(struct in_addr) * server->servers[k].size,
|
sizeof(struct in_addr) * server->servers[k].size, server->servers[k].addr);
|
||||||
server->servers[k].addr);
|
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -498,7 +531,6 @@ static int server_send_offer_or_ack(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ORDERED_SET_FOREACH(j, server->extra_options) {
|
ORDERED_SET_FOREACH(j, server->extra_options) {
|
||||||
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
r = dhcp_option_append(&packet->dhcp, req->max_optlen, &offset, 0,
|
||||||
@ -516,7 +548,7 @@ static int server_send_offer_or_ack(
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = dhcp_server_send_packet(server, req, packet, type, offset);
|
r = dhcp_server_send_packet(server, req, packet, DHCP_ACK, offset);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
@ -751,7 +783,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
|||||||
/* no free addresses left */
|
/* no free addresses left */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
r = server_send_offer_or_ack(server, req, address, DHCP_OFFER);
|
r = server_send_offer(server, req, address);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
/* this only fails on critical errors */
|
/* this only fails on critical errors */
|
||||||
return log_dhcp_server_errno(server, r, "Could not send offer: %m");
|
return log_dhcp_server_errno(server, r, "Could not send offer: %m");
|
||||||
@ -854,7 +886,7 @@ int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message,
|
|||||||
|
|
||||||
lease->expiration = req->lifetime * USEC_PER_SEC + time_now;
|
lease->expiration = req->lifetime * USEC_PER_SEC + time_now;
|
||||||
|
|
||||||
r = server_send_offer_or_ack(server, req, address, DHCP_ACK);
|
r = server_send_ack(server, req, address);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
/* this only fails on critical errors */
|
/* this only fails on critical errors */
|
||||||
log_dhcp_server_errno(server, r, "Could not send ack: %m");
|
log_dhcp_server_errno(server, r, "Could not send ack: %m");
|
||||||
|
@ -656,6 +656,7 @@ int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t callb
|
|||||||
|
|
||||||
int netdev_load_one(Manager *manager, const char *filename) {
|
int netdev_load_one(Manager *manager, const char *filename) {
|
||||||
_cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
|
_cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
|
||||||
|
_cleanup_fclose_ FILE *file = NULL;
|
||||||
const char *dropin_dirname;
|
const char *dropin_dirname;
|
||||||
bool independent = false;
|
bool independent = false;
|
||||||
int r;
|
int r;
|
||||||
@ -663,12 +664,15 @@ int netdev_load_one(Manager *manager, const char *filename) {
|
|||||||
assert(manager);
|
assert(manager);
|
||||||
assert(filename);
|
assert(filename);
|
||||||
|
|
||||||
r = null_or_empty_path(filename);
|
file = fopen(filename, "re");
|
||||||
if (r == -ENOENT)
|
if (!file) {
|
||||||
|
if (errno == ENOENT)
|
||||||
return 0;
|
return 0;
|
||||||
if (r < 0)
|
|
||||||
return r;
|
return -errno;
|
||||||
if (r > 0) {
|
}
|
||||||
|
|
||||||
|
if (null_or_empty_fd(fileno(file))) {
|
||||||
log_debug("Skipping empty file: %s", filename);
|
log_debug("Skipping empty file: %s", filename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -710,6 +714,10 @@ int netdev_load_one(Manager *manager, const char *filename) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = fseek(file, 0, SEEK_SET);
|
||||||
|
if (r < 0)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
netdev = malloc0(NETDEV_VTABLE(netdev_raw)->object_size);
|
netdev = malloc0(NETDEV_VTABLE(netdev_raw)->object_size);
|
||||||
if (!netdev)
|
if (!netdev)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
@ -288,6 +288,7 @@ int network_verify(Network *network) {
|
|||||||
int network_load_one(Manager *manager, OrderedHashmap **networks, const char *filename) {
|
int network_load_one(Manager *manager, OrderedHashmap **networks, const char *filename) {
|
||||||
_cleanup_free_ char *fname = NULL, *name = NULL;
|
_cleanup_free_ char *fname = NULL, *name = NULL;
|
||||||
_cleanup_(network_unrefp) Network *network = NULL;
|
_cleanup_(network_unrefp) Network *network = NULL;
|
||||||
|
_cleanup_fclose_ FILE *file = NULL;
|
||||||
const char *dropin_dirname;
|
const char *dropin_dirname;
|
||||||
char *d;
|
char *d;
|
||||||
int r;
|
int r;
|
||||||
@ -295,12 +296,15 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
|||||||
assert(manager);
|
assert(manager);
|
||||||
assert(filename);
|
assert(filename);
|
||||||
|
|
||||||
r = null_or_empty_path(filename);
|
file = fopen(filename, "re");
|
||||||
if (r == -ENOENT)
|
if (!file) {
|
||||||
|
if (errno == ENOENT)
|
||||||
return 0;
|
return 0;
|
||||||
if (r < 0)
|
|
||||||
return r;
|
return -errno;
|
||||||
if (r > 0) {
|
}
|
||||||
|
|
||||||
|
if (null_or_empty_fd(fileno(file))) {
|
||||||
log_debug("Skipping empty file: %s", filename);
|
log_debug("Skipping empty file: %s", filename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1335,8 +1335,8 @@ static int unit_file_load_or_readlink(
|
|||||||
const char *path,
|
const char *path,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
SearchFlags flags) {
|
SearchFlags flags) {
|
||||||
|
|
||||||
_cleanup_free_ char *resolved = NULL;
|
_cleanup_free_ char *resolved = NULL;
|
||||||
|
struct stat st;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
r = unit_file_load(c, info, path, root_dir, flags);
|
r = unit_file_load(c, info, path, root_dir, flags);
|
||||||
@ -1351,7 +1351,9 @@ static int unit_file_load_or_readlink(
|
|||||||
* so let's see if the path is a (possibly dangling) symlink to /dev/null. */
|
* so let's see if the path is a (possibly dangling) symlink to /dev/null. */
|
||||||
info->type = UNIT_FILE_TYPE_MASKED;
|
info->type = UNIT_FILE_TYPE_MASKED;
|
||||||
|
|
||||||
else if (r > 0 && null_or_empty_path(resolved) > 0)
|
else if (r > 0 &&
|
||||||
|
stat(resolved, &st) >= 0 &&
|
||||||
|
null_or_empty(&st))
|
||||||
|
|
||||||
info->type = UNIT_FILE_TYPE_MASKED;
|
info->type = UNIT_FILE_TYPE_MASKED;
|
||||||
|
|
||||||
|
@ -110,20 +110,19 @@ int link_config_ctx_new(link_config_ctx **ret) {
|
|||||||
|
|
||||||
int link_load_one(link_config_ctx *ctx, const char *filename) {
|
int link_load_one(link_config_ctx *ctx, const char *filename) {
|
||||||
_cleanup_(link_config_freep) link_config *link = NULL;
|
_cleanup_(link_config_freep) link_config *link = NULL;
|
||||||
|
_cleanup_fclose_ FILE *file = NULL;
|
||||||
_cleanup_free_ char *name = NULL;
|
_cleanup_free_ char *name = NULL;
|
||||||
const char *dropin_dirname;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(ctx);
|
assert(ctx);
|
||||||
assert(filename);
|
assert(filename);
|
||||||
|
|
||||||
r = null_or_empty_path(filename);
|
file = fopen(filename, "re");
|
||||||
if (r == -ENOENT)
|
if (!file)
|
||||||
return 0;
|
return errno == ENOENT ? 0 : -errno;
|
||||||
if (r < 0)
|
|
||||||
return r;
|
if (null_or_empty_fd(fileno(file))) {
|
||||||
if (r > 0) {
|
|
||||||
log_debug("Skipping empty file: %s", filename);
|
log_debug("Skipping empty file: %s", filename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -152,14 +151,11 @@ int link_load_one(link_config_ctx *ctx, const char *filename) {
|
|||||||
for (i = 0; i < ELEMENTSOF(link->features); i++)
|
for (i = 0; i < ELEMENTSOF(link->features); i++)
|
||||||
link->features[i] = -1;
|
link->features[i] = -1;
|
||||||
|
|
||||||
dropin_dirname = strjoina(basename(filename), ".d");
|
r = config_parse(NULL, filename, file,
|
||||||
r = config_parse_many(
|
|
||||||
STRV_MAKE_CONST(filename),
|
|
||||||
(const char* const*) CONF_PATHS_STRV("systemd/network"),
|
|
||||||
dropin_dirname,
|
|
||||||
"Match\0Link\0",
|
"Match\0Link\0",
|
||||||
config_item_perf_lookup, link_config_gperf_lookup,
|
config_item_perf_lookup, link_config_gperf_lookup,
|
||||||
CONFIG_PARSE_WARN, link, NULL);
|
CONFIG_PARSE_WARN, link,
|
||||||
|
NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user