1
0
mirror of https://github.com/systemd/systemd synced 2025-09-28 16:24:45 +02:00

Compare commits

..

10 Commits

Author SHA1 Message Date
Yu Watanabe
df49792e01 timedate: actually reset system time with new timezone
Fix a bug introduced by 56b0ef2fc283425df6ae6f1dc198e0c408f70471.

Closes CID#1436943.
2021-01-13 00:59:33 +09:00
Karel Zak
4fcc033b54 udev-builtin-blkid: add support for --hint offsets
The next libblkid v2.37 is going to support session offsets for
multi-session CD/DVDs. This feature is implemented by "hint offsets".

These offsets are optional and prober specific (e.g., iso, udf, ...).
For this purpose, the library provides a new function
blkid_probe_set_hint(), and blkid(8) provides a new command-line
option --hint <name>=<offset>. For CD/DVD, the offset name is
"session_offset".

The difference between classic --offset and the new --hint is that
--offset is very restrictive and defines the probing area and the rest
of the device is invisible to the library. The new --hint works
like a suggestion, it provides a hint where the user assumes the
filesystem, but the rest of the device is still readable for the
library (for example, to get some additional superblock information
etc.).

If the --hint is without a value then it defaults to zero.

The option --hint implementation in udev-builtin-blkid.c is backwardly
compatible. If compiled against old libblkid, then the option is used in
the same way as --offset.

Addresses: https://github.com/karelzak/util-linux/issues/1161
Addresses: https://github.com/systemd/systemd/pull/17424
2021-01-13 00:58:43 +09:00
Yu Watanabe
885598f36c
Merge pull request #18212 from yuwata/two-coverity-fixes
Two coverity fixes
2021-01-13 00:57:34 +09:00
Lennart Poettering
b433300e4c meson: catch up with 'update-man-rules' 2021-01-12 15:00:38 +01:00
Yu Watanabe
7c08f24a50
Merge pull request #18217 from ssahani/todo-network
TODO: Already implemented with SendDecline=
2021-01-12 22:53:44 +09:00
Susant Sahani
4707ae99cd TODO: SR_IOV already implemeted 2021-01-12 14:52:00 +01:00
Susant Sahani
973fa2cd4f TODO: Already implemented with SendDecline= 2021-01-12 14:47:39 +01:00
Lennart Poettering
9786ba1386 update TODO 2021-01-12 14:38:37 +01:00
Yu Watanabe
8f13ef254b sd-bus: fix memleak
Closes CID#1437780.
2021-01-12 20:46:47 +09:00
Yu Watanabe
ecb3e9fba3 boot: at least one of os_name_pretty or os_name exists in this block
Closes CID#1438933.
2021-01-12 20:43:06 +09:00
9 changed files with 41 additions and 18 deletions

10
TODO
View File

@ -20,6 +20,12 @@ Janitorial Clean-ups:
Features: Features:
* add "systemd-analyze debug" + AttachDebugger= in unit files: The former
specifies a command to execute; the latter specifies that an already running
"systemd-analyze debug" instance shall be contacted and execution paused
until it gives an OK. That way, tools like gdb or strace can be safely be
invoked on processes forked off PID 1.
* expose MS_NOSYMFOLLOW in various places * expose MS_NOSYMFOLLOW in various places
* tpm2: support a PIN policy, i.e. allowing windows-style short authentication * tpm2: support a PIN policy, i.e. allowing windows-style short authentication
@ -808,9 +814,6 @@ Features:
picked up by systemd unless they contain a medium. This would mirror picked up by systemd unless they contain a medium. This would mirror
the behaviour we already have for CD drives. the behaviour we already have for CD drives.
* networkd/udev: implement SR_IOV configuration in .link files:
http://lists.freedesktop.org/archives/systemd-devel/2015-January/027451.html
* hostnamectl: show root image uuid * hostnamectl: show root image uuid
* Find a solution for SMACK capabilities stuff: * Find a solution for SMACK capabilities stuff:
@ -1319,7 +1322,6 @@ Features:
for all routes to it. possibly a second default for DHCP routes. for all routes to it. possibly a second default for DHCP routes.
- allow Name= to be specified repeatedly in the [Match] section. Maybe also - allow Name= to be specified repeatedly in the [Match] section. Maybe also
support Name=foo*|bar*|baz ? support Name=foo*|bar*|baz ?
- duplicate address check for static IPs (like ARPCHECK in network-scripts)
- whenever uplink info changes, make DHCP server send out FORCERENEW - whenever uplink info changes, make DHCP server send out FORCERENEW
* Figure out how to do unittests of networkd's state serialization * Figure out how to do unittests of networkd's state serialization

