diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef7d5e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/groff-1.22.4.tar.gz diff --git a/.groff.metadata b/.groff.metadata new file mode 100644 index 0000000..96660b7 --- /dev/null +++ b/.groff.metadata @@ -0,0 +1 @@ +2ce4ab107e3fab1414fef2c5b5312f562a4e4d35 SOURCES/groff-1.22.4.tar.gz diff --git a/SOURCES/0001-missing-groff-x11-info-message-when-gxditview-not-fo.patch b/SOURCES/0001-missing-groff-x11-info-message-when-gxditview-not-fo.patch new file mode 100644 index 0000000..1122820 --- /dev/null +++ b/SOURCES/0001-missing-groff-x11-info-message-when-gxditview-not-fo.patch @@ -0,0 +1,30 @@ +From 2f311bd175e78f889df099d5fcd945f357d6f037 Mon Sep 17 00:00:00 2001 +From: Jan Vcelak +Date: Tue, 1 Jan 2013 15:32:01 +0100 +Subject: [PATCH 1/4] missing groff-x11 info message when gxditview not found + +Adds info message that 'groff-x11' package might be missing when +executing 'groff -X' and 'gxditview' is not found. + +Resolves: #530788 +Signed-off-by: Jan Vcelak +--- + src/roff/groff/pipeline.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/roff/groff/pipeline.c b/src/roff/groff/pipeline.c +index 2e3236f..75268c2 100644 +--- a/src/roff/groff/pipeline.c ++++ b/src/roff/groff/pipeline.c +@@ -487,6 +487,8 @@ int run_pipeline(int ncommands, char ***commands, int no_pipe) + execvp(commands[i][0], commands[i]); + error("couldn't exec %1: %2", + commands[i][0], strerror(errno), (char *)0); ++ if (strcmp(commands[i][0], "gxditview") == 0) ++ fprintf(stderr, "You might be missing 'groff-x11' package.\n"); + fflush(stderr); /* just in case error() doesn't */ + _exit(EXEC_FAILED_EXIT_STATUS); + } +-- +2.21.1 + diff --git a/SOURCES/0002-load-site-font-and-site-tmac-from-etc-groff.patch b/SOURCES/0002-load-site-font-and-site-tmac-from-etc-groff.patch new file mode 100644 index 0000000..afa1044 --- /dev/null +++ b/SOURCES/0002-load-site-font-and-site-tmac-from-etc-groff.patch @@ -0,0 +1,43 @@ +From f83e0b188bb7bf4f38536ff8d08c2ca7384ac161 Mon Sep 17 00:00:00 2001 +From: Jan Vcelak +Date: Tue, 1 Jan 2013 15:33:45 +0100 +Subject: [PATCH 2/4] load site-font and site-tmac from /etc/groff + +Move site-font and site-tmac configuration from /usr/share/groff to +/etc/groff. That allows permanent custom changes. (Symlinking brought +a lot of problems with RPM. This is safer and cleaner.) + +Signed-off-by: Jan Vcelak +--- + Makefile.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 505e9c3..5331dd3 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -3573,7 +3573,7 @@ fontdir = $(datasubdir)/font + oldfontdir = $(datasubdir)/oldfont + + # `localfontdir' says where local fonts will be installed (as dev*/*). +-localfontdir = $(dataprogramdir)/site-font ++localfontdir = @sysconfdir@/groff/site-font + + # `legacyfontdir' is for compatibility with non-GNU troff. + legacyfontdir = /usr/lib/font +@@ -3585,10 +3585,10 @@ fontpath = $(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir) + tmacdir = $(datasubdir)/tmac + + # `systemtmacdir' says where to install platform-dependent macros. +-systemtmacdir = $(libprogramdir)/site-tmac ++systemtmacdir = @sysconfdir@/groff/site-tmac + + # `localtmacdir' says where local files will be installed. +-localtmacdir = $(dataprogramdir)/site-tmac ++localtmacdir = @sysconfdir@/groff/site-tmac + + # appresdir + # `appresdir' says where to install the application resource file for +-- +2.21.1 + diff --git a/SOURCES/0003-various-security-fixes.patch b/SOURCES/0003-various-security-fixes.patch new file mode 100644 index 0000000..1b83280 --- /dev/null +++ b/SOURCES/0003-various-security-fixes.patch @@ -0,0 +1,210 @@ +From f95bed4ad636f286ef9ff3f5b4330a10938fd064 Mon Sep 17 00:00:00 2001 +From: Jan Vcelak +Date: Tue, 4 Nov 2014 14:36:47 +0100 +Subject: [PATCH 3/4] various security fixes + +CVE-2009-5044 (#709413) +CVE-2009-5080 (#720058) +CVE-2009-5081 (#720057) + +Based on: http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/groff/groff-1.20.1-owl-tmp.diff?rev=1.2;content- type=text%2Fplain +Resolves: #709415, #720060 +Signed-off-by: Jan Vcelak +--- + contrib/eqn2graph/eqn2graph.sh | 2 ++ + contrib/gdiffmk/tests/runtests.sh | 5 +++-- + contrib/grap2graph/grap2graph.sh | 2 ++ + contrib/groffer/main_subs.pl | 10 +++++----- + contrib/groffer/roff2.pl | 2 +- + contrib/pdfmark/pdfroff.1.man | 5 +++-- + contrib/pic2graph/pic2graph.sh | 2 ++ + doc/fixinfo.sh | 5 +++-- + doc/groff.texi | 6 +++--- + gendef.sh | 10 +++------- + 10 files changed, 27 insertions(+), 22 deletions(-) + +diff --git a/contrib/eqn2graph/eqn2graph.sh b/contrib/eqn2graph/eqn2graph.sh +index 3e9c374..4e4f11e 100644 +--- a/contrib/eqn2graph/eqn2graph.sh ++++ b/contrib/eqn2graph/eqn2graph.sh +@@ -74,6 +74,8 @@ then + # but is supported by the stripped-down dash shell, for instance. + tmp="$d/eqn2graph$$-${RANDOM:-$PPID}" + (umask 077 && mkdir "$tmp") 2> /dev/null ++ ++ tmp= + fi + + if ! test -d "$tmp" +diff --git a/contrib/gdiffmk/tests/runtests.sh b/contrib/gdiffmk/tests/runtests.sh +index 0f7c3b6..f8aa874 100755 +--- a/contrib/gdiffmk/tests/runtests.sh ++++ b/contrib/gdiffmk/tests/runtests.sh +@@ -63,8 +63,9 @@ TestResult () { + fi + } + +-tmpfile=/tmp/$$ +-trap 'rm -f ${tmpfile}' 0 1 2 3 15 ++tmpfile="`mktemp -t gdiffmk-runtests.XXXXXXXXXX`" || exit ++trap 'rm -f -- "$tmpfile"' EXIT ++trap 'trap - EXIT; rm -f -- "$tmpfile"; exit 1' HUP INT QUIT TERM + + # Run tests. + +diff --git a/contrib/grap2graph/grap2graph.sh b/contrib/grap2graph/grap2graph.sh +index 29df25b..94c436b 100644 +--- a/contrib/grap2graph/grap2graph.sh ++++ b/contrib/grap2graph/grap2graph.sh +@@ -76,6 +76,8 @@ then + # but is supported by the stripped-down dash shell, for instance. + tmp="$d/grap2graph$$-${RANDOM:-$PPID}" + (umask 077 && mkdir "$tmp") 2> /dev/null ++ ++ tmp= + fi + + if ! test -d "$tmp" +diff --git a/contrib/groffer/main_subs.pl b/contrib/groffer/main_subs.pl +index a40e356..c8c4e53 100644 +--- a/contrib/groffer/main_subs.pl ++++ b/contrib/groffer/main_subs.pl +@@ -1244,7 +1244,7 @@ sub main_temp { + our $fh_stdin; + our $tmp_cat; + our $tmp_stdin; +- my $template = 'groffer_' . "$$" . '_XXXX'; ++ my $template = 'groffer_' . "$$" . '_XXXXXXXXXX'; + foreach ($ENV{'GROFF_TMPDIR'}, $ENV{'TMPDIR'}, $ENV{'TMP'}, $ENV{'TEMP'}, + $ENV{'TEMPDIR'}, File::Spec->catfile($ENV{'HOME'}, 'tmp')) { + if ($_ && -d $_ && -w $_) { +@@ -1276,12 +1276,12 @@ sub main_temp { + + # further argument: SUFFIX => '.sh' + if ($Debug{'KEEP'}) { +- ($fh_cat, $tmp_cat) = tempfile(',cat_XXXX', DIR => $tmpdir); +- ($fh_stdin, $tmp_stdin) = tempfile(',stdin_XXXX', DIR => $tmpdir); ++ ($fh_cat, $tmp_cat) = tempfile(',cat_XXXXXXXXXX', DIR => $tmpdir); ++ ($fh_stdin, $tmp_stdin) = tempfile(',stdin_XXXXXXXXXX', DIR => $tmpdir); + } else { +- ($fh_cat, $tmp_cat) = tempfile(',cat_XXXX', UNLINK => 1, ++ ($fh_cat, $tmp_cat) = tempfile(',cat_XXXXXXXXXX', UNLINK => 1, + DIR => $tmpdir); +- ($fh_stdin, $tmp_stdin) = tempfile(',stdin_XXXX', UNLINK => 1, ++ ($fh_stdin, $tmp_stdin) = tempfile(',stdin_XXXXXXXXXX', UNLINK => 1, + DIR => $tmpdir); + } + } # main_temp() +diff --git a/contrib/groffer/roff2.pl b/contrib/groffer/roff2.pl +index cf5c583..24af006 100755 +--- a/contrib/groffer/roff2.pl ++++ b/contrib/groffer/roff2.pl +@@ -123,7 +123,7 @@ if ($Has_Groffer) { + last; + } + } +- my $template = $Name . '_XXXX'; ++ my $template = $Name . '_XXXXXXXXXX'; + my ($fh, $stdin); + if ($tempdir) { + ($fh, $stdin) = tempfile($template, UNLINK => 1, DIR => $tempdir) || +diff --git a/contrib/pdfmark/pdfroff.1.man b/contrib/pdfmark/pdfroff.1.man +index 95d7807..aa6f079 100644 +--- a/contrib/pdfmark/pdfroff.1.man ++++ b/contrib/pdfmark/pdfroff.1.man +@@ -540,7 +540,7 @@ gs \-dBATCH \-dQUIET \-dNOPAUSE \-dSAFER \-sDEVICE=pdfwrite \e + .I GROFF_TMPDIR + Identifies the directory in which + .B pdfroff +-should create temporary files. ++should create a subdirectory for its temporary files. + . + If + .I \%GROFF_TMPDIR +@@ -553,7 +553,8 @@ and + .I TEMP + are considered in turn, as possible temporary file repositories. + If none of these are set, then temporary files are created +-in the current directory. ++in a subdirectory of ++.BR /tmp . + . + .TP + .I GROFF_GHOSTSCRIPT_INTERPRETER +diff --git a/contrib/pic2graph/pic2graph.sh b/contrib/pic2graph/pic2graph.sh +index b229914..2d6e77c 100644 +--- a/contrib/pic2graph/pic2graph.sh ++++ b/contrib/pic2graph/pic2graph.sh +@@ -89,6 +89,8 @@ then + # but is supported by the stripped-down dash shell, for instance. + tmp="$d/pic2graph$$-${RANDOM:-$PPID}" + (umask 077 && mkdir "$tmp") 2> /dev/null ++ ++ tmp= + fi + + if ! test -d "$tmp" +diff --git a/doc/fixinfo.sh b/doc/fixinfo.sh +index 47127f8..69bb74d 100644 +--- a/doc/fixinfo.sh ++++ b/doc/fixinfo.sh +@@ -24,8 +24,9 @@ + # + # 09-2014: no more problem with texinfo 5.0 or higher + # +-t=${TMPDIR-.}/gro$$.tmp +- ++t="`mktemp -t groff-fixinfo.XXXXXXXXXX`" || exit ++trap 'rm -f -- "$t"' EXIT ++trap 'trap - EXIT; rm -f -- "$t"; exit 1' HUP INT QUIT TERM + cat $1 | sed ' + 1 { + N +diff --git a/doc/groff.texi b/doc/groff.texi +index e7fe4aa..b4d01ed 100644 +--- a/doc/groff.texi ++++ b/doc/groff.texi +@@ -13857,9 +13857,9 @@ into a document: + @pindex perl + @Example + .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\ +- (localtime(time))[2,1,0]' > /tmp/x\n[$$] +-.so /tmp/x\n[$$] +-.sy rm /tmp/x\n[$$] ++ (localtime(time))[2,1,0]' > timefile\n[$$] ++.so timefile\n[$$] ++.sy rm timefile\n[$$] + \nH:\nM:\nS + @endExample + +diff --git a/gendef.sh b/gendef.sh +index be41dbe..4770bae 100644 +--- a/gendef.sh ++++ b/gendef.sh +@@ -33,11 +33,9 @@ do + #define $def" + done + +-# Use $TMPDIR if defined. Default to cwd, for non-Unix systems +-# which don't have /tmp on each drive (we are going to remove +-# the file before we exit anyway). Put the PID in the basename, +-# since the extension can only hold 3 characters on MS-DOS. +-t=${TMPDIR-.}/gro$$.tmp ++t="`mktemp -t groff-gendef.XXXXXXXXXX`" || exit ++trap 'rm -f -- "$t"' EXIT ++trap 'trap - EXIT; rm -f -- "$t"; exit 1' HUP INT QUIT TERM + + sed -e 's/=/ /' >$t < +Date: Tue, 4 Nov 2014 14:49:57 +0100 +Subject: [PATCH 4/4] don't use /usr/bin/env in shebang + +There might be an issue that the script is executed with unwanted version of + if that language is provided by enabled dynamic software collection. + +Resolves: #987069 +--- + contrib/chem/chem.pl | 2 +- + contrib/groffer/groffer.pl | 2 +- + contrib/groffer/roff2.pl | 2 +- + src/roff/grog/grog.pl | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/contrib/chem/chem.pl b/contrib/chem/chem.pl +index 883907b..57e0216 100755 +--- a/contrib/chem/chem.pl ++++ b/contrib/chem/chem.pl +@@ -1,4 +1,4 @@ +-#! /usr/bin/env perl ++#! /usr/bin/perl + + # chem - a groff preprocessor for producing chemical structure diagrams + +diff --git a/contrib/groffer/groffer.pl b/contrib/groffer/groffer.pl +index 697dacb..654f18e 100755 +--- a/contrib/groffer/groffer.pl ++++ b/contrib/groffer/groffer.pl +@@ -1,4 +1,4 @@ +-#! /usr/bin/env perl ++#! /usr/bin/perl + + # groffer - display groff files + +diff --git a/contrib/groffer/roff2.pl b/contrib/groffer/roff2.pl +index 24af006..35a560c 100755 +--- a/contrib/groffer/roff2.pl ++++ b/contrib/groffer/roff2.pl +@@ -1,4 +1,4 @@ +-#! /usr/bin/env perl ++#! /usr/bin/perl + + # roff2* - transform roff files into other formats + +diff --git a/src/roff/grog/grog.pl b/src/roff/grog/grog.pl +index f7fb8e4..1d5c3d8 100644 +--- a/src/roff/grog/grog.pl ++++ b/src/roff/grog/grog.pl +@@ -1,4 +1,4 @@ +-#! /usr/bin/env perl ++#! /usr/bin/perl + # grog - guess options for groff command + # Inspired by doctype script in Kernighan & Pike, Unix Programming + # Environment, pp 306-8. +-- +2.21.1 + diff --git a/SOURCES/0005-do-not-overwrite-docdir.patch b/SOURCES/0005-do-not-overwrite-docdir.patch new file mode 100644 index 0000000..f56d5fc --- /dev/null +++ b/SOURCES/0005-do-not-overwrite-docdir.patch @@ -0,0 +1,28 @@ +From ad194a6cadbb4718d238c85925ab8c646a3afdf7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Nikola=20Forr=C3=B3?= +Date: Fri, 6 Mar 2020 10:40:09 +0100 +Subject: [PATCH 5/5] do not overwrite docdir + +--- + Makefile.in | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 5331dd3..21522e3 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -3378,9 +3378,8 @@ doc_dist_target_ok = @doc_dist_target_ok@ + # `infodir' says where to install info files. + + # docdir +-# `docdir' says where to install documentation files. The default +-# location is ${datarootdir}/doc/${PACKAGE}, but we add the version +-docdir = $(datarootdir)/doc/${PACKAGE}-$(SHORT_VERSION) ++# `docdir' says where to install documentation files. ++docdir = @docdir@ + dvidir = @dvidir@ + exec_prefix = @exec_prefix@ + g = @g@ +-- +2.21.1 + diff --git a/SPECS/groff.spec b/SPECS/groff.spec new file mode 100644 index 0000000..5e6bf04 --- /dev/null +++ b/SPECS/groff.spec @@ -0,0 +1,1099 @@ +%{!?with_x:%global with_x 1} + +Summary: A document formatting system +Name: groff +Version: 1.22.4 +Release: 9%{?dist} +License: GPLv3+ and GFDL and BSD and MIT +URL: http://www.gnu.org/software/groff/ +Source: ftp://ftp.gnu.org/gnu/groff/groff-%{version}.tar.gz + +# resolves: #530788 +Patch0: 0001-missing-groff-x11-info-message-when-gxditview-not-fo.patch +Patch1: 0002-load-site-font-and-site-tmac-from-etc-groff.patch +# resolves: #709413, #720058, #720057 +Patch2: 0003-various-security-fixes.patch +# resolves: #987069 +Patch3: 0004-don-t-use-usr-bin-env-in-shebang.patch +# allow to specify custom docdir +Patch4: 0005-do-not-overwrite-docdir.patch + +Requires: coreutils, groff-base = %{version}-%{release} + +Recommends: psutils + +Requires(post): %{_sbindir}/update-alternatives +Requires(postun): %{_sbindir}/update-alternatives +Requires(preun): %{_sbindir}/update-alternatives + +BuildRequires: gcc, gcc-c++ +BuildRequires: bison, texinfo +BuildRequires: git, netpbm-progs, perl-generators, psutils, ghostscript + +Provides: nroff-i18n = %{version}-%{release} +Provides: bundled(gnulib) + +%global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^perl\\([^.]*\\.pl\\) + +%description +Groff is a document formatting system. Groff takes standard text and +formatting commands as input and produces formatted output. The +created documents can be shown on a display or printed on a printer. +Groff's formatting commands allow you to specify font type and size, +bold type, italic type, the number and size of columns on a page, and +more. + +Groff can also be used to format man pages. If you are going to use +groff with the X Window System, you will also need to install the +groff-x11 package. + +%package base +Summary: Parts of the groff formatting system required to display manual pages + +%description base +The groff-base package contains only necessary parts of groff formatting +system which are required to display manual pages, and the groff's default +display device (PostScript). + +%package perl +Summary: Parts of the groff formatting system that require Perl +Requires: groff-base = %{version}-%{release} + +%description perl +The groff-perl package contains the parts of the groff text processor +package that require Perl. These include the afmtodit (font processor +for creating PostScript font files), groffer (tool for displaying groff +files), grog (utility that can be used to automatically determine groff +command-line options), chem (groff preprocessor for producing chemical +structure diagrams), mmroff (reference preprocessor) and roff2dvi +roff2html roff2pdf roff2ps roff2text roff2x (roff code converters). + +%if %{with_x} +%package x11 +Summary: Parts of the groff formatting system that require X Windows System +Requires: groff-base = %{version}-%{release} +BuildRequires: libXaw-devel, libXmu-devel +BuildRequires: make +Provides: groff-gxditview = %{version}-%{release} +Obsoletes: groff-gxditview < 1.20.1 + +%description x11 +The groff-x11 package contains the parts of the groff text processor +package that require X Windows System. These include gxditview (display +groff intermediate output files on X Window System display) and +xtotroff (converts X font metrics into groff font metrics). +%endif + +%package doc +Summary: Documentation for groff document formatting system +BuildArch: noarch +Requires: groff = %{version}-%{release} + +%description doc +The groff-doc package includes additional documentation for groff +text processor package. It contains examples, documentation for PIC +language and documentation for creating PDF files. + +%prep +%setup -q +git init +git config user.email groff-owner@fedoraproject.org +git config user.name "groff owner" +git add . +git commit -n -m "release %{version}" +git am %{patches} + +for file in NEWS src/devices/grolbp/grolbp.1.man doc/webpage.ms \ + contrib/mm/*.man contrib/mom/examples/{README.txt,*.mom,mom.vim}; do + iconv -f iso-8859-1 -t utf-8 < "$file" > "${file}_" + mv "${file}_" "$file" +done + +%build +%configure \ + --docdir=%{_pkgdocdir} \ + --with-appresdir=%{_datadir}/X11/app-defaults \ + --with-grofferdir=%{_datadir}/%{name}/%{version}/groffer +%make_build + +%install +%make_install + +# rename files for alternative usage +mv %{buildroot}%{_bindir}/soelim %{buildroot}%{_bindir}/soelim.%{name} +touch %{buildroot}%{_bindir}/soelim +mv %{buildroot}%{_mandir}/man1/soelim.1 %{buildroot}%{_mandir}/man1/soelim.%{name}.1 +touch %{buildroot}%{_mandir}/man1/soelim.1 +mv %{buildroot}%{_mandir}/man7/roff.7 %{buildroot}%{_mandir}/man7/roff.%{name}.7 +touch %{buildroot}%{_mandir}/man7/roff.7 + +# some binaries need alias with 'g' or 'z' prefix +for file in g{nroff,troff,tbl,pic,eqn,neqn,refer,lookbib,indxbib,soelim} zsoelim; do + ln -s ${file#?} %{buildroot}%{_bindir}/${file} + ln -s ${file#?}.1.gz %{buildroot}%{_mandir}/man1/${file}.1.gz +done + +# fix absolute symlink to relative symlink +rm -f %{buildroot}%{_pkgdocdir}/pdf/mom-pdf.pdf +ln -s ../examples/mom/mom-pdf.pdf %{buildroot}%{_pkgdocdir}/pdf/mom-pdf.pdf + +# rename groff downloadable postscript fonts to meet Fedora Font Packaging guidelines, +# as these files are more PS instructions, than general-purpose fonts (bz #477394) +for file in $(find %{buildroot}%{_datadir}/%{name}/%{version}/font/devps -name "*.pfa"); do + mv ${file} ${file}_ +done +sed --in-place 's/\.pfa$/.pfa_/' %{buildroot}%{_datadir}/%{name}/%{version}/font/devps/download + +# remove unnecessary files +rm -f %{buildroot}%{_infodir}/dir + +# fix privileges +chmod 755 %{buildroot}%{_datadir}/groff/%{version}/groffer/version.sh +chmod 755 %{buildroot}%{_datadir}/groff/%{version}/font/devlj4/generate/special.awk + +# remove CreationDate from documentation +pushd %{buildroot}%{_pkgdocdir} + find -name "*.html" | xargs sed -i "/^