]> git.ipfire.org Git - thirdparty/util-linux.git/log
thirdparty/util-linux.git
4 years agolscpu: print generic part of the summary
Karel Zak [Fri, 28 Aug 2020 10:55:01 +0000 (12:55 +0200)] 
lscpu: print generic part of the summary

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add setsize to lscpu context
Karel Zak [Fri, 21 Aug 2020 10:21:43 +0000 (12:21 +0200)] 
lscpu: add setsize to lscpu context

Don't recalculate again and again setsize from maxcpus.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add function to count caches size
Karel Zak [Fri, 21 Aug 2020 08:34:28 +0000 (10:34 +0200)] 
lscpu: add function to count caches size

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: use cache ID, keep caches independent on CPU type
Karel Zak [Thu, 20 Aug 2020 10:28:52 +0000 (12:28 +0200)] 
lscpu: use cache ID, keep caches independent on CPU type

The cache is identified by Type, Level and ID, the ID is unique cache
instance identifier (of the type).

This changes forces lscpu allocate more lscpu_cache instances (than
old version), but now we're ready for arbitrary scenario where
different CPU types share caches and the same cache type uses
different size in different instances, etc.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: use new code to read CPUs info
Karel Zak [Wed, 19 Aug 2020 13:43:55 +0000 (15:43 +0200)] 
lscpu: use new code to read CPUs info

and remove test program from lscpu-cputype.c.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: convert getopt block to new API
Karel Zak [Wed, 19 Aug 2020 13:20:02 +0000 (15:20 +0200)] 
lscpu: convert getopt block to new API

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add LSCPU_OUTPUT_ enum
Karel Zak [Wed, 19 Aug 2020 13:10:38 +0000 (15:10 +0200)] 
lscpu: add LSCPU_OUTPUT_ enum

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: move to main function to init context
Karel Zak [Wed, 19 Aug 2020 11:08:44 +0000 (13:08 +0200)] 
lscpu: move to main function to init context

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: move debug initialization to main
Karel Zak [Wed, 19 Aug 2020 11:01:37 +0000 (13:01 +0200)] 
lscpu: move debug initialization to main

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: merge new API to lscpu.h
Karel Zak [Wed, 19 Aug 2020 10:56:22 +0000 (12:56 +0200)] 
lscpu: merge new API to lscpu.h

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: use constants from new API
Karel Zak [Wed, 19 Aug 2020 10:53:01 +0000 (12:53 +0200)] 
lscpu: use constants from new API

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: remove obsolete code
Karel Zak [Wed, 19 Aug 2020 10:43:48 +0000 (12:43 +0200)] 
lscpu: remove obsolete code

This is the first step in conversion from old lscpu to the new code.
The patch removes obsolete code from lscpu.c and lscpu.h. The old
output code in lscpu.c is temporary disabled by #ifdef due to
incompatibility between old and new internal APIs -- this will be
changed later by small steps to make all all the changes review-able.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (virt) add macros for VMWARE
Karel Zak [Wed, 19 Aug 2020 09:40:59 +0000 (11:40 +0200)] 
lscpu: (virt) add macros for VMWARE

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (topology) read caches from /sys
Karel Zak [Tue, 18 Aug 2020 10:48:41 +0000 (12:48 +0200)] 
lscpu: (topology) read caches from /sys

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: sort extra caches
Karel Zak [Mon, 17 Aug 2020 13:01:54 +0000 (15:01 +0200)] 
lscpu: sort extra caches

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: improve debug message
Karel Zak [Mon, 17 Aug 2020 12:57:22 +0000 (14:57 +0200)] 
lscpu: improve debug message

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: remove unused function
Karel Zak [Mon, 17 Aug 2020 12:54:40 +0000 (14:54 +0200)] 
lscpu: remove unused function

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu; (cpuinfo) parse caches
Karel Zak [Mon, 17 Aug 2020 12:52:49 +0000 (14:52 +0200)] 
lscpu; (cpuinfo) parse caches

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (topology) add read_mhz()
Karel Zak [Fri, 14 Aug 2020 10:30:18 +0000 (12:30 +0200)] 
lscpu: (topology) add read_mhz()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (topology) add read_configure()
Karel Zak [Fri, 14 Aug 2020 10:13:38 +0000 (12:13 +0200)] 
lscpu: (topology) add read_configure()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (topology) add read_address()
Karel Zak [Fri, 14 Aug 2020 10:10:26 +0000 (12:10 +0200)] 
lscpu: (topology) add read_address()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: hide all to lscpu_read_topology()
Karel Zak [Fri, 14 Aug 2020 10:07:18 +0000 (12:07 +0200)] 
lscpu: hide all to lscpu_read_topology()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (virt) simplify hypervisor parsing
Karel Zak [Tue, 21 Jul 2020 10:17:32 +0000 (12:17 +0200)] 
lscpu: (virt) simplify hypervisor parsing

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolib/strutils: add normalize_whitespace()
Karel Zak [Tue, 21 Jul 2020 10:16:40 +0000 (12:16 +0200)] 
lib/strutils: add normalize_whitespace()