View File

@ -220,6 +220,7 @@ manpages = [
'sd_bus_open_system_remote', 'sd_bus_open_system_remote',
'sd_bus_open_system_with_description', 'sd_bus_open_system_with_description',
'sd_bus_open_user', 'sd_bus_open_user',
'sd_bus_open_user_machine',
'sd_bus_open_user_with_description', 'sd_bus_open_user_with_description',
'sd_bus_open_with_description'], 'sd_bus_open_with_description'],
''], ''],

View File

@ -1003,6 +1003,9 @@ want_blkid = get_option('blkid')
if want_blkid != 'false' and not skip_deps if want_blkid != 'false' and not skip_deps
libblkid = dependency('blkid', required : want_blkid == 'true') libblkid = dependency('blkid', required : want_blkid == 'true')
have = libblkid.found() have = libblkid.found()
conf.set10('HAVE_BLKID_PROBE_SET_HINT',
have and cc.has_function('blkid_probe_set_hint', dependencies : libblkid))
else else
have = false have = false
libblkid = [] libblkid = []

View File

@ -104,7 +104,7 @@ KERNEL=="vd*[0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID
# probe filesystem metadata of optical drives which have a media inserted # probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}" IMPORT{builtin}="blkid --hint=session_offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
IMPORT{builtin}="blkid --noraid" IMPORT{builtin}="blkid --noraid"

View File

