chiark / gitweb /
4 years agologind: release VT-positions when closing sessions
David Herrmann [Fri, 31 Jul 2015 14:52:29 +0000 (16:52 +0200)]
logind: release VT-positions when closing sessions

Make sure we release VT-positions when a session is closed. Otherwise,
lingering sessions will occupy VTs and prevent next logins from

Note that we already release session-devices when closing a session, so
there cannot be anyone using the VT anymore.

4 years agobus-proxy: make StartServiceByName synchronous
David Herrmann [Fri, 31 Jul 2015 11:25:04 +0000 (13:25 +0200)]
bus-proxy: make StartServiceByName synchronous

The StartServiceByName() call was provided by dbus-daemon to activate a
service without sending a message. On receiption, dbus-daemon schedules
an activation request (different modes are supported) and sends back the
reply once activation is done.

With kdbus, we marked StartServiceByName() as deprecated. There is no
real reason to start services explicitly. Instead, applications should
just *use* the service and rely on it being activated implicitly.
However, we provide compatibility with dbus-daemon and implement
StartServiceByName() on the proxy via a call to
org.freedesktop.DBus.Peer.Ping() on the destination. This will activate
the peer implicitly as part of the no-op Ping() method call (regardless
whether the peer actually implements that call).

Now, the problem is, StartServiceByName() was synchronous on dbus-daemon
but isn't on bus-proxy. Hence, on return, there is no guarantee that
ListNames includes the activated name. As this is required by some
applications, we need to make this synchronous.

This patch makes the proxy track the Ping() method call and send the
reply of StartServiceByName() only once Ping() returned. We do not look
at possible errors of Ping(), as there is no strict requirement for the
peer to implement org.freedesktop.DBus.Peer. Furthermore, any interesting
error should have already been caught by sd_bus_send() before.

        This race was triggered by gdbus. The gdbus-proxy implementation
        relies on a name to be available after StartServiceByName()
        returns. This is highly fragile and should be dropped by gdbus.
        Even if the call is synchronous, there is no reason whatsoever to
        assume the service did not exit-on-idle before ListNames()
        However, this race is much less likely than the startup race, so
        we try to be compatible to dbus-daemon now.

4 years agosd-bus: fix parsing of KDBUS_CMD_LIST
David Herrmann [Thu, 30 Jul 2015 12:12:09 +0000 (14:12 +0200)]
sd-bus: fix parsing of KDBUS_CMD_LIST

We *must not* assume that an entry returned by KDBUS_CMD_LIST only
carries a single KDBUS_ITEM_OWNED_NAME. Similarly, we already parse
multiple such items for message-metadata, so make sure we support the

By relying on the kernel to return all names separately, we limit the
kernel API significantly. Stop this and let the kernel decide how to
return its data.

4 years agosd-boot: stub - export LoaderDevicePartUUID
Kay Sievers [Wed, 29 Jul 2015 17:26:49 +0000 (19:26 +0200)]
sd-boot: stub - export LoaderDevicePartUUID

4 years agosd-bus: fix encoding/decoding gvariant root container
David Herrmann [Wed, 29 Jul 2015 13:58:25 +0000 (15:58 +0200)]
sd-bus: fix encoding/decoding gvariant root container

The gvariant root container contains a 'variant' at the end, which embeds
the whole message body. This variant *must* contain a structure so we are
compatible to dbus1. Otherwise, it could encode at most 1 type, instead
of a full signature.

Our gvariant message parser already parses the variant-content as a
structure, so we're mostly good. However, it does *not* include the
opening and closing parantheses, nor does it parse them.

This patch fixes the decoder to verify a message contains the
parantheses, and also make the encoder add those parantheses into the
marshaled message.

4 years agosocket-util: library calls shouldn't log on their own
Lennart Poettering [Wed, 29 Jul 2015 10:33:44 +0000 (12:33 +0200)]
socket-util: library calls shouldn't log on their own

Instead, make sure that all callers log properly.

4 years agoresolved: never attempt to resolve loopback addresses via DNS/LLMNR/mDNS
Lennart Poettering [Wed, 29 Jul 2015 10:22:55 +0000 (12:22 +0200)]
resolved: never attempt to resolve loopback addresses via DNS/LLMNR/mDNS

We already refuse to resolve "localhost", hence we should also refuse
resolving "" and friends.

4 years agonetworkd: vxlan add support for GBP
Susant Sahani [Wed, 29 Jul 2015 08:35:34 +0000 (14:05 +0530)]
networkd: vxlan add support for GBP

This patch add support for vxlan  VXLAN Group Policy Option.

4 years agosd-netlink: introduce api for new NL type NLA_FLAG
Susant Sahani [Wed, 29 Jul 2015 06:29:16 +0000 (11:59 +0530)]
sd-netlink: introduce api for new NL type NLA_FLAG

4 years agosd-netlink: add support for new type NETLINK_TYPE_FLAG
Susant Sahani [Wed, 29 Jul 2015 05:47:08 +0000 (11:17 +0530)]
sd-netlink: add support for new type NETLINK_TYPE_FLAG


This new type will be used in NLA_FLAG for example


4 years agosd-netlink: add support for vxlan attributes
Susant Sahani [Wed, 29 Jul 2015 05:44:28 +0000 (11:14 +0530)]
sd-netlink: add support for vxlan attributes

4 years agosd-bus: fix marshaling of unary type
David Herrmann [Tue, 28 Jul 2015 16:16:16 +0000 (18:16 +0200)]
sd-bus: fix marshaling of unary type

The unary type has a fixed size of 1 in gvariant. Make sure we properly
encode it as such. Right now, we encode/decode it as empty sequence.

4 years agosd-bus: drop redundant code
David Herrmann [Tue, 28 Jul 2015 16:13:33 +0000 (18:13 +0200)]
sd-bus: drop redundant code