This function removes extra whitespace.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cpuinfo) rewrite parser
Karel Zak [Mon, 20 Jul 2020 20:05:43 +0000 (22:05 +0200)] 
lscpu: (cpuinfo) rewrite parser

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cpuinfo) fill empty cputype
Karel Zak [Mon, 20 Jul 2020 13:43:33 +0000 (15:43 +0200)] 
lscpu: (cpuinfo) fill empty cputype

Don't introduce a new CPU-type if the current is empty.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: new cpuinfo parser
Karel Zak [Fri, 17 Jul 2020 14:21:04 +0000 (16:21 +0200)] 
lscpu: new cpuinfo parser

* extendable by new patterns
* simple semantic
* the same code for all pattern types

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: keep hypervisor name in allocated memory
Karel Zak [Fri, 17 Jul 2020 14:15:02 +0000 (16:15 +0200)] 
lscpu: keep hypervisor name in allocated memory

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: temporary commit
Karel Zak [Fri, 17 Jul 2020 08:39:05 +0000 (10:39 +0200)] 
lscpu: temporary commit

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: improve topology calculation, use /proc/sysinfo
Karel Zak [Thu, 16 Jul 2020 12:58:37 +0000 (14:58 +0200)] 
lscpu: improve topology calculation, use /proc/sysinfo

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: support s390 cpuinfo processor-pre-line format
Karel Zak [Thu, 16 Jul 2020 11:27:13 +0000 (13:27 +0200)] 
lscpu: support s390 cpuinfo processor-pre-line format

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolsblk: add lscpu_read_topology_polarization()
Karel Zak [Thu, 16 Jul 2020 10:41:35 +0000 (12:41 +0200)] 
lsblk: add lscpu_read_topology_polarization()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: move topology stuff to separate file
Karel Zak [Thu, 16 Jul 2020 09:32:18 +0000 (11:32 +0200)] 
lscpu: move topology stuff to separate file

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: improve topology debug message
Karel Zak [Thu, 16 Jul 2020 09:13:09 +0000 (11:13 +0200)] 
lscpu: improve topology debug message

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: calculate threads number from type specific values
Karel Zak [Thu, 16 Jul 2020 08:51:14 +0000 (10:51 +0200)] 
lscpu: calculate threads number from type specific values

Don't use global CPU masks (like "online" or "present") to
calculate type specific number of threads due systems with
mixed CPU types.

It's also necessary to check all thread_siblings maps to get the
highest number, because some threads (CPUs) may be disables, for
example old lscpu calculates number of threads from the cpu0 and
if you disable cpu0's sibling (cpu4):

CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              2        <---
Core(s) per socket:              4
Socket(s):                       1

 # chcpu --disable 4
 CPU 4 disabled

CPU(s):                          8
On-line CPU(s) list:             0-3,5-7
Off-line CPU(s) list:            4
Thread(s) per core:              1        <--- !
Core(s) per socket:              4
Socket(s):                       1

