commit:     d1f48c31817d15862ca180e32f4449117c49e87a
Author:     Christian Affolter <c.affolter <AT> purplehaze <DOT> ch>
AuthorDate: Sun Jan 13 15:39:08 2019 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Tue Jan  5 08:39:13 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d1f48c31

www-apps/webdavcgi: Version bump to 1.1.2

Add fix unescaped braces patch.
This patch fixes the unescaped brace regex warnings, which break the
usage of WebDAV CGI with Perl >= 5.26 as reported by Alexander Weber
within #674772 and #658470.

It is based on:
https://github.com/DanRohde/webdavcgi/commit/04e79b7ecbaf3aae5ab813cd4fc0a009c72b1580

Apart from the version bump, the following enhancements were made:
* Use EAPI 7
* Updated home page and external links of the WebDAV CGI project.
* Depend on dev-perl/IO-Compress-Brotli, which is required for 1.1.2.
* Fix unescaped braces (addresses #674772 and #658470)
* Add note regarding systemd and setuid/setgid webdavwrapper
* Using EROOT instead of ROOT for displaying installation paths
* Removed no longer used eutils dependency

Closes: https://bugs.gentoo.org/658470
Closes: https://bugs.gentoo.org/674772
Signed-off-by: Christian Affolter <c.affolter <AT> purplehaze.ch>
Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 www-apps/webdavcgi/Manifest                        |   1 +
 .../files/apache-webdavcgi-1.1-example.conf        |   7 +-
 .../webdavcgi-1.1.2-fix-unescaped-braces.patch     |  98 ++++++++++
 www-apps/webdavcgi/webdavcgi-1.1.2.ebuild          | 206 +++++++++++++++++++++
 4 files changed, 309 insertions(+), 3 deletions(-)

diff --git a/www-apps/webdavcgi/Manifest b/www-apps/webdavcgi/Manifest
index 107cebddc77..34ddeba43c4 100644
--- a/www-apps/webdavcgi/Manifest
+++ b/www-apps/webdavcgi/Manifest
@@ -1 +1,2 @@
 DIST webdavcgi-1.1.1.tar.bz2 11623234 BLAKE2B 
a5a2b67f2666ce4180e5ed145045b8552e6e988967d99bad518d72a67a417ce600619b11af9171aa291bb4b98ec0b0c8c3ce56511d65c4e8b8c92932e8da418f
 SHA512 
660b3e54d72c5b96c1fb329d8e0838b1dbf68e1671af3880f7e096bfdfe559909cf3e1e3069fe4877e0ffbd67d24dc4a38c3db8baaae6d62db05bde31cea789f
+DIST webdavcgi-1.1.2.tar.gz 16844485 BLAKE2B 
1a9f1b0b5b4520badaca1992ba51760a6a1b250edeb3debe6bdcb962fb43c3c660a837882bccfa645a466e967c726569113665ff3a3c0f4db88e573299a30582
 SHA512 
cddd8461bfb16b5d50a9a2bbe270d3b09e973e74d07b2f54a16473c48dbaaab7d561becf223405a03ef6ce45502bf9684e41dc8e9977b0af788d700693946826

diff --git a/www-apps/webdavcgi/files/apache-webdavcgi-1.1-example.conf 
b/www-apps/webdavcgi/files/apache-webdavcgi-1.1-example.conf
index 4ee926fbd7c..900e0ba5a2c 100644
--- a/www-apps/webdavcgi/files/apache-webdavcgi-1.1-example.conf
+++ b/www-apps/webdavcgi/files/apache-webdavcgi-1.1-example.conf
@@ -30,9 +30,10 @@
 #
 # - The WEBDAVCONF environment variable has to point to your configuration
 #
-# For further informations and other configuration possibilities consult the
-# WebDAV CGI documentation which is located at http://webdavcgi.sourceforge.net
-# and the Apache HTTP server documentation at https://httpd.apache.org/docs/
+# For further information and other configuration possibilities consult the
+# WebDAV CGI documentation and Apache HTTP server documentation:
+# * https://danrohde.github.io/webdavcgi/doc.html
+# * https://httpd.apache.org/docs/
 #
     ScriptAlias /webdavcgi "/usr/libexec/webdavcgi-1.1/cgi-bin/webdavwrapper"
     ScriptAlias /webdav/logout "/usr/libexec/webdavcgi-1.1/cgi-bin/logout"

diff --git 
a/www-apps/webdavcgi/files/webdavcgi-1.1.2-fix-unescaped-braces.patch 
b/www-apps/webdavcgi/files/webdavcgi-1.1.2-fix-unescaped-braces.patch
new file mode 100644
index 00000000000..3b3262bfd08
--- /dev/null
+++ b/www-apps/webdavcgi/files/webdavcgi-1.1.2-fix-unescaped-braces.patch
@@ -0,0 +1,98 @@
+diff --git a/lib/perl/Requests/WebDAVRequest.pm 
b/lib/perl/Requests/WebDAVRequest.pm
+index 8d5b89e6..2b6ea4d9 100644
+--- a/lib/perl/Requests/WebDAVRequest.pm
++++ b/lib/perl/Requests/WebDAVRequest.pm
+@@ -134,7 +134,7 @@ sub get_prop_stat {
+     $fn .= $is_dir && $fn !~ /\/$/xms ? q{/} : q{};
+     foreach my $prop ( @{$props} ) {
+         my ( $xmlnsuri, $propname ) = ( 'DAV:', $prop );
+-        if ( $prop =~ /^{([^}]*)}(.*)$/xms ) {
++        if ( $prop =~ /^[{]([^}]*)[}](.*)$/xms ) {
+             ( $xmlnsuri, $propname ) = ( $1, $2 );
+         }
+ 
+diff --git a/lib/perl/WebDAV/Properties.pm b/lib/perl/WebDAV/Properties.pm
+index 2baf319b..a9ee2d73 100644
+--- a/lib/perl/WebDAV/Properties.pm
++++ b/lib/perl/WebDAV/Properties.pm
+@@ -139,7 +139,7 @@ sub set_property {
+     my $rfn = $self->resolve($fn);
+     my $ru  = $REQUEST_URI;
+     my ( $ns, $pn );
+-    if ( $propname =~ /^{([^}]+)}(.*)$/xms ) {
++    if ( $propname =~ /^[{]([^}]+)[}](.*)$/xms ) {
+         ( $ns, $pn ) = ( $1, $2 );
+     }
+ 
+@@ -186,7 +186,7 @@ sub set_property {
+         if (   $parref
+             && ref($parref) eq 'HASH'
+             && ( !${$parref}{xmlns} || ${$parref}{xmlns} eq q{} )
+-            && $n !~ /^{[^}]*}/xms )
++            && $n !~ /^[{][^}]*[}]/xms )
+         {
+             $n = '{}' . $n;
+         }
+diff --git a/lib/perl/WebDAV/XMLHelper.pm b/lib/perl/WebDAV/XMLHelper.pm
+index 10ec2ceb..c8116927 100644
+--- a/lib/perl/WebDAV/XMLHelper.pm
++++ b/lib/perl/WebDAV/XMLHelper.pm
+@@ -229,7 +229,7 @@ sub get_namespace_uri {
+ 
+ sub nonamespace {
+     my ($prop) = @_;
+-    $prop =~ s/^{[^}]*}//xms;
++    $prop =~ s/^[{][^}]*[}]//xms;
+     return $prop;
+ }
+ 
+diff --git a/lib/perl/WebInterface/Common.pm b/lib/perl/WebInterface/Common.pm
+index a4236fae..6fa904cf 100644
+--- a/lib/perl/WebInterface/Common.pm
++++ b/lib/perl/WebInterface/Common.pm
+@@ -562,7 +562,7 @@ sub _get_varref {
+         if ( defined $self->{$str} ) {
+             return $self->{$str};
+         }
+-        if ($str=~/^(.*){(.*?)}/xms) {
++        if ($str=~/^(.*)[{](.*?)[}]/xms) {
+             $ref = $DefaultConfig::{$1}{$2};
+             return $ref;
+         }
+diff --git a/lib/perl/WebInterface/Extension/PropertiesViewer.pm 
b/lib/perl/WebInterface/Extension/PropertiesViewer.pm
+index 2f6223e8..be7ba438 100644
+--- a/lib/perl/WebInterface/Extension/PropertiesViewer.pm
++++ b/lib/perl/WebInterface/Extension/PropertiesViewer.pm
+@@ -157,7 +157,7 @@ sub _render_viewer {
+         my $title = create_xml( $r200{prop},        1 );
+         my $value = create_xml( $r200{prop}{$prop}, 1 );
+         my $namespace = get_namespace_uri($prop);
+-        if ( $prop =~ /^{([^}]*)}/xms ) {
++        if ( $prop =~ /^[{]([^}]*)[}]/xms ) {
+             $namespace = $1;
+         }
+         push @bgstyleclasses, shift @bgstyleclasses;
+diff --git a/lib/perl/WebInterface/View/Simple/RenderFileListTable.pm 
b/lib/perl/WebInterface/View/Simple/RenderFileListTable.pm
+index 44cfd894..972d431f 100644
+--- a/lib/perl/WebInterface/View/Simple/RenderFileListTable.pm
++++ b/lib/perl/WebInterface/View/Simple/RenderFileListTable.pm
+@@ -85,7 +85,7 @@ sub render_file_list_table {
+         unselectable => $self->is_unselectable($fn)        ? 'yes' : 'no',
+     );
+     $filelisttabletemplate =~
+-        s/[\$]{?(\w+)}?/exists $stdvars{$1} && defined 
$stdvars{$1}?$stdvars{$1}:"\$$1"/xmegs;
++        s/[\$][{]?(\w+)[}]?/exists $stdvars{$1} && defined 
$stdvars{$1}?$stdvars{$1}:"\$$1"/xmegs;
+     my %jsondata = (
+         content => $self->minify_html(
+             $self->render_template( $fn, $ru, $filelisttabletemplate )
+@@ -253,8 +253,8 @@ sub _render_file_list_entry {
+     my $displayname = $self->{cgi}->escapeHTML( 
$self->{backend}->getDisplayName($full) );
+     my $now = $self->{c}{_render_file_list_entry}{now}{$lang} //= 
DateTime->now( locale => $lang );
+     my $cct = $self->can_create_thumb($full);
+-    my $u   = $self->{c}{_render_file_list_entry}{uid}{$uid // 'unknown'} //= 
$uid && $uid=~/^\d+$/xms ? scalar getpwuid( $uid ) : $uid ? $uid : 'unknown';
+-    my $g   = $self->{c}{_render_file_list_entry}{gid}{$gid // 'unknown'} //= 
$gid && $gid=~/^\d+$/xms ? scalar getgrgid( $gid ) : $gid ? $gid : 'unknown';
++    my $u   = $self->{c}{_render_file_list_entry}{uid}{$uid // 'unknown'} //= 
$uid && $uid=~/^\d+$/xms ? scalar getpwuid( $uid ) // $uid: $uid ? $uid : 
'unknown';
++    my $g   = $self->{c}{_render_file_list_entry}{gid}{$gid // 'unknown'} //= 
$gid && $gid=~/^\d+$/xms ? scalar getgrgid( $gid ) // $gid: $gid ? $gid : 
'unknown';
+     my $icon = $self->{c}{_render_file_list_entry}{icon}{$mime}
+         //= $self->get_icon($mime);
+     my $enthumb = $self->{c}{_render_file_list_entry}{cookie}{thumbnails}

diff --git a/www-apps/webdavcgi/webdavcgi-1.1.2.ebuild 
b/www-apps/webdavcgi/webdavcgi-1.1.2.ebuild
new file mode 100644
index 00000000000..b9ddf2f7e10
--- /dev/null
+++ b/www-apps/webdavcgi/webdavcgi-1.1.2.ebuild
@@ -0,0 +1,206 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+DESCRIPTION="A Perl CGI for accessing and sharing files, or 
calendar/addressbooks via WebDAV."
+HOMEPAGE="https://danrohde.github.io/webdavcgi/";
+SRC_URI="https://github.com/DanRohde/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3+"
+
+# Provide slotting on minor versions. WebDAV CGI is a web application which
+# can be shared by multiple instances and thus major updates shouldn't be
+# enforced to all users/instances at the same time.
+SLOT="$(ver_cut 1-2)"
+
+KEYWORDS="~amd64"
+IUSE="afs git kerberos ldap mysql pdf postgres rcs samba +sqlite +suid"
+
+DEPEND=""
+RDEPEND="afs? ( net-fs/openafs )
+       dev-lang/perl
+       dev-perl/Archive-Zip
+       dev-perl/CGI
+       dev-perl/DateTime
+       dev-perl/DateTime-Format-Human-Duration
+       dev-perl/File-Copy-Link
+       dev-perl/IO-Compress-Brotli
+       dev-perl/JSON
+       dev-perl/List-MoreUtils
+       dev-perl/MIME-tools
+       dev-perl/PerlIO-gzip
+       dev-perl/Quota
+       dev-perl/TimeDate
+       dev-perl/URI
+       dev-perl/UUID-Tiny
+       dev-perl/XML-Simple
+       git? ( dev-vcs/git )
+       kerberos? ( virtual/krb5 )
+       ldap? ( dev-perl/perl-ldap )
+       media-gfx/graphicsmagick[perl]
+       media-libs/exiftool
+       mysql? ( dev-perl/DBD-mysql )
+       pdf? ( app-text/ghostscript-gpl )
+       postgres? ( dev-perl/DBD-Pg )
+       rcs? ( dev-perl/Rcs )
+       samba? ( net-fs/cifs-utils dev-perl/Filesys-SmbClient )
+       sqlite? ( dev-perl/DBD-SQLite )
+       virtual/perl-File-Spec
+       virtual/perl-Module-Load
+       || ( virtual/httpd-cgi virtual/httpd-fastcgi )"
+
+REQUIRED_USE="|| ( mysql postgres sqlite )"
+
+CGIBINDIR="cgi-bin"
+
+PATCHES=(
+       # Fix unescaped braces, which adresses #674772 and #658470
+       #
+       # The patch originates from
+       # 
https://github.com/DanRohde/webdavcgi/commit/04e79b7ecbaf3aae5ab813cd4fc0a009c72b1580
+       # and can be remove as soon as this ebuild gets bumped to 1.1.3 which
+       # already includes the change.
+       "${FILESDIR}/${P}-fix-unescaped-braces.patch"
+)
+
+src_compile() {
+       if use suid; then
+               WEBDAVWRAPPERS="webdavwrapper" # Standard UID/GID wrapper
+
+               use afs      && WEBDAVWRAPPERS+=" webdavwrapper-afs"
+               use kerberos && WEBDAVWRAPPERS+=" webdavwrapper-krb"
+
+               export WEBDAVWRAPPERS
+
+               local wrapper
+               for wrapper in ${WEBDAVWRAPPERS}; do
+                       $(tc-getCC) ${LDFLAGS} ${CFLAGS} \
+                               -o "${CGIBINDIR}/${wrapper}" \
+                               "helper/${wrapper}.c" || die "compile 
${wrapper} failed"
+               done
+       fi
+}
+
+src_install() {
+       exeinto "/usr/libexec/${PN}-${SLOT}/${CGIBINDIR}"
+       newexe "${CGIBINDIR}/logout-dist" "logout"
+       doexe "${CGIBINDIR}/webdav.pl"
+
+       use afs   && doexe "${CGIBINDIR}/afswrapper"
+       use samba && doexe "${CGIBINDIR}/smbwrapper"
+
+       if use suid; then
+               # In order to change the user and group ID at runtime, the 
webdavwrapper
+               # needs to be run as root (set-user-ID and set-group-ID bit)
+               exeopts -o root -g root -m 6755
+
+               local wrapper
+               for wrapper in ${WEBDAVWRAPPERS}; do
+                       einfo "Installing UID/GID wrapper ${wrapper}"
+                       doexe "${CGIBINDIR}/${wrapper}"
+               done
+
+               # reset install opts
+               exeopts
+       else
+               ewarn "You have the 'suid' USE flag disabled"
+               ewarn "WebDAV CGI won't be able to switch user ids"
+       fi
+
+       local confDir='etc'
+       local webdavConfDir="/etc/${PN}-${SLOT}/default"
+
+       export WEBDAVCONFIG="${webdavConfDir}/webdav.conf"
+
+       insinto "${webdavConfDir}"
+       doins "${confDir}/mime.types"
+       newins "${FILESDIR}/webdav-${SLOT}.conf" "webdav.conf"
+
+       local installBaseDir="/usr/share/${PN}-${SLOT}"
+       local currentDir
+       for currentDir in htdocs lib locale templates; do
+               insinto "${installBaseDir}/${currentDir}"
+               doins -r "${currentDir}"/*
+       done
+
+       if use mysql || use postgres; then
+               local sqlDir='sql'
+               insinto "${installBaseDir}/${sqlDir}"
+               use mysql    && doins "${sqlDir}/mysql.sql"
+               use postgres && doins "${sqlDir}/postgresql.sql"
+       fi
+
+       if use sqlite; then
+               # Directory where the SQLite database resides
+               local sqliteRootDir="/var/lib/${PN}/${SLOT}"
+               keepdir "${sqliteRootDir}"
+
+               # Default database directory where all users are able to create 
and
+               # share the databases, this can be changed within the config 
file and
+               # restricted to user/group only access if required.
+               export SQLITEDIR="${sqliteRootDir}/default"
+               keepdir "${SQLITEDIR}"
+               fperms 1777 "${SQLITEDIR}"
+       fi
+
+       # Create default temporary directories, writable by all users
+       export TMPDIRS="trash thumbnails optimized"
+       for tmpDir in ${TMPDIRS}; do
+               keepdir "/var/tmp/${PN}/${SLOT}/default/${tmpDir}"
+               fperms 1777 "/var/tmp/${PN}/${SLOT}/default/${tmpDir}"
+       done
+
+       export APACHEEXAMPLECONFIG="apache-webdavcgi-${SLOT}-example.conf"
+       dodoc CHANGELOG
+       dodoc etc/webdav.conf.complete
+       dodoc "${FILESDIR}/${APACHEEXAMPLECONFIG}"
+       dodoc -r "docs/"
+}
+
+pkg_postinst() {
+       ewarn "In order to allow different users to create and share files,"
+       ewarn "some directories were installed with world write access by 
default."
+       ewarn "To set restrictive permissions, add all WebDAV CGI users to a"
+       ewarn "common group, and allow access to the following directories by 
this"
+       ewarn "group only."
+       ewarn "Temp directories:    /var/tmp/${PN}/${SLOT}/default/*"
+       use sqlite && ewarn "SQLite directory:    ${SQLITEDIR}"
+
+       elog
+       elog "The WebDAV CGI config is located at ${WEBDAVCONFIG}."
+       elog
+       elog "An example Apache HTTP server configuration snippet is available 
in"
+       elog "${EROOT}/usr/share/doc/${PF} in the file ${APACHEEXAMPLECONFIG}"
+       elog
+       elog "An important note to systemd user's running the Apache HTTP 
server:"
+       elog ""
+       elog "The default apache2.service will be started with private file 
system"
+       elog "namespaces for /var/tmp and /tmp enabled (PrivateTmp=true) and 
with"
+       elog "restricted privileges and securebits flags (NoNewPrivileges=true"
+       elog "SecureBits=noroot-locked)"
+       elog ""
+       elog "This means that you either need to disable PrivateTmp, relocate 
the"
+       elog "directories starting with /var/tmp within ${WEBDAVCONFIG}"
+       elog "or pre-create the directory structure with a user defined systemd"
+       elog "companion unit using the JoinsNamespaceOf directive."
+       elog ""
+       elog "For those using the setuid/guid webdavwrapper, additional systemd"
+       elog "execution environment relaxation is required."
+       elog
+       elog "To override the existing systemd service unit:"
+       elog "systemctl edit apache2.service"
+       elog ""
+       elog "[Service]"
+       elog "# Disable private file system namespaces"
+       elog "PrivateTmp=false"
+       elog "# Uncomment the following if you're using the setuid/guid 
webdavwrapper"
+       elog "#NoNewPrivileges=false"
+       elog "#SecureBits="
+
+       einfo
+       einfo "Detailed installation and configuration instructions can be 
found at"
+       einfo "https://danrohde.github.io/webdavcgi/doc.html";
+}

Reply via email to