chiark / gitweb /
elogind.git
6 years agologind: don's change dry-run boolean before we actually enqueue the operation
Lennart Poettering [Mon, 2 Oct 2017 14:09:24 +0000 (16:09 +0200)]
logind: don's change dry-run boolean before we actually enqueue the operation

Let's not affect change before the PK check.

6 years agologind: reorder things a bit
Lennart Poettering [Mon, 2 Oct 2017 14:08:49 +0000 (16:08 +0200)]
logind: reorder things a bit

Let's keep the three sleep method implementations close to each other.

6 years agologind: add Halt() and CanHalt() APIs
Lennart Poettering [Mon, 2 Oct 2017 14:03:55 +0000 (16:03 +0200)]
logind: add Halt() and CanHalt() APIs

This adds new method calls Halt() and CanHalt() to the logind bus APIs.
They aren't overly useful (as the whole concept of halting isn't really
too useful), however they clean up one major asymmetry: currently, using
the "shutdown" legacy commands it is possibly to enqueue a "halt"
operation through logind, while logind officially doesn't actually
support this. Moreover, the path through "shutdown" currently ultimately
fails, since the referenced "halt" action isn't actually defined in
PolicyKit.

Finally, the current logic results in an unexpected asymmetry in
systemctl: "systemctl poweroff", "systemctl reboot" are currently
asynchronous (due to the logind involvement) while "systemctl halt"
isnt. Let's clean this up, and make all three APIs implemented by
logind natively, and all three hence asynchronous in "systemctl".

Moreover, let's add the missing PK action.

Fixes: #6957
6 years agoudevadm,basic: replace nulstr_contains with STR_IN_SET (#6965)
Zbigniew Jędrzejewski-Szmek [Wed, 4 Oct 2017 17:32:12 +0000 (19:32 +0200)]
udevadm,basic: replace nulstr_contains with STR_IN_SET (#6965)

STR_IN_SET is a newer approach which is easier to write and read, and which
seems to result in space savings too:

before:
4949848 build/src/shared/libelogind-shared-234.so
 350704 build/systemctl
4967184 build/elogind
 826216 build/udevadm

after:
4949848 build/src/shared/libelogind-shared-234.so
 350704 build/systemctl
4966888 build/elogind
 826168 build/udevadm

6 years agologind: use pid_is_valid() where appropriate
Alan Jenkins [Tue, 3 Oct 2017 11:26:02 +0000 (12:26 +0100)]
logind: use pid_is_valid() where appropriate

These two sites _do_ match the definition of pid_is_valid(); they don't
provide any special handling for the invalid PID value 0.  (They're used
by dbus methods, so the PID value 0 is handled with reference to the dbus
client creds, outside of these functions).

6 years agotree-wide: use IN_SET macro (#6977)
Yu Watanabe [Wed, 4 Oct 2017 14:01:32 +0000 (23:01 +0900)]
tree-wide: use IN_SET macro (#6977)

6 years agotest-sizeof: add pid_t and gid_t
Zbigniew Jędrzejewski-Szmek [Wed, 4 Oct 2017 13:22:07 +0000 (15:22 +0200)]
test-sizeof: add pid_t and gid_t

C.f. #6975.

6 years agotest-copy: fix operation when test-copy is too small
Zbigniew Jędrzejewski-Szmek [Wed, 4 Oct 2017 13:17:09 +0000 (15:17 +0200)]
test-copy: fix operation when test-copy is too small

Fixes #6981.

6 years agomeson: generate ENABLE_* names automatically
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 11:15:27 +0000 (13:15 +0200)]
meson: generate ENABLE_* names automatically

After previous changes, the naming of configuration options and internal
defines is consistent.

6 years agobuild-sys: s/HAVE_SMACK/ENABLE_SMACK/
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 10:22:40 +0000 (12:22 +0200)]
build-sys: s/HAVE_SMACK/ENABLE_SMACK/

Same justification as for HAVE_UTMP.

6 years agobuild-sys: s/HAVE_IMA/ENABLE_IMA/
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 10:20:49 +0000 (12:20 +0200)]
build-sys: s/HAVE_IMA/ENABLE_IMA/

Same justification as for HAVE_UTMP.

6 years agobuild-sys: require all defines under #if to be present
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 10:11:49 +0000 (12:11 +0200)]
build-sys: require all defines under #if to be present

This should help to catch any errors with typos and HAVE/ENABLE mismatches.

6 years agoApply updates from upstream
Sven Eden [Thu, 7 Dec 2017 17:59:58 +0000 (18:59 +0100)]
Apply updates from upstream

6 years agobuild-sys: use #if Y instead of #ifdef Y everywhere
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 08:41:51 +0000 (10:41 +0200)]
build-sys: use #if Y instead of #ifdef Y everywhere

The advantage is that is the name is mispellt, cpp will warn us.

