X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fload-fragment.c;h=f8be4dbaa4882ef527b6eeb31cbc0687c9b2598d;hb=ec2002f84928c0b5921a961cb2b8637563f29daa;hp=aac27b56ed7088b4b0fd340dc01e8726be32398d;hpb=0e456f978134100d2e0cc28c7205b3abefcc9cde;p=elogind.git diff --git a/src/load-fragment.c b/src/load-fragment.c index aac27b56e..f8be4dbaa 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -198,7 +198,7 @@ static int config_parse_listen( void *data, void *userdata) { - SocketPort *p; + SocketPort *p, *tail; Socket *s; assert(filename); @@ -220,6 +220,26 @@ static int config_parse_listen( } path_kill_slashes(p->path); + + } else if (streq(lvalue, "ListenSpecial")) { + p->type = SOCKET_SPECIAL; + + if (!(p->path = strdup(rvalue))) { + free(p); + return -ENOMEM; + } + + path_kill_slashes(p->path); + + } else if (streq(lvalue, "ListenNetlink")) { + p->type = SOCKET_SOCKET; + + if (socket_address_parse_netlink(&p->address, rvalue) < 0) { + log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue); + free(p); + return 0; + } + } else { p->type = SOCKET_SOCKET; @@ -246,7 +266,12 @@ static int config_parse_listen( } p->fd = -1; - LIST_PREPEND(SocketPort, port, s->ports, p); + + if (s->ports) { + LIST_FIND_TAIL(SocketPort, port, s->ports, tail); + LIST_INSERT_AFTER(SocketPort, port, s->ports, tail, p); + } else + LIST_PREPEND(SocketPort, port, s->ports, p); return 0; } @@ -1852,6 +1877,8 @@ static int load_from_path(Unit *u, const char *path) { { "AllowIsolate", config_parse_bool, 0, &u->meta.allow_isolate, "Unit" }, { "DefaultDependencies", config_parse_bool, 0, &u->meta.default_dependencies, "Unit" }, { "OnFailureIsolate", config_parse_bool, 0, &u->meta.on_failure_isolate, "Unit" }, + { "IgnoreOnIsolate", config_parse_bool, 0, &u->meta.ignore_on_isolate, "Unit" }, + { "IgnoreOnSnapshot", config_parse_bool, 0, &u->meta.ignore_on_snapshot, "Unit" }, { "JobTimeoutSec", config_parse_usec, 0, &u->meta.job_timeout, "Unit" }, { "ConditionPathExists", config_parse_condition_path, CONDITION_PATH_EXISTS, u, "Unit" }, { "ConditionPathIsDirectory", config_parse_condition_path, CONDITION_PATH_IS_DIRECTORY, u, "Unit" }, @@ -1892,6 +1919,8 @@ static int load_from_path(Unit *u, const char *path) { { "ListenDatagram", config_parse_listen, 0, &u->socket, "Socket" }, { "ListenSequentialPacket", config_parse_listen, 0, &u->socket, "Socket" }, { "ListenFIFO", config_parse_listen, 0, &u->socket, "Socket" }, + { "ListenNetlink", config_parse_listen, 0, &u->socket, "Socket" }, + { "ListenSpecial", config_parse_listen, 0, &u->socket, "Socket" }, { "BindIPv6Only", config_parse_socket_bind, 0, &u->socket, "Socket" }, { "Backlog", config_parse_unsigned, 0, &u->socket.backlog, "Socket" }, { "BindToDevice", config_parse_bindtodevice, 0, &u->socket, "Socket" },