because 'thread_siblings' contains only one thread for cpu0:

 # cat /sys/devices/system/cpu/cpu{0,1,2,3,4,5,6,7}/topology/thread_siblings_list
 0
 1,5
 2,6
 3,7
 cat: /sys/devices/system/cpu/cpu4/topology/thread_siblings_list: No such file or directory
 1,5
 2,6
 3,7

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: deallocate maps
Karel Zak [Wed, 15 Jul 2020 16:05:15 +0000 (18:05 +0200)] 
lscpu: deallocate maps

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_topolgy_ids()
Karel Zak [Wed, 15 Jul 2020 14:25:15 +0000 (16:25 +0200)] 
lscpu: add lscpu_read_topolgy_ids()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_topology()
Karel Zak [Wed, 15 Jul 2020 14:21:26 +0000 (16:21 +0200)] 
lscpu: add lscpu_read_topology()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_cpus_loopup_by_type(), improve readability
Karel Zak [Wed, 15 Jul 2020 11:07:15 +0000 (13:07 +0200)] 
lscpu: add lscpu_cpus_loopup_by_type(), improve readability

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: convert ARM decoding to new API
Karel Zak [Thu, 14 May 2020 13:20:52 +0000 (15:20 +0200)] 
lscpu: convert ARM decoding to new API

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: cleaup arch freeing
Karel Zak [Thu, 14 May 2020 10:02:44 +0000 (12:02 +0200)] 
lscpu: cleaup arch freeing

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_virtualization()
Karel Zak [Thu, 14 May 2020 09:52:49 +0000 (11:52 +0200)] 
lscpu: add lscpu_read_virtualization()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_numas()
Karel Zak [Wed, 13 May 2020 11:33:36 +0000 (13:33 +0200)] 
lscpu: add lscpu_read_numas()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: fix mem-leak in cpu
Karel Zak [Wed, 13 May 2020 11:33:13 +0000 (13:33 +0200)] 
lscpu: fix mem-leak in cpu

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_vulnerabilities()
Karel Zak [Thu, 7 May 2020 13:23:03 +0000 (15:23 +0200)] 
lscpu: add lscpu_read_vulnerabilities()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: cleanup lscpu_unref_cputype()
Karel Zak [Thu, 7 May 2020 13:08:13 +0000 (15:08 +0200)] 
lscpu: cleanup lscpu_unref_cputype()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_extra()
Karel Zak [Thu, 7 May 2020 13:03:40 +0000 (15:03 +0200)] 
lscpu: add lscpu_read_extra()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_cpulists()
Karel Zak [Thu, 7 May 2020 12:47:24 +0000 (14:47 +0200)] 
lscpu: add lscpu_read_cpulists()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_read_architecture()
Karel Zak [Thu, 7 May 2020 12:19:39 +0000 (14:19 +0200)] 
lscpu: add lscpu_read_architecture()

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) simplify cpuinfo parsing
Karel Zak [Thu, 9 Apr 2020 10:10:43 +0000 (12:10 +0200)] 
lscpu: (cputype) simplify cpuinfo parsing

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add lscpu_cpu to internal API
Karel Zak [Thu, 9 Apr 2020 08:32:11 +0000 (10:32 +0200)] 
lscpu: add lscpu_cpu to internal API

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) move temporary stuff
Karel Zak [Wed, 18 Mar 2020 14:58:53 +0000 (15:58 +0100)] 
lscpu: (cputype) move temporary stuff

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) add header file, cleanup patterns code
Karel Zak [Wed, 18 Mar 2020 14:56:20 +0000 (15:56 +0100)] 
lscpu: (cputype) add header file, cleanup patterns code

* move structs definitions to header file
* define set of /proc/cpuinfo parsing patterns for cpu-type and for
  CPUs

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) add cpuinfo parser
Karel Zak [Tue, 17 Mar 2020 16:27:51 +0000 (17:27 +0100)] 
lscpu: (cputype) add cpuinfo parser

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agoinclude/strutils: make xstrncpy() compatible with over-smart gcc 9
Karel Zak [Tue, 17 Mar 2020 16:24:28 +0000 (17:24 +0100)] 
include/strutils: make xstrncpy() compatible with over-smart gcc 9

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) add ref-counting, allocate context
Karel Zak [Tue, 17 Mar 2020 12:41:28 +0000 (13:41 +0100)] 
lscpu: (cputype) add ref-counting, allocate context

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: (cputype) add debug stuff
Karel Zak [Tue, 17 Mar 2020 12:30:05 +0000 (13:30 +0100)] 
lscpu: (cputype) add debug stuff

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolscpu: add very basic cputype code
Karel Zak [Tue, 17 Mar 2020 12:12:12 +0000 (13:12 +0100)] 
lscpu: add very basic cputype code