$ git grep -Ee "conf.set\('(HAVE|ENABLE)_" -l|xargs sed -r -i "s/conf.set\('(HAVE|ENABLE)_/conf.set10('\1_/"
$ git grep -Ee '#ifn?def (HAVE|ENABLE)' -l|xargs sed -r -i 's/#ifdef (HAVE|ENABLE)/#if \1/; s/#ifndef (HAVE|ENABLE)/#if ! \1/;'
$ git grep -Ee 'if.*defined\(HAVE' -l|xargs sed -i -r 's/defined\((HAVE_[A-Z0-9_]*)\)/\1/g'
$ git grep -Ee 'if.*defined\(ENABLE' -l|xargs sed -i -r 's/defined\((ENABLE_[A-Z0-9_]*)\)/\1/g'
+ manual changes to meson.build

squash! build-sys: use #if Y instead of #ifdef Y everywhere

v2:
- fix incorrect setting of HAVE_LIBIDN2

6 years agoRevert "tree-wide: use pid_is_valid() at more places"
Alan Jenkins [Tue, 3 Oct 2017 11:05:24 +0000 (12:05 +0100)]
Revert "tree-wide: use pid_is_valid() at more places"

This reverts commit ee043777be58251e7441b4f04594e9e3792d7fb2.

It broke almost everywhere it touched.  The places that
handn't been converted, were mostly followed by special
handling for the invalid PID `0`.  That explains why they
tested for `pid < 0` instead of `pid <= 0`.

I think that one was the first commit I reviewed, heh.

6 years agomeson: check for sys/auxv.h
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 10:09:40 +0000 (12:09 +0200)]
meson: check for sys/auxv.h