If c->item_size is 0, the next item to parse in a structure is empty.
However, this also implies that the signature must be empty. The latter
case is already handled just fine by enter_struct_or_dict_entry() so
there is no reason to handle the same case in the caller.

4 years agosd-bus: don't assert() on valid signatures
David Herrmann [Tue, 28 Jul 2015 14:46:51 +0000 (16:46 +0200)]
sd-bus: don't assert() on valid signatures

Right now sd_bus_message_skip() will abort execution if passed a
signature of the unary type "()". Regardless whether this should be
supported or not, we really must not abort. Drop the incorrect assertion
and add a test-case for this.

4 years agohwdb: add min/max/resolution override for Appletouch one-button touchpads
Peter Hutterer [Mon, 27 Jul 2015 22:17:04 +0000 (08:17 +1000)]
hwdb: add min/max/resolution override for Appletouch one-button touchpads

Macbook2,1, late 2006 model.

4 years agohwdb: add resolution values for Asus K52JT touchpad
Peter Hutterer [Mon, 27 Jul 2015 10:04:25 +0000 (20:04 +1000)]
hwdb: add resolution values for Asus K52JT touchpad

4 years agosd-netlink: Add macvtap support
Susant Sahani [Mon, 27 Jul 2015 05:48:07 +0000 (11:18 +0530)]
sd-netlink: Add macvtap support

4 years agoman: typo fixes
Thomas Hindoe Paaboel Andersen [Sat, 25 Jul 2015 21:15:05 +0000 (23:15 +0200)]
man: typo fixes

4 years agonetlink-types: use consistent whitespace at EOL
Zbigniew Jędrzejewski-Szmek [Sat, 25 Jul 2015 01:41:35 +0000 (21:41 -0400)]
netlink-types: use consistent whitespace at EOL

Follow up for v222-124-g79e27dbcb1.

4 years agosd-bus: remove _VTABLE from new method vtable initialiser
daurnimator [Fri, 24 Jul 2015 12:59:19 +0000 (22:59 +1000)]
sd-bus: remove _VTABLE from new method vtable initialiser

4 years agosd-bus: add 'offset' member for vtable methods
daurnimator [Fri, 24 Jul 2015 12:22:54 +0000 (22:22 +1000)]
sd-bus: add 'offset' member for vtable methods

Defaults to zero, which retains the current behaviour.
Fixes #577

4 years agosd-bus: don't treat KDBUS_ITEM_TIMESTAMP as unknown item
David Herrmann [Fri, 24 Jul 2015 10:37:12 +0000 (12:37 +0200)]
sd-bus: don't treat KDBUS_ITEM_TIMESTAMP as unknown item

In bus_kernel_translate_message(), we print a DEBUG message on unknown
items. But right now, we also print this message for KDBUS_ITEM_TIMESTAMP
despite parsing it properly. Fix this!

4 years agotreewide: fix typos
Torstein Husebø [Fri, 24 Jul 2015 09:14:01 +0000 (11:14 +0200)]
treewide: fix typos

4 years agounits: order networkd after sysctl
Tom Gundersen [Thu, 23 Jul 2015 18:58:33 +0000 (20:58 +0200)]
units: order networkd after sysctl

This way networkd will correctly and race-freely inherit the default settings
applied by sysctl.

Suggested in issue #468.

4 years agoresolved: rr - ignore pseudo types in NSEC(3) bitmaps
Tom Gundersen [Thu, 23 Jul 2015 11:48:56 +0000 (13:48 +0200)]
resolved: rr - ignore pseudo types in NSEC(3) bitmaps

4 years agosd-netlink: add bridge NL params
Susant Sahani [Thu, 23 Jul 2015 09:09:43 +0000 (09:09 +0000)]
sd-netlink: add bridge NL params

4 years agosd-netlink: add tunnel params
Susant Sahani [Wed, 22 Jul 2015 09:29:23 +0000 (14:59 +0530)]
sd-netlink: add tunnel params

4 years agosd-bus: fix path of object-manager signals
David Herrmann [Tue, 21 Jul 2015 10:59:56 +0000 (12:59 +0200)]
sd-bus: fix path of object-manager signals

Each signal of the ObjectManager interface carries the path of the object
in question as an argument. Therefore, a caller will deduce the object
this signal is generated for, by parsing the _argument_. A caller will
*not* use the object-path of the message itself (i.e., message->path).
This is done on purpose, so the caller can rely on message->path to be
the path of the actual object-manager that generated this signal, instead
of the path of the object that triggered this signal.

This commit fixes all InterfacesAdded/Removed signals to use the path of
the closest object-manager as message->path. 'closest' in this case means
closest parent with at least one object-manager registered.

This fix raises the question what happens if we stack object-managers in
a hierarchy. Two implementations are possible: First, we report each
object only on the nearest object-manager. Second, we report it on each
parent object-manager. This patch chooses the former. This is compatible
with other existing ObjectManager implementations, which are required to
call GetManagedObjects() recursively on each object they find, which
implements the ObjectManager interface.

4 years agologind: fix write_string_file() fallout
Daniel Mack [Mon, 20 Jul 2015 21:17:37 +0000 (23:17 +0200)]
logind: fix write_string_file() fallout

given. IOW, an atomic file write operation is only possible when creating a
file is also being asked for.

This is a regression from the recent write_string_file() rework.

4 years agoshared: dns-name - introduce dns_label_unescape_suffix()
Tom Gundersen [Mon, 20 Jul 2015 14:01:03 +0000 (16:01 +0200)]
shared: dns-name - introduce dns_label_unescape_suffix()

Intended to be called repeatedly, and returns then successive unescaped labels
from the most to the least significant (left to right).

This is slightly inefficient as it scans the string three times (two would be
sufficient): once to find the end of the string, once to find the beginning
of each label and lastly once to do the actual unescaping. The latter two
could be done in one go, but that seemed unnecessarily convoluted.

4 years agoshared: dns-name - use the canonical dns name ordering
Tom Gundersen [Mon, 20 Jul 2015 14:01:03 +0000 (16:01 +0200)]
shared: dns-name - use the canonical dns name ordering

The canonical DNS name ordering considers the rightmost label the most significant,
we were considering it the least significant. This is important when implementing
NSEC, which relies on the correct order.

4 years agosd-netlink: add tunnel NL parameters
Susant Sahani [Mon, 20 Jul 2015 04:47:14 +0000 (10:17 +0530)]
sd-netlink: add tunnel NL parameters

4 years agoshared: dns-name - add dns_name_between()
Tom Gundersen [Mon, 20 Jul 2015 00:02:45 +0000 (02:02 +0200)]
shared: dns-name - add dns_name_between()

Given three DNS names this function indicates if the second argument lies
strictly between the first and the third according to the canonical DNS
name order. Note that the order is circular, so the last name is
considered to be before the first.

4 years agologind: never select closing sessions for a VT
David Herrmann [Thu, 16 Jul 2015 16:46:12 +0000 (18:46 +0200)]
logind: never select closing sessions for a VT

If a session is in closing state (and already got rid of its VT), then
never re-select it for that VT. There is no reason why we should grant
something to a session that is already going away *AND* already got rid
of exactly that.

4 years agologind: prefer new sessions over older ones on VT switches
David Herrmann [Thu, 16 Jul 2015 16:18:01 +0000 (18:18 +0200)]
logind: prefer new sessions over older ones on VT switches

Our seat->positions[] array keeps track of the 'preferred' session on a
VT. The only situation this is used, is to select the session to activate
when a VT is activated. In the normal case, there's only one session per
VT so the selection is trivial.

Older greeters, however, implement take-overs when they start sessions on
the same VT that the greeter ran on. We recently limited such take-overs
to VTs where a greeter is running on, to force people to never share VTs
in new code that is written.

For legacy reasons, we need to be compatible to old greeters, though.
Hence, we allow those greeters to implement take-over. In such take-overs,
however, we should really make sure that the new sessions gets preferred
over the old one under all circumstances. Hence, make sure we override
the previous preferred session with a new session.

4 years agonetworkd: move config_parse_vxlan_group_address
Susant Sahani [Thu, 16 Jul 2015 14:44:05 +0000 (20:14 +0530)]
networkd: move config_parse_vxlan_group_address

move config_parse_vxlan_group_address from
networkd.h to networkd-netdev-vxlan.h

4 years agobus-proxy: never pass on unmatched broadcasts
David Herrmann [Thu, 16 Jul 2015 13:14:43 +0000 (15:14 +0200)]
bus-proxy: never pass on unmatched broadcasts

The lovely libvirtd goes into crazy mode if it receives broadcasts that
it didn't subscribe to. With bus-proxyd, this might happen in 2 cases:

    1) The kernel passes us an unmatched signal due to a false-positive

    2) We generate NameOwnerChanged/NameAcquired/NameLost locally even
       though the peer didn't subscribe to it.

dbus-daemon is reliable in what signals it passes on. So make sure we
follow that style. Never ever send a signal to a local peer if it doesn't
match an installed filter of that peer.

4 years agosd-bus: fix invalid stack access on test-bus-marshal
David Herrmann [Thu, 16 Jul 2015 12:57:59 +0000 (14:57 +0200)]
sd-bus: fix invalid stack access on test-bus-marshal

Make sure we actually parse "unsigned long long" if we encode a uint64_t.
Otherwise, we will get random data from the stack.

4 years agosd-bus: properly match ID changes
David Herrmann [Thu, 16 Jul 2015 12:37:08 +0000 (14:37 +0200)]
sd-bus: properly match ID changes

If the caller does not specify arg1 for NameOwnerChanged matches, we
really must take the ID from arg2 or arg3, if provided. They are
guaranteed to be identical to arg1 if either is supplied, but there is no
strict requiredment that arg1 is supplied. Hence, make sure to always
take the more restrictive match. Otherwise, we install rather wide
matches without anyone requiring them.

4 years agosd-bus: destination-matches cannot match NameOwnerChanged
David Herrmann [Thu, 16 Jul 2015 12:35:15 +0000 (14:35 +0200)]
sd-bus: destination-matches cannot match NameOwnerChanged

Make sure we don't install NameOwnerChanged matches if the caller passed
a destination='' match (except if it is the broadcast address). Per spec,
all NameOwnerChanged signals are broadcasts.

Only the NameLost/NameAcquired signals are unicasts, but those are never
received through sd-bus. Instead, the bus-proxy synthesizes them and it
already installs proper matches for them.

4 years agosd-bus: fix gvariant structure encoding
David Herrmann [Thu, 16 Jul 2015 09:00:55 +0000 (11:00 +0200)]
sd-bus: fix gvariant structure encoding

In gvariant, all fixed-size objects need to be sized a multiple of their
alignment. If a structure has only fixed-size members, it is required to
be fixed size itself. If you imagine a structure like (ty), you have an
8-byte member followed by an 1-byte member. Hence, the overall inner-size
is 9. The alignment of the object is 8, though. Therefore, the specs
mandates final padding after fixed-size structures, to make sure it's
sized a multiple of its alignment (=> 16).

On the gvariant decoder side, we already account for this in
bus_gvariant_get_size(), as we apply overall padding to the size of the
structure. Therefore, our decoder correctly skips such final padding when
parsing fixed-size structure.

On the gvariant encoder side, however, we don't account for this final
padding. This patch fixes the structure and dict-entry encoders to
properly place such padding at the end of non-uniform fixed-size

The problem can be easily seen by running:
    $ busctl --user monitor
    $ busctl call --user org.freedesktop.systemd1 / org.foobar foobar "(ty)" 777 8