The current lscpu assumes that all CPUs in the system are the same.
Unfortunately this is not true. We need to split all internal CPUs
descriptions to CPU-type and CPU.

This patch add lscpu-cputype.c where will be CPU-type description --
mostly based on /proc/cpuinfo.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agotests: update JSON outputs
Karel Zak [Thu, 12 Nov 2020 10:40:22 +0000 (11:40 +0100)] 
tests: update JSON outputs

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolib/jsonwrt: use proper output function
Karel Zak [Thu, 12 Nov 2020 10:38:55 +0000 (11:38 +0100)] 
lib/jsonwrt: use proper output function

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolibsmartcols: use lib/jsonwrt.c for JSON
Karel Zak [Thu, 12 Nov 2020 10:21:50 +0000 (11:21 +0100)] 
libsmartcols: use lib/jsonwrt.c for JSON

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolib/jsonwrt: add new functions to write in JSON
Karel Zak [Thu, 12 Nov 2020 10:19:13 +0000 (11:19 +0100)] 
lib/jsonwrt: add new functions to write in JSON

We need JSON formatting stuff also outside libsmartcols.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agoMerge branch 'libblkid' of https://github.com/ferivoz/util-linux
Karel Zak [Tue, 10 Nov 2020 12:37:30 +0000 (13:37 +0100)] 
Merge branch 'libblkid' of https://github.com/ferivoz/util-linux

4 years agotests: (ul) remove another 'dim' input
Karel Zak [Tue, 10 Nov 2020 12:36:32 +0000 (13:36 +0100)] 
tests: (ul) remove another 'dim' input

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agolibblkid: limit amount of parsed partitions
Samanta Navarro [Tue, 10 Nov 2020 10:48:04 +0000 (11:48 +0100)] 
libblkid: limit amount of parsed partitions

The linux kernel does not support more than 256 partitions
(DISK_MAX_PARTS). The atari and mac block devices have no such limits.

Use dos logical partition limit for atari as well (100).
Use the kernel limit for mac (256).

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agolibblkid: fix time_t handling
Samanta Navarro [Sun, 8 Nov 2020 11:46:56 +0000 (11:46 +0000)] 
libblkid: fix time_t handling

The time_t data type is a signed integer. A signed integer overflow is
not defined in C programming language.

A signed overflow occurs on 32 bit systems with 32 time_t for loop back
devices, e.g. when calling "blkid /dev/loop0". This happens because
bid_time is set to INT_MIN and the diff calculation cannot store the
result in time_t (positive int - INT_MIN > INT_MAX).

This fix changes the code to use an unsigned integer calculation. It
pretty much means that the code works as before, but well defined in C.
Checking diff to be positive protects the code against system setups
with dates before 1970 as well.

The time_t data type on modern Linux systems is 64 bit even for 32 bit
systems. Since long is 32 bit on these systems, long long is a better
data type for 64 bit output.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agotests: remove ul(1) 'dim' input
Karel Zak [Mon, 9 Nov 2020 15:41:46 +0000 (16:41 +0100)] 
tests: remove ul(1) 'dim' input

It's not supported by all terminals.

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agotests: move misc/ul to ul/ directory
Sami Kerola [Sun, 25 Oct 2020 07:54:37 +0000 (07:54 +0000)] 
tests: move misc/ul to ul/ directory

Reference: https://github.com/karelzak/util-linux/pull/1165#issuecomment-715173662
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
4 years agobuild-sys: fix sendfile use
Karel Zak [Mon, 9 Nov 2020 14:30:06 +0000 (15:30 +0100)] 
build-sys: fix sendfile use

