Compare commits

..

2 commits

Author SHA1 Message Date
Michal Hlavinka
a7354ede12 correct the previous fix 2024-08-21 08:17:33 +02:00
Michal Hlavinka
29933227f4 fix CVE-2024-32487 - less with LESSOPEN mishandles \n in paths (#2274981) 2024-07-28 08:57:40 +02:00
11 changed files with 390 additions and 133 deletions

6
.gitignore vendored
View file

@ -8,9 +8,3 @@
/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

View file

@ -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.

View file

@ -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"

View file

@ -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 <sgallagh@redhat.com>
Date: Fri, 22 Jan 2021 09:49:13 -0500
Subject: [PATCH] Test for fsync on tty
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
Modified for less 581.2 Filip Januš <fjanus@redhat.com>
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 <setjmp.h>])
# 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 <errno.h>
#endif]], [[static char *x; x = strerror(0);]])],[AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)],[AC_MSG_RESULT(no)])

View file

@ -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';
}

View file

@ -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));

View file

@ -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().

View file

@ -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';
}

116
less.spec
View file

@ -1,11 +1,10 @@
Summary: A text file browser similar to more, but better
Name: less
Version: 685
Version: 643
Release: 6%{?dist}
License: GPL-3.0-only and BSD-2-Clause
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,19 @@ 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 +38,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,89 +58,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 <mhlavink@redhat.com> - 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 <mhlavink@redhat.com> - 643-6
- fix CVE-2024-32487 - less with LESSOPEN mishandles \n in paths (#2274981)
* Fri Nov 14 2025 Adam Williamson <awilliam@redhat.com> - 685-5
- Revert new lesspipe filter due to hard perl dependency
* Wed Nov 12 2025 Michal Hlavinka <mhlavink@redhat.com> - 685-4
- use more feature rich lesspipe filter (#2308285)
* Wed Oct 22 2025 Michal Hlavinka <mhlavink@redhat.com> - 685-1
- updated to 685 (#2404089)
* Tue Sep 02 2025 Michal Hlavinka <mhlavink@redhat.com> - 679-4
- add man page for lesspipe.sh (rhbz#2376159)
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 679-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Jun 23 2025 Michal Hlavinka <mhlavink@redhat.com> - 679-1
- updated to 679
* Thu May 22 2025 Michal Hlavinka <mhlavink@redhat.com> - 678-1
- updated to 678 (#2367012)
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 668-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Fri Oct 18 2024 Michal Hlavinka <mhlavink@redhat.com> - 668-1
- updated to 668 (#2319532)
* Mon Aug 12 2024 Michal Hlavinka <mhlavink@redhat.com> - 661-2
- fix post-v590 regression causing reading only part of pipe when stdin is null (upstream#558)
* Fri Jul 26 2024 Michal Hlavinka <mhlavink@redhat.com> - 661-1
- updated to 661(2294840)
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 643-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jul 27 2024 Michal Hlavinka <mhlavink@redhat.com> - 643-5
- fix incorrect display when filename contains control chars
* Tue Feb 06 2024 Matej Mužila <mmuzila@redhat.com> - 643-4
- migrated to SPDX license

128
lesspipe.sh Executable file
View file

@ -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

View file

@ -1,2 +1 @@
SHA512 (less-685.tar.gz) = aff745f1816e0f996fbdbc33ecae0726cf0d842efc227937ff8c32e734c8b5be4c611ffbb27e5e038b4d95280c95ca60c53af1a47cf419cb06e5fab543c231f3
SHA512 (lesspipe-2.20.tar.gz) = bfeba1b921959e8cde8ce8bcc75765598cefd2cc705aa5b6417592fdbdb0c43bd3efb0d4379a0514f0da86806988ee95219539974c7af3319595d9b03aac550e
SHA512 (less-643.tar.gz) = 6a324ac54e22429ac652dc303bc1fe48933555d1cbf8ad7ecf345940910c014fef9551a3219743cfb7115e356b5841ae97d6ce62e7a1ba1e3300d243efca34d9