The wait_for_term_input()'s select() needs to be tripped when the user
starts typing. Otherwise the reloads can abort an already in-progress login.
Coupled with \4 and \6 expansions that happen to be there on Fedora Server,
this means reload on every netlink event. With a couple of IPv6 routers
announcing their networks and temporary addresses in use can make it
sometimes virtually impossible to log in.
Seems like zero lflags do the job just fine on a Linux VT. Reset it to
canonical mode before running login.
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
Signed-off-by: Karel Zak <kzak@redhat.com>
If netlink event arrives and related escapes are part of issue, agetty
reloads and re-display the prompt. Reload is triggered not only by IP
address change, but also by IPv6 RAs. In some environments it causes
reload several times in a minute, and even complicates the login.
To prevent this, reload only if a real change appears.
This consists of:
split print_issue_file() to several functions:
eval_issue_file() prints issue to memory. It does not affect terminal in
any way.
print_issue_file() prints issue file from memory.
cmp_issue_file() compares the issue file and returns true, if reload is
needed.
The implementation requires additional change:
do_prompt() does not evaluate the issue file. It is responsibility of
calling function.
Test suite:
Use issue that contais \4 and/or \6 escape.
After installing new instance, restart agetty by typing a letter and then
Enter 6 times.
To check whether reload happens, type a letter. When reload happens,
letter disappears.
1. Unplug network cable. Wait a while and re-plug network cable.
You should see 2 reloads on single stack and 3 reloads on dual stack.
2. Run a loop
while : ; do
sed -i '$areload_test' /etc/issue
agetty --reload
sleep 3
sed -i '/reload_test/d' /etc/issue
agetty --reload
sleep 3
done
You should see regular reload every 3 seconds.
3. Run a loop
while : ; do
agetty --reload
sleep 3
done
Before: You see regular reload every 3 seconds.
After: No reloads.
4. Run a loop
while : ; do
ifconfig lo 127.0.0.1 netmask 255.0.0.0
sleep 3
ifconfig lo 127.0.0.2 netmask 255.0.0.0
sleep 3
done
Before: You see regular reload every 3 seconds.
After: No reloads.
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
changed variable name is not correct. It does not say that network
interface changed its address. It just says that the netlink message
processing was triggered.
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
Check what has changed in usage functions in between v2.32..a77bd80d5 and
update bash-completion files accordingly.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
In case where the non-standard `fpurge` function is available, we
redefine `__fpurge` to `fpurge`. We can do so because the only
difference between both functions is that one returns an error code
while the other does not. But as we do not check the error code either
way, we do not care about which one of them we use.
The above redefinition happens unconditionally if we know that `fpurge`
exists. Most notably, we also redefine it if we already do have an
`__fpurge` function available that could be used. This causes problems
on musl-based platforms, where we detect availability of `fpurge` in
libc, but where no function declaration for it exists in "stdio_ext.h".
The compiler thus prints a warning due to an unknown function, even
though it will link just fine.
Avoid this warning by only redefining `__fpurge` to `fpurge` when
HAVE___FPURGE is not defined.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
The structure `blkdev_cxt` has a `struct stat` member embedded, whose
size may not be known on some systems because of a missing include for
"sys/stat.h". On glibc-based systems, this header is included
transitively via "sys/statvfs.h", but on musl-based systems it is not.
Fix the resulting compile error due to unknown size of the struct by
including "sys/stat.h".
Signed-off-by: Patrick Steinhardt <ps@pks.im>
libfdisk/src/script.c: In function ‘fdisk_script_read_context’:
libfdisk/src/script.c:452:33: error: format ‘%zu’ expects argument of type ‘size_t’, but argument 4 has type ‘long unsigned int’ [-Werror=format=]
snprintf(buf, sizeof(buf), "%zu", fdisk_get_grain_size(cxt));
^
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
man utmp:
String fields are terminated by a null byte ('\0') if they are shorter
than the size of the field.
Signed-off-by: Karel Zak <kzak@redhat.com>
man utmp:
String fields are terminated by a null byte ('\0') if they are shorter
than the size of the field.
Signed-off-by: Karel Zak <kzak@redhat.com>
man utmp:
String fields are terminated by a null byte ('\0') if they are shorter
than the size of the field.
Signed-off-by: Karel Zak <kzak@redhat.com>
str2memcpy() - copy zero terminated string to optionally terminated buffer
mem2strcpy() - copy from buffer to zero terminated string
Signed-off-by: Karel Zak <kzak@redhat.com>
The current code uses "part" or "disk" only if nothing else is
possible to recognize. It means for example partitions on loops (or
RAIDs, etc) are marked as "loop" rather than "part".
Addresses: https://github.com/karelzak/util-linux/issues/700
Signed-off-by: Karel Zak <kzak@redhat.com>
* split properties to separate struct which is allocated only when
udev or blkid provides some information
* use separate function for udev and blkid and hide details in generic
get_device_properties()
* make sure we do not overwrite stuff udev and blkid (but this is only
theoretic issue as we do not call get_properties_by_blkid() directly
from code)
Signed-off-by: Karel Zak <kzak@redhat.com>
The current code counts only partition sizes when it counts possible
space, but we have gaps between the partitions. It seems better to
count all based on offsets rather than sizes.
Addresses: https://github.com/karelzak/util-linux/issues/693
Signed-off-by: Karel Zak <kzak@redhat.com>