* OSX uses different prototype
* include file is not covered by HAVE_SYS_SENDIFLE_H

Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agowipefs: (man) add hint to erase on partitions and disk
Karel Zak [Mon, 9 Nov 2020 11:54:18 +0000 (12:54 +0100)] 
wipefs: (man) add hint to erase on partitions and disk

Addresses: https://github.com/karelzak/util-linux/issues/1177
Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agoMerge branch 'libuuid' of https://github.com/ferivoz/util-linux
Karel Zak [Mon, 9 Nov 2020 11:31:17 +0000 (12:31 +0100)] 
Merge branch 'libuuid' of https://github.com/ferivoz/util-linux

* 'libuuid' of https://github.com/ferivoz/util-linux:
  libuuid: check quality of random bytes

4 years agoMerge branch 'vipw-shortwrite' of https://github.com/DankRank/util-linux
Karel Zak [Mon, 9 Nov 2020 10:06:27 +0000 (11:06 +0100)] 
Merge branch 'vipw-shortwrite' of https://github.com/DankRank/util-linux

* 'vipw-shortwrite' of https://github.com/DankRank/util-linux:
  ul_copy_file: make defines for return values
  read_all: return 0 when EOF occurs after 0 bytes
  ul_copy_file: add test program
  ul_copy_file: handle EAGAIN and EINTR
  ul_copy_file: use all_read/all_write
  ul_copy_file: use BUFSSIZ for buffer size
  nologin: use ul_copy_file
  login: use ul_copy_file
  configure.ac: check for sendfile
  ul_copy_file: use sendfile
  vipw: move copyfile to the lib
  vipw: fix short write handling in copyfile

4 years agoflock: keep -E exit status more restrictive
Karel Zak [Mon, 9 Nov 2020 09:53:23 +0000 (10:53 +0100)] 
flock: keep -E exit status more restrictive

Addresses: https://github.com/karelzak/util-linux/issues/1180
Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agoul_copy_file: make defines for return values
Egor Chelak [Sat, 7 Nov 2020 00:19:56 +0000 (02:19 +0200)] 
ul_copy_file: make defines for return values

Suggested-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoread_all: return 0 when EOF occurs after 0 bytes
Egor Chelak [Fri, 6 Nov 2020 19:09:14 +0000 (21:09 +0200)] 
read_all: return 0 when EOF occurs after 0 bytes

Originally it would return -1 (without setting errno) if the fd was
already at EOF when you called read_all.

This is already fixed in sendfile_all.

Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoul_copy_file: add test program
Egor Chelak [Fri, 6 Nov 2020 19:08:12 +0000 (21:08 +0200)] 
ul_copy_file: add test program

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoul_copy_file: handle EAGAIN and EINTR
Egor Chelak [Fri, 6 Nov 2020 18:33:46 +0000 (20:33 +0200)] 
ul_copy_file: handle EAGAIN and EINTR

I did this by implementing a function called sendfile_all() similar to
read_all()/write_all().

The manpage for sendfile doesn't mention EINTR, but I decided to check
it anyway, just in case.

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoul_copy_file: use all_read/all_write
Egor Chelak [Fri, 6 Nov 2020 17:39:02 +0000 (19:39 +0200)] 
ul_copy_file: use all_read/all_write

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoul_copy_file: use BUFSSIZ for buffer size
Egor Chelak [Fri, 6 Nov 2020 16:35:26 +0000 (18:35 +0200)] 
ul_copy_file: use BUFSSIZ for buffer size

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agonologin: use ul_copy_file
Egor Chelak [Fri, 6 Nov 2020 10:43:18 +0000 (12:43 +0200)] 
nologin: use ul_copy_file

Suggested-by: Sami Kerola <kerolasa@iki.fi>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agologin: use ul_copy_file
Egor Chelak [Fri, 6 Nov 2020 10:37:24 +0000 (12:37 +0200)] 
login: use ul_copy_file

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoconfigure.ac: check for sendfile
Egor Chelak [Fri, 6 Nov 2020 10:15:36 +0000 (12:15 +0200)] 
configure.ac: check for sendfile

