summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* sd-bus: introduce new sd_bus_flush_close_unref() callLennart Poettering2017-03-14
| | | | | | | | | | | | | | | | 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
* treewide: fix typosTorstein Husebø2017-03-14
|
* sd-bus: don't leak kdbus notificationsDavid Herrmann2017-03-14
| | | | | | | | | | 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.
* login: re-use VT-sessions if they already existDavid Herrmann2017-03-14
| | | | | | | | | | | | | | | | | | | 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.
* socket: Set SO_REUSEPORT before bind()Christos Trochalakis2017-03-14
| | | | | | | | 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.
* build-sys: use wildcard glob in update-man-list againZbigniew Jędrzejewski-Szmek2017-03-14
| | | | | | | | | | 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 make-man-rules.py itself in order to make Makefile.am a bit simpler, and rename files to dist_files to better reflect new meaning.
* login: add rule for qemu's pci-bridge-seatGerd Hoffmann2017-03-14
| | | | | | | | | | | | | | 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)
* sd-netlink: message - remove unused next_rta_offset fieldTom Gundersen2017-03-14
| | | | This was a left-over from before we supported containers.
* sd-netlink: make a couple of helper functions staticTom Gundersen2017-03-14
| | | | Also rename from rtnl_* to netlink_*.
* netlink: rework containersTom Gundersen2017-03-14
| | | | | | | 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.
* install: make unit_file_get_list aware of UNIT_FILE_INDIRECTMichal Sekletar2017-03-14
| | | | | | | | | | | | | | | | | | 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
* install: explicitly return 0 on successMichal Sekletar2017-03-14
| | | | | | | | | | | 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
* resolved: reference count the dns serversTom Gundersen2017-03-14
| | | | | We want to reference the servers from their active transactions, so make sure they stay around as long as the transaction does.
* sd-netlink: don't export internal type-system detailsDavid Herrmann2017-03-14
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* install: fix bad memory accessLennart Poettering2017-03-14
|
* man: fully document sd-bus' error APIsLennart Poettering2017-03-14
| | | | | [@zonque: Some minor nits fixed as pointed out by @ronnychevalier, dropped class='sd-bus-errors' to fix python logic]
* sd-netlink: respect attribute type flagsTom Gundersen2017-03-14
| | | | | | | | | | 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.
* sd-netlink: don't treat NULL as root type-systemDavid Herrmann2017-03-14
| | | | | | | | | | 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.
* sd-netlink: don't treat type_system->count==0 as invalidDavid Herrmann2017-03-14
| | | | | | | 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).
* sd-netlink: drop NETLINK_TYPE_METADavid Herrmann2017-03-14
| | | | | | | | | 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 attributes).
* sd-netlink: turn 'max' into 'count' to support empty type-systemsDavid Herrmann2017-03-14
| | | | | | | | | | 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.
* sd-netlink: avoid casting size_t into intDavid Herrmann2017-03-14
| | | | | | 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.
* sd-netlink: make NLTypeSystem internalDavid Herrmann2017-03-14
| | | | | | | | | | 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.
* sd-netlink: make NLType internalDavid Herrmann2017-03-14
| | | | | | | | | | | | | | 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 arrays.
* sd-netlink: don't access type->type_system[_union] directlyDavid Herrmann2017-03-14
| | | | | | | | | | | | | | | 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.
* sd-netlink: make sure the root-level type is nestedDavid Herrmann2017-03-14
| | | | | | | | | | | | | | | | | | | 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.
* sd-netlink: rename NLA_ to NETLINK_TYPE_David Herrmann2017-03-14
| | | | | | | | | | | 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 types.
* zsh-completion: _loginctl/_systemd/_systemd-inhibit improvementsEric Cook2017-03-14
| | | | | | | | | | | | | | | | | | | | | | _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 or zstyle ':completion:*:loginctl*:*' verbose true # or similar Will show the descriptions. zstyle ':completion:*' verbose true and 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
* export sd_bus_object_added() / _removed()Geert Jansen2017-03-14
| | | | Fixes #306.
* pam_systemd: Properly check kdbus availabilityJan Alexander Steffens (heftig)2017-03-14
| | | | | This properly avoids setting DBUS_SESSION_BUS_ADDRESS if kdbus is loaded (or built into the kernel) but not wanted.
* po: run make update-poLennart Poettering2017-03-14
|
* man: revert dynamic paths for split-usr setupsTom Gundersen2017-03-14
| | | | | | | | | | | | | | | | | | | | | | | 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.
* acl-util: various smaller fixes to parse_acl()Lennart Poettering2017-03-14
| | | | | | | | | | - 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
* logs-show: print a debug message when we skip entries without MESSAGE= fieldsLennart Poettering2017-03-14
|
* bus: fix installing DRIVER matches on kdbusDavid Herrmann2017-03-14
| | | | | | | | | | | | | | | In kdbus we still have to support org.freedesktop.DBus matches even though there is no real bus driver. The reason is that bus-control.c turns NameOwnerChanged matches into proper kdbus matches. If we drop DRIVER matches early, we will never match on name-changes for kdbus. Two ways to fix this: 1) Install DRIVER matches on kdbus (which is the simple way our and which is what this patch does). 2) Properly fix the scope-detection to let NameOwnerChanged matches through (or better: block anything with Member!=NameOwnerChanged).
* watchdog: Don't require WDIOC_SETOPTIONS/WDIOS_ENABLECARDJean Delvare2017-03-14
| | | | | | | | | | Not all watchdog drivers implement WDIOC_SETOPTIONS. Drivers which do not implement it have their device always enabled. So it's fine to report an error if WDIOS_DISABLECARD is passed and the ioctl is not implemented, however failing when WDIOS_ENABLECARD is passed and the ioctl is not implemented is not good: if the device was already enabled then WDIOS_ENABLECARD was a no-op and wasn't needed in the first place. So we can just ignore the error and continue.
* logind: save /run/systemd/users/UID before starting user@.serviceSimon McVittie2017-03-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, this had a race condition during a user's first login. Some component calls CreateSession (most likely by a PAM service other than 'systemd-user' running pam_systemd), with the following results: - logind: * create the user's XDG_RUNTIME_DIR * tell pid 1 to create user-UID.slice * tell pid 1 to start user@UID.service Then these two processes race: - logind: * save information including XDG_RUNTIME_DIR to /run/systemd/users/UID - the subprocess of pid 1 responsible for user@service: * start a 'systemd-user' PAM session, which reads XDG_RUNTIME_DIR and puts it in the environment * run systemd --user, which requires XDG_RUNTIME_DIR in the environment If logind wins the race, which usually happens, everything is fine; but if the subprocesses of pid 1 win the race, which can happen under load, then systemd --user exits unsuccessfully. To avoid this race, we have to write out /run/systemd/users/UID even though the service has not "officially" started yet; previously this did an early-return without saving anything. Record its state as OPENING in this case. Bug: https://github.com/systemd/systemd/issues/232 Reviewed-by: Philip Withnall <philip.withnall@collabora.co.uk>
* turn kdbus support into a runtime optionKay Sievers2017-03-14
| | | | | | | | | | | | | ./configure --enable/disable-kdbus can be used to set the default behavior regarding kdbus. If no kdbus kernel support is available, dbus-dameon will be used. With --enable-kdbus, the kernel command line option "kdbus=0" can be used to disable kdbus. With --disable-kdbus, the kernel command line option "kdbus=1" is required to enable kdbus support.
* logind: apply selinux label to XDG_RUNTIME_DIRLennart Poettering2017-03-14
| | | | | As discussed in #257: we should ensure the selinux label is correctly applied to each user's XDG_RUNTIME_DIR.
* libsystemd: remove list of symbols to export only in the futureKay Sievers2017-03-14
|
* zsh-completion: _loginctl - general bug fixesEric Cook2017-03-14
| | | | | | | | | | | | | | | | | | | | | | 1) the iterator `fun' has an local scope. after running the completer, it will no longer be defined. 2) use _describe instead of calling compadd. Using compadd without calling _description or something similar before, restricts the user's ability to customize what is presented to them. zstyle ':completion:*' format 'Completing %d' - now displays an header showing what is being completed. zstyle ':completion::complete:loginctl-*::users' users user1 user2 - allows the user to manually specify which users is offered zstyle :completion::complete:loginctl-kill-user:\* \ ignored-patterns '(100<0-4>|user1)' - selectively ignore some users when completing loginctl kill-user <tab> Sessions, UIDs now have descriptions when selecting them. 3) removed the call to _loginctl_all_seats in _loginctl_attach(), since _loginctl_seats calls it a second time, right before adding matches. There isn't a noticeable difference doing this.
* Stop talking about the "XDG" version of basename()Simon McVittie2017-03-14
| | | | | | | | | | | | | | | | XDG refers to X Desktop Group, a former name for freedesktop.org. This group is responsible for specifications like basedirs, .desktop files and icon naming, but as far as I know, it has never tried to redefine basename(). I think these references were meant to say XPG (X/Open Portability Guide), a precursor of POSIX. POSIX is better-known and less easily confused with XDG, and is how the basename(3) man page describes the libgen.h version of basename(). The other version of basename() is glibc-specific and is described in basename(3) as "the GNU version"; specifically mention that version, to disambiguate.
* sd-bus: suppress installing local bus matches server sideLennart Poettering2017-03-14
| | | | | | | | | Matches that can only match against messages from the org.freedesktop.DBus.Local service (or the local interfaces or path) should never be installed server side, suppress them hence. Similar, on kdbus matches that can only match driver messages shouldn't be passed to the kernel.
* build-sys: hide magic section variables from exported symbolsKay Sievers2017-03-14
| | | | https://github.com/systemd/systemd/issues/234
* sd-event: make errors on EPOLL_CTL_DEL pseudo-fatalDavid Herrmann2017-03-14
| | | | | | | | | If we call EPOLL_CTL_DEL, we *REALLY* expect the file-descriptor to be present in that given epoll-set. We actually track such state via our s->io.registered flag, so it better be true. Make sure if that's not true, we treat it similar to assert_return() (ie., print a loud warning).
* logind: rework display counting when detecting whether the system is dockedLennart Poettering2017-03-14
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously, we'd just count connected displays, and if there was 2 or more we assumed a "docked" state. With this change we now: - Only count external displays, ignore internal ones (which we detect by checking the connector name against a whitelist of known external plug types) - We ignore connectors which are explicitly disabled - We then compare the count with >= 1 rather than >= 2 as before This new logic has the benefit that systems that disconnect the internal display when the lid is closed are better supported. Also, explicitly disabled ports do not confuse the algorithm anymore. This new algorithm has been suggested here: http://lists.freedesktop.org/archives/intel-gfx/2015-June/068821.html This also makes two functions static, that are not used outside of their .c files.
* hashmap: allow NULL key in ordered_hashmap_next()Michal Schmidt2017-03-14
| | | | | | There is no reason to require key to be non-NULL. Change test_ordered_hashmap_next() to use trivial_hash_ops in order to test NULL key too.
* sd-bus: use proper cleanup macroUmut Tezduyar Lindskog2017-03-14
|
* logind: cast close() call to (void)Lennart Poettering2017-03-14
|
* everywhere: actually make use of DUAL_TIMESTAMP_NULL macroLennart Poettering2017-03-14
| | | | Let's use it as initializer where appropriate.