The monitor will fail to parse the message and print an error. With this
patch applied, everything works fine again.

This patch also adds a bunch of test-cases to force non-uniform
structures with non-pre-aligned positions.

Thanks to Jan Alexander Steffens <> for spotting
this and narrowing it down to non-uniform gvariant structures. Fixes #597.

4 years agosd-bus: fix object tree to be deeper than 2 levels
David Herrmann [Wed, 15 Jul 2015 12:35:15 +0000 (14:35 +0200)]
sd-bus: fix object tree to be deeper than 2 levels

So right now our object-tree is limited to 2 levels at most
('/' and '/foo/...../bar'). We never link any intermediate levels, even
though that was clearly the plan. Fix the bus_node_allocate() helper to
actually link all intermediate nodes, too, not just the root node.

This fixes a simple inverse ptr-diff bug.

The downside of this fix is that we clearly never tested (nor used) the
object tree in any way. The only reason that the introspection works is
that our enumerators shortcut the object tree.

Lets see whether that code actually works..

Thanks to: Nathaniel McCallum <>
..for reporting this. See #524 for an actual example code.

4 years agosd-device: never return NULL+0
David Herrmann [Wed, 15 Jul 2015 10:30:08 +0000 (12:30 +0200)]
sd-device: never return NULL+0

It is highly confusing if a getter function returns 0, but the value is
set to NULL. This, right now, triggers assertions as code relies on the
returned values to be non-NULL.

Like with sd-bus-creds and friends, return 0 only if a value is actually

Discussed with Tom, and actually fixes real bugs as in #512.

4 years agonetworkd: tap add support for vnet_hdr
Susant Sahani [Tue, 14 Jul 2015 08:25:52 +0000 (13:55 +0530)]
networkd: tap add support for vnet_hdr

 This patch adds support to configure IFF_VNET_HDR flag
for a tap device. It allows whether sending and receiving
large pass larger (GSO) packets. This greatly increases the
achievable throughput.

4 years agodoc: configure docbook stylesheet to generate reproducible IDs
Johan Ouwerkerk [Mon, 13 Jul 2015 08:39:09 +0000 (10:39 +0200)]
doc: configure docbook stylesheet to generate reproducible IDs

This makes auto generated anchor tags in HTML output reproducible.

4 years agoUse a top-to-bottom numbering scheme for generating ids of subheadings and terms...
Johan Ouwerkerk [Sun, 12 Jul 2015 01:07:24 +0000 (03:07 +0200)]
Use a top-to-bottom numbering scheme for generating ids of subheadings and terms. This scheme fixes permalinks to distinguish between items that would previously have the same ID attribute.

Where possible the generated ID values are the same as those generated with the previous versions of the stylesheet
to retain backwards compatibility with published links.

As a side effect of the changes xsltproc should no longer complain about duplicate IDs during build.

4 years agologind: bring bus policy up-to-date
Lennart Poettering [Sat, 11 Jul 2015 20:00:26 +0000 (17:00 -0300)]
logind: bring bus policy up-to-date

A while back we opened up all of logind's bus calls to unprivileged
users, via PK. However, the dbus1 policy wasn't updated accordingly.

With this change, the dbus1 policy is opened up for all bus calls that
should be available to unprivileged clients.

(also rearranges some calls in the vtable, to make more sense, and be in
line with the order in the bus policy file)

Fixes #471.

4 years agoresolved: use a #define for LLMNR port
Daniel Mack [Fri, 10 Jul 2015 19:28:09 +0000 (15:28 -0400)]
resolved: use a #define for LLMNR port

De-duplicate some magic numbers.

4 years agoresolved: move LLMNR related functions into separate file
Daniel Mack [Fri, 10 Jul 2015 19:02:38 +0000 (15:02 -0400)]
resolved: move LLMNR related functions into separate file

4 years agologind: rename 'pos' to 'position'
David Herrmann [Fri, 10 Jul 2015 13:08:24 +0000 (15:08 +0200)]
logind: rename 'pos' to 'position'

Spell out the proper name. Use 'pos' over 'position', and also update the
logind state file to do the same. Note that this breaks live updates.
However, we only save 'POSITION' on non-seat0, so this shouldn't bother
anyone for real. If you run multi-seat setups, you better restart a
machine on updates, anyway.

4 years agologind: allow greeters to take over VTs
David Herrmann [Fri, 10 Jul 2015 12:53:08 +0000 (14:53 +0200)]
logind: allow greeters to take over VTs

Make sure a greeter can forcefully spawn a session on a VT that is
in-use. A recent patch prevented this (this used to be possible for all
session types) as it is highly fragile. However, as it turns out,
greeters seem to rely on that feature. Therefore, make sure we allow it
explicitly for greeters.

4 years agonss-mymachines: map userns users of containers to real user names
Lennart Poettering [Thu, 9 Jul 2015 17:46:20 +0000 (14:46 -0300)]
nss-mymachines: map userns users of containers to real user names

Given a container "foo", that maps user id $UID to container user, using
user namespaces, this NSS module extenstion will now map the $UID to a
name "vu-foo-$TUID" for the translated UID $UID.

Similar, userns groups are mapped to "vg-foo-$TGID" for translated GIDs
of $GID.

This simple change should make userns users more discoverable. Also,
given that many tools like "adduser" check NSS before allocating a UID,
should lower the chance of UID range conflicts between tools.

4 years agosd-bus: include queried path in GetManagedObjects
David Herrmann [Thu, 9 Jul 2015 11:27:57 +0000 (13:27 +0200)]
sd-bus: include queried path in GetManagedObjects

If GetManagedObjects is called on /foo/bar, then it should also include
the object /foo/bar, if it exists. Right now, we only include objects
underneath /foo/bar/.

This follows the behavior of existing dbus implementations.

Obsoletes #527 and fixes #525. Reported by: Nathaniel McCallum

