diff --git a/.gitignore b/.gitignore index 5713cb9..735abac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,14 @@ BackupPC-3.1.2.tar.gz /BackupPC-3.3.0.tar.gz /BackupPC-3.3.1.tar.gz +/BackupPC-4.1.1.tar.gz +/BackupPC-4.1.2.tar.gz +/BackupPC-4.1.3.tar.gz +/BackupPC-4.1.4.tar.gz +/BackupPC-4.1.5.tar.gz +/BackupPC-4.2.0.tar.gz +/BackupPC-4.2.1.tar.gz +/BackupPC-4.3.0.tar.gz +/BackupPC-4.3.1.tar.gz +/BackupPC-4.3.2.tar.gz +/BackupPC-4.4.0.tar.gz diff --git a/2c9270b9b849b2c86ae6301dd722c97757bc9256.patch b/2c9270b9b849b2c86ae6301dd722c97757bc9256.patch new file mode 100644 index 0000000..06df763 --- /dev/null +++ b/2c9270b9b849b2c86ae6301dd722c97757bc9256.patch @@ -0,0 +1,45 @@ +From 2c9270b9b849b2c86ae6301dd722c97757bc9256 Mon Sep 17 00:00:00 2001 +From: Craig Barratt <19445341+craigbarratt@users.noreply.github.com> +Date: Fri, 15 Apr 2022 11:45:57 -0700 +Subject: [PATCH] remove erroneous 2nd argument to Data::Dumper; see #466 + +--- + configure.pl | 2 +- + lib/BackupPC/Storage/Text.pm | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/configure.pl b/configure.pl +index 6826ebcd..d5deef58 100755 +--- a/configure.pl ++++ b/configure.pl +@@ -668,7 +668,7 @@ + if ( defined($Conf{CgiUserConfigEdit}{$p}) ); + } + $Conf{CgiUserConfigEdit} = $new; +- my $d = Data::Dumper->new([$new], [*value]); ++ my $d = Data::Dumper->new([$new]); + $d->Indent(1); + $d->Terse(1); + $d->Sortkeys(1); +diff --git a/lib/BackupPC/Storage/Text.pm b/lib/BackupPC/Storage/Text.pm +index e9df664f..09fcb246 100644 +--- a/lib/BackupPC/Storage/Text.pm ++++ b/lib/BackupPC/Storage/Text.pm +@@ -422,7 +422,7 @@ sub ConfigFileMerge + my $var = $1; + $skipExpr = "\$fakeVar = $2\n"; + if ( exists($newConf->{$var}) ) { +- my $d = Data::Dumper->new([$newConf->{$var}], [*value]); ++ my $d = Data::Dumper->new([$newConf->{$var}]); + $d->Indent(1); + $d->Terse(1); + $d->Sortkeys(1); +@@ -454,7 +454,7 @@ sub ConfigFileMerge + # + foreach my $var ( sort(keys(%$newConf)) ) { + next if ( $done->{$var} ); +- my $d = Data::Dumper->new([$newConf->{$var}], [*value]); ++ my $d = Data::Dumper->new([$newConf->{$var}]); + $d->Indent(1); + $d->Terse(1); + $d->Sortkeys(1); diff --git a/BackupPC-3.2.1-locatedb.patch b/BackupPC-3.2.1-locatedb.patch deleted file mode 100644 index 70978e5..0000000 --- a/BackupPC-3.2.1-locatedb.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff -Naur BackupPC-3.2.1-pristine/init.d/src/linux-backuppc BackupPC-3.2.1/init.d/src/linux-backuppc ---- BackupPC-3.2.1-pristine/init.d/src/linux-backuppc 2011-04-24 21:31:55.000000000 -0600 -+++ BackupPC-3.2.1/init.d/src/linux-backuppc 2011-07-07 21:36:41.363281386 -0600 -@@ -20,6 +20,25 @@ - - RETVAL=0 - -+topDirCheck() -+{ -+ updatedb=/etc/updatedb.conf -+ topdir=$(perl <<_EOF_ -+ require '__CONFDIR__/config.pl'; -+ print \$Conf{TopDir}; -+_EOF_ -+) -+ if [ -r $updatedb ]; then -+ grep ^PRUNEPATHS $updatedb | grep ${topdir%%/} > /dev/null -+ if [ $? -eq 1 ]; then -+ logger -t BackupPC -s "WARNING: Your BackupPC \$Conf{TopDir} is not listed in the locate" -+ logger -t BackupPC -s "database configuration's PRUNEPATHS. This may cause all of your" -+ logger -t BackupPC -s "backed up files to be indexed!" -+ fi -+ fi -+} -+ -+ - start() { - # - # You can set the SMB share password here is you wish. Otherwise -@@ -38,6 +57,7 @@ - echo - [ $RETVAL -eq 0 ] && touch /var/lock/subsys/backuppc || \ - RETVAL=1 -+ topDirCheck - return $RETVAL - } - diff --git a/BackupPC-3.2.1-piddir.patch b/BackupPC-3.2.1-piddir.patch deleted file mode 100644 index ed3e56a..0000000 --- a/BackupPC-3.2.1-piddir.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -Naur BackupPC-3.2.1-pristine/bin/BackupPC BackupPC-3.2.1/bin/BackupPC ---- BackupPC-3.2.1-pristine/bin/BackupPC 2011-04-24 21:31:54.000000000 -0600 -+++ BackupPC-3.2.1/bin/BackupPC 2011-07-08 21:14:46.609762024 -0600 -@@ -363,11 +363,11 @@ - # Write out our initial status and save our PID - # - StatusWrite(); -- unlink("$LogDir/BackupPC.pid"); -- if ( open(PID, ">", "$LogDir/BackupPC.pid") ) { -+ unlink("/var/run/BackupPC/BackupPC.pid"); -+ if ( open(PID, ">", "/var/run/BackupPC/BackupPC.pid") ) { - print(PID $$); - close(PID); -- chmod(0444, "$LogDir/BackupPC.pid"); -+ chmod(0444, "/var/run/BackupPC/BackupPC.pid"); - } - - # -@@ -1846,7 +1846,7 @@ - close(LOG); - LogFileOpen(); - print(LOG "Fatal error: unhandled signal $SigName\n"); -- unlink("$LogDir/BackupPC.pid"); -+ unlink("/var/run/BackupPC/BackupPC.pid"); - confess("Got new signal $SigName... quitting\n"); - } else { - $SigName = shift; -@@ -1968,7 +1968,7 @@ - } - delete($Info{pid}); - StatusWrite(); -- unlink("$LogDir/BackupPC.pid"); -+ unlink("/var/run/BackupPC/BackupPC.pid"); - exit(1); - } - diff --git a/BackupPC-3.2.1-rundir.patch b/BackupPC-3.2.1-rundir.patch deleted file mode 100644 index 79efff1..0000000 --- a/BackupPC-3.2.1-rundir.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -Naur BackupPC-3.2.1-pristine/bin/BackupPC BackupPC-3.2.1/bin/BackupPC ---- BackupPC-3.2.1-pristine/bin/BackupPC 2011-04-24 21:31:54.000000000 -0600 -+++ BackupPC-3.2.1/bin/BackupPC 2011-07-07 22:25:55.287651463 -0600 -@@ -1885,7 +1885,7 @@ - print(LOG $bpc->timeStamp, "unix socket() failed: $!\n"); - exit(1); - } -- my $sockFile = "$LogDir/BackupPC.sock"; -+ my $sockFile = "/var/run/BackupPC/BackupPC.sock"; - unlink($sockFile); - if ( !bind(SERVER_UNIX, sockaddr_un($sockFile)) ) { - print(LOG $bpc->timeStamp, "unix bind() failed: $!\n"); -diff -Naur BackupPC-3.2.1-pristine/lib/BackupPC/Lib.pm BackupPC-3.2.1/lib/BackupPC/Lib.pm ---- BackupPC-3.2.1-pristine/lib/BackupPC/Lib.pm 2011-04-24 21:31:55.000000000 -0600 -+++ BackupPC-3.2.1/lib/BackupPC/Lib.pm 2011-07-07 22:26:46.744614593 -0600 -@@ -686,7 +686,7 @@ - # - # First try the unix-domain socket - # -- my $sockFile = "$bpc->{LogDir}/BackupPC.sock"; -+ my $sockFile = "/var/run/BackupPC/BackupPC.sock"; - socket(*FH, PF_UNIX, SOCK_STREAM, 0) || return "unix socket: $!"; - if ( !connect(*FH, sockaddr_un($sockFile)) ) { - my $err = "unix connect: $!"; diff --git a/BackupPC-3.3.0-fix-shadow-access.patch b/BackupPC-3.3.0-fix-shadow-access.patch deleted file mode 100644 index 5dc2755..0000000 --- a/BackupPC-3.3.0-fix-shadow-access.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -Naur BackupPC-3.3.0-pristine/lib/BackupPC/CGI/Lib.pm BackupPC-3.3.0/lib/BackupPC/CGI/Lib.pm ---- BackupPC-3.3.0-pristine/lib/BackupPC/CGI/Lib.pm 2013-04-14 14:43:32.000000000 -0600 -+++ BackupPC-3.3.0/lib/BackupPC/CGI/Lib.pm 2014-02-21 22:42:25.844412429 -0700 -@@ -144,7 +144,7 @@ - # Verify we are running as the correct user - # - if ( $Conf{BackupPCUserVerify} -- && $> != (my $uid = (getpwnam($Conf{BackupPCUser}))[2]) ) { -+ && $> != (my $uid = (getpwnam($Conf{BackupPCUser}))) ) { - ErrorExit(eval("qq{$Lang->{Wrong_user__my_userid_is___}}"), <{Conf}{BackupPCUserVerify} -- && $> != (my $uid = (getpwnam($bpc->{Conf}{BackupPCUser}))[2]) ) { -+ && $> != (my $uid = (getpwnam($bpc->{Conf}{BackupPCUser}))) ) { - print(STDERR "$0: Wrong user: my userid is $>, instead of $uid" - . " ($bpc->{Conf}{BackupPCUser})\n"); - print(STDERR "Please su $bpc->{Conf}{BackupPCUser} first\n"); diff --git a/BackupPC-3.3.1-perl_defined_at_deprecation.patch b/BackupPC-3.3.1-perl_defined_at_deprecation.patch deleted file mode 100644 index afc71c2..0000000 --- a/BackupPC-3.3.1-perl_defined_at_deprecation.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- BackupPC-3.3.1/lib/BackupPC/CGI/Browse.pm.orig 2016-07-15 10:32:24.007070271 +0200 -+++ BackupPC-3.3.1/lib/BackupPC/CGI/Browse.pm 2016-07-15 10:33:00.920213213 +0200 -@@ -65,7 +65,7 @@ - # - # default to the newest backup - # -- if ( !defined($In{num}) && defined(@Backups) && @Backups > 0 ) { -+ if ( !defined($In{num}) && @Backups > 0 ) { - $i = @Backups - 1; - $num = $Backups[$i]{num}; - } diff --git a/BackupPC-4.1.3-docfix.patch b/BackupPC-4.1.3-docfix.patch new file mode 100644 index 0000000..9edeb7a --- /dev/null +++ b/BackupPC-4.1.3-docfix.patch @@ -0,0 +1,43 @@ +Index: BackupPC-4.4.0/configure.pl +=================================================================== +--- BackupPC-4.4.0.orig/configure.pl ++++ BackupPC-4.4.0/configure.pl +@@ -946,7 +946,7 @@ sub DoInstall + # Create install directories + # + foreach my $dir ( qw(bin +- share share/doc share/doc/BackupPC ++ doc + lib lib/BackupPC + lib/BackupPC/CGI + lib/BackupPC/Config +@@ -1074,13 +1074,13 @@ sub DoInstall + print("Making Apache configuration file for suid-perl\n"); + InstallFile("httpd/src/BackupPC.conf", "httpd/BackupPC.conf", 0644); + +- print("Installing docs in $DestDir$Conf{InstallDir}/share/doc/BackupPC\n"); ++ print("Installing docs in $DestDir$Conf{InstallDir}/doc\n"); + foreach my $doc ( qw(BackupPC.pod BackupPC.html) ) { +- InstallFile("doc/$doc", "$DestDir$Conf{InstallDir}/share/doc/BackupPC/$doc", 0444); ++ InstallFile("doc/$doc", "$DestDir$Conf{InstallDir}/doc/$doc", 0444); + # + # clean up files from old directory + # +- unlink("$DestDir$Conf{InstallDir}/doc/$doc") if ( -f "$DestDir$Conf{InstallDir}/doc/$doc" ); ++ #unlink("$DestDir$Conf{InstallDir}/doc/$doc") if ( -f "$DestDir$Conf{InstallDir}/doc/$doc" ); + } + # + # clean up old directory (ok if it quietly fails if there are other files in that directory) +Index: BackupPC-4.4.0/lib/BackupPC/CGI/View.pm +=================================================================== +--- BackupPC-4.4.0.orig/lib/BackupPC/CGI/View.pm ++++ BackupPC-4.4.0/lib/BackupPC/CGI/View.pm +@@ -104,7 +104,7 @@ sub action + $file = $bpc->ConfDir() . "/hosts"; + $linkHosts = 1; + } elsif ( $type eq "docs" ) { +- $file = $bpc->InstallDir() . "/share/doc/BackupPC/BackupPC.html"; ++ $file = $bpc->InstallDir() . "/doc/BackupPC.html"; + } elsif ( $host ne "" ) { + if ( !defined($In{num}) ) { + diff --git a/BackupPC-README.fedora b/BackupPC-README.fedora deleted file mode 100644 index 448c279..0000000 --- a/BackupPC-README.fedora +++ /dev/null @@ -1,17 +0,0 @@ -BackupPC's README file for Fedora - -## BackupPC's user -For security reasons, backuppc user cannot log in. If you want to start manual -backup (ie for debugging), you'll need to set it a shell : -usermod -s /bin/bash - -Do not forget to create an SSH key (ssk-keygen) and copy it to remote computers -if you plan to use tar/rsync over SSH backup method. - -## BackupPC's web interface -The CGI web interface is located at : -http://localhost/BackupPC - -You will need to create users in /etc/BackupPC/apache.users : -htpasswd -c /etc/BackupPC/apache.users username -(Note that the '-c' flag is only necessary to create the file) diff --git a/BackupPC.htaccess b/BackupPC.htaccess index 1ebc77e..e63c3b9 100644 --- a/BackupPC.htaccess +++ b/BackupPC.htaccess @@ -1,4 +1,4 @@ - + # BackupPC requires valid authentication in order for the web interface to # function properly. One can view the web interface without authentication # though all functionality is disabled. @@ -28,10 +28,9 @@ AuthName "BackupPC" require valid-user - - + Alias /BackupPC/images /usr/share/BackupPC/html/ -ScriptAlias /BackupPC /usr/share/BackupPC/sbin/BackupPC_Admin -ScriptAlias /backuppc /usr/share/BackupPC/sbin/BackupPC_Admin +ScriptAlias /BackupPC /usr/libexec/BackupPC/BackupPC_Admin +ScriptAlias /backuppc /usr/libexec/BackupPC/BackupPC_Admin diff --git a/BackupPC.spec b/BackupPC.spec index c29b7a7..3a7d4c2 100644 --- a/BackupPC.spec +++ b/BackupPC.spec @@ -1,11 +1,6 @@ -# enable -PIE build %global _hardened_build 1 -%if 0%{?rhel} && 0%{?rhel} < 5 -%global _without_selinux 1 -%endif - -# tmpfiles.d & systemd support in all supported Fedora now, but not RHEL < 7 +# tmpfiles.d & systemd not supported in RHEL < 7 %if 0%{?fedora} || 0%{?rhel} >= 7 %global _with_tmpfilesd 1 %global _with_systemd 1 @@ -14,155 +9,133 @@ %global _updatedb_conf /etc/updatedb.conf Name: BackupPC -Version: 3.3.1 -Release: 5%{?dist} +Version: 4.4.0 +Release: 23%{?dist} Summary: High-performance backup system -Group: Applications/System -License: GPLv2+ -URL: http://backuppc.sourceforge.net/ -Source0: http://downloads.sourceforge.net/backuppc/%{name}-%{version}.tar.gz -Patch0: BackupPC-3.2.1-locatedb.patch -Patch1: BackupPC-3.2.1-rundir.patch -Patch2: BackupPC-3.2.1-piddir.patch -Patch3: BackupPC-3.3.0-fix-shadow-access.patch -Patch4: BackupPC-3.3.1-perl_defined_at_deprecation.patch +# Automatically converted from old format: GPLv2+ - review is highly recommended. +License: GPL-2.0-or-later +URL: http://backuppc.github.io/backuppc/index.html +Source0: https://github.com/backuppc/backuppc/releases/download/%{version}/%{name}-%{version}.tar.gz Source1: BackupPC.htaccess Source2: BackupPC.logrotate -Source3: BackupPC-README.fedora +Source3: README.setup #A C wrapper to use since perl-suidperl is no longer provided Source4: BackupPC_Admin.c Source5: backuppc.service Source6: BackupPC.tmpfiles Source7: README.RHEL +Source8: apache.users -BuildRequires: %{_bindir}/smbclient, %{_bindir}/nmblookup -BuildRequires: rsync -BuildRequires: coreutils -BuildRequires: tar -BuildRequires: openssh-clients +Patch0: BackupPC-4.1.3-docfix.patch +# Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2091514 +Patch1: https://github.com/backuppc/backuppc/commit/2c9270b9b849b2c86ae6301dd722c97757bc9256.patch + +BuildRequires: gcc BuildRequires: perl-generators +BuildRequires: perl(BackupPC::XS) >= 0.53 +BuildRequires: perl(CGI) BuildRequires: perl(Compress::Zlib) BuildRequires: perl(Data::Dumper) BuildRequires: perl(Digest::MD5) +BuildRequires: perl(Encode) +BuildRequires: perl(File::Copy) +BuildRequires: perl(File::Listing) +BuildRequires: perl(File::Path) +BuildRequires: perl(File::Spec) +BuildRequires: perl(Getopt::Long) +BuildRequires: perl(Getopt::Std) +BuildRequires: perl(lib) BuildRequires: perl(Pod::Usage) +BuildRequires: perl(Socket) +BuildRequires: perl(strict) +BuildRequires: perl(utf8) +BuildRequires: perl(vars) +BuildRequires: perl(version) %if 0%{?_with_systemd} -BuildRequires: systemd-units +BuildRequires: systemd %endif # Unbundled libraries -Requires: perl(Net::FTP::AutoReconnect), perl(Net::FTP::RetrHandle) +Requires: perl(Net::FTP::AutoReconnect) +Requires: perl(Net::FTP::RetrHandle) -Requires: httpd -Requires: perl(File::RsyncP), perl(Compress::Zlib), perl(Archive::Zip) -Requires: perl-Time-modules, perl(XML::RSS), perl(Digest::MD5) -Requires: rsync -# This is a file dependency so EL5 can use samba or samba-client or -# samba3x-client -Requires: %{_bindir}/smbclient, %{_bindir}/nmblookup - -Requires(pre): %{_sbindir}/useradd -%if 0%{?_with_systemd} -Requires(preun): systemd-units -Requires(post): systemd-units, %{_sbindir}/usermod -Requires(postun): systemd-units +Requires: bzip2 +%if 0%{?fedora} || 0%{?rhel} >= 8 +Requires: webserver +Recommends: httpd %else -Requires(preun): initscripts, chkconfig -Requires(post): initscripts, chkconfig, %{_sbindir}/usermod +Requires: httpd +%endif +Requires: iputils +Requires: openssh-clients +%if ! 0%{?el6} +Requires: par2cmdline +%endif +Requires: rrdtool +Requires: rsync-bpc >= 3.0.9.6 +Requires: perl(BackupPC::XS) >= 0.53 +Requires: perl-Time-modules +Requires: samba-client +Requires: %{_sbindir}/sendmail + +%if 0%{?_with_systemd} +Requires(post): shadow-utils +%{?systemd_requires} +%else +Requires(preun): initscripts chkconfig +Requires(post): initscripts chkconfig shadow-utils Requires(postun): initscripts %endif -%if ! 0%{?_without_selinux} Requires: policycoreutils -BuildRequires: selinux-policy-devel, checkpolicy -%endif -Provides: backuppc = %{version} +BuildRequires: selinux-policy-devel checkpolicy +BuildRequires: make +Provides: backuppc = %{version}-%{release} -# BuildRoot required for RHEL5 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description BackupPC is a high-performance, enterprise-grade system for backing up Linux and WinXX and Mac OS X PCs and laptops to a server's disk. BackupPC is highly configurable and easy to install and maintain. +NOTE: Proper configuration is required after install, see README.setup for more +information. + + %prep +%autosetup -p1 -%setup -q - -%patch0 -p1 -b .locatedb -%patch1 -p1 -b .rundir -%patch2 -p1 -b .piddir -%patch3 -p1 -b .shadow-access -%patch4 -p1 -b .oldperl - -sed -i "s|\"backuppc\"|\"$LOGNAME\"|g" configure.pl -for f in ChangeLog doc/BackupPC.pod doc/BackupPC.html; do +for f in ChangeLog; do iconv -f ISO-8859-1 -t UTF-8 $f > $f.utf && mv $f.utf $f done -#incorrect FSF address -sed -i 's|59 Temple Place, Suite 330, Boston, MA *02111-1307 USA|51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA|' \ - lib/BackupPC/CGI/Queue.pm \ - bin/BackupPC_archive \ - lib/BackupPC/CGI/StartServer.pm \ - lib/BackupPC/CGI/HostInfo.pm \ - lib/BackupPC/CGI/Archive.pm \ - lib/BackupPC/CGI/LOGlist.pm \ - lib/BackupPC/FileZIO.pm \ - lib/BackupPC/CGI/GeneralInfo.pm \ - lib/BackupPC/CGI/Browse.pm \ - lib/BackupPC/CGI/RSS.pm \ - lib/BackupPC/CGI/Restore.pm \ - lib/BackupPC/CGI/RestoreFile.pm \ - bin/BackupPC_restore \ - lib/BackupPC/CGI/DirHistory.pm \ - lib/BackupPC/Xfer/Archive.pm \ - lib/BackupPC/Config/Meta.pm \ - lib/BackupPC/CGI/ArchiveInfo.pm \ - lib/BackupPC/CGI/ReloadServer.pm \ - lib/BackupPC/CGI/View.pm \ - bin/BackupPC_tarExtract \ - lib/BackupPC/CGI/EmailSummary.pm \ - lib/BackupPC/Xfer/RsyncFileIO.pm \ - lib/BackupPC/CGI/RestoreInfo.pm \ - lib/BackupPC/CGI/StartStopBackup.pm \ - lib/BackupPC/CGI/StopServer.pm \ - lib/BackupPC/CGI/AdminOptions.pm \ - lib/BackupPC/CGI/Summary.pm \ - lib/BackupPC/CGI/EditConfig.pm +cp %{SOURCE3} . +cp %{SOURCE7} . +cp %{SOURCE4} . -chmod a-x LICENSE README - -cp %{SOURCE3} README.fedora -cp %{SOURCE7} README.RHEL -cp %{SOURCE4} BackupPC_Admin.c - -%if ! 0%{?_without_selinux} mkdir selinux pushd selinux cat >%{name}.te <%{name}.fc <backuppc.sysusers.conf < 1,|ClientNameAlias => 0,|' $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/config.pl +# SElinux +mkdir -p %{buildroot}%{_datadir}/selinux/packages/%{name} +install -m 0644 selinux/%{name}.pp %{buildroot}%{_datadir}/selinux/packages/%{name}/%{name}.pp -#perl-suidperl is no longer avaialable, we use a C wrapper -mv $RPM_BUILD_ROOT%{_datadir}/%{name}/sbin/BackupPC_Admin $RPM_BUILD_ROOT%{_datadir}/%{name}/sbin/BackupPC_Admin.pl -install -p BackupPC_Admin $RPM_BUILD_ROOT%{_datadir}/%{name}/sbin/ +install -m0644 -D backuppc.sysusers.conf %{buildroot}%{_sysusersdir}/backuppc.conf -%if ! 0%{?_without_selinux} - # SElinux - %{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/selinux/packages/%{name} - %{__install} -m644 selinux/%{name}.pp $RPM_BUILD_ROOT%{_datadir}/selinux/packages/%{name}/%{name}.pp -%endif - - -%clean -rm -rf $RPM_BUILD_ROOT - - -%pre -%{_sbindir}/useradd -d %{_localstatedir}/lib/%{name} -r -s /sbin/nologin backuppc 2> /dev/null || : %preun +%if 0%{?_with_systemd} +%systemd_preun backuppc.service +%else if [ $1 = 0 ]; then # Package removal, not upgrade - %if 0%{?_with_systemd} - /bin/systemctl --no-reload disable backuppc.service > /dev/null 2>&1 || : - /bin/systemctl stop backuppc.service > /dev/null 2>&1 || : - %else service backuppc stop > /dev/null 2>&1 || : chkconfig --del backuppc || : - %endif fi +%endif %post -%if ! 0%{?_without_selinux} ( # Install/update Selinux policy semodule -i %{_datadir}/selinux/packages/%{name}/%{name}.pp @@ -287,19 +268,16 @@ fi restorecon -R %{_sysconfdir}/%{name} restorecon -R %{_localstatedir}/log/%{name} ) &>/dev/null -%endif +%if 0%{?_with_systemd} +%systemd_post backuppc.service +%else if [ $1 -eq 1 ]; then # initial installation - %if 0%{?_with_systemd} - /bin/systemctl daemon-reload > /dev/null 2>&1 || : - %else chkconfig --add backuppc || : - service httpd condrestart > /dev/null 2>&1 || : - %endif - %{_sbindir}/usermod -a -G backuppc apache || : fi - +%{_sbindir}/usermod -a -G backuppc apache || : +%endif # add BackupPC backup directories to PRUNEPATHS in locate database if [ -w %{_updatedb_conf} ]; then @@ -316,45 +294,35 @@ service httpd condrestart > /dev/null 2>&1 || : if [ $1 -eq 0 ]; then # uninstall - %if ! 0%{?_without_selinux} # Remove the SElinux policy. semodule -r %{name} &> /dev/null || : - %endif - # remove BackupPC backup directories from PRUNEPATHS in locate database if [ -w %{_updatedb_conf} ]; then sed -i '\@PRUNEPATHS@s@[ ]*'%{_localstatedir}/lib/%{name}'@@' %{_updatedb_conf} || : fi fi -if [ $1 -eq 1 ]; then - # package upgrade, not uninstall - %if 0%{?_with_systemd} - /bin/systemctl try-restart backuppc.service > /dev/null 2>&1 || : - %endif - # at least one command required - : -fi +%systemd_postun_with_restart backuppc.service + %files -%defattr(-,root,root,-) -%doc README README.fedora README.RHEL ChangeLog LICENSE doc/ - +%doc README.md README.setup README.RHEL ChangeLog doc/* +%license LICENSE %dir %attr(-,backuppc,backuppc) %{_localstatedir}/log/%{name} -%dir %attr(-,backuppc,backuppc) %{_sysconfdir}/%{name}/ - +%dir %attr(-,backuppc,apache) %{_sysconfdir}/%{name}/ %config(noreplace) %{_sysconfdir}/httpd/conf.d/%{name}.conf -%config(noreplace) %attr(-,backuppc,backuppc) %{_sysconfdir}/%{name}/* +%config(noreplace) %attr(-,backuppc,apache) %{_sysconfdir}/%{name}/* %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} - -%dir %{_datadir}/%{name} +%dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/sbin %{_datadir}/%{name}/[^s]* +%attr(750,backuppc,apache) %{_datadir}/%{name}/sbin/BackupPC_Admin %if 0%{?_with_tmpfilesd} -%config(noreplace) %{_sysconfdir}/tmpfiles.d/%{name}.conf +%{_tmpfilesdir}/%{name}.conf +%else +%dir %attr(0775,root,backuppc) %{_localstatedir}/run/%{name} %endif -%dir %attr(0775,backuppc,backuppc) %{_localstatedir}/run/%{name} %if 0%{?_with_systemd} %{_unitdir}/backuppc.service @@ -362,15 +330,186 @@ fi %attr(0755,root,root) %{_initrddir}/backuppc %endif -%attr(4750,backuppc,apache) %{_datadir}/%{name}/sbin/BackupPC_Admin -%attr(750,backuppc,apache) %{_datadir}/%{name}/sbin/BackupPC_Admin.pl +%attr(4750,backuppc,apache) %{_libexecdir}/%{name}/BackupPC_Admin %attr(-,backuppc,root) %{_localstatedir}/lib/%{name}/ - -%if ! 0%{?_without_selinux} %{_datadir}/selinux/packages/%{name}/%{name}.pp -%endif +%{_sysusersdir}/backuppc.conf + %changelog +* Wed Jul 15 2026 Fedora Release Engineering - 4.4.0-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Fri Jan 16 2026 Fedora Release Engineering - 4.4.0-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Jan 16 2026 Fedora Release Engineering - 4.4.0-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Wed Jul 23 2025 Fedora Release Engineering - 4.4.0-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Tue Feb 11 2025 Zbigniew Jędrzejewski-Szmek - 4.4.0-19 +- Add sysusers.d config file to allow rpm to create users/groups automatically + +* Mon Jan 20 2025 Fedora Release Engineering - 4.4.0-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jan 16 2025 Fedora Release Engineering - 4.4.0-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jul 25 2024 Miroslav Suchý - 4.4.0-16 +- convert license to SPDX + +* Wed Jul 17 2024 Fedora Release Engineering - 4.4.0-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Mon Mar 25 2024 Orion Poplawski - 4.4.0-14 +- Create and own /etc/BackupPC/pc + +* Mon Jan 22 2024 Fedora Release Engineering - 4.4.0-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 4.4.0-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jan 18 2024 Fedora Release Engineering - 4.4.0-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 4.4.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jan 18 2023 Fedora Release Engineering - 4.4.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Aug 23 2022 Richard Shaw - 4.4.0-8 +- Add patch to fix #2091514 where saving a configuration change in the web UI + would replace {} with () in the config file. + +* Wed Jul 20 2022 Fedora Release Engineering - 4.4.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 4.4.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jul 21 2021 Fedora Release Engineering - 4.4.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 4.4.0-4 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Mon Jan 25 2021 Fedora Release Engineering - 4.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 4.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sun Jun 21 2020 Richard Shaw - 4.4.0-1 +- Update to 4.4.0. + +* Wed Mar 25 2020 Jitka Plesnikova - 4.3.2-3 +- Add perl dependencies needed for build +- Remove duplicities from run-requires + +* Thu Mar 12 2020 Richard Shaw - 4.3.2-2 +- Add patch to allow prevention of backups being deleted. +- Add apache.users config file to control permissions and update related SETUP + documentation. +- Fix PID file to be created in /run instead of /var/run. + +* Tue Feb 18 2020 Richard Shaw - 4.3.2-1 +- Update to 4.3.2. +- Update SELinux permissions, fixes RHBZ#1791369. + +* Tue Jan 28 2020 Fedora Release Engineering - 4.3.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sat Oct 12 2019 Richard Shaw - 4.3.1-3 +- Add selinux context for /var/lib/BackupPC to stop AVCs with LOCK files. + +* Wed Jul 24 2019 Fedora Release Engineering - 4.3.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Jul 14 2019 Richard Shaw - 4.3.1-1 +- Update to 4.3.1. + +* Thu Jan 31 2019 Fedora Release Engineering - 4.3.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Nov 26 2018 Richard Shaw - 4.3.0-1 +- Update to 4.3.0. + +* Mon Nov 05 2018 Orion Poplawski - 4.2.1-4 +- Add reload support to systemd service file + +* Thu Oct 11 2018 Richard Shaw - 4.2.1-3 +- Revert accidental change to log dir permissions. +- Don't package /run dir when using tmpfiles. + +* Thu Jul 12 2018 Fedora Release Engineering - 4.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon May 07 2018 Richard Shaw - 4.2.1-1 +- Update to 4.2.1. + +* Mon Apr 9 2018 Richard Shaw - 4.2.0-1 +- Update to 4.2.0. + +* Wed Feb 07 2018 Fedora Release Engineering - 4.1.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Dec 4 2017 Richard Shaw - 4.1.5-1 +- Update to latest upstream release. + +* Sat Nov 25 2017 Richard Shaw - 4.1.4-1 +- Update to latest upstream release. + +* Thu Nov 09 2017 Richard Shaw - 4.1.3-4.1 +- Add patch to set lib location correctly in BackupPC_zipCreate.pl + +* Wed Aug 02 2017 Fedora Release Engineering - 4.1.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 4.1.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 4 2017 Richard Shaw - 4.1.3-2 +- Change requirement from the sendmail package to the sendmail binary + which is also provided by the default MTA, postfix. + +* Sun Jun 4 2017 Richard Shaw - 4.1.3-1 +- Update to latest upstream release. + +* Sun May 28 2017 Richard Shaw - 4.1.2-2 +- Change permissions on config files to be in the apache group. +- Update systemd service file to start httpd automatically. + +* Tue May 2 2017 Richard Shaw - 4.1.2-1 +- Update to latest upstream release, 4.1.2. + +* Thu Mar 30 2017 Richard Shaw - 4.1.1-1 +- Update to latest upstream release, 4.1.1. + +* Sat Mar 25 2017 Richard Shaw - 4.1.0-1 +- Update to latest upstream release, 4.1.0. + +* Thu Mar 9 2017 Richard Shaw - 4.0.0-1 +- Update to latest upstream release, 4.0.0. + +* Wed Mar 1 2017 Ville Skyttä - 3.3.1-9 +- Move tmpfiles.d config to %%{_tmpfilesdir} +- Install LICENSE as %%license + +* Fri Feb 10 2017 Fedora Release Engineering - 3.3.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Dec 22 2016 Benjamin Lefoul - 3.3.1-7 +- Perl unescaped braces (BZ 1259481) + +* Tue Oct 18 2016 Benjamin Lefoul - 3.3.1-6 +- Some IPv6 support (BZ 1385630) + * Fri Jul 15 2016 Benjamin Lefoul - 3.3.1-5 - Deprecation of defined(@array) in perl @@ -479,9 +618,6 @@ fi - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild * Mon Aug 02 2010 Johan Cwiklinski 3.1.0-16 -- Debugingo with no sources (fix bug #620257) - -* Sat Jul 31 2010 Johan Cwiklinski 3.1.0-15 - perl-suidperl is no longer available (fix bug #611009) * Fri Jul 09 2010 Mike McGrath 3.1.0-14.1 diff --git a/BackupPC.tmpfiles b/BackupPC.tmpfiles index 3df527d..adf9e65 100644 --- a/BackupPC.tmpfiles +++ b/BackupPC.tmpfiles @@ -1 +1 @@ -D /var/run/BackupPC 0775 root backuppc - +D /run/BackupPC 0775 root backuppc - diff --git a/BackupPC_Admin.c b/BackupPC_Admin.c index be3137f..db75d6b 100644 --- a/BackupPC_Admin.c +++ b/BackupPC_Admin.c @@ -1,10 +1,12 @@ #include -#ifndef REAL_PATH -#define REAL_PATH "/usr/share/BackupPC/sbin/BackupPC_Admin.pl" -#endif -int main(ac, av) -char **av; +#include +#include + +int main( int argc, char ** argv, char ** envp ) { - execv(REAL_PATH, av); - return 0; + if( setgid(getegid()) ) perror( "setgid" ); + if( setuid(geteuid()) ) perror( "setuid" ); + execv( "/usr/share/BackupPC/sbin/BackupPC_Admin", argv ); + perror( argv[0] ); + return errno; } diff --git a/README.setup b/README.setup new file mode 100644 index 0000000..761921d --- /dev/null +++ b/README.setup @@ -0,0 +1,33 @@ +BackupPC's README file for Fedora & EPEL + +## BackupPC's user +For security reasons, backuppc user cannot log in. If you want to start manual +backup (ie for debugging), you'll need to set it a shell : + +Permanent: +usermod -s /bin/bash backuppc + +or + +Temporary: +su -s /bin/bash -l backuppc + + +Do not forget to create an SSH key (ssk-keygen) as the backuppc user and copy +it to remote computers if you plan to use tar/rsync over SSH backup method. + +The easiest way to do this (after logging in as the backuppc user) is to use ssh-copy-id + +ssh-copy-id @ + + +## BackupPC's web interface +The CGI web interface is located at : +http://localhost/BackupPC + +You will need to create users in /etc/BackupPC/apache.users : +htpasswd /etc/BackupPC/apache.users + +Once complete, add that user as an admin in config.pl: + +$Conf{BackupPCUser} = '' diff --git a/apache.users b/apache.users new file mode 100644 index 0000000..57dff0b --- /dev/null +++ b/apache.users @@ -0,0 +1,2 @@ +# You will need to create at least one user to be able to login +# htpasswd /etc/BackupPC/apache.users diff --git a/backuppc.service b/backuppc.service index 2bf870c..042e155 100644 --- a/backuppc.service +++ b/backuppc.service @@ -3,11 +3,12 @@ Description= BackupPC server After=syslog.target local-fs.target remote-fs.target [Service] -Type=oneshot +Type=simple User=backuppc Group=backuppc -ExecStart=/usr/share/BackupPC/bin/BackupPC -d -RemainAfterExit=yes +ExecStart=/usr/share/BackupPC/bin/BackupPC +ExecReload=/bin/kill -HUP $MAINPID +PIDFile=/run/BackupPC/BackupPC.pid [Install] WantedBy=multi-user.target diff --git a/sources b/sources index 384dd58..51a184f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5efdcdd48e9e0d4ef7a706902d1f8b3d BackupPC-3.3.1.tar.gz +SHA512 (BackupPC-4.4.0.tar.gz) = 0c88447ab000c4a452034d5d8a074cd56801c7b38b0886e686e446c73ecfd0a40f0aa08703f76d16c31b24aec85c10c4ed1815d0cb67be5a1d66e5caeb3de418