Do note that according to man sendfile, "Other UNIX systems implement
sendfile() with different semantics and prototypes."
If this is something we care about, a better check is needed.

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agoul_copy_file: use sendfile
Egor Chelak [Fri, 6 Nov 2020 09:15:11 +0000 (11:15 +0200)] 
ul_copy_file: use sendfile

Suggested-by: Karel Zak <kzak@redhat.com>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agovipw: move copyfile to the lib
Egor Chelak [Fri, 6 Nov 2020 07:45:18 +0000 (09:45 +0200)] 
vipw: move copyfile to the lib

Also, a bug in pw_tmpfile was fixed: copyfile used tmp_file to report
errors, but pw_tmpfile only assigned that variable _after_ calling
copyfile.

Suggested-by: Sami Kerola <kerolasa@iki.fi>
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Egor Chelak <egor.chelak@gmail.com>
4 years agolibuuid: check quality of random bytes
Samanta Navarro [Sun, 8 Nov 2020 11:47:18 +0000 (11:47 +0000)] 
libuuid: check quality of random bytes

If a libuuid application is unable to access /dev/random or /dev/urandom
then uuid generation by uuid_generate falls back to uuid_generate_time.
This could happen in chroot or container environments.

The function ul_random_get_bytes from lib/randutils.c uses getrandom if
it is available. This could either mean that the libuuid application
skips good random bytes because the character special files do not exist
or the application trusts in good random bytes just because these files
are accessible but not necessarily usable, e.g. limit of open file
descriptors reached, lack of data, kernel without getrandom, etc.

This commit modifies ul_random_get_bytes to return an integer which
indicates if random bytes are of good quality (0) or not (1). Callers
can decide based on this information if they want to discard the random
bytes. Only libuuid checks the return value. I decided to return 1
instead of -1 because -1 feels more like an error, but weak random bytes
can be totally fine.

Another issue is that getrandom sets errno to specific values only in
case of an error, i.e. with return value -1. Set errno to 0 explicitly
if getrandom succeeds so we do not enter the fallback routine for
ENOSYS by mistake. I do not think that this is likely to happen, but it
really depends on possible wrapper function supplied by a C library.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agolibblkid: allow a lot of mac partitions
Samanta Navarro [Sun, 8 Nov 2020 11:45:18 +0000 (11:45 +0000)] 
libblkid: allow a lot of mac partitions

If the map count is set to INT_MAX then the for loop does not stop
because its check is never false.

I have not found a correct upper limit. The other partition logics have
a maximum amount (exception is atari.c).

The loop itself wouldn't be endless. If the iteration reaches block 0
then the signature will be wrong. This means that map count = INT_MAX
case would fail even if such a setup would be correct on disk.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agolibblkid: fix memory leak in config parser
Samanta Navarro [Sun, 8 Nov 2020 11:44:55 +0000 (11:44 +0000)] 
libblkid: fix memory leak in config parser

Multiple occurrences of CACHE_FILE lead to memory leaks.
Also if last occurrence of CACHE_FILE is empty then cache file is not
set to NULL again.

An example /etc/blkid.conf could be:

CACHE_FILE=/tmp/cache1
CACHE_FILE=/tmp/cache2
CACHE_FILE=

I would expect that CACHE_FILE is empty but actually it is still
/tmp/cache2.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agosfdisk: fix backward --move-data
Karel Zak [Fri, 6 Nov 2020 10:38:51 +0000 (11:38 +0100)] 
sfdisk: fix backward --move-data

* fix final message where number of moved sectors overflow number of
  all moved sectors

* align last step size before we use it for backward mode source and
  destination offsets calculation

Addresses: https://github.com/karelzak/util-linux/issues/1176
Signed-off-by: Karel Zak <kzak@redhat.com>
4 years agoMerge branch 'whereis' of https://github.com/ferivoz/util-linux
Karel Zak [Fri, 6 Nov 2020 08:44:52 +0000 (09:44 +0100)] 
Merge branch 'whereis' of https://github.com/ferivoz/util-linux

* 'whereis' of https://github.com/ferivoz/util-linux:
  whereis: extend test case
  whereis: filter bin, man and src differently
  whereis: do not strip suffixes
  whereis: do not ignore trailing numbers
  whereis: add --disable-whereis to configure
  whereis: add lib32 directories
  whereis: support zst compressed man pages
  whereis: fix out of boundary read

4 years agoMerge branch 'sfdisk-json-dump' of https://github.com/xnox/util-linux
Karel Zak [Thu, 5 Nov 2020 10:37:51 +0000 (11:37 +0100)] 
Merge branch 'sfdisk-json-dump' of https://github.com/xnox/util-linux

4 years agosfdisk: correct --json --dump false exclusive
Dimitri John Ledkov [Wed, 4 Nov 2020 12:35:38 +0000 (12:35 +0000)] 
sfdisk: correct --json --dump false exclusive

`--json` implies `--dump`, thus `--json --dump` must be
allowed. `--list-free` is incompatible with `--dump`, and thus also
with `--json`. Currently `--json --dump` is prohibited, even though
`--list-free` is not specified at all.

Regression introduced in 03154d2cf25c1d5ce908da9e72d324004b8d5722.

Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
4 years agowhereis: extend test case
Samanta Navarro [Wed, 4 Nov 2020 11:39:00 +0000 (11:39 +0000)] 
whereis: extend test case

Previous commits are covered with these test cases.

Removed dependency on system layout.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: filter bin, man and src differently
Samanta Navarro [Wed, 4 Nov 2020 11:38:00 +0000 (11:38 +0000)] 
whereis: filter bin, man and src differently

Consider "s." prefixes for source code files only (even though I do not
know which VCS does that), compression suffixes for manual pages and
strict matching for executables.

Calling "whereis python3" is kind of okay to return python3.8 next to
python3, but python3.8-config is not the same tool as python3.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: do not strip suffixes
Samanta Navarro [Wed, 4 Nov 2020 11:37:00 +0000 (11:37 +0000)] 
whereis: do not strip suffixes

The whereis implementations of FreeBSD, macOS, NetBSD, and OpenBSD do
not strip suffixes. Although whereis is not a POSIX tool and has no
shared standard, even its manual page indicates that the supplied names
are command names.

Commands do not have a suffix on Linux systems.

Stripping suffixes actually leads to issues with tools like fsck.ext4,
since fsck.ext4 is not the same tool as fsck and definitely not the same
tool as fsck.minix.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: do not ignore trailing numbers
Samanta Navarro [Wed, 4 Nov 2020 11:36:00 +0000 (11:36 +0000)] 
whereis: do not ignore trailing numbers

The commands diff and diff3 are so distinct that their manual pages
should not be mixed in whereis output.

Theoretically this works for commands and binaries with links to each
other, e.g. gpg and gpg2, but if gpg is version 1 and gpg2 is version 2
then manual pages do not match either.

Also the while loop does not decrement "i" while incrementing "dp". The
effect of this is that the output of whereis depends on manual pages
being compressed or not.

The easiest solution is to not ignore trailing numbers.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: add --disable-whereis to configure
Samanta Navarro [Wed, 4 Nov 2020 11:35:00 +0000 (11:35 +0000)] 
whereis: add --disable-whereis to configure

Allow a build of util-linux without whereis.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: add lib32 directories
Samanta Navarro [Wed, 4 Nov 2020 11:34:00 +0000 (11:34 +0000)] 
whereis: add lib32 directories

These directories are sometimes used by Linux distributions.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: support zst compressed man pages
Samanta Navarro [Wed, 4 Nov 2020 11:33:00 +0000 (11:33 +0000)] 
whereis: support zst compressed man pages

Add zst as extension for manual pages. Current version of man-db
supports zst extension out of the box.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agowhereis: fix out of boundary read
Samanta Navarro [Wed, 4 Nov 2020 11:32:00 +0000 (11:32 +0000)] 
whereis: fix out of boundary read

If whereis encounters a short file name then an out of boundary
read can occur.

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
4 years agomisc: fix typos
Samanta Navarro [Wed, 4 Nov 2020 11:31:00 +0000 (11:31 +0000)] 
misc: fix typos

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>