4 years agosd-bus: sd_bus_slot_get_description() should return const strings
David Herrmann [Thu, 9 Jul 2015 08:40:41 +0000 (10:40 +0200)]
sd-bus: sd_bus_slot_get_description() should return const strings

All other *_get_description() functions use 'const char**', so make sure
sd_bus_slot_get_description() does the same.

This changes API, but ABI stays stable. I think this is fine, but I
wouldn't mind bumping SONAME.

Reported in #528.

4 years agoproperty callback returns are consistent
Umut Tezduyar Lindskog [Wed, 8 Jul 2015 12:35:32 +0000 (14:35 +0200)]
property callback returns are consistent

It is no different to return 0 over 1 in the property
callback. It is confusing to return 1 which made me think
1 has a special purpose. This way code is consistent with
the rest of the tree.

4 years agologind: fail on CreateSession if already in session
David Herrmann [Tue, 7 Jul 2015 17:38:41 +0000 (19:38 +0200)]
logind: fail on CreateSession if already in session

Right now, if you're already in a session and call CreateSession, we
return information about the current session of yours. This is highy
confusing and a nasty hack. Avoid that, and instead return a commonly
known error, so the caller can detect that.

This has the side-effect, that we no longer override XDG_VTNR and XDG_SEAT
in pam_systemd, if you're already in a session. But this sounds like the
right thing to do, anyway.

4 years agologind: allow sessions to share a VT if it's a greeter
David Herrmann [Tue, 7 Jul 2015 17:13:52 +0000 (19:13 +0200)]
logind: allow sessions to share a VT if it's a greeter

Old gdm and lightdm start the user-session during login before they
destroy the greeter-session. Therefore, the user-session will take over
the VT from the greeter. We recently prevented this by never allowing
multiple sessions on the same VT. Fix this now, by explicitly allowing
this if the owning session is a GREETER.

Note that gdm no longer behaves like this. Instead, due to wayland, they
always use a different VT for each session. All other login-managers are
highly encouraged to destroy the greeter-session _before_ starting the
user-session. We now work around this, but this will probably not last
forever (and will already have nasty side-effects on the greeter-session).

4 years agoRemove repeated 'the's
Zbigniew Jędrzejewski-Szmek [Tue, 7 Jul 2015 11:40:53 +0000 (07:40 -0400)]
Remove repeated 'the's

4 years agologin: use normal comparison to zero for integers
Zbigniew Jędrzejewski-Szmek [Tue, 7 Jul 2015 00:04:13 +0000 (20:04 -0400)]
login: use normal comparison to zero for integers

! is supposed to be used for booleans and pointers.

4 years agotree-wide: fix write_string_file() user that should not create files
Daniel Mack [Mon, 6 Jul 2015 23:27:20 +0000 (19:27 -0400)]
tree-wide: fix write_string_file() user that should not create files

The latest consolidation cleanup of write_string_file() revealed some users
of that helper which should have used write_string_file_no_create() in the
past but didn't. Basically, all existing users that write to files in /sys
and /proc should not expect to write to a file which is not yet existant.

4 years agofileio: consolidate write_string_file*()
Daniel Mack [Mon, 6 Jul 2015 23:19:25 +0000 (19:19 -0400)]
fileio: consolidate write_string_file*()

Merge write_string_file(), write_string_file_no_create() and
write_string_file_atomic() into write_string_file() and provide a flags mask
that allows combinations of atomic writing, newline appending and automatic
file creation. Change all users accordingly.

4 years agofileio: add 'enforce_newline' argument to write_string_stream()
Daniel Mack [Mon, 6 Jul 2015 21:31:44 +0000 (17:31 -0400)]
fileio: add 'enforce_newline' argument to write_string_stream()

Add a flag to control whether write_string_stream() should always enforce a
trailing newline character in the file.

4 years agodocs: add .gitignore
Kay Sievers [Mon, 6 Jul 2015 15:46:43 +0000 (17:46 +0200)]
docs: add .gitignore

4 years agosd-bus: support matching on destination names
David Herrmann [Mon, 6 Jul 2015 15:43:36 +0000 (17:43 +0200)]
sd-bus: support matching on destination names

Right now, we never install destination matches on kdbus as the kernel did
not support MATCH rules on those. With the introduction of
KDBUS_ITEM_DST_ID we can now match on destination IDs, so add explicit
support for those.

This requires a recent kdbus module to work. However, there seems to be no
user-space that uses "Destination=''" matches, yet, so old kdbus modules
still work fine (we couldn't find any real user).

This is needed to match on unicast signals in bus-proxy. A followup will
add support for this.

4 years agonetworkd: be more defensive when writing to ipv4/ipv6 forwarding settings
Lennart Poettering [Mon, 6 Jul 2015 11:38:47 +0000 (13:38 +0200)]
networkd: be more defensive when writing to ipv4/ipv6 forwarding settings

1) never bother with setting the flag for loopback devices

2) if we fail to write the flag due to EROFS (which is likely to happen
   in containers where /proc/sys is read-only) or any other error, check
   if the flag already has the right value. If so, don't complain.

Closes #469

4 years agologin: simplify assignment
Zbigniew Jędrzejewski-Szmek [Sun, 5 Jul 2015 16:02:20 +0000 (12:02 -0400)]
login: simplify assignment

4 years agobusctl: flush stdout after dumping data
David Herrmann [Sat, 4 Jul 2015 10:11:22 +0000 (12:11 +0200)]
busctl: flush stdout after dumping data

Running `busctl monitor` currently buffers data for several seconds /
kilobytes before writing stdout. This is highly confusing if you dump in a
file, ^C busctl and then end up with a file with data of the last few
_seconds_ missing.

Fix this by explicitly flushing after each signal.

4 years agosd-bus: introduce new sd_bus_flush_close_unref() call
Lennart Poettering [Fri, 3 Jul 2015 17:49:03 +0000 (19:49 +0200)]
sd-bus: introduce new sd_bus_flush_close_unref() call

