apply patches
This commit is contained in:
commit
e22d7b9def
|
@ -1,3 +1,33 @@
|
||||||
|
_umount_points_list()
|
||||||
|
{
|
||||||
|
# List of characters to escape, shamelessly stolen from "scp" comp.
|
||||||
|
local escape_chars='[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]'
|
||||||
|
|
||||||
|
# This is most odd, but we are adding artifically a space after the
|
||||||
|
# file name because, somehow, it enables proper escaping of dangerous
|
||||||
|
# characters, e.g. "|" -> "\|". Without space, it is possible to get
|
||||||
|
# either 0 "|" or 2 "\\|" backslashes, but 1 does not work. Also,
|
||||||
|
# sticking to sub() and gsub(), instead of gensub(), allows to be AWK
|
||||||
|
# implementation agnostic.
|
||||||
|
findmnt -lno TARGET | awk '{
|
||||||
|
if ($0 ~ "^"ENVIRON["HOME"]) {
|
||||||
|
homeless = $0
|
||||||
|
sub("^"ENVIRON["HOME"], "~", homeless)
|
||||||
|
gsub("'"$escape_chars"'", "\\\\&", homeless)
|
||||||
|
print homeless " "
|
||||||
|
}
|
||||||
|
if ($0 ~ "^"ENVIRON["PWD"]) {
|
||||||
|
reldir = $0
|
||||||
|
sub("^"ENVIRON["PWD"]"/?", "", reldir)
|
||||||
|
gsub("'"$escape_chars"'", "\\\\&", reldir)
|
||||||
|
print "./" reldir " "
|
||||||
|
print reldir " "
|
||||||
|
}
|
||||||
|
gsub("'"$escape_chars"'", "\\\\&")
|
||||||
|
print $0 " "
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
_umount_module()
|
_umount_module()
|
||||||
{
|
{
|
||||||
local cur prev OPTS
|
local cur prev OPTS
|
||||||
|
@ -48,28 +78,11 @@ _umount_module()
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
local IFS=$'\n'
|
||||||
local oldifs=$IFS
|
COMPREPLY=( $( compgen -W '$( _umount_points_list )' -- "$cur" ) )
|
||||||
IFS=$'\n'
|
|
||||||
COMPREPLY=( $( compgen -W "$(findmnt -lno TARGET | awk \
|
|
||||||
'{
|
|
||||||
if ($0 ~ ENVIRON["HOME"]) {
|
|
||||||
homeless = $0
|
|
||||||
homeless = gensub(ENVIRON["HOME"], "\\\\~", "g", homeless)
|
|
||||||
homeless = gensub(/(\s)/, "\\\\\\1", "g", homeless)
|
|
||||||
print homeless
|
|
||||||
}
|
|
||||||
if ($0 ~ ENVIRON["PWD"]) {
|
|
||||||
reldir = $0
|
|
||||||
reldir = gensub(ENVIRON["PWD"]"/", "", "g", reldir)
|
|
||||||
reldir = gensub(/(\s)/, "\\\\\\1", "g", reldir)
|
|
||||||
print "./" reldir
|
|
||||||
print reldir
|
|
||||||
}
|
|
||||||
gsub(/\s/, "\\\\&")
|
|
||||||
print $0
|
|
||||||
}'
|
|
||||||
)" -- "$cur" ) )
|
|
||||||
IFS=$oldifs
|
|
||||||
}
|
}
|
||||||
complete -F _umount_module umount
|
|
||||||
|
# counteract the artificial addition of " " in _gen_mount_points() by
|
||||||
|
# disabling spaces automatically appended to the end of the file name
|
||||||
|
# completion via "-o nospace".
|
||||||
|
complete -F _umount_module -o nospace umount
|
||||||
|
|
|
@ -252,11 +252,12 @@ static int probe_xfs_log(blkid_probe pr,
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return errno ? -errno : 1;
|
return errno ? -errno : 1;
|
||||||
|
|
||||||
if (memcmp(buf, "XFSB", 4) == 0)
|
|
||||||
return 1; /* this is regular XFS, ignore */
|
|
||||||
|
|
||||||
/* check the first 512 512-byte sectors */
|
/* check the first 512 512-byte sectors */
|
||||||
for (i = 0; i < 512; i++) {
|
for (i = 0; i < 512; i++) {
|
||||||
|
/* this is regular XFS (maybe with some sectors shift), ignore */
|
||||||
|
if (memcmp(&buf[i*512], "XFSB", 4) == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
rhead = (struct xlog_rec_header *)&buf[i*512];
|
rhead = (struct xlog_rec_header *)&buf[i*512];
|
||||||
|
|
||||||
if (xlog_valid_rec_header(rhead)) {
|
if (xlog_valid_rec_header(rhead)) {
|
||||||
|
|
|
@ -795,6 +795,11 @@ static void sushell(struct passwd *pwd)
|
||||||
xsetenv("SHELL", "/bin/sh", 1);
|
xsetenv("SHELL", "/bin/sh", 1);
|
||||||
execl("/bin/sh", profile ? "-sh" : "sh", NULL);
|
execl("/bin/sh", profile ? "-sh" : "sh", NULL);
|
||||||
warn(_("failed to execute %s"), "/bin/sh");
|
warn(_("failed to execute %s"), "/bin/sh");
|
||||||
|
|
||||||
|
/* Fall back to static shell */
|
||||||
|
setenv("SHELL", "/bin/static-sh", 1);
|
||||||
|
execl("/bin/static-sh", profile ? "-sh" : "sh", NULL);
|
||||||
|
warn(_("failed to execute %s"), "/bin/static-sh");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
|
@ -978,7 +983,8 @@ int main(int argc, char **argv)
|
||||||
const char *passwd = pwd->pw_passwd;
|
const char *passwd = pwd->pw_passwd;
|
||||||
const char *answer;
|
const char *answer;
|
||||||
int doshell = 0;
|
int doshell = 0;
|
||||||
int deny = !opt_e && locked_account_password(pwd->pw_passwd);
|
/* Ubuntu's root account is locked by default allow access without --force */
|
||||||
|
int deny = 0;
|
||||||
|
|
||||||
doprompt(passwd, con, deny);
|
doprompt(passwd, con, deny);
|
||||||
|
|
||||||
|
|
|
@ -1019,6 +1019,9 @@ static void device_to_scols(
|
||||||
DBG(DEV, ul_debugobj(dev, "add '%s' to scols", dev->name));
|
DBG(DEV, ul_debugobj(dev, "add '%s' to scols", dev->name));
|
||||||
ON_DBG(DEV, if (ul_path_isopen_dirfd(dev->sysfs)) ul_debugobj(dev, " %s ---> is open!", dev->name));
|
ON_DBG(DEV, if (ul_path_isopen_dirfd(dev->sysfs)) ul_debugobj(dev, " %s ---> is open!", dev->name));
|
||||||
|
|
||||||
|
if (!parent && dev->wholedisk)
|
||||||
|
parent = dev->wholedisk;
|
||||||
|
|
||||||
/* Do not print device more than one in --list mode */
|
/* Do not print device more than one in --list mode */
|
||||||
if (!(lsblk->flags & LSBLK_TREE) && dev->is_printed)
|
if (!(lsblk->flags & LSBLK_TREE) && dev->is_printed)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Discard unused blocks on filesystems from /etc/fstab
|
Description=Discard unused blocks on filesystems from /etc/fstab
|
||||||
Documentation=man:fstrim(8)
|
Documentation=man:fstrim(8)
|
||||||
|
ConditionVirtualization=!container
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Discard unused blocks once a week
|
Description=Discard unused blocks once a week
|
||||||
Documentation=man:fstrim
|
Documentation=man:fstrim
|
||||||
|
ConditionVirtualization=!container
|
||||||
|
|
||||||
[Timer]
|
[Timer]
|
||||||
OnCalendar=weekly
|
OnCalendar=weekly
|
||||||
|
|
|
@ -638,28 +638,28 @@ display_time(struct timeval hwctime)
|
||||||
* tz.tz_minuteswest argument and sets PCIL (see below). At boot settimeofday(2)
|
* tz.tz_minuteswest argument and sets PCIL (see below). At boot settimeofday(2)
|
||||||
* has one-shot access to this function as shown in the table below.
|
* has one-shot access to this function as shown in the table below.
|
||||||
*
|
*
|
||||||
* +-------------------------------------------------------------------+
|
* +-------------------------------------------------------------------------+
|
||||||
* | settimeofday(tv, tz) |
|
* | settimeofday(tv, tz) |
|
||||||
* |-------------------------------------------------------------------|
|
* |-------------------------------------------------------------------------|
|
||||||
* | Arguments | System Time | PCIL | | warp_clock |
|
* | Arguments | System Time | TZ | PCIL | | warp_clock |
|
||||||
* | tv | tz | set | warped | set | firsttime | locked |
|
* | tv | tz | set | warped | set | set | firsttime | locked |
|
||||||
* |---------|---------|---------------|------|-----------|------------|
|
* |---------|---------|---------------|-----|------|-----------|------------|
|
||||||
* | pointer | NULL | yes | no | no | 1 | no |
|
* | pointer | NULL | yes | no | no | no | 1 | no |
|
||||||
* | pointer | pointer | yes | no | no | 0 | yes |
|
* | NULL | ptr2utc | no | no | yes | no | 0 | yes |
|
||||||
* | NULL | ptr2utc | no | no | no | 0 | yes |
|
* | NULL | pointer | no | yes | yes | yes | 0 | yes |
|
||||||
* | NULL | pointer | no | yes | yes | 0 | yes |
|
* +-------------------------------------------------------------------------+
|
||||||
* +-------------------------------------------------------------------+
|
|
||||||
* ptr2utc: tz.tz_minuteswest is zero (UTC).
|
* ptr2utc: tz.tz_minuteswest is zero (UTC).
|
||||||
* PCIL: persistent_clock_is_local, sets the "11 minute mode" timescale.
|
* PCIL: persistent_clock_is_local, sets the "11 minute mode" timescale.
|
||||||
* firsttime: locks the warp_clock function (initialized to 1 at boot).
|
* firsttime: locks the warp_clock function (initialized to 1 at boot).
|
||||||
|
* Since glibc v2.31 settimeofday() will fail if both args are non NULL
|
||||||
*
|
*
|
||||||
* +---------------------------------------------------------------------------+
|
* +---------------------------------------------------------------------------+
|
||||||
* | op | RTC scale | settimeofday calls |
|
* | op | RTC scale | settimeofday calls |
|
||||||
* |---------|-----------|-----------------------------------------------------|
|
* |---------|-----------|-----------------------------------------------------|
|
||||||
* | systz | Local | 1) warps system time*, sets PCIL* and kernel tz |
|
* | systz | Local | 1) warps system time*, sets PCIL* and kernel tz |
|
||||||
* | systz | UTC | 1st) locks warp_clock* 2nd) sets kernel tz |
|
* | systz | UTC | 1st) locks warp_clock* 2nd) sets kernel tz |
|
||||||
* | hctosys | Local | 1st) sets PCIL* 2nd) sets system time and kernel tz |
|
* | hctosys | Local | 1st) sets PCIL* & kernel tz 2nd) sets system time |
|
||||||
* | hctosys | UTC | 1) sets system time and kernel tz |
|
* | hctosys | UTC | 1st) locks warp* 2nd) sets tz 3rd) sets system time |
|
||||||
* +---------------------------------------------------------------------------+
|
* +---------------------------------------------------------------------------+
|
||||||
* * only on first call after boot
|
* * only on first call after boot
|
||||||
*/
|
*/
|
||||||
|
@ -670,42 +670,45 @@ set_system_clock(const struct hwclock_control *ctl,
|
||||||
struct tm broken;
|
struct tm broken;
|
||||||
int minuteswest;
|
int minuteswest;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
const struct timezone tz_utc = { 0 };
|
|
||||||
|
|
||||||
localtime_r(&newtime.tv_sec, &broken);
|
localtime_r(&newtime.tv_sec, &broken);
|
||||||
minuteswest = -get_gmtoff(&broken) / 60;
|
minuteswest = -get_gmtoff(&broken) / 60;
|
||||||
|
|
||||||
if (ctl->verbose) {
|
if (ctl->verbose) {
|
||||||
if (ctl->hctosys && !ctl->universal)
|
if (ctl->universal) {
|
||||||
printf(_("Calling settimeofday(NULL, %d) to set "
|
|
||||||
"persistent_clock_is_local.\n"), minuteswest);
|
|
||||||
if (ctl->systz && ctl->universal)
|
|
||||||
puts(_("Calling settimeofday(NULL, 0) "
|
puts(_("Calling settimeofday(NULL, 0) "
|
||||||
"to lock the warp function."));
|
"to lock the warp_clock function."));
|
||||||
|
if (!( ctl->universal && !minuteswest ))
|
||||||
|
printf(_("Calling settimeofday(NULL, %d) "
|
||||||
|
"to set the kernel timezone.\n"),
|
||||||
|
minuteswest);
|
||||||
|
} else
|
||||||
|
printf(_("Calling settimeofday(NULL, %d) to warp "
|
||||||
|
"System time, set PCIL and the kernel tz.\n"),
|
||||||
|
minuteswest);
|
||||||
|
|
||||||
if (ctl->hctosys)
|
if (ctl->hctosys)
|
||||||
printf(_("Calling settimeofday(%ld.%06ld, %d)\n"),
|
printf(_("Calling settimeofday(%ld.%06ld, NULL) "
|
||||||
newtime.tv_sec, newtime.tv_usec, minuteswest);
|
"to set the System time.\n"),
|
||||||
else {
|
newtime.tv_sec, newtime.tv_usec);
|
||||||
printf(_("Calling settimeofday(NULL, %d) "), minuteswest);
|
|
||||||
if (ctl->universal)
|
|
||||||
puts(_("to set the kernel timezone."));
|
|
||||||
else
|
|
||||||
puts(_("to warp System time."));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ctl->testing) {
|
if (!ctl->testing) {
|
||||||
|
const struct timezone tz_utc = { 0 };
|
||||||
const struct timezone tz = { minuteswest };
|
const struct timezone tz = { minuteswest };
|
||||||
|
|
||||||
if (ctl->hctosys && !ctl->universal) /* set PCIL */
|
/* If UTC RTC: lock warp_clock and PCIL */
|
||||||
rc = settimeofday(NULL, &tz);
|
if (ctl->universal)
|
||||||
if (ctl->systz && ctl->universal) /* lock warp_clock */
|
|
||||||
rc = settimeofday(NULL, &tz_utc);
|
rc = settimeofday(NULL, &tz_utc);
|
||||||
if (!rc && ctl->hctosys)
|
|
||||||
rc = settimeofday(&newtime, &tz);
|
/* Set kernel tz; if localtime RTC: warp_clock and set PCIL */
|
||||||
else if (!rc)
|
if (!rc && !( ctl->universal && !minuteswest ))
|
||||||
rc = settimeofday(NULL, &tz);
|
rc = settimeofday(NULL, &tz);
|
||||||
|
|
||||||
|
/* Set the System Clock */
|
||||||
|
if ((!rc || errno == ENOSYS) && ctl->hctosys)
|
||||||
|
rc = settimeofday(&newtime, NULL);
|
||||||
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
warn(_("settimeofday() failed"));
|
warn(_("settimeofday() failed"));
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
@ -1442,7 +1445,7 @@ hwclock_exit(const struct hwclock_control *ctl
|
||||||
if (ctl->hwaudit_on && !ctl->testing) {
|
if (ctl->hwaudit_on && !ctl->testing) {
|
||||||
audit_log_user_message(hwaudit_fd, AUDIT_USYS_CONFIG,
|
audit_log_user_message(hwaudit_fd, AUDIT_USYS_CONFIG,
|
||||||
"op=change-system-time", NULL, NULL, NULL,
|
"op=change-system-time", NULL, NULL, NULL,
|
||||||
status);
|
status == EXIT_SUCCESS ? 1 : 0);
|
||||||
}
|
}
|
||||||
close(hwaudit_fd);
|
close(hwaudit_fd);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue