diff --git a/.gitignore b/.gitignore index f6cddbb..de5c14c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,10 +7,3 @@ /less-590.tar.gz /less-608.tar.gz /less-633.tar.gz -/less-643.tar.gz -/less-661.tar.gz -/less-668.tar.gz -/less-678.tar.gz -/less-679.tar.gz -/less-685.tar.gz -/lesspipe-2.20.tar.gz diff --git a/less-436-help.patch b/less-436-help.patch deleted file mode 100644 index d58498b..0000000 --- a/less-436-help.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up less-661/help.c.help less-661/help.c ---- less-661/help.c.help 2024-08-05 21:40:34.531327397 +0200 -+++ less-661/help.c 2024-08-05 21:40:34.533327418 +0200 -@@ -137,7 +137,7 @@ constant char helpdata[] = { - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n', - ' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','a','u','t','o','m','a','t','i','c','a','l','l','y',' ','a','l','l','o','c','a','t','e',' ','b','u','f','f','e','r','s',' ','f','o','r',' ','p','i','p','e','s','.','\n', --' ',' ','-','c',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','c','l','e','a','r','-','s','c','r','e','e','n','\n', -+' ',' ','-','c',' ',' ','-','C',' ',' ','.','.','.','.',' ',' ','-','-','c','l','e','a','r','-','s','c','r','e','e','n',' ','-','-','C','L','E','A','R','-','S','C','R','E','E','N','\n', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','b','y',' ','c','l','e','a','r','i','n','g',' ','r','a','t','h','e','r',' ','t','h','a','n',' ','s','c','r','o','l','l','i','n','g','.','\n', - ' ',' ','-','d',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','d','u','m','b','\n', - ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','u','m','b',' ','t','e','r','m','i','n','a','l','.','\n', -diff -up less-661/less.hlp.help less-661/less.hlp ---- less-661/less.hlp.help 2024-08-05 21:40:34.532327408 +0200 -+++ less-661/less.hlp 2024-08-05 21:40:34.533327418 +0200 -@@ -134,7 +134,7 @@ - Number of buffers. - -B ........ --auto-buffers - Don't automatically allocate buffers for pipes. -- -c ........ --clear-screen -+ -c -C .... --clear-screen --CLEAR-SCREEN - Repaint by clearing rather than scrolling. - -d ........ --dumb - Dumb terminal. diff --git a/less-458-less-filters-man.patch b/less-458-less-filters-man.patch index 90e7207..7de4415 100644 --- a/less-458-less-filters-man.patch +++ b/less-458-less-filters-man.patch @@ -20,5 +20,5 @@ diff -up less-466/less.nro.filters-man less-466/less.nro +~/.lessfilter tries to handle the file. + .SH "NATIONAL CHARACTER SETS" - There are five types of characters in the input file: + There are three types of characters in the input file: .IP "normal characters" diff --git a/less-475-fsync.patch b/less-475-fsync.patch index 7f7a189..c964b31 100644 --- a/less-475-fsync.patch +++ b/less-475-fsync.patch @@ -1,7 +1,15 @@ -diff -up less-678-build/less-678/configure.ac.fsync less-678-build/less-678/configure.ac ---- less-678-build/less-678/configure.ac.fsync 2025-05-01 22:42:03.000000000 +0200 -+++ less-678-build/less-678/configure.ac 2025-05-22 18:10:23.572796329 +0200 -@@ -210,6 +210,8 @@ AH_TEMPLATE([HAVE_TIME_T], +From 5396b6b77d0248678f716038dc747d6898acb0b3 Mon Sep 17 00:00:00 2001 +From: Stephen Gallagher +Date: Fri, 22 Jan 2021 09:49:13 -0500 +Subject: [PATCH] Test for fsync on tty + +Signed-off-by: Stephen Gallagher + +Modified for less 581.2 Filip Januš +diff -ur less-581.2/configure.ac less_fsync/configure.ac +--- less-581.2/configure.ac 2021-04-28 17:00:08.000000000 +0200 ++++ less_fsync/configure.ac 2021-05-06 10:59:07.560062397 +0200 +@@ -221,6 +221,8 @@ [Define HAVE_TIME_T if your system supports the "time_t" type.]) AH_TEMPLATE([HAVE_STRERROR], [Define HAVE_STRERROR if you have the strerror() function.]) @@ -10,16 +18,16 @@ diff -up less-678-build/less-678/configure.ac.fsync less-678-build/less-678/conf AH_TEMPLATE([HAVE_FILENO], [Define HAVE_FILENO if you have the fileno() macro.]) AH_TEMPLATE([HAVE_ERRNO], -@@ -259,7 +261,7 @@ AC_MSG_CHECKING(for ANSI function protot +@@ -274,7 +276,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int f(int a) { return a; }]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ANSI_PROTOS)],[AC_MSG_RESULT(no)]) # Checks for library functions. -AC_CHECK_FUNCS([fchmod fsync nanosleep poll popen realpath _setjmp sigprocmask sigsetmask snprintf stat strsignal system ttyname usleep]) +AC_CHECK_FUNCS([fchmod nanosleep poll popen realpath _setjmp sigprocmask sigsetmask snprintf stat strsignal system ttyname usleep]) - AC_CHECK_DECL(sigsetjmp, [AC_DEFINE(HAVE_SIGSETJMP)], [], [#include ]) # AC_CHECK_FUNCS may not work for inline functions, so test these separately. -@@ -302,6 +304,16 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + AC_MSG_CHECKING(for memcpy) +@@ -321,6 +323,16 @@ #include #endif]], [[static char *x; x = strerror(0);]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)],[AC_MSG_RESULT(no)]) diff --git a/less-590-CVE-2024-32487.patch b/less-590-CVE-2024-32487.patch new file mode 100644 index 0000000..61bbd0e --- /dev/null +++ b/less-590-CVE-2024-32487.patch @@ -0,0 +1,57 @@ +diff -up less-643/filename.c.CVE-2024-32487 less-643/filename.c +--- less-643/filename.c.CVE-2024-32487 2023-07-21 00:43:14.000000000 +0200 ++++ less-643/filename.c 2024-08-21 08:10:28.949475521 +0200 +@@ -134,6 +134,15 @@ static int metachar(char c) + } + + /* ++ * Must use quotes rather than escape char for this metachar? ++ */ ++static int must_quote(char c) ++{ ++ /* {{ Maybe the set of must_quote chars should be configurable? }} */ ++ return (c == '\n'); ++} ++ ++/* + * Insert a backslash before each metacharacter in a string. + */ + public char * shell_quote(char *s) +@@ -164,6 +173,9 @@ public char * shell_quote(char *s) + * doesn't support escape chars. Use quotes. + */ + use_quotes = 1; ++ } else if (must_quote(*p)) ++ { ++ len += 3; /* open quote + char + close quote */ + } else + { + /* +@@ -193,15 +205,22 @@ public char * shell_quote(char *s) + { + while (*s != '\0') + { +- if (metachar(*s)) ++ if (!metachar(*s)) + { +- /* +- * Add the escape char. +- */ ++ *p++ = *s++; ++ } else if (must_quote(*s)) ++ { ++ /* Surround the char with quotes. */ ++ *p++ = openquote; ++ *p++ = *s++; ++ *p++ = closequote; ++ } else ++ { ++ /* Insert an escape char before the char. */ + strcpy(p, esc); + p += esclen; ++ *p++ = *s++; + } +- *p++ = *s++; + } + *p = '\0'; + } diff --git a/less-633-control-char-in-filename-regrfix.patch b/less-633-control-char-in-filename-regrfix.patch new file mode 100644 index 0000000..d0c7fec --- /dev/null +++ b/less-633-control-char-in-filename-regrfix.patch @@ -0,0 +1,73 @@ +diff -up less-633/prompt.c.cve2024_32487regrfix less-633/prompt.c +--- less-633/prompt.c.cve2024_32487regrfix 2024-07-27 00:32:28.945249829 +0200 ++++ less-633/prompt.c 2024-07-27 00:34:36.456908956 +0200 +@@ -79,23 +79,44 @@ public void init_prompt(void) + + /* + * Append a string to the end of the message. +- */ +-static void ap_str(char *s) +-{ +- constant char *es = s + strlen(s); +- while (*s != '\0') +- { +- LWCHAR ch = step_char(&s, +1, es); +- constant char *ps = utf_mode ? prutfchar(ch) : prchar(ch); +- size_t plen = strlen(ps); +- if (mp + plen >= message + PROMPT_SIZE) +- break; +- strcpy(mp, ps); ++ * nprt means the character *may* be nonprintable ++ * and should be converted to printable form. ++ */ ++static void ap_estr(char *s, lbool nprt) ++ { ++ constant char *es = s + strlen(s); ++ while (*s != '\0') ++ { ++ LWCHAR ch = step_char(&s, +1, es); ++ constant char *ps; ++ char ubuf[MAX_UTF_CHAR_LEN+1]; ++ size_t plen; ++ ++ if (nprt) ++ { ++ ps = utf_mode ? prutfchar(ch) : prchar(ch); ++ } else ++ { ++ char *up = ubuf; ++ put_wchar(&up, ch); ++ *up = '\0'; ++ ps = ubuf; ++ } ++ plen = strlen(ps); ++ if (mp + plen >= message + PROMPT_SIZE) ++ break; ++ strcpy(mp, ps); + mp += plen; + } + *mp = '\0'; + } + ++static void ap_str(char *s) ++{ ++ ap_estr(s, FALSE); ++} ++ ++ + /* + * Append a character to the end of the message. + */ +@@ -289,10 +310,10 @@ static void protochar(int c, int where, + break; + #endif + case 'f': /* File name */ +- ap_str(get_filename(curr_ifile)); ++ ap_estr(get_filename(curr_ifile), TRUE); + break; + case 'F': /* Last component of file name */ +- ap_str(last_component(get_filename(curr_ifile))); ++ ap_estr(last_component(get_filename(curr_ifile)), TRUE); + break; + case 'g': /* Shell-escaped file name */ + s = shell_quote(get_filename(curr_ifile)); diff --git a/less-654-control-char-in-filename-prereq.patch b/less-654-control-char-in-filename-prereq.patch new file mode 100644 index 0000000..c0b2a8a --- /dev/null +++ b/less-654-control-char-in-filename-prereq.patch @@ -0,0 +1,17 @@ +diff -up less-633/prompt.c.cve_prereq less-633/prompt.c +--- less-633/prompt.c.cve_prereq 2024-07-27 00:44:40.347267609 +0200 ++++ less-633/prompt.c 2024-07-27 00:45:26.575783719 +0200 +@@ -36,6 +36,13 @@ extern char *editor; + extern char *editproto; + #endif + ++typedef enum lbool { LFALSE, LTRUE } lbool; ++ ++#undef TRUE ++#define TRUE LTRUE ++#undef FALSE ++#define FALSE LFALSE ++ + /* + * Prototypes for the three flavors of prompts. + * These strings are expanded by pr_expand(). diff --git a/less-654-control-char-in-filename.patch b/less-654-control-char-in-filename.patch new file mode 100644 index 0000000..b7412ca --- /dev/null +++ b/less-654-control-char-in-filename.patch @@ -0,0 +1,75 @@ +diff -up less-633/output.c.cve2024_32487fix less-633/output.c +--- less-633/output.c.cve2024_32487fix 2023-05-03 20:43:01.000000000 +0200 ++++ less-633/output.c 2024-07-27 00:28:05.420820950 +0200 +@@ -31,6 +31,7 @@ extern int so_s_width, so_e_width; + extern int screen_trashed; + extern int is_tty; + extern int oldbot; ++extern int utf_mode; + extern char intr_char; + + #if MSDOS_COMPILER==WIN32C || MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC +@@ -537,6 +538,7 @@ IPRINT_FUNC(iprint_linenum, LINENUM, lin + public int less_printf(char *fmt, PARG *parg) + { + char *s; ++ constant char *es; + int col; + + col = 0; +@@ -553,11 +555,17 @@ public int less_printf(char *fmt, PARG * + { + case 's': + s = parg->p_string; ++ es = s + strlen(s); + parg++; + while (*s != '\0') + { +- putchr(*s++); +- col++; ++ LWCHAR ch = step_char(&s, +1, es); ++ constant char *ps = utf_mode ? prutfchar(ch) : prchar(ch); ++ while (*ps != '\0') ++ { ++ putchr(*ps++); ++ col++; ++ } + } + break; + case 'd': +diff -up less-633/prompt.c.cve2024_32487fix less-633/prompt.c +--- less-633/prompt.c.cve2024_32487fix 2024-07-27 00:26:13.217361006 +0200 ++++ less-633/prompt.c 2024-07-27 00:31:37.965586499 +0200 +@@ -30,6 +30,7 @@ extern int sc_height; + extern int jump_sline; + extern int less_is_more; + extern int header_lines; ++extern int utf_mode; + extern IFILE curr_ifile; + #if EDITOR + extern char *editor; +@@ -81,13 +82,17 @@ public void init_prompt(void) + */ + static void ap_str(char *s) + { +- int len; +- +- len = (int) strlen(s); +- if (mp + len >= message + PROMPT_SIZE) +- len = (int) (message + PROMPT_SIZE - mp - 1); +- strncpy(mp, s, len); +- mp += len; ++ constant char *es = s + strlen(s); ++ while (*s != '\0') ++ { ++ LWCHAR ch = step_char(&s, +1, es); ++ constant char *ps = utf_mode ? prutfchar(ch) : prchar(ch); ++ size_t plen = strlen(ps); ++ if (mp + plen >= message + PROMPT_SIZE) ++ break; ++ strcpy(mp, ps); ++ mp += plen; ++ } + *mp = '\0'; + } + diff --git a/less.spec b/less.spec index 51d2494..dc79be6 100644 --- a/less.spec +++ b/less.spec @@ -1,11 +1,10 @@ Summary: A text file browser similar to more, but better Name: less -Version: 685 -Release: 6%{?dist} -License: GPL-3.0-only and BSD-2-Clause +Version: 633 +Release: 4%{?dist} +License: GPLv3+ or BSD Source0: https://www.greenwoodsoftware.com/less/%{name}-%{version}.tar.gz -%global lesspipe_version 2.20 -Source1: https://github.com/wofr06/lesspipe/archive/refs/tags/v%{lesspipe_version}.tar.gz#/lesspipe-%{lesspipe_version}.tar.gz +Source1: lesspipe.sh Source2: less.sh Source3: less.csh Patch4: less-394-time.patch @@ -15,18 +14,16 @@ Patch8: less-458-lessecho-usage.patch Patch9: less-458-less-filters-man.patch Patch10: less-458-lesskey-usage.patch Patch11: less-458-old-bot-in-help.patch -Patch13: less-436-help.patch +# 3x from upstream, for less < 654, fix for filenames containing control chars +Patch12: less-654-control-char-in-filename-prereq.patch +Patch13: less-654-control-char-in-filename.patch +Patch14: less-633-control-char-in-filename-regrfix.patch +# from upstream, for less < 654, rhbz#2274980 +Patch15: less-590-CVE-2024-32487.patch URL: https://www.greenwoodsoftware.com/less/ BuildRequires: ncurses-devel BuildRequires: autoconf automake libtool BuildRequires: make -# for lesspipe make test -BuildRequires: perl-Archive-Tar -# for lesspipe -Recommends: (less-color = %{version}-%{release} if perl-interpreter) -Recommends: unzip -Recommends: html2text -Recommends: 7zip %description The less utility is a text file browser that resembles more, but has @@ -38,26 +35,19 @@ example, vi). You should install less because it is a basic utility for viewing text files, and you'll use it frequently. -%package color -Summary: Colorizers for less -Requires: %{name} = %{version}-%{release} -Conflicts: less < 685-5 - -%description color -Syntax highlighting modes for the less pager. - - %prep -%setup -q -a 1 +%setup -q %patch -P 4 -p1 -b .time -%patch -P 5 -p2 -b .fsync +%patch -P 5 -p1 -b .fsync %patch -P 6 -p1 -b .manpage-add-old-bot-option %patch -P 8 -p1 -b .lessecho-usage %patch -P 9 -p1 -b .less-filters-man %patch -P 10 -p1 -b .lesskey-usage %patch -P 11 -p1 -b .old-bot -%patch -P 13 -p1 -b .help - +%patch -P 12 -p1 -b .ctrl-char-fname-prereq +%patch -P 13 -p1 -b .ctrl-char-fname +%patch -P 14 -p1 -b .ctrl-char-fname-regrfix +%patch -P 15 -p1 -b .CVE-2024-32487 %build rm -f ./configure @@ -65,102 +55,26 @@ autoreconf -fiv %configure %make_build CFLAGS="%{optflags} -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64" -pushd lesspipe-%{lesspipe_version} -#fix shebangs -sed -i "s|^#!/usr/bin/env bash|^#!/usr/bin/bash|" lesspipe.sh - -./configure --prefix=%{_prefix} -%make_build -popd - %install %make_install mkdir -p $RPM_BUILD_ROOT/etc/profile.d +install -p %{SOURCE1} $RPM_BUILD_ROOT%{_bindir} install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT/etc/profile.d install -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT/etc/profile.d -pushd lesspipe-%{lesspipe_version} -%make_install -rm -f $RPM_BUILD_ROOT/usr/share/bash-completion/less_completion -popd - -%check -pushd lesspipe-%{lesspipe_version} -# we dont have all required components to pass full test, but it is still -# useful to run for debug purposes -make test ||: -popd - %files %doc README NEWS INSTALL %license LICENSE COPYING /etc/profile.d/* -%{_bindir}/less -%{_bindir}/lesscomplete -%{_bindir}/lessecho -%{_bindir}/lesskey -%{_bindir}/lesspipe.sh +%{_bindir}/* %{_mandir}/man1/* -%files color -%{_bindir}/archive_color -%{_bindir}/code2color -%{_bindir}/sxw2txt -%{_bindir}/vimcolor - %changelog -* Mon Nov 24 2025 Michal Hlavinka - 685-6 -- reintroduce use more feature rich lesspipe filter, but separate - perl dependent colorizer into subpackage, credits Yaakov Selkowitz +* Wed Aug 21 2024 Michal Hlavinka - 643-6 +- fix CVE-2024-32487 - less with LESSOPEN mishandles \n in paths (#2274981) -* Fri Nov 14 2025 Adam Williamson - 685-5 -- Revert new lesspipe filter due to hard perl dependency - -* Wed Nov 12 2025 Michal Hlavinka - 685-4 -- use more feature rich lesspipe filter (#2308285) - -* Wed Oct 22 2025 Michal Hlavinka - 685-1 -- updated to 685 (#2404089) - -* Tue Sep 02 2025 Michal Hlavinka - 679-4 -- add man page for lesspipe.sh (rhbz#2376159) - -* Thu Jul 24 2025 Fedora Release Engineering - 679-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Mon Jun 23 2025 Michal Hlavinka - 679-1 -- updated to 679 - -* Thu May 22 2025 Michal Hlavinka - 678-1 -- updated to 678 (#2367012) - -* Fri Jan 17 2025 Fedora Release Engineering - 668-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Oct 18 2024 Michal Hlavinka - 668-1 -- updated to 668 (#2319532) - -* Mon Aug 12 2024 Michal Hlavinka - 661-2 -- fix post-v590 regression causing reading only part of pipe when stdin is null (upstream#558) - -* Fri Jul 26 2024 Michal Hlavinka - 661-1 -- updated to 661(2294840) - -* Thu Jul 18 2024 Fedora Release Engineering - 643-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Tue Feb 06 2024 Matej Mužila - 643-4 -- migrated to SPDX license - -* Thu Jan 25 2024 Fedora Release Engineering - 643-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sun Jan 21 2024 Fedora Release Engineering - 643-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Tue Sep 05 2023 Matej Mužila - 643-1 -- Update to new upstream release -- Resolves: #2231663 +* Sun Jul 28 2024 Michal Hlavinka - 633-3 +- fix incorrect display when filename contains control chars * Thu Jul 20 2023 Fedora Release Engineering - 633-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild diff --git a/lesspipe.sh b/lesspipe.sh new file mode 100755 index 0000000..f2df6a1 --- /dev/null +++ b/lesspipe.sh @@ -0,0 +1,128 @@ +#!/bin/sh +# +# To use this filter with less, define LESSOPEN: +# export LESSOPEN="|/usr/bin/lesspipe.sh %s" +# +# The script should return zero if the output was valid and non-zero +# otherwise, so less could detect even a valid empty output +# (for example while uncompressing gzipped empty file). +# For backward-compatibility, this is not required by default. To turn +# this functionality there should be another vertical bar (|) straight +# after the first one in the LESSOPEN environment variable: +# export LESSOPEN="||/usr/bin/lesspipe.sh %s" + +if [ ! -e "$1" ] ; then + exit 1 +fi + +if [ -d "$1" ] ; then + ls -alF -- "$1" + exit $? +fi + +exec 2>/dev/null + +# Allow for user defined filters +if [ -x ~/.lessfilter ]; then + ~/.lessfilter "$1" + if [ $? -eq 0 ]; then + exit 0 + fi +fi + +manfilter () +{ + if test -x /usr/bin/man ; then + # See rhbz#1241543 for more info. Well, actually we firstly + # used 'man -l', then we switched to groff, and then we again + # switched back to 'man -l'. + /usr/bin/man -P /usr/bin/cat -l "$1" + elif test -x /usr/bin/groff; then + # This is from pre-rhbz#1241543-time. + groff -Tascii -mandoc "$1" | cat -s + else + echo "WARNING:" + echo "WARNING: to better show manual pages, install 'man-db' package" + echo "WARNING:" + cat "$1" + fi +} + +export MAN_KEEP_FORMATTING=1 + +case "$1" in +*.[1-9n].bz2|*.[1-9]x.bz2|*.man.bz2|*.[1-9n].[glx]z|*.[1-9]x.[glx]z|*.man.[glx]z|*.[1-9n].lzma|*.[1-9]x.lzma|*.man.lzma|*.[1-9n].zst|*.[1-9]x.zst|*.man.zst|*.[1-9n].br|*.[1-9]x.br|*.man.br) + case "$1" in + *.gz) DECOMPRESSOR="gzip -dc" ;; + *.bz2) DECOMPRESSOR="bzip2 -dc" ;; + *.lz) DECOMPRESSOR="lzip -dc" ;; + *.zst) DECOMPRESSOR="zstd -dcq" ;; + *.br) DECOMPRESSOR="brotli -dc" ;; + *.xz|*.lzma) DECOMPRESSOR="xz -dc" ;; + esac + if [ -n "$DECOMPRESSOR" ] && $DECOMPRESSOR -- "$1" | file - | grep -q troff; then + $DECOMPRESSOR -- "$1" | manfilter - + exit $? + fi ;;& +*.[1-9n]|*.[1-9]x|*.man) + if file "$1" | grep -q troff; then + manfilter "$1" + exit $? + fi ;;& +*.tar) tar tvvf "$1"; exit $? ;; +*.tgz|*.tar.gz|*.tar.[zZ]) tar tzvvf "$1"; exit $? ;; +*.tar.xz) tar Jtvvf "$1"; exit $? ;; +*.xz|*.lzma) xz -dc -- "$1"; exit $? ;; +*.tar.lz) tar --lzip -tvvf "$1"; exit $? ;; +*.lz) lzip -dc -- "$1"; exit $? ;; +*.tar.zst) tar --zstd -tvvf "$1"; exit $? ;; +*.zst) zstd -dcq -- "$1"; exit $? ;; +*.tar.br) brotli -dc -- "$1" | tar tvvf -; exit $? ;; +*.br) brotli -dc -- "$1"; exit $? ;; +*.tar.bz2|*.tbz2) bzip2 -dc -- "$1" | tar tvvf -; exit $? ;; +*.[zZ]|*.gz) gzip -dc -- "$1"; exit $? ;; +*.bz2) bzip2 -dc -- "$1"; exit $? ;; +*.zip|*.jar|*.nbm) zipinfo -- "$1"; exit $? ;; +# --nomanifest -> rhbz#1450277 +*.rpm) rpm -qpivl --changelog --nomanifest -- "$1"; exit $? ;; +*.cpi|*.cpio) cpio -itv < "$1"; exit $? ;; +*.gpg) + if [ -x /usr/bin/gpg2 ]; then + gpg2 -d "$1" + exit $? + elif [ -x /usr/bin/gpg ]; then + gpg -d "$1" + exit $? + else + echo "No GnuPG available." + echo "Install gnupg2 or gnupg to show encrypted files." + exit 1 + fi ;; +*.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif) + if [ -x /usr/bin/identify ]; then + identify "$1" + exit $? + elif [ -x /usr/bin/gm ]; then + gm identify "$1" + exit $? + else + echo "No identify available" + echo "Install ImageMagick or GraphicsMagick to browse images" + exit 1 + fi ;; +*) + if [ -x /usr/bin/file ] && [ -x /usr/bin/iconv ] && [ -x /usr/bin/cut ]; then + case `file -b "$1"` in + *UTF-16*) conv='UTF-16' ;; + *UTF-32*) conv='UTF-32' ;; + esac + if [ -n "$conv" ]; then + env=`echo $LANG | cut -d. -f2` + if [ -n "$env" -a "$conv" != "$env" ]; then + iconv -f $conv -t $env "$1" + exit $? + fi + fi + fi + exit 1 +esac diff --git a/sources b/sources index 703a9df..eb34862 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (less-685.tar.gz) = aff745f1816e0f996fbdbc33ecae0726cf0d842efc227937ff8c32e734c8b5be4c611ffbb27e5e038b4d95280c95ca60c53af1a47cf419cb06e5fab543c231f3 -SHA512 (lesspipe-2.20.tar.gz) = bfeba1b921959e8cde8ce8bcc75765598cefd2cc705aa5b6417592fdbdb0c43bd3efb0d4379a0514f0da86806988ee95219539974c7af3319595d9b03aac550e +SHA512 (less-633.tar.gz) = a29aaf72abca07fb29d12f218bbd422a39e3898b3d53e8dbd5265ae47ecf68b88c3381aa3a9bf7caa8db1e2d8e2c138b333f0d69fddd4cf014e39118c53f7fb1