sd_bus_flush_close_unref() is a call that simply combines sd_bus_flush()
(which writes all unwritten messages out) + sd_bus_close() (which
terminates the connection, releasing all unread messages) +
sd_bus_unref() (which frees the connection).

The combination of this call is used pretty frequently in systemd tools
right before exiting, and should also be relevant for most external
clients, and is hence useful to cover in a call of its own.

Previously the combination of the three calls was already done in the
_cleanup_bus_close_unref_ macro, but this was only available internally.

Also see #327

4 years agotreewide: fix typos
Torstein Husebø [Thu, 2 Jul 2015 13:18:29 +0000 (15:18 +0200)]
treewide: fix typos

4 years agosd-bus: don't leak kdbus notifications
David Herrmann [Thu, 2 Jul 2015 10:14:27 +0000 (12:14 +0200)]
sd-bus: don't leak kdbus notifications

When we get notifications from the kernel, we always turn them into
synthetic dbus1 messages. This means, we do *not* consume the kdbus
message, and as such have to free the offset.

Right now, the translation-helpers told the caller that they consumed the
message, which is wrong. Fix this by explicitly releasing all kernel
messages that are translated.

4 years agologin: re-use VT-sessions if they already exist
David Herrmann [Wed, 1 Jul 2015 13:05:01 +0000 (15:05 +0200)]
login: re-use VT-sessions if they already exist

Right now, if you start a session via 'su' or 'sudo' from within a
session, we make sure to re-use the existing session instead of creating a
new one. We detect this by reading the session of the requesting PID.

However, with gnome-terminal running as a busname-unit, and as such
running outside the session of the user, this will no longer work.
Therefore, this patch makes sure to return the existing session of a VT if
you start a new one.

This has the side-effect, that you will re-use a session which your PID is
not part of. This works fine, but will break assumptions if the parent
session dies (and as such close your session even though you think you're
part of it). However, this should be perfectly fine. If you run multiple
logins on the same session, you should really know what you're doing. The
current way of silently accepting it but choosing the last registered
session is just weird.

4 years agosocket: Set SO_REUSEPORT before bind()
Christos Trochalakis [Wed, 1 Jul 2015 11:39:53 +0000 (14:39 +0300)]
socket: Set SO_REUSEPORT before bind()

bind() fails if it is called before setting SO_REUSEPORT and another
process is already binded to the same addess.

A new reuse_port option has been introduced to socket_address_listen()
to set the option as part of socket initialization.

4 years agobuild-sys: use wildcard glob in update-man-list again
Zbigniew Jędrzejewski-Szmek [Tue, 30 Jun 2015 13:56:44 +0000 (09:56 -0400)]
build-sys: use wildcard glob in update-man-list again

The idea is that after adding a new man page, make update-man-list
will be used to regenerate part of the makefile. So the data already
present in the makefile cannot be used to do that.

Also, renames filter out generated xml files in
itself in order to make a bit simpler, and rename files
to dist_files to better reflect new meaning.

4 years agologin: add rule for qemu's pci-bridge-seat
Gerd Hoffmann [Mon, 29 Jun 2015 07:42:11 +0000 (09:42 +0200)]
login: add rule for qemu's pci-bridge-seat

Qemu provides a separate pci-bridge exclusively for multi-seat setups.
The normal pci-pci bridge ("-device pci-bridge") has 1b36:0001. The new
pci-bridge-seat was specifically added to simplify guest-side
multiseat configuration.  It is identical to the normal pci-pci bridge,
except that it has a different id (1b36:000a) so we can match it and
configure multiseating automatically.

Make sure we always treat this as separate seat if we detect this, just
like other "Pluggable" devices.

(David: write commit-message)

4 years agosd-netlink: message - remove unused next_rta_offset field
Tom Gundersen [Fri, 26 Jun 2015 10:02:53 +0000 (12:02 +0200)]
sd-netlink: message - remove unused next_rta_offset field

This was a left-over from before we supported containers.

4 years agosd-netlink: make a couple of helper functions static
Tom Gundersen [Thu, 25 Jun 2015 22:07:25 +0000 (00:07 +0200)]
sd-netlink: make a couple of helper functions static

Also rename from rtnl_* to netlink_*.

4 years agonetlink: rework containers
Tom Gundersen [Thu, 25 Jun 2015 22:02:55 +0000 (00:02 +0200)]
netlink: rework containers

Instead of representing containers as several arrays, make a new
netlink_container struct and keep one array of these structs. We
also introduce netlink_attribute structs that in the future will
hold meta-information about each atribute.

4 years agoinstall: make unit_file_get_list aware of UNIT_FILE_INDIRECT
Michal Sekletar [Thu, 25 Jun 2015 14:44:22 +0000 (16:44 +0200)]
install: make unit_file_get_list aware of UNIT_FILE_INDIRECT

Commit aedd401 introduced new unit file state, UNIT_FILE_INDIRECT. Unit file is
said to have indirect state if it contains [Install] section which has only
Also= directive. Thus, if enable of such unit file is requested then some other
unit file gets enabled.

Whether or not unit file is in indirect state can be determined by calling
unit_file_can_install. Function unit_file_get_list populates list of unit files
present in given lookup location. So far it did call unit_file_can_install in a
way that would prevent finding out about unit files in indirect state. Such unit
file would be incorrectly marked as static.

Fixes following assertion in test-install,

Assertion 'p->state == s' failed at src/test/test-install.c:59, function main(). Aborting.
[1]    26868 abort (core dumped)  ./test-install

4 years agoinstall: explicitly return 0 on success
Michal Sekletar [Thu, 25 Jun 2015 14:06:40 +0000 (16:06 +0200)]
install: explicitly return 0 on success