@ -1988,8 +1988,8 @@ static VOID config_entry_add_linux(
path = PoolPrint(L"\\EFI\\Linux\\%s", f->FileName); path = PoolPrint(L"\\EFI\\Linux\\%s", f->FileName);
entry = config_entry_add_loader(config, device, LOADER_LINUX, f->FileName, 'l', entry = config_entry_add_loader(config, device, LOADER_LINUX, f->FileName, 'l',
os_name_pretty ? : (os_name ? : os_id), path, os_name_pretty ?: os_name, path,
os_version ? : (os_version_id ? : os_build_id)); os_version ?: (os_version_id ? : os_build_id));
FreePool(content); FreePool(content);
content = NULL; content = NULL;

View File

@ -1516,8 +1516,8 @@ _public_ int sd_bus_open_system_remote(sd_bus **ret, const char *host) {
} }
int bus_set_address_machine(sd_bus *b, bool user, const char *machine) { int bus_set_address_machine(sd_bus *b, bool user, const char *machine) {
_cleanup_free_ char *a = NULL;
const char *rhs; const char *rhs;
char *a;
assert(b); assert(b);
assert(machine); assert(machine);

View File

@ -771,7 +771,7 @@ static int method_set_local_rtc(sd_bus_message *m, void *userdata, sd_bus_error
log_debug_errno(r, "Failed to get hardware clock, ignoring: %m"); log_debug_errno(r, "Failed to get hardware clock, ignoring: %m");
else { else {
/* And set the system clock with this */ /* And set the system clock with this */
mktime_or_timegm(&tm, !c->local_rtc); ts.tv_sec = mktime_or_timegm(&tm, !c->local_rtc);
if (clock_settime(CLOCK_REALTIME, &ts) < 0) if (clock_settime(CLOCK_REALTIME, &ts) < 0)
log_debug_errno(errno, "Failed to update system clock, ignoring: %m"); log_debug_errno(errno, "Failed to update system clock, ignoring: %m");

View File

@ -238,10 +238,16 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
static const struct option options[] = { static const struct option options[] = {
{ "offset", required_argument, NULL, 'o' }, { "offset", required_argument, NULL, 'o' },
{ "hint", required_argument, NULL, 'H' },
{ "noraid", no_argument, NULL, 'R' }, { "noraid", no_argument, NULL, 'R' },
{} {}
}; };
errno = 0;
pr = blkid_new_probe();
if (!pr)
return log_device_debug_errno(dev, errno_or_else(ENOMEM), "Failed to create blkid prober: %m");
for (;;) { for (;;) {
int option; int option;
@ -250,12 +256,28 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
break; break;
switch (option) { switch (option) {
case 'H':
#if HAVE_BLKID_PROBE_SET_HINT
errno = 0;
r = blkid_probe_set_hint(pr, optarg, 0);
if (r < 0)
return log_device_error_errno(dev, errno_or_else(ENOMEM), "Failed to use '%s' probing hint: %m", optarg);
break;
#else
/* Use the hint <name>=<offset> as probing offset for old versions */
optarg = strchr(optarg, '=');
if (!optarg)
/* no value means 0, do nothing for old versions */
break;
++optarg;
_fallthrough_;
#endif
case 'o': case 'o':
r = safe_atoi64(optarg, &offset); r = safe_atoi64(optarg, &offset);
if (r < 0) if (r < 0)
return log_device_error_errno(dev, r, "Failed to parse '%s' as an integer: %m", optarg); return log_device_error_errno(dev, r, "Failed to parse '%s' as an integer: %m", optarg);
if (offset < 0) if (offset < 0)
return log_device_error_errno(dev, SYNTHETIC_ERRNO(ERANGE), "Invalid offset %"PRIi64": %m", offset); return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Invalid offset %"PRIi64": %m", offset);
break; break;
case 'R': case 'R':
noraid = true; noraid = true;
@ -263,11 +285,6 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
} }
} }
errno = 0;
pr = blkid_new_probe();
if (!pr)
return log_device_debug_errno(dev, errno > 0 ? errno : ENOMEM, "Failed to create blkid prober: %m");
blkid_probe_set_superblocks_flags(pr, blkid_probe_set_superblocks_flags(pr,
BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE | BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
@ -287,7 +304,7 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
errno = 0; errno = 0;
r = blkid_probe_set_device(pr, fd, offset, 0); r = blkid_probe_set_device(pr, fd, offset, 0);
if (r < 0) if (r < 0)
return log_device_debug_errno(dev, errno > 0 ? errno : ENOMEM, "Failed to set device to blkid prober: %m"); return log_device_debug_errno(dev, errno_or_else(ENOMEM), "Failed to set device to blkid prober: %m");
log_device_debug(dev, "Probe %s with %sraid and offset=%"PRIi64, devnode, noraid ? "no" : "", offset); log_device_debug(dev, "Probe %s with %sraid and offset=%"PRIi64, devnode, noraid ? "no" : "", offset);
@ -301,7 +318,7 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
errno = 0; errno = 0;
nvals = blkid_probe_numof_values(pr); nvals = blkid_probe_numof_values(pr);
if (nvals < 0) if (nvals < 0)
return log_device_debug_errno(dev, errno > 0 ? errno : ENOMEM, "Failed to get number of probed values: %m"); return log_device_debug_errno(dev, errno_or_else(ENOMEM), "Failed to get number of probed values: %m");
for (i = 0; i < nvals; i++) { for (i = 0; i < nvals; i++) {
if (blkid_probe_get_value(pr, i, &name, &data, NULL) < 0) if (blkid_probe_get_value(pr, i, &name, &data, NULL) < 0)

View File

@ -86,7 +86,7 @@ KERNEL=="vd*[0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID
# probe filesystem metadata of optical drives which have a media inserted # probe filesystem metadata of optical drives which have a media inserted
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \
IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}" IMPORT{builtin}="blkid --hint=session_offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}"
# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \
IMPORT{builtin}="blkid --noraid" IMPORT{builtin}="blkid --noraid"