This check was present in configure.ac, but was never added under meson.
The code under HAVE_SYS_AUX_H has been dead ever since :(.

6 years agobuild-sys: change all HAVE_DECL_ macros to HAVE_
Zbigniew Jędrzejewski-Szmek [Tue, 3 Oct 2017 08:32:34 +0000 (10:32 +0200)]
build-sys: change all HAVE_DECL_ macros to HAVE_

This is a legacy of autotools, where one detection routine used a different
prefix then the others.

$ git grep -e HAVE_DECL_ -l|xargs sed -i s/HAVE_DECL_/HAVE_/g

6 years agopath-util: some updates to path_make_relative()
Lennart Poettering [Mon, 2 Oct 2017 08:51:19 +0000 (10:51 +0200)]
path-util: some updates to path_make_relative()

Don't miscount number of "../" to generate, if we "." is included in an
input path.

Also, refuse if we encounter "../" since we can't possibly follow that
up properly, without file system access.

Some other modernizations.

6 years agocore: chown() StateDirectory= and friends recursively when starting a service
Lennart Poettering [Thu, 28 Sep 2017 17:13:44 +0000 (19:13 +0200)]
core: chown() StateDirectory= and friends recursively when starting a service

This is particularly useful when used in conjunction with DynamicUser=1,
where the UID might change for every invocation, but is useful in other
cases too, for example, when these directories are shared between
systems where the UID assignments differ slightly.

6 years agotree-wide: use `!IN_SET(..)` for `a != b && a != c && …`
Andreas Rammhold [Fri, 29 Sep 2017 07:58:22 +0000 (09:58 +0200)]
tree-wide: use `!IN_SET(..)` for `a != b && a != c && …`

The included cocci was used to generate the changes.

Thanks to @flo-wer for pointing this case out.

6 years agotree-wide: use IN_SET where possible
Andreas Rammhold [Thu, 28 Sep 2017 22:37:23 +0000 (00:37 +0200)]
tree-wide: use IN_SET where possible

In addition to the changes from #6933 this handles cases that could be
matched with the included cocci file.

6 years agosd-bus: drop bloom fields
Lennart Poettering [Fri, 29 Sep 2017 15:58:11 +0000 (17:58 +0200)]
sd-bus: drop bloom fields

These fields are unused since kdbus support has been removed.

6 years agosd-bus: drop match cookie concept
Lennart Poettering [Fri, 29 Sep 2017 15:57:34 +0000 (17:57 +0200)]
sd-bus: drop match cookie concept

THe match cookie was used by kdbus to identify matches we install
uniquely. But given that kdbus is gone, the cookie serves no process
anymore, let's kill it.

6 years agosd-bus: when showing brief message info show error name in debug out put too
Lennart Poettering [Fri, 29 Sep 2017 15:48:29 +0000 (17:48 +0200)]
sd-bus: when showing brief message info show error name in debug out put too

When debug logging is enabled we show brief information about every bus
message we send or receieve. Pretty much all information is shown,
except for the error name if a message is an error (interestingly we do
print the error text however). Fix that, and add the error name as well.

6 years agomount-util: add fusectl to list of API VFS
Lennart Poettering [Fri, 29 Sep 2017 12:36:06 +0000 (14:36 +0200)]
mount-util: add fusectl to list of API VFS

6 years agodissect: split list of discard-supporting fs out into mount-util.c
Lennart Poettering [Fri, 29 Sep 2017 12:23:17 +0000 (14:23 +0200)]
dissect: split list of discard-supporting fs out into mount-util.c

Let's manage the list of file systems that do a specific thing at one
place, following similar naming.

No functional changes.

6 years agodissect: automatically mark partitions read-only that have a read-only file system
Lennart Poettering [Fri, 29 Sep 2017 12:19:22 +0000 (14:19 +0200)]
dissect: automatically mark partitions read-only that have a read-only file system

Specifically, squashfs and iso9660 are always read-only, hence make sure
we never even think about mounting them writable.

6 years agomeson: move library version defines to the top (#6939)
Zbigniew Jędrzejewski-Szmek [Thu, 28 Sep 2017 17:24:16 +0000 (19:24 +0200)]
meson: move library version defines to the top (#6939)

6 years agomeson: bump release to 235
Lennart Poettering [Thu, 28 Sep 2017 09:29:52 +0000 (11:29 +0200)]
meson: bump release to 235

6 years agolibelogind: use IN_SET macro
Yu Watanabe [Thu, 28 Sep 2017 08:17:04 +0000 (17:17 +0900)]
libelogind: use IN_SET macro

6 years agocgroup: IN_SET() FTW!
Lennart Poettering [Tue, 26 Sep 2017 20:49:09 +0000 (22:49 +0200)]
cgroup: IN_SET() FTW!

6 years agocgroup: after determining that a cgroup is empty, asynchronously dispatch this
Lennart Poettering [Tue, 26 Sep 2017 20:43:08 +0000 (22:43 +0200)]
cgroup: after determining that a cgroup is empty, asynchronously dispatch this

This makes sure that if we learn via inotify or another event source
that a cgroup is empty, and we checked that this is indeed the case (as
we might get spurious notifications through inotify, as the inotify
logic through the "cgroups.event" is pretty unspecific and might be
trigger for a variety of reasons), then we'll enqueue a defer event for
it, at a priority lower than SIGCHLD handling, so that we know for sure
that if there's waitid() data for a process we used it before
considering the cgroup empty notification.

Fixes: #6608
6 years agocore: rename cgroup_queue → cgroup_realize_queue
Lennart Poettering [Tue, 26 Sep 2017 20:15:02 +0000 (22:15 +0200)]
core: rename cgroup_queue → cgroup_realize_queue

We are about to add second cgroup-related queue, called
"cgroup_empty_queue", hence let's rename "cgroup_queue" to
"cgroup_realize_queue" (as that is its purpose) to minimize confusion
about the two queues.

Just a rename, no functional changes.

6 years agocore/cgroup: add a helper macro for a common pattern (#6926)
Zbigniew Jędrzejewski-Szmek [Wed, 27 Sep 2017 15:54:06 +0000 (17:54 +0200)]
core/cgroup: add a helper macro for a common pattern (#6926)

6 years agofs-util: propagate EEXIST error in symlink_idempotent() as EEXIST
Lennart Poettering [Tue, 26 Sep 2017 16:26:20 +0000 (18:26 +0200)]
fs-util: propagate EEXIST error in symlink_idempotent() as EEXIST

We really shouldn't silently translate the error code here for no
reason.

6 years agolog: add a mode where we open the log fds for every single log message
Lennart Poettering [Tue, 26 Sep 2017 15:45:09 +0000 (17:45 +0200)]
log: add a mode where we open the log fds for every single log message

This we can then make use in execute.c to make error logging a bit less
special when preparing for process execution, as we can still log but
don't have any fds open continously.

6 years agolog: let's make use of the fact that our functions return the negative error code...
Lennart Poettering [Mon, 25 Sep 2017 18:26:47 +0000 (20:26 +0200)]
log: let's make use of the fact that our functions return the negative error code for log_oom() too

6 years agoswap: adjust swap.c in a similar way to what we just did to mount.c
Lennart Poettering [Mon, 25 Sep 2017 17:53:19 +0000 (19:53 +0200)]
swap: adjust swap.c in a similar way to what we just did to mount.c

Also drop the redundant states and make all similar changes too.
Thankfully the swap.c state engine is much simpler than mount.c's, hence
this should be easier to digest.

6 years agomount: rework mount state engine
Lennart Poettering [Mon, 25 Sep 2017 17:13:37 +0000 (19:13 +0200)]
mount: rework mount state engine

This changes the mount unit state engine in the following ways:

1. The MOUNT_MOUNTING_SIGTERM and MOUNT_MOUNTING_SIGKILL are removed.
   They have been pretty much equivalent to MOUNT_UNMOUNTING_SIGTERM and
   MOUNT_UNMOUNTING_SIGKILL in what they do, and the outcome has been
   the same as well: the unit is stopped. Hence, let's simplify things a
   bit, and merge them. Note that we keep
   MOUNT_REMOUNTING_{SIGTERM|SIGKILL} however, as those states have a
   different outcome: the unit remains started.

2. mount_enter_signal() will now honour the SendSIGKILL= option of the
   mount unit if it was set. This was previously done already when we
   entered the signal states through a timeout, and was simply missing
   here.

3. A new helper function mount_enter_dead_or_mounted() is added that
   places the mount unit in either MOUNT_DEAD or MOUNT_MOUNTED,
   depending on what the kernel thinks about the mount's state. This
   function is called at various places now, wherever we finished an
   operation, and want to make sure our own state reflects again what
   the kernel thinks. Previously we had very similar code in a number of
   places and in other places didn't recheck the kernel state. Let's do
   that with the same logic and function at all relevant places now.

4. Rework mount_stop(): never forget about running control processes.
   Instead: when we have a start (i.e. a /bin/mount) process running,
   and are asked to stop, then enter the kill states for it, so that it
   gets cleaned up. This fixes #6048. Moreover, when we have a reload
   process running convert the possible states into the relevant
   unmounting states, so that we can properly execute the requested
   operation.

Fixes #6048

6 years agoset: add new helper set_make() which is like set_new() + multiple set_put() in vararg
Lennart Poettering [Mon, 25 Sep 2017 15:15:59 +0000 (17:15 +0200)]
set: add new helper set_make() which is like set_new() + multiple set_put() in vararg

6 years agobasic/log: fix return value from log_struct_iovec_internal()
Zbigniew Jędrzejewski-Szmek [Tue, 26 Sep 2017 14:04:33 +0000 (16:04 +0200)]
basic/log: fix return value from log_struct_iovec_internal()

This returned value so far wasn't used anywhere, so there's no change
in behaviour.

6 years agostring-util: use size_t for strjoina macro (#6914)
Jonathan Lebon [Mon, 25 Sep 2017 19:56:57 +0000 (15:56 -0400)]
string-util: use size_t for strjoina macro (#6914)

`strlen` returns a `size_t` and `alloca` expects a `size_t`.

6 years agoshared/bus-util: format uid==-1 and gid==-1 as [not set]
Zbigniew Jędrzejewski-Szmek [Mon, 25 Sep 2017 09:23:59 +0000 (11:23 +0200)]
shared/bus-util: format uid==-1 and gid==-1 as [not set]

$ systemctl show elogind-journald -p UID,GID
UID=4294967295
GID=4294967295



$ systemctl show elogind-journald -p UID,GID
UID=[not set]
GID=[not set]

Just seeing the number is very misleading.

Fixes #6511.

6 years agobasic/cap-list: report empty capability set as ""
Zbigniew Jędrzejewski-Szmek [Mon, 25 Sep 2017 09:09:57 +0000 (11:09 +0200)]
basic/cap-list: report empty capability set as ""

$ systemctl show elogind-journald -p CapabilityBoundingSet,AmbientCapabilities
CapabilityBoundingSet=cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_setgid ...
AmbientCapabilities=(null)



$ systemctl show elogind-journald -p CapabilityBoundingSet,AmbientCapabilities
CapabilityBoundingSet=cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_setgid ...
AmbientCapabilities=

Partially fixes #6511. Add some basic tests for the printing function.

6 years agofileio: return 0 from read_one_line_file on success
Zbigniew Jędrzejewski-Szmek [Sun, 24 Sep 2017 12:27:21 +0000 (14:27 +0200)]
fileio: return 0 from read_one_line_file on success

Fixup for f4b51a2d09. Suggested by Evgeny Vereshchagin.

6 years agofileio: initialize errno to zero before we do fread()
Lennart Poettering [Fri, 22 Sep 2017 19:05:03 +0000 (21:05 +0200)]
fileio: initialize errno to zero before we do fread()

if there was something in the read buffer already errno might not be set
on error, let's detect that case.

6 years agofileio: try to read one byte too much in read_full_stream()
Lennart Poettering [Fri, 22 Sep 2017 19:03:33 +0000 (21:03 +0200)]
fileio: try to read one byte too much in read_full_stream()

Let's read one byte more than the file size we read from stat() on the
first fread() invocation. That way, the first read() will already be
short and indicate eof to fread().

This is a minor optimization, and replaces #3908.

6 years agofileio: move fsync() logic into write_string_stream_ts()
Lennart Poettering [Fri, 22 Sep 2017 18:59:39 +0000 (20:59 +0200)]
fileio: move fsync() logic into write_string_stream_ts()

That way, write_string_stream_ts() becomes more powerful, and we can
remove duplicate code from  write_string_file_atomic() and
write_string_file_ts().

6 years agofileio: make write_string_stream() accept flags parameter
Lennart Poettering [Fri, 22 Sep 2017 18:55:34 +0000 (20:55 +0200)]
fileio: make write_string_stream() accept flags parameter

Let's make write_string_stream() and write_string_file() more alike, and
pass the same flag set so that we can remove a number of boolean
parameters.

6 years agofileio: support writing atomic files with timestamp
Lennart Poettering [Fri, 22 Sep 2017 18:45:06 +0000 (20:45 +0200)]
fileio: support writing atomic files with timestamp

Let's make sure "ts" is taken into account when writing atomic files,
too.

6 years agocgroup: rework which files we chown() on delegation
Lennart Poettering [Fri, 22 Sep 2017 17:58:24 +0000 (19:58 +0200)]
cgroup: rework which files we chown() on delegation

On cgroupsv2 we should also chown()/chmod() the subtree_control file,
so that children can use controllers the way they like.

On cgroupsv1 we should also chown()/chmod() cgroups.clone_children, as
not setting this for new cgroups makes little sense, and hence delegated
clients should be able to write to it.

Note that error handling for both cases is different. subtree_control
matters so we check for errors, but the clone_children/tasks stuff
doesn't really, as it's legacy stuff. Hence we only log errors and
proceed.

Fixes: #6216
6 years agocgroup-util: downgrade log messages from library code to LOG_DEBUG
Lennart Poettering [Fri, 22 Sep 2017 17:57:07 +0000 (19:57 +0200)]
cgroup-util: downgrade log messages from library code to LOG_DEBUG

These errors don't really matter, that's why we log and proceed in the
current code. However, we currently log at LOG_WARNING, but we really
shouldn't given that this is library code. Hence downgrade this to
LOG_DEBUG.

6 years agocore: whenever a unit terminates, log its consumed resources to the journal
Lennart Poettering [Thu, 21 Sep 2017 12:05:35 +0000 (14:05 +0200)]
core: whenever a unit terminates, log its consumed resources to the journal

This adds a new recognizable log message for each unit invocation that
contains structured information about consumed resources of the unit as
a whole after it terminated. This is particular useful for apps that
want to figure out what the resource consumption of a unit given a
specific invocation ID was.

The log message is only generated for units that have at least one
XyzAccounting= property turned on, and currently only covers IP traffic and CPU
time metrics.

6 years agoio-util: add new IOVEC_INIT/IOVEC_MAKE macros
Lennart Poettering [Thu, 21 Sep 2017 11:52:34 +0000 (13:52 +0200)]
io-util: add new IOVEC_INIT/IOVEC_MAKE macros

This adds IOVEC_INIT() and IOVEC_MAKE() for initializing iovec structures
from a pointer and a size. On top of these IOVEC_INIT_STRING() and
IOVEC_MAKE_STRING() are added which take a string and automatically
determine the size of the string using strlen().

This patch removes the old IOVEC_SET_STRING() macro, given that
IOVEC_MAKE_STRING() is now useful for similar purposes. Note that the
old IOVEC_SET_STRING() invocations were two characters shorter than the
new ones using IOVEC_MAKE_STRING(), but I think the new syntax is more
readable and more generic as it simply resolves to a C99 literal
structure initialization. Moreover, we can use very similar syntax now
for initializing strings and pointer+size iovec entries. We canalso use
the new macros to initialize function parameters on-the-fly or array
definitions. And given that we shouldn't have so many ways to do the
same stuff, let's just settle on the new macros.

(This also converts some code to use _cleanup_ where dynamically
allocated strings were using IOVEC_SET_STRING() before, to modernize
things a bit)

6 years agocgroup: refuse to return accounting data if accounting isn't turned on
Lennart Poettering [Thu, 7 Sep 2017 14:31:01 +0000 (16:31 +0200)]
cgroup: refuse to return accounting data if accounting isn't turned on

We used to be a bit sloppy on this, and handed out accounting data even
for units where accounting wasn't explicitly enabled. Let's be stricter
here, so that we know the accounting data is actually fully valid. This
is necessary, as the accounting data is no longer stored exclusively in
cgroupfs, but is partly maintained external of that, and flushed during
unit starts. We should hence only expose accounting data we really know
is fully current.

6 years agocore: when coming back from reload/reexec, reapply all cgroup properties
Lennart Poettering [Thu, 7 Sep 2017 12:32:33 +0000 (14:32 +0200)]
core: when coming back from reload/reexec, reapply all cgroup properties

With this change we'll invalidate all cgroup settings after coming back
from a daemon reload/reexec, so that the new settings are instantly
applied.

This is useful for the BPF case, because we don't serialize/deserialize
the BPF program fd, and hence have to install a new, updated BPF program
when coming back from the reload/reexec. However, this is also useful
for the rest of the cgroup settings, as it ensures that user
configuration really takes effect wherever we can.

6 years agocore: serialize/deserialize IP accounting across daemon reload/reexec
Lennart Poettering [Thu, 7 Sep 2017 12:07:13 +0000 (14:07 +0200)]
core: serialize/deserialize IP accounting across daemon reload/reexec

Make sure the current IP accounting counters aren't lost during
reload/reexec.

Note that we destroy all BPF file objects during a reload: the BPF
programs, the access and the accounting maps. The former two need to be
regenerated anyway with the newly loaded configuration data, but the
latter one needs to survive reloads/reexec. In this implementation I
opted to only save/restore the accounting map content instead of the map
itself. While this opens a (theoretic) window where IP traffic is still
accounted to the old map after we read it out, and we thus miss a few
bytes this has the benefit that we can alter the map layout between
versions should the need arise.

7 years agoAdd test for eBPF firewall code
Daniel Mack [Thu, 3 Nov 2016 16:31:25 +0000 (17:31 +0100)]
Add test for eBPF firewall code

6 years agocgroup: dump the newly added IP settings in the cgroup context
Lennart Poettering [Fri, 1 Sep 2017 18:31:44 +0000 (20:31 +0200)]
cgroup: dump the newly added IP settings in the cgroup context

6 years agocgroup, unit, fragment parser: make use of new firewall functions
Daniel Mack [Tue, 5 Sep 2017 17:27:53 +0000 (19:27 +0200)]
cgroup, unit, fragment parser: make use of new firewall functions

6 years agoAdd firewall eBPF compiler
Daniel Mack [Fri, 11 Nov 2016 18:41:16 +0000 (19:41 +0100)]
Add firewall eBPF compiler

6 years agocgroup: add fields to accommodate eBPF related details
Daniel Mack [Fri, 11 Nov 2016 18:59:19 +0000 (19:59 +0100)]
cgroup: add fields to accommodate eBPF related details

Add pointers for compiled eBPF programs as well as list heads for allowed
and denied hosts for both directions.

6 years agoAdd IP address address ACL representation and parser
Daniel Mack [Thu, 3 Nov 2016 16:30:06 +0000 (17:30 +0100)]
Add IP address address ACL representation and parser

Add a config directive parser that takes multiple space separated IPv4
or IPv6 addresses with optional netmasks in CIDR notation rvalue and
puts a parsed version of it to linked list of IPAddressAccessItem objects.
The code actually using this will be added later.

6 years agoAdd abstraction model for BPF programs
Daniel Mack [Tue, 18 Oct 2016 15:57:10 +0000 (17:57 +0200)]
Add abstraction model for BPF programs

This object takes a number of bpf_insn members and wraps them together with
the in-kernel reference id. Will be needed by the firewall code.

6 years agoin-addr-util: add new helper call in_addr_prefix_from_string_auto()
Lennart Poettering [Fri, 1 Sep 2017 12:25:59 +0000 (14:25 +0200)]
in-addr-util: add new helper call in_addr_prefix_from_string_auto()

This is much like in_addr_prefix_from_string(), but automatically
determines whether IPv4 or IPv6 addresses are specified. Also adds a
test for it.

6 years agomanager: watching the cgroup2 inotify fd is safe in test runs too
Lennart Poettering [Tue, 5 Sep 2017 09:40:47 +0000 (11:40 +0200)]
manager: watching the cgroup2 inotify fd is safe in test runs too

Less deviation between test runs and normal runs is always a good idea,
hence enable more stuff that is safe in test runs

6 years agocgroup: always invalidate "cpu" and "cpuacct" together
Lennart Poettering [Tue, 5 Sep 2017 09:17:01 +0000 (11:17 +0200)]
cgroup: always invalidate "cpu" and "cpuacct" together

This doesn't really matter, as we never invalidate cpuacct explicitly,
and there's no real reason to care for it explicitly, however it's
prettier if we always treat cpu and cpuacct as belonging together, the
same way we conisder "io" and "blkio" to belong together.

6 years agocgroup-util: minor coding style adjustment
Lennart Poettering [Mon, 4 Sep 2017 16:18:04 +0000 (18:18 +0200)]
cgroup-util: minor coding style adjustment

6 years agoPrep v235: Updated .po files to upstream versions.
Sven Eden [Sun, 19 Nov 2017 17:50:17 +0000 (18:50 +0100)]
Prep v235: Updated .po files to upstream versions.

6 years agov235: Added missing updates
Sven Eden [Sun, 19 Nov 2017 17:48:14 +0000 (18:48 +0100)]
v235: Added missing updates

6 years agoPrep v235: Updated root files to upstream
Sven Eden [Mon, 25 Sep 2017 12:41:36 +0000 (14:41 +0200)]
Prep v235: Updated root files to upstream

6 years agoPrep v235: Added cap-list, which is needed now.
Sven Eden [Sun, 19 Nov 2017 17:47:11 +0000 (18:47 +0100)]
Prep v235: Added cap-list, which is needed now.

6 years agofileio: return 0 from read_one_line_file on success
Zbigniew Jędrzejewski-Szmek [Sun, 24 Sep 2017 12:27:21 +0000 (14:27 +0200)]
fileio: return 0 from read_one_line_file on success

Fixup for f4b51a2d09. Suggested by Evgeny Vereshchagin.

6 years agotest-conf-parser: add tests for the new long lines, including overflow handling
Zbigniew Jędrzejewski-Szmek [Thu, 21 Sep 2017 12:36:12 +0000 (14:36 +0200)]
test-conf-parser: add tests for the new long lines, including overflow handling

6 years agotest-conf-parser: use _cleanup_
Zbigniew Jędrzejewski-Szmek [Thu, 21 Sep 2017 10:02:49 +0000 (12:02 +0200)]
test-conf-parser: use _cleanup_

6 years agofileio: use _cleanup_ for FILE unlocking
Zbigniew Jędrzejewski-Szmek [Sat, 23 Sep 2017 08:48:09 +0000 (10:48 +0200)]
fileio: use _cleanup_ for FILE unlocking

6 years agoconf-parse: remove 4K line length limit
Lennart Poettering [Fri, 22 Sep 2017 16:26:35 +0000 (18:26 +0200)]
conf-parse: remove 4K line length limit

Let's use read_line() to solve our long line limitation.

Fixes #3302.

6 years agotest-conf-parser: add some basic tests for config_parse()
Zbigniew Jędrzejewski-Szmek [Thu, 21 Sep 2017 12:24:01 +0000 (14:24 +0200)]
test-conf-parser: add some basic tests for config_parse()

This function is pretty important, but we weren't calling it directly
even once in tests.

v2: add a few tests for escaping and line continuations

6 years agofileio: initialize errno to zero before we do fread()
Lennart Poettering [Fri, 22 Sep 2017 19:05:03 +0000 (21:05 +0200)]
fileio: initialize errno to zero before we do fread()

if there was something in the read buffer already errno might not be set
on error, let's detect that case.

6 years agofileio: try to read one byte too much in read_full_stream()
Lennart Poettering [Fri, 22 Sep 2017 19:03:33 +0000 (21:03 +0200)]
fileio: try to read one byte too much in read_full_stream()

Let's read one byte more than the file size we read from stat() on the
first fread() invocation. That way, the first read() will already be
short and indicate eof to fread().

This is a minor optimization, and replaces #3908.

6 years agofileio: move fsync() logic into write_string_stream_ts()
Lennart Poettering [Fri, 22 Sep 2017 18:59:39 +0000 (20:59 +0200)]
fileio: move fsync() logic into write_string_stream_ts()

That way, write_string_stream_ts() becomes more powerful, and we can
remove duplicate code from  write_string_file_atomic() and
write_string_file_ts().

6 years agofileio: make write_string_stream() accept flags parameter
Lennart Poettering [Fri, 22 Sep 2017 18:55:34 +0000 (20:55 +0200)]
fileio: make write_string_stream() accept flags parameter

Let's make write_string_stream() and write_string_file() more alike, and
pass the same flag set so that we can remove a number of boolean
parameters.

6 years agofileio: support writing atomic files with timestamp
Lennart Poettering [Fri, 22 Sep 2017 18:45:06 +0000 (20:45 +0200)]
fileio: support writing atomic files with timestamp

Let's make sure "ts" is taken into account when writing atomic files,
too.

6 years agocgroup-util: replace one use of fgets() by read_line()
Lennart Poettering [Fri, 22 Sep 2017 16:25:45 +0000 (18:25 +0200)]
cgroup-util: replace one use of fgets() by read_line()

6 years agofileio: rework read_one_line_file() on top of read_line()
Lennart Poettering [Fri, 22 Sep 2017 16:01:32 +0000 (18:01 +0200)]
fileio: rework read_one_line_file() on top of read_line()

6 years agodef: add new constant LONG_LINE_MAX
Lennart Poettering [Fri, 22 Sep 2017 18:23:58 +0000 (20:23 +0200)]
def: add new constant LONG_LINE_MAX

LONG_LINE_MAX is much like LINE_MAX, but longer.

As it turns out LINE_MAX at 4096 is too short for many usecases. Since
the general concept of having a common maximum line length limit makes
sense let's add our own, and make it larger (1MB for now).

6 years agofileio: add new helper call read_line() as bounded getline() replacement
Lennart Poettering [Fri, 22 Sep 2017 15:55:53 +0000 (17:55 +0200)]
fileio: add new helper call read_line() as bounded getline() replacement

read_line() is much like getline(), and returns a line read from a
FILE*, of arbitrary sizes. In contrast to gets() it will grow the buffer
dynamically, and in contrast to getline() it will place a user-specified
boundary on the line.

6 years agocgroup: rework which files we chown() on delegation
Lennart Poettering [Fri, 22 Sep 2017 17:58:24 +0000 (19:58 +0200)]
cgroup: rework which files we chown() on delegation

On cgroupsv2 we should also chown()/chmod() the subtree_control file,
so that children can use controllers the way they like.

On cgroupsv1 we should also chown()/chmod() cgroups.clone_children, as
not setting this for new cgroups makes little sense, and hence delegated
clients should be able to write to it.

Note that error handling for both cases is different. subtree_control
matters so we check for errors, but the clone_children/tasks stuff
doesn't really, as it's legacy stuff. Hence we only log errors and
proceed.

Fixes: #6216
6 years agocgroup-util: downgrade log messages from library code to LOG_DEBUG
Lennart Poettering [Fri, 22 Sep 2017 17:57:07 +0000 (19:57 +0200)]
cgroup-util: downgrade log messages from library code to LOG_DEBUG

These errors don't really matter, that's why we log and proceed in the
current code. However, we currently log at LOG_WARNING, but we really
shouldn't given that this is library code. Hence downgrade this to
LOG_DEBUG.

6 years agotime-util: mktime_or_timegm are changing the struct tm
Marcel Hollerbach [Wed, 20 Sep 2017 17:26:13 +0000 (19:26 +0200)]
time-util: mktime_or_timegm are changing the struct tm

after that wm_day etc. seems to be changed. Moving the check infront of
the mktime_or_timegm fixes that.

6 years agotime-util: correctly handle the timezone when parsing
Marcel Hollerbach [Wed, 20 Sep 2017 12:47:49 +0000 (14:47 +0200)]
time-util: correctly handle the timezone when parsing

The timezone was cut off the string once the timezone was not UTC.
If it is not UTC but a other timezone that matches tzname[0] or
tzname[1], then we can leave it to the impl function to parse that
correctly. If not we can just fallback to whatever is the current
timezone is in the given t_timezone.

This should fix the testuite and tests.

6 years agoLink to the right glibc commit in comment (#6884)
Zbigniew Jędrzejewski-Szmek [Thu, 21 Sep 2017 18:54:16 +0000 (20:54 +0200)]
Link to the right glibc commit in comment (#6884)

Reported by Marcos Mello.

Fixes #6882.

6 years agotime-util: fix shadowing of timezone
Marcel Hollerbach [Tue, 19 Sep 2017 15:00:56 +0000 (17:00 +0200)]
time-util: fix shadowing of timezone

timezone was shadowing timezone from time.h which leads to a buildbreak
since elogind is built with -Werror

6 years agoMake test_run into a flags field and disable generators again
Zbigniew Jędrzejewski-Szmek [Sat, 16 Sep 2017 09:19:43 +0000 (11:19 +0200)]
Make test_run into a flags field and disable generators again

Now generators are only run in elogind --test mode, where this makes
most sense (how are you going to test what would happen otherwise?).

Fixes #6842.

v2:
- rename test_run to test_run_flags

6 years agotests: change dbus tests to use user bus (#6845)
Michael Biebl [Tue, 19 Sep 2017 12:17:57 +0000 (14:17 +0200)]
tests: change dbus tests to use user bus (#6845)

This makes it possible to run more dbus tests in a build
environment/chroot where no system bus is available.
To run the dbus test one then can use dbus-run-session.

6 years agobuild-sys: bump xslt maxdepth limit (#6863)
Zbigniew Jędrzejewski-Szmek [Tue, 19 Sep 2017 06:04:02 +0000 (08:04 +0200)]
build-sys: bump xslt maxdepth limit (#6863)

With libxslt-1.30, builds were failing on some recursion depth limit
with elogind.index.xml. Bumping the limit fixes the issue.

6 years agotest-exec-util: add two test cases for scripts masked with empty file
Zbigniew Jędrzejewski-Szmek [Sun, 17 Sep 2017 13:17:50 +0000 (15:17 +0200)]
test-exec-util: add two test cases for scripts masked with empty file

A test for #6831. Fails without the previous commit.

Suggested by Evgeny Vereshchagin.

6 years agoconf-files: fix check for masking with empty files
Zbigniew Jędrzejewski-Szmek [Sun, 17 Sep 2017 13:26:01 +0000 (15:26 +0200)]
conf-files: fix check for masking with empty files

Fixes #6831.

6 years agoman: describe user@host:machine syntax
Zbigniew Jędrzejewski-Szmek [Sun, 17 Sep 2017 19:05:20 +0000 (21:05 +0200)]
man: describe user@host:machine syntax

Fixes #6734.

6 years agosd-bus: style nitpick node_vtable_get_userdata()
Alan Jenkins [Sat, 16 Sep 2017 11:32:59 +0000 (12:32 +0100)]
sd-bus: style nitpick node_vtable_get_userdata()

It's confusing to use a single void* to store data with two different
types, i.e. a userdata value which is safe to pass to ->find(), and a
userdata value which identifies the found object.

Name the latter `found_u`.  This naming treats (!c->find) as a degenerate
case.  (I.e. at that point, we know the object has already been found :).