Maybe there is some left-over value stored in r from previous function
call. Let's make sure we always return consistent error code when we reach end of
the function body.

Fixes following crash of test-install,

Assertion 'r == 0' failed at src/test/test-install.c:52, function main(). Aborting.
[1]    11703 abort (core dumped)  ./test-install

4 years agoresolved: reference count the dns servers
Tom Gundersen [Wed, 24 Jun 2015 16:41:46 +0000 (18:41 +0200)]
resolved: reference count the dns servers

We want to reference the servers from their active transactions, so make sure
they stay around as long as the transaction does.

4 years agosd-netlink: don't export internal type-system details
David Herrmann [Wed, 24 Jun 2015 11:27:34 +0000 (13:27 +0200)]
sd-netlink: don't export internal type-system details

The kernel bonding layer allows passing an array of ARP IP targets as
bond-configuration. Due to the weird implementation of arrays in netlink
(which we haven't figure out a generic way to support, yet), we usually
hard-code the supported array-sizes. However, this should not be exported
from sd-netlink.

Instead, make sure the caller just uses it's current hack of enumerating
the types, and the sd-netlink core will have it's own list of supported
array-sizes (to be removed in future extensions, btw!). If either does not
match, we will just return a normal error.

Note that we provide 2 constants for ARP_IP_TARGETS_MAX now. However, both
have very different reasons:
 - the constant in netdev-bond.c is used to warn the user that the given
   number of targets might not be supported by the kernel (even though the
   kernel might increase that number at _any_ time)
 - the constant in sd-netlink is solely used due to us missing a proper
   array implementation. Once that's supported in the type-system, it can
   be removed without notice

Last but not least, this patch turns the log_error() into a log_warning().
Given that the previous condition was off-by-one, anyway, it never hit at
the right time. Thus, it was probably of no real use.

4 years agoinstall: fix bad memory access
Lennart Poettering [Tue, 23 Jun 2015 23:16:18 +0000 (19:16 -0400)]
install: fix bad memory access

4 years agoman: fully document sd-bus' error APIs
Lennart Poettering [Tue, 23 Jun 2015 17:37:28 +0000 (19:37 +0200)]
man: fully document sd-bus' error APIs

[@zonque: Some minor nits fixed as pointed out by @ronnychevalier,
 dropped class='sd-bus-errors' to fix python logic]

4 years agosd-netlink: respect attribute type flags
Tom Gundersen [Tue, 23 Jun 2015 11:13:20 +0000 (13:13 +0200)]
sd-netlink: respect attribute type flags

Though currently unused by us, netlink attribute types support embedding flags to indicate
if the type is encoded in network byte-order and if it is a nested attribute. Read out
these flags when parsing the message.

We will now swap the byteorder in case it is non-native when reading out integers (though
this is not needed by any of the types we currently support). We do not enforce the NESTED
flag, as the kernel gets this wrong in many cases.

4 years agosd-netlink: don't treat NULL as root type-system
David Herrmann [Tue, 23 Jun 2015 10:10:38 +0000 (12:10 +0200)]
sd-netlink: don't treat NULL as root type-system

Explicitly export the root type-system to the type-system callers. This
avoids treating NULL as root, which for one really looks backwards (NULL
is usually a leaf, not root), and secondly prevents us from properly
debugging calling into non-nested types.

Also rename the root to "type_system_root". Once we support more than
rtnl, well will have to revisit that, anyway.

4 years agosd-netlink: don't treat type_system->count==0 as invalid
David Herrmann [Tue, 23 Jun 2015 10:03:10 +0000 (12:03 +0200)]
sd-netlink: don't treat type_system->count==0 as invalid

Empty type-systems are just fine. Avoid the nasty hack in
union-type-systems that treat empty type-systems as invalid. Instead check
for the actual types-array and make sure it's non-NULL (which is even true
for empty type-systems, due to "empty_types" array).

4 years agosd-netlink: drop NETLINK_TYPE_META
David Herrmann [Tue, 23 Jun 2015 09:54:43 +0000 (11:54 +0200)]
sd-netlink: drop NETLINK_TYPE_META

The NETLINK_TYPE_META pseudo-type is actually equivalent to an empty
nested type. Drop it and define an empty type-system instead.

This also has the nice side-effect that m->container_type_system[0] is
never NULL (which has really nasty side-effects if you try to read

4 years agosd-netlink: turn 'max' into 'count' to support empty type-systems
David Herrmann [Tue, 23 Jun 2015 09:46:48 +0000 (11:46 +0200)]
sd-netlink: turn 'max' into 'count' to support empty type-systems

Right now we store the maximum type-ID of a type-system. This prevents us
from creating empty type-systems. Store the "count" instead, which should
be treated as max+1.

Note that type_system_union_protocol_get_type_system() currently has a
nasty hack to treat empty type-systems as invalid. This might need some
modification later on as well.

4 years agosd-netlink: avoid casting size_t into int
David Herrmann [Tue, 23 Jun 2015 09:18:53 +0000 (11:18 +0200)]
sd-netlink: avoid casting size_t into int

size_t is usually 64bit and int 32bit on a 64bit machine. This probably
does not matter for netlink message sizes, but nevertheless, avoid
hard-coding it anywhere.

4 years agosd-netlink: make NLTypeSystem internal
David Herrmann [Tue, 23 Jun 2015 09:07:59 +0000 (11:07 +0200)]
sd-netlink: make NLTypeSystem internal

Same as NLType, move NLTypeSystem into netlink-types.c and hide it from
the outside. Provide an accessor function for the 'max' field that is used
to allocate suitable array sizes.

Note that this will probably be removed later on, anyway. Once we support
bigger type-systems, it just seems impractical to allocate such big arrays
for each container entry. An RBTree would probably do just fine.

4 years agosd-netlink: make NLType internal
David Herrmann [Tue, 23 Jun 2015 09:03:10 +0000 (11:03 +0200)]
sd-netlink: make NLType internal

If we extend NLType to support arrays and further extended types, we
really want to avoid hard-coding the type-layout outside of
netlink-types.c. We already avoid accessing nl_type->type_system outside
of netlink-types.c, extend this to also avoid accessing any other fields.

Provide accessor functions for nl_type->type and nl_type->size and then
move NLType away from the type-system header.

With this in place, follow-up patches can safely turn "type_system" and
"type_system_union" into a real "union { }", and then add another type for

4 years agosd-netlink: don't access type->type_system[_union] directly
David Herrmann [Tue, 23 Jun 2015 08:51:25 +0000 (10:51 +0200)]
sd-netlink: don't access type->type_system[_union] directly

Make sure we never access type->type_system or type->type_system_union
directly. This is an implementation detail of the type-system and we
should always use the accessors. Right now, they only exist for 2-level
accesses (type-system to type-system). This patch introduces the 1-level
accessors (type to type-system) and makes use of it.

This patch makes sure the proper assertions are in place, so we never
accidentally access sub-type-systems for non-nested/union types.

Note that this places hard-asserts on the accessors. This should be fine,
as we expect callers to only access sub type-systems if they *know*
they're dealing with nested types.

4 years agosd-netlink: make sure the root-level type is nested
David Herrmann [Tue, 23 Jun 2015 08:47:44 +0000 (10:47 +0200)]
sd-netlink: make sure the root-level type is nested

In sd-netlink-message, we always guarantee that the currently selected
type-system is non-NULL. Otherwise, we would be unable to parse any types
in the current container level. Hence, this assertion must be true:
    message->container_type_system[m->n_containers] != NULL

During message_new() we currently do not verify that this assertion is
true. Instead, we blindly access nl_type->type_system and use it (which
might be NULL for basic types and unions). Fix this, by explicitly
checking that the root-level type is nested.

Note that this is *not* a strict requirement of netlink, but it's a strict
requirement for all message types we currently support. Furthermore, all
the callers of message_new() already verify that only supported types are
passed, therefore, this is a pure cosmetic check. However, it might be
needed on the future, so make sure we don't trap into this once we change
the type-system.

4 years agosd-netlink: rename NLA_ to NETLINK_TYPE_
David Herrmann [Tue, 23 Jun 2015 07:56:59 +0000 (09:56 +0200)]
sd-netlink: rename NLA_ to NETLINK_TYPE_

The NLA_ names are used to name real datatypes we extract out of netlink
messages. The kernel has an internal enum with the same names
(NLA_foobar), which is *NOT* binary compatible to our types. Furthermore,
we support a different set of types than the kernel (as we try to treat
some kernel peculiarities as our own types to simplify the API).

Rename NLA_ to NETLINK_TYPE_ to make clear that this is our own set of

4 years agozsh-completion: _loginctl/_systemd/_systemd-inhibit improvements
Eric Cook [Mon, 22 Jun 2015 22:07:32 +0000 (18:07 -0400)]
zsh-completion: _loginctl/_systemd/_systemd-inhibit improvements

_loginctl: respects the verbose style. which allows a user to get
the pre d5df0d950f8bc behavior of not showing a description for sessions
and users, by default they aren't shown.

zstyle ':completion:*' verbose true
zstyle ':completion:*:loginctl*:*' verbose true # or similar
Will show the descriptions.

zstyle ':completion:*' verbose true
zstyle ':completion:*:loginctl*:*' verbose false # or similar
Won't show descriptions for loginctl only

_systemd: complete pids for systemd-notify's --pid option.
display a message of the expected argument for other options.

_systemd-inhibit: complete block & delay for --mode
display a message of the expected argument for --who/--why

4 years agoexport sd_bus_object_added() / _removed()
Geert Jansen [Sun, 21 Jun 2015 11:44:35 +0000 (07:44 -0400)]
export sd_bus_object_added() / _removed()

Fixes #306.

4 years agopam_systemd: Properly check kdbus availability
Jan Alexander Steffens (heftig) [Sun, 21 Jun 2015 03:59:34 +0000 (05:59 +0200)]
pam_systemd: Properly check kdbus availability

This properly avoids setting DBUS_SESSION_BUS_ADDRESS if kdbus
is loaded (or built into the kernel) but not wanted.

4 years agopo: run make update-po
Lennart Poettering [Fri, 19 Jun 2015 00:13:03 +0000 (02:13 +0200)]
po: run make update-po

4 years agoman: revert dynamic paths for split-usr setups
Tom Gundersen [Thu, 18 Jun 2015 17:47:44 +0000 (19:47 +0200)]
man: revert dynamic paths for split-usr setups

This did not really work out as we had hoped. Trying to do this upstream
introduced several problems that probably makes it better suited as a
downstream patch after all. At any rate, it is not releaseable in the
current state, so we at least need to revert this before the release.

 * by adjusting the path to binaries, but not do the same thing to the
   search path we end up with inconsistent man-pages. Adjusting the search
   path too would be quite messy, and it is not at all obvious that this is
   worth the effort, but at any rate it would have to be done before we
   could ship this.

 * this means that distributed man-pages does not make sense as they depend
   on config options, and for better or worse we are still distributing
   man pages, so that is something that definitely needs sorting out before
   we could ship with this patch.

 * we have long held that split-usr is only minimally supported in order
   to boot, and something we hope will eventually go away. So before we start
   adding even more magic/effort in order to make this work nicely, we should
   probably question if it makes sense at all.

4 years agoacl-util: various smaller fixes to parse_acl()
Lennart Poettering [Wed, 17 Jun 2015 20:08:21 +0000 (22:08 +0200)]
acl-util: various smaller fixes to parse_acl()

- Make string parameter const

- Don't log some OOM errors, but not others

- Don't eat up errors generated by acl_from_text()

- Make sure check for success of every single strv_push() call