Compare commits

..

3 commits

Author SHA1 Message Date
Fedora Release Engineering
6e6d2f22dc dist-git conversion 2010-07-29 16:31:32 +00:00
Bill Nottingham
1d66133120 Fix typo that causes a failure to update the common directory. (releng
#2781)
2009-11-26 01:08:55 +00:00
Jesse Keating
c9b42a4ced Initialize branch F-9 for zip 2008-04-19 18:44:44 +00:00
30 changed files with 738 additions and 1362 deletions

3
.gitignore vendored
View file

@ -1 +1,2 @@
zip30.tar.gz
zcrypt29.tar.gz
zip231.tar.gz

View file

@ -1,12 +0,0 @@
diff -urp zip30/fileio.c zip30/fileio.c
--- zip30/fileio.c 2008-05-29 03:13:24.000000000 +0300
+++ zip30/fileio.c 2023-05-02 12:19:50.488314853 +0300
@@ -3502,7 +3502,7 @@ zwchar *local_to_wide_string(local_strin
if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) {
ZIPERR(ZE_MEM, "local_to_wide_string");
}
- wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1);
+ wsize = mbstowcs(wc_string, local_string, wsize + 1);
wc_string[wsize] = (wchar_t) 0;
/* in case wchar_t is not zwchar */

19
exec-shield.patch Normal file
View file

@ -0,0 +1,19 @@
diff -ur zip-2.3/crc_i386.S zip-2.3-lhh/crc_i386.S
--- zip-2.3/crc_i386.S 1999-10-09 16:10:26.000000000 -0400
+++ zip-2.3-lhh/crc_i386.S 2003-10-24 16:15:52.000000000 -0400
@@ -230,3 +230,6 @@
#endif /* i386 || _i386 || _I386 || __i386 */
#endif /* !USE_ZLIB */
+
+.section .note.GNU-stack, "", @progbits
+.previous
diff -ur zip-2.3/match.S zip-2.3-lhh/match.S
--- zip-2.3/match.S 1999-07-27 17:18:14.000000000 -0400
+++ zip-2.3-lhh/match.S 2003-10-24 16:15:38.000000000 -0400
@@ -405,3 +405,5 @@
#endif /* i386 || _I386 || _i386 || __i386 */
#endif /* !USE_ZLIB */
+.section .note.GNU-stack, "", @progbits
+.previous

View file

@ -1,40 +0,0 @@
--- ./man/zipsplit.1 2008-05-08 10:17:48.000000000 +0200
+++ ./man/zipsplit.1 2013-04-26 18:33:12.492008280 +0200
@@ -12,6 +12,7 @@
.RB [ \-r\ room ]
.RB [ \-b\ path ]
.RB [ \-h ]
+.RB [ \-q ]
.RB [ \-v ]
.RB [ \-L ]
zipfile
@@ -47,6 +48,9 @@
.BI \-h
Show a short help.
.TP
+.BI \-q
+Suppress some informational messages.
+.TP
.BI \-v
Show version information.
.TP
--- ./man/zipnote.1 2013-04-26 18:40:32.145018756 +0200
+++ ./man/zipnote.1 2013-04-26 18:40:18.943018442 +0200
@@ -7,6 +7,7 @@
.RB [ \-w ]
.RB [ \-b\ path ]
.RB [ \-h ]
+.RB [ \-q ]
.RB [ \-v ]
.RB [ \-L ]
zipfile
@@ -27,6 +28,9 @@
.BI \-h
Show a short help.
.TP
+.BI \-q
+Suppress some informational messages.
+.TP
.BI \-v
Show version information.
.TP

View file

@ -1 +1,2 @@
7b74551e63f8ee6aab6fbc86676c0d37 zip30.tar.gz
922f7f38f8e50ec353fd5b3102e4d4d6 zcrypt29.tar.gz
6bfc076664416251d7624ab3538d1cb9 zip231.tar.gz

View file

@ -1,47 +0,0 @@
---
- hosts: localhost
tags:
- classic
tasks:
- name: Define remote_artifacts if it is not already defined
set_fact:
artifacts: ${HOME}/artifacts
when: artifacts is not defined
- name: Make artifacts directory
file: path={{ artifacts }} state=directory recurse=yes
- block:
- name: Execute tests
shell: |
logfile={{ artifacts }}/test.{{ item }}.log
exec 2>>$logfile 1>>$logfile
cd tests
#make script executable
chmod 0775 {{ item }}
#execute the test
python2 {{ item }}.py
if [ $? -eq 0 ]; then
echo "PASS {{ item }}" >> {{ artifacts }}/test.log
else
echo "FAIL {{ item }}" >> {{ artifacts }}/test.log
fi
with_items:
- "test_4GBsegfault"
- "test_big_file_in_archive"
- "test_long_path_in_archive"
- "test_many_files_in_archive"
- "test_umask"
- "test_umask_when_creating"
- "test_zipnote_fails_to_update_the_archive"
# Can't go in block. See
# https://github.com/ansible/ansible/issues/20736
- name: Check the results
shell: grep "^FAIL" {{ artifacts }}/test.log
register: test_fails
failed_when: test_fails.stdout or test_fails.stderr

View file

@ -1,154 +0,0 @@
'''
author = esakaiev@redhat.com
'''
import logging
import sys
import subprocess
import os
import shutil
def decorated_message(message):
"""
This decorator is used for providing logging header for different sections in the scripts
:param message: (`STRING`)
:return: decorated_function
"""
def decorated_function(func):
"""
:param func:
:return:
"""
def wrapper(self):
"""
:param self:
:return:
"""
print " "
print ("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
print (":: {0}".format(message))
print ("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
func(self)
return wrapper
return decorated_function
class BaseZipTests(object):
"""
This is a Base class for zip tests
"""
def __init__(self):
self._set_logger()
self._purpose = ""
self.print_test_purpose()
def _set_logger(self):
"""
This method is used for instantiating of logger
:return:
- None
"""
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
self.handler = logging.StreamHandler(sys.stdout)
self.handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('[ %(asctime)s ] :: [ %(message)s ]')
self.handler.setFormatter(formatter)
self.logger.addHandler(self.handler)
@decorated_message("PURPOSE")
def print_test_purpose(self):
"""
:return:
"""
print self._purpose
def run_cmd(self, cmd, exp_err_code, message, cwd=None):
"""
This method is used for executing cmd, check output error code and
add result in the logger
:param cmd: ('STRING') - some command to execute
:param exp_err_code: ('INTEGER') - expected error code
:param message: ('STRING') - command description
:param cwd: ('STRING') - path to directory, where need to execute cmd
:return:
- errcode ('INTEGER')
"""
try:
errcode = subprocess.call(cmd, shell=True, cwd=cwd, stdout=sys.stderr.fileno())
if errcode != exp_err_code:
self.logger.debug("FAIL :: {0}".format(message))
else:
self.logger.debug("PASS ] :: [ {0}".format(message))
return errcode
except subprocess.CalledProcessError as exp:
self.logger.error("Could not execute command {0}, e: {1}".format(cmd, exp))
def check_package(self):
"""
This method is used for checking, if zip package is installed
:return: None
"""
assert self.run_cmd("dnf list installed zip", 0, "Dnf package should be installed") == 0
def check_output(self, cmd, exp_output, message, cwd=None):
"""
This method is used for executing cmd and compare output result with expected message
:param cmd: (`STRING`) - some command to execute
:param exp_err_code: (`INTEGER`) - expected error code
:param message: (`STRING`) - command description
:param cwd: (`STRING`) - path to directory, where need to execute cmd
:return:
- output message (`STRING`)
"""
try:
output = self.execute_cmd(cmd, cwd)
if output != exp_output:
self.logger.debug("FAIL ]:: [ {}".format(message))
else:
self.logger.debug("PASS ] :: [ {}".format(message))
return output
except subprocess.CalledProcessError as exp:
self.logger.error(r'FAIL ] :: [ Could not execute command: "{0}",\
ex: {1}'.format(cmd, exp))
def execute_cmd(self, cmd, cwd=None):
"""
This method is used for executing cmd and return output message
:param cmd: (`STRING`) - some command to execute
:param cwd: (`STRING`) - path to directory, where need to execute cmd
:return:
- output message (`STRING`)
"""
try:
output = subprocess.check_output(cmd, shell=True, cwd=cwd)
return output
except subprocess.CalledProcessError as exp:
self.logger.error(r'FAIL ] :: [ Could not execute command: "{0}",\
ex: {1}'.format(cmd, exp))
def remove_file(self, file_path, is_directory=False):
"""
This method is used for removing files or directories after execution of test cases
:param file_path:(`STRING`) - path to file/folder
:param is_directory: (`BOOLEAN`) - True for directories
:return: None
"""
try:
if is_directory:
shutil.rmtree(file_path)
else:
os.remove(file_path)
self.logger.debug("File {0} has been successfully removed".format(file_path))
except OSError, exp:
self.logger.debug("File {0} doesn't exists, e: {1}".format(file_path, exp))

View file

@ -1,89 +0,0 @@
# Copyright (c) 2018 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Author: Eduard Sakaiev <esakaiev@redhat.com>
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''zip mustn't segfault when packing files larger than 4 GB.
Note: this test can't run on RHEL 2.1 since the utilities used here
in the test don't work there as expected. This test can't run on
RHEL 5 either, but in this case, the reason is reworked zip which
can't work with files larger than 4 GB at all.'''
class Test4GBsegfault(BaseZipTests):
"""
This class is used for providing functionality
for Test4GBsegfault test case
"""
def __init__(self):
"""
"""
self._purpose = PURPOSE
super(Test4GBsegfault, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
@decorated_message("SETUP")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0,
"Creating tmp directory {}".format(self._tmpdir))
@decorated_message("TEST")
def start_test(self):
"""
:return:
"""
self.run_cmd("dd if=/dev/zero of=testfile bs=1M count=4097", 0,
"Creating of 4Gb file", self._tmpdir + "/")
self.run_cmd("zip testfile.zip testfile", 0,
"Archiving file with zip", self._tmpdir + "/")
@decorated_message("CLEANUP")
def cleanup(self):
"""
:return:
"""
self.run_cmd("rm -r {}".format(self._tmpdir), 0,
"Removing tmp directory")
if __name__ == "__main__":
test_4gb = Test4GBsegfault()
try:
test_4gb.prepare_setup()
test_4gb.start_test()
except AssertionError, exp:
test_4gb.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test_4gb.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test_4gb.cleanup()

View file

@ -1,128 +0,0 @@
# python2 test_big_file_in_archive.py
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/big-file-in-archive/runtest.sh
# Description: zip - tests handling large files (2GB,3MB,4GB)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Include rhts and rhtslib environment
# rpm -q --quiet rhtslib || rpm -Uvh http://nest.test.redhat.com/mnt/qa/scratch/pmuller/rhtslib/rhtslib.rpm
import sys
import uuid
import platform
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name: Big file in archive
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/big-file-in-archive/PURPOSE
Short Description:
Tests handling large files (2GB,3GB,4GB)
Long Description:
Test creates three files (2GB, 3GB and 4GB large) and attempts to archive each of them using zip. Then original files are deleted
and archives are unpacked, to check size of unpacked files. Current version of zip on all archs and distros in time of
writing(2.31-1) passes test. Note: 4GB file is too large for zip to handle, so it is not supposed to be successfully archived
or unpacked, test just checks for correct return codes.
how to run it:
python2 test_big_file_in_archive.py
TEST UPDATED (esakaiev)
------------------------
After rebase to zip-3.0-1 there is no 4GB limit. Patching the test accordingly.
'''
class TestBigFileInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestBigFileInArchive test case
"""
def __init__(self):
"""
"""
self._purpose = PURPOSE
super(TestBigFileInArchive, self).__init__()
self._files = ['/tmp/tmp.{}'.format(uuid.uuid4()) for x in xrange(3)]
self._files_sizes = [2048, 3056, 4096]
self._os_distribution = platform.linux_distribution()
@decorated_message("Preparing Setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
for i, file_name in enumerate(self._files):
size = self._files_sizes[i]
assert self.run_cmd("dd if=/dev/zero of={0} bs=1M count={1}".format(file_name, size), 0,
"Creating {0} GB file".format(size / 1000), cwd="/tmp/") == 0
@decorated_message("Starting Test")
def start_test(self):
"""
:return:
"""
for i, file_name in enumerate(self._files):
error_code = 0
self.remove_file(file_name + ".zip") # #remove archive temp files, we just need unused temp names
size = self._files_sizes[i]
self.run_cmd("zip {0} {1}".format(file_name + ".zip", file_name), error_code,
"Archiving {} Gb file".format(size / 1000), cwd="/tmp/")
self.remove_file(file_name) # Removing original files
self.run_cmd("unzip {0} -d /".format(file_name + ".zip"), error_code,
"Unpacking {} Gb file".format(size / 1000), cwd="/tmp/")
# Checking new 2GB file size
self.check_output("stat -c %s {0}".format(self._files[0]), "2147483648\n", "Checking new 2GB file size")
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
for file_name in self._files:
self.remove_file(file_name)
self.remove_file(file_name + ".zip")
if __name__ == "__main__":
test = TestBigFileInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,140 +0,0 @@
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/long-path-in-archive/runtest.sh
# Description: zip - tests handling very long paths within archive (15*256 characters long path)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
import os
from shutil import copyfile
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name:
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/long-path-in-archive/PURPOSE
Short Description:
Tests handling very long paths within archive (15*256 characters long path)
Long Description:
This test creates file with very long path of 15 directories, each 255 characters. This whole directory structure is then zipped and unzipped
to determine if zip program handles paths this long correctly. Current version of zip on all archs and distros in time of writing(2.31-1) passes test.
how to run it:
choose arch and distro
TEST UPDATED (esakaiev)
'''
class TestLongPathInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestLongPathInArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestLongPathInArchive, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._file_under_test = "/proc/version"
self._long_name = "".join(["aaaaa" for i in xrange(51)])
self._long_path = "/".join([self._long_name for x in xrange(15)])
self._test_file_path = self._tmpdir + "/" + self._long_path + "/" + "testfile"
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
# creating folders structure:
try:
os.makedirs(self._tmpdir + "/" + self._long_path)
self.logger.debug("PASS ] :: [ Test directory with long path has been successfully created")
except OSError, exp:
self.logger.debug("FAIL ] :: [ Could not create directories by path, e: {}".format(exp))
raise
copyfile(self._file_under_test, self._test_file_path)
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
self.run_cmd("zip -r test {0} -q".format(self._long_name), 0,
"Zipping test file",
cwd=self._tmpdir)
self.remove_file(self._tmpdir + "/" + self._long_name, True)
self.run_cmd("unzip -qq test.zip", 0,
"Unzipping test file",
cwd=self._tmpdir)
content_init = None
with open(self._file_under_test) as fp_init:
content_init = fp_init.read().replace('\n', '')
content_fut = None
with open(self._test_file_path) as fp_fut:
content_fut = fp_fut.read().replace('\n', '')
if content_init == content_fut:
self.logger.debug("PASS ] :: [ {}".format("Content of the initial file and file under test was matched"))
else:
self.logger.debug("FAIL ] :: [ {}".format("Content of the initial file and file under test wasn't matched"))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestLongPathInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,140 +0,0 @@
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/many-files-in-archive/runtest.sh
# Description: zip - Tests behaviour with many files in archive (1048578 files)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name:
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/many-files-in-archive/PURPOSE
Short Description:
Tests behaviour with many files in archive (1048577 files)
Long Description:
This test creates 1048576 empty files and one non-empty file. Then zips and unzips directory containing all those files and tests content of
non-empty file and count of unzipped files. This test is very time-consuming. Current version of zip on all archs and distros in time of writing
(2.31-1) passes test.
how to run it:
choose arch and distro
TEST UPDATED (esakaiev)
'''
class TestManyFilesInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestManyFilesInArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestManyFilesInArchive, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._files_number = 1048576
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0,
"Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
self.logger.debug("Creating {0} files".format(self._files_number))
[open("{0}/{1}".format(self._tmpdir, i), "w").close() for i in xrange(self._files_number)]
self.logger.debug("Creating test file")
with open("{0}/test.txt".format(self._tmpdir), "w") as fp:
fp.write("12345")
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
self.run_cmd("zip -r test {0} -q".format(self._tmpdir.split('/')[-1]), 0,
"Zipping test files",
cwd='/tmp')
self.remove_file(self._tmpdir, True)
self.run_cmd("unzip -qq test.zip", 0,
"Unzipping test files",
cwd='/tmp')
test_file_content = None
with open("{0}/test.txt".format(self._tmpdir)) as fp:
test_file_content = fp.read().replace('/n', '')
if test_file_content == "12345":
self.logger.debug("PASS ] :: [ {}".format("Unpacked content matches original"))
else:
self.logger.debug("FAIL ] :: [ {}".format("Unpacked content does not match original!"))
files_count = self.execute_cmd("ls {0} | wc -l".format(self._tmpdir)).replace("\n", "")
if files_count == str(self._files_number + 1):
self.logger.debug(
"PASS ] :: [ {}".format("All {0} files present after unpacking".format(self._files_number + 1)))
else:
self.logger.debug(r"FAIL ] :: [ File count changed after unpacking! \
Before zipping there was {0} files. \
After unzip there is {1} files.".format(self._files_number + 1, files_count))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
self.remove_file("/tmp/test.zip")
if __name__ == "__main__":
test = TestManyFilesInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,106 +0,0 @@
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Author: Radek Biba <rbiba@redhat.com>
import sys
import uuid
UMASK = "Running umask"
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
zip is supposed to honor umask settings when creating archives.
This test case just checks if it really does
TEST UPDATED (esakaiev)
'''
class TestUmask(BaseZipTests):
"""
This class is used for providing functionality
for TestUmask test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestUmask, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._mask_list = ["0", "2", "20", "22", "200", "202", "220", "222", "6", "60"]
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
# Trying to verify that zip honors umask. Trying with various combinations
# of 'w's and 'r's for User, Group, and Others.
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
for mask in self._mask_list:
self.logger.debug("Running umask and zipping file {0}".format(mask))
self.execute_cmd("umask {0}; touch {0}; zip -q {0}.zip {0}".format(mask), cwd=self._tmpdir)
stat_test_zip = self.execute_cmd("stat -c %a {0}.zip".format(mask), cwd=self._tmpdir).replace("\n", "")
stat_test = self.execute_cmd("stat -c %a {0}".format(mask), cwd=self._tmpdir).replace("\n", "")
print stat_test_zip, stat_test
if stat_test_zip == stat_test:
self.logger.debug(
"PASS ] :: [ permissions for {0}.zip match to {0}, {1} == {2}".format(mask, stat_test_zip,
stat_test))
else:
self.logger.debug(
"FAIL ] :: [ permissions for {0}.zip doesn't match to {0}, {1} != {2}".format(mask, stat_test_zip,
stat_test))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestUmask()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,105 +0,0 @@
# Author: Josef Zila <jzila@redhat.com>
# Description: Zip did not honor umask setting when creating archives.
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
UMASK = "Running umask"
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name: umask-when-creating
Author: Josef Zila <jzila@redhat.com>
Short Description:
zip does not honor umaks setting when creating archive
Long Description:
zip appears to have a built-in umask of 0022 regardless of the global umask.
With umask set to 0000, zip-2.3-27 creates zip files with permissions of
0644 instead of 0666. Previous versions created files with correct permissions.
TEST UPDATED (esakaiev)
'''
class TestUmaskWhenCreating(BaseZipTests):
"""
This class is used for providing functionality
for TestUmaskWhenCreating test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestUmaskWhenCreating, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._mask_list = ["777", "000", "027"]
self._expected_results = ["----------", "-rw-rw-rw-", "-rw-r-----"]
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
@decorated_message("Starting Test cases")
def start_test(self):
for i, mask in enumerate(self._mask_list):
self.logger.debug("Running umask and zipping file {0}".format(mask))
self.execute_cmd("umask -S {0} >> /dev/null; zip test /etc/services >> /dev/null".format(mask),
cwd=self._tmpdir)
result = self.execute_cmd("ls -l test.zip | cut -b 1-10", cwd=self._tmpdir).replace("\n", "")
if result == self._expected_results[i]:
self.logger.debug(
"PASS ] :: [ file permissions match to {0}".format(self._expected_results[i]))
else:
self.logger.debug(
"FAIL ] :: [ file permissions don't match to {0}".format(self._expected_results[i]))
self.remove_file(self._tmpdir + "/" + "test.zip")
@decorated_message("Cleaning up")
def cleanup(self):
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestUmaskWhenCreating()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,105 +0,0 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Description: zipnote fails to update the archive
# Author: Karel Volny <kvolny@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2015 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
PURPOSE of zipnote-fails-to-update-the-archive
Description: zipnote fails to update the archive
Author: Karel Volny <kvolny@redhat.com>
TEST UPDATED (esakaiev)
'''
class TestZipnoteFailsToUpdateTheArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestZipnoteFailsToUpdateTheArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestZipnoteFailsToUpdateTheArchive, self).__init__()
self._tmpdir = '/tmp/tmp.{}'.format(uuid.uuid4())
@decorated_message("Preparing setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
@decorated_message("Starting Test")
def start_test(self):
"""
:return:
"""
self.run_cmd("touch file", 0, "Creating the Demo file", cwd=self._tmpdir)
self.run_cmd("zip archive.zip file", 0, "Creating the archive including the file", cwd=self._tmpdir)
self.run_cmd("zipnote archive.zip > info.txt", 0, "Reading the archive comments", cwd=self._tmpdir)
## bad - e.g. zip-3.0-1.el6.i686:
# zipnote error: Interrupted (aborting)
# Segmentation fault
## good: no output
self.run_cmd("zipnote -w archive.zip < info.txt > output_file.txt 2>&1", 0, "Writing comments to the archive",
cwd=self._tmpdir)
if 'error' in open(self._tmpdir + '/output_file.txt').read():
self.logger.debug("FAIL ] :: [ File shouldn't contain an error pattern")
else:
self.logger.debug("PASS ] :: [ File doesn't contain an error pattern")
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.run_cmd("rm -r {}".format(self._tmpdir), 0,
"Removing tmp directory")
if __name__ == "__main__":
test = TestZipnoteFailsToUpdateTheArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

11
zip-2.3-currdir.patch Normal file
View file

@ -0,0 +1,11 @@
--- zip-2.3/util.c.pom 1999-11-07 11:29:38.000000000 +0100
+++ zip-2.3/util.c 2005-01-17 13:46:26.165396792 +0100
@@ -190,6 +190,8 @@
/* Compare the sh pattern p with the string s and return true if they match,
false if they don't or if there is a syntax error in the pattern. */
{
+ while (s[0] == '.' && s[1] == '/')
+ s += 2; /* strip redundant leading "./" sections */
return recmatch((ZCONST uch *) p, (ZCONST uch *) s, cs) == 1;
}

11
zip-2.3-sf.patch Normal file
View file

@ -0,0 +1,11 @@
--- zip-2.3/unix/unix.c.pom 2006-10-09 16:24:47.000000000 +0200
+++ zip-2.3/unix/unix.c 2006-10-09 17:14:18.000000000 +0200
@@ -208,7 +208,7 @@
doesn't collide with error values. 2^32 - 8193 should be plenty until
info-zip supports zip64. */
if (s.st_size > MAX_ZIP_SIZE) {
- zipwarn("file too large: ", a);
+ zipwarn("file too large: ", n);
return ZE_MISS;
}

213
zip-2.31-configure.patch Normal file
View file

@ -0,0 +1,213 @@
--- zip-2.31/unix/configure.lhh 2005-11-10 13:25:26.000000000 +0100
+++ zip-2.31/unix/configure 2005-11-10 13:40:44.311641648 +0100
@@ -76,14 +76,20 @@
done
fi
-echo Check for prototypes
+echo -n Check for prototypes...
echo "int main(int argc, char *argv[]) { return 0; }" > conftest.c
$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_PROTO"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_PROTO"
+else
+ echo yes
+fi
+
# const check currently handles mips cc and non ANSI compilers.
# does it need more ?
-echo Check the handling of const
+echo -n Check the handling of const...
cat > conftest.c << _EOF_
typedef int charset[2];
int main()
@@ -94,9 +100,15 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_CONST"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_CONST"
+else
+ echo yes
+fi
+
-echo Check for time_t
+echo -n Check for time_t...
cat > conftest.c << _EOF_
#include <sys/types.h>
#include <time.h>
@@ -107,9 +119,15 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_TIME_T"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_TIME_T"
+else
+ echo yes
+fi
+
-echo Check for size_t
+echo -n Check for size_t...
cat > conftest.c << _EOF_
#include <sys/types.h>
int main()
@@ -119,7 +137,13 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_SIZE_T"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_SIZE_T"
+else
+ echo yes
+fi
+
echo Check for gcc no-builtin flag
# -fno-builtin since version 2
@@ -140,18 +164,29 @@
# add NO_'function_name' to flags if missing
for func in rmdir strchr strrchr rename mktemp mktime mkstemp
do
- echo Check for $func
- echo "int main(){ $func(); return 0; }" > conftest.c
+ echo -n Check for $func...
+ echo "char $func(void); int main(){ $func(); return 0; }" > conftest.c
$CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
- [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ else
+ echo yes
+ fi
done
-echo Check for memset
+echo -n Check for memset...
echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DZMEM"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DZMEM"
+else
+ echo yes
+fi
+
-echo Check for errno declaration
+echo -n Check for errno declaration...
cat > conftest.c << _EOF_
#include <errno.h>
main()
@@ -161,9 +196,14 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_ERRNO"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_ERRNO"
+else
+ echo yes
+fi
-echo Check for directory libraries
+echo -n Check for directory libraries...
cat > conftest.c << _EOF_
int main() { return closedir(opendir(".")); }
_EOF_
@@ -178,21 +218,30 @@
done
if [ ${OPT} ]; then
LFLAGS2="${LFLAGS2} ${OPT}"
+ echo yes, ${OPT}
else
CFLAGS="${CFLAGS} -DNO_DIR"
+ echo no
fi
fi
# Dynix/ptx 1.3 needed this
-echo Check for readlink
+echo -n Check for readlink...
echo "int main(){ return readlink(); }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
$CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
- [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
+ if [ $? -eq 0 ]; then
+ LFLAGS2="${LFLAGS2} -lseq"
+ echo yes, -lseq
+ else
+ echo no
+ fi
+else
+ echo yes
fi
-echo Check for directory include file
+echo -n Check for directory include file...
OPT=""
for inc in dirent.h sys/ndir.h ndir.h sys/dir.h
do
@@ -200,17 +249,19 @@
$CPP conftest.c > /dev/null 2>/dev/null
[ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
+echo "${OPT}"
CFLAGS="${CFLAGS} ${OPT}"
-echo Check for non existent include files
+echo -n Check for non existent include files...
for inc in stdlib.h stddef.h unistd.h fcntl.h string.h
do
echo "#include <$inc>" > conftest.c
$CPP conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $inc | tr '[a-z]./' '[A-Z]__'`"
done
+echo ok
-echo Check for terminal I/O include file
+echo -n Check for terminal I/O include file...
OPT=""
for inc in termios.h termio.h sgtty.h
do
@@ -219,9 +270,10 @@
[ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
CFLAGS="${CFLAGS} ${OPT}"
+echo $OPT
# needed for AIX (and others ?) when mmap is used
-echo Check for valloc
+echo -n Check for valloc...
cat > conftest.c << _EOF_
main()
{
@@ -231,7 +283,13 @@
}
_EOF_
$CC ${CFLAGS} conftest.c > /dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_VALLOC"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_VALLOC"
+else
+ echo yes
+fi
+
echo Check for 64bit fseek
for func in fseeko fseek64

11
zip-2.31-install.patch Normal file
View file

@ -0,0 +1,11 @@
--- zip-2.31/unix/Makefile.install 2005-02-28 08:33:50.000000000 +0100
+++ zip-2.31/unix/Makefile 2005-11-10 12:58:33.221425848 +0100
@@ -129,7 +129,7 @@
$(INSTALL_PROGRAM) $(ZIPS) $(BINDIR)
-cd $(BINDIR); $(CHMOD) $(BINFLAGS) $(ZIPS)
-$(INSTALL_D) $(MANDIR)
- $(INSTALL) man/zip.1 $(MANDIR)/zip.$(manext)
+ $(INSTALL_PROGRAM) man/zip.1 $(MANDIR)/zip.$(manext)
$(CHMOD) $(MANFLAGS) $(MANDIR)/zip.$(manext)
uninstall:

293
zip-2.31-near-4GB.patch Normal file
View file

@ -0,0 +1,293 @@
--- zip-2.31/unix/zipup.h.4GB 2005-01-29 07:47:58.000000000 +0100
+++ zip-2.31/unix/zipup.h 2005-11-10 13:18:02.990593904 +0100
@@ -6,13 +6,19 @@
If, for some reason, both of these files are missing, the Info-ZIP license
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
*/
+#include <features.h>
+#include <fcntl.h>
#ifndef O_RDONLY
# define O_RDONLY 0
#endif
#ifndef O_BINARY
# define O_BINARY 0
#endif
-#define fhow (O_RDONLY|O_BINARY)
+#ifdef _LARGEFILE64_SOURCE
+#define fhow (O_RDONLY | O_LARGEFILE)
+#else
+#define fhow O_RDONLY
+#endif
#define fbad (-1)
typedef int ftype;
#define zopen(n,p) open(n,p)
--- zip-2.31/unix/unix.c.4GB 2005-02-11 03:35:02.000000000 +0100
+++ zip-2.31/unix/unix.c 2005-11-10 13:24:19.573344624 +0100
@@ -113,7 +113,11 @@
char *e; /* pointer to name from readd() */
int m; /* matched flag */
char *p; /* path for recursion */
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s; /* result of stat() */
+#else
struct stat s; /* result of stat() */
+#endif
struct zlist far *z; /* steps through zfiles list */
if (strcmp(n, "-") == 0) /* if compressing stdin */
@@ -202,6 +206,15 @@
} /* (s.st_mode & S_IFDIR) */
else
zipwarn("ignoring special file: ", n);
+
+ /* Zip uses negative error codes (IIRC, to -3). Make sure file size
+ doesn't collide with error values. 2^32 - 8193 should be plenty until
+ info-zip supports zip64. */
+ if (s.st_size > MAX_ZIP_SIZE) {
+ zipwarn("file too large: ", a);
+ return ZE_MISS;
+ }
+
return ZE_OK;
}
@@ -321,7 +334,12 @@
If f is "-", use standard input as the file. If f is a device, return
a file size of -1 */
{
- struct stat s; /* results of stat() */
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s; /* results of stat() */
+#else
+ struct stat s;
+#endif
+
/* converted to pointer from using FNMAX - 11/8/04 EG */
char *name;
int len = strlen(f);
@@ -343,7 +361,11 @@
name[len - 1] = '\0';
/* not all systems allow stat'ing a file with / appended */
if (strcmp(f, "-") == 0) {
+#ifdef _LARGEFILE64_SOURCE
+ if (fstat64(fileno(stdin), &s) != 0) {
+#else
if (fstat(fileno(stdin), &s) != 0) {
+#endif
free(name);
error("fstat(stdin)");
}
@@ -422,7 +444,11 @@
/* store full data in local header but just modification time stamp info
in central header */
{
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s;
+#else
struct stat s;
+#endif
char *name;
int len = strlen(z->name);
--- zip-2.31/unix/configure.4GB 2004-12-05 09:51:18.000000000 +0100
+++ zip-2.31/unix/configure 2005-11-10 13:12:47.010630160 +0100
@@ -12,7 +12,7 @@
trap "rm -f conftest* core a.out; exit 1" 1 2 3 15
CC=${1-cc}
-CFLAGS=${2-"-O2 -I. -DUNIX"}
+CFLAGS=${2-"-O2 -I. -DUNIX -g -D_LARGEFILE64_SOURCE"}
LFLAGS1=""
LN="ln -s"
--- zip-2.31/fileio.c.4GB 2005-11-10 12:59:43.000000000 +0100
+++ zip-2.31/fileio.c 2005-11-10 13:07:13.190378552 +0100
@@ -599,7 +599,11 @@
this will be done by setfileattr() later.
*/
{
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 t; /* results of stat64() */
+#else
struct stat t; /* results of stat() */
+#endif
#if defined(CMS_MVS)
/* cmsmvs.h defines FOPW_TEMP as memory(hiperspace). Since memory is
* lost at end of run, always do copy instead of rename.
@@ -698,8 +702,11 @@
return _dos_files(&buf, f, 0xff) < 0 ? 0x20 : buf.atr;
#else
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s;
+#else
struct stat s;
-
+#endif
return SSTAT(f, &s) == 0 ? (int) s.st_mode : 0;
#endif
}
@@ -920,3 +927,108 @@
}
#endif /* NO_RENAME */
+
+/*
+ Wrapper functions for fopen/fseek/ftell for >2GB files.
+
+ So, what we do here is add support for 4GB seeks. More appropriately,
+ 2^32 - 8193 bytes. This is tailored to the way zip uses fseek; it never
+ seeks backwards more than 8192 bytes.
+ */
+#ifdef _LARGEFILE64_SOURCE
+FILE *
+lfopen(const char *path, const char *mode)
+{
+ int fd;
+ FILE *f;
+ int flags;
+ int x;
+ char prev;
+
+ if (!path || !mode | !strlen(mode))
+ return NULL;
+
+ for (x = 0; x < strlen(mode); x++) {
+ switch (mode[x]) {
+ case 'r':
+ flags = O_RDONLY | O_LARGEFILE;
+ break;
+ case 'w':
+ flags = O_WRONLY | O_LARGEFILE | O_CREAT | O_TRUNC;
+ break;
+ case 'a':
+ flags = O_RDWR | O_LARGEFILE;
+ break;
+ case 'b': /* b has no effect */
+ continue;
+ case '+':
+ if (prev == 'r') {
+ flags = O_RDWR | O_LARGEFILE;
+ } else if (prev == 'w') {
+ flags = O_RDWR | O_LARGEFILE | O_CREAT |
+ O_TRUNC;
+ } else if (prev == 'a') {
+ flags = O_RDWR | O_LARGEFILE | O_CREAT;
+ } else
+ return NULL;
+ break;
+ }
+ prev = mode[x];
+ }
+
+ fd = open(path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd == -1)
+ return NULL;
+
+ f = fdopen(fd, mode);
+ return f;
+}
+
+int
+lfseek(FILE *f, ulg pos, int whence)
+{
+ struct stat64 sb;
+ ulg o, delta;
+ int ret;
+
+ /* Hurts performance */
+ fflush(f);
+
+ if (pos <= MAX_ZIP_SIZE) {
+ return (lseek64(fileno(f), pos, whence) == (off64_t)-1);
+ }
+
+ delta = ~((off64_t)pos - 1);
+ if (whence == SEEK_CUR) {
+ o = lseek64(fileno(f), 0, SEEK_CUR);
+ if (o < delta)
+ return -1;
+
+ o -= delta;
+ return (lseek64(fileno(f), o, SEEK_SET) == (off64_t)-1);
+ }
+
+ if (whence == SEEK_END) {
+ fstat64(fileno(f), &sb);
+
+ if ((ulg)sb.st_size < delta)
+ return -1;
+
+ o = (off64_t)((sb.st_size) - delta);
+ return (lseek64(fileno(f), o, SEEK_SET) == (off64_t)-1);
+ }
+
+ return -1;
+}
+
+
+ulg
+lftell(FILE *f)
+{
+ /* Hurts performance */
+ fflush(f);
+ return (ulg)lseek64(fileno(f), 0, SEEK_CUR);
+}
+
+#endif /* _LARGEFILE64_SOURCE */
+
--- zip-2.31/zip.h.4GB 2005-11-10 12:59:43.000000000 +0100
+++ zip-2.31/zip.h 2005-11-10 13:18:57.653283912 +0100
@@ -236,6 +236,7 @@
#define DOSTIME_MINIMUM ((ulg)0x00210000L)
#define DOSTIME_2038_01_18 ((ulg)0x74320000L)
+#define MAX_ZIP_SIZE 0xffffdffe /* Max archive / archive member size */
/* Public globals */
extern uch upper[256]; /* Country dependent case map table */
@@ -411,6 +412,11 @@
int putcentral OF((struct zlist far *, FILE *));
int putend OF((int, ulg, ulg, extent, char *, FILE *));
int zipcopy OF((struct zlist far *, FILE *, FILE *));
+#ifdef _LARGEFILE64_SOURCE
+int lfseek OF((FILE *, ulg, int));
+ulg lftell OF((FILE *));
+FILE *lfopen OF((const char *, const char *));
+#endif /* LF64 */
/* in fileio.c */
#ifndef UTIL
--- zip-2.31/tailor.h.4GB 2005-03-04 08:45:26.000000000 +0100
+++ zip-2.31/tailor.h 2005-11-10 13:11:18.909023640 +0100
@@ -368,12 +368,27 @@
# define DYN_ALLOC
#endif
+#ifdef _LARGEFILE64_SOURCE
+#define fopen lfopen
+#define fseek lfseek
+#define ftell lftell
+#endif /* LF64 */
+
#ifndef SSTAT
-# define SSTAT stat
+# ifdef _LARGEFILE64_SOURCE
+# define SSTAT stat64
+# else
+# define SSTAT stat
+# endif /* LF64 */
#endif
#ifdef S_IFLNK
-# define LSTAT lstat
-# define LSSTAT(n, s) (linkput ? lstat((n), (s)) : SSTAT((n), (s)))
+# ifdef _LARGEFILE64_SOURCE
+# define LSTAT lstat64
+# define LSSTAT(n, s) (linkput ? lstat64((n), (s)) : SSTAT((n), (s)))
+# else
+# define LSTAT lstat64
+# define LSSTAT(n, s) (linkput ? lstat64((n), (s)) : SSTAT((n), (s)))
+# endif /* LF64 */
#else
# define LSTAT SSTAT
# define LSSTAT SSTAT

View file

@ -1,7 +1,7 @@
--- zip-2.31/unix/Makefile.time 2007-02-07 09:36:30.000000000 +0100
+++ zip-2.31/unix/Makefile 2007-02-07 09:38:42.000000000 +0100
@@ -24,7 +24,7 @@
E =
EXE =
# probably can change this to 'install' if you have it
-INSTALL_PROGRAM = cp

12
zip-2.31-umask_mode.patch Normal file
View file

@ -0,0 +1,12 @@
diff -up zip-2.31/fileio.c.pom zip-2.31/fileio.c
--- zip-2.31/fileio.c.pom 2007-11-05 14:02:41.000000000 +0100
+++ zip-2.31/fileio.c 2007-11-05 14:03:09.000000000 +0100
@@ -976,7 +976,7 @@ lfopen(const char *path, const char *mod
prev = mode[x];
}
- fd = open(path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ fd = open(path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (fd == -1)
return NULL;

View file

@ -1,12 +0,0 @@
diff -up zip30/util.c.currdir zip30/util.c
--- zip30/util.c.currdir 2009-11-16 12:42:17.783961701 +0100
+++ zip30/util.c 2009-11-16 12:42:58.185960707 +0100
@@ -493,6 +493,8 @@ int cs; /* force case-se
/* Compare the sh pattern p with the string s and return true if they match,
false if they don't or if there is a syntax error in the pattern. */
{
+ while (s[0] == '.' && s[1] == '/')
+ s += 2; /* strip redundant leading "./" sections */
return recmatch(p, s, cs) == 1;
}

View file

@ -1,20 +0,0 @@
diff -up zip30/crc_i386.S.exec_shield zip30/crc_i386.S
--- zip30/crc_i386.S.exec_shield 2009-11-13 18:37:45.000000000 +0100
+++ zip30/crc_i386.S 2009-11-13 18:39:54.435390166 +0100
@@ -302,3 +302,6 @@ _crc32: /* ulg c
#endif /* i386 || _i386 || _I386 || __i386 */
#endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
+
+.section .note.GNU-stack, "", @progbits
+.previous
diff -up zip30/match.S.exec_shield zip30/match.S
--- zip30/match.S.exec_shield 2005-01-28 10:40:14.000000000 +0100
+++ zip30/match.S 2009-11-13 18:39:48.570389058 +0100
@@ -405,3 +405,6 @@ L__return:
#endif /* i386 || _I386 || _i386 || __i386 */
#endif /* !USE_ZLIB */
+
+.section .note.GNU-stack, "", @progbits
+.previous

View file

@ -1,20 +0,0 @@
--- a/zip.c
+++ a/zip.c
@@ -1028,7 +1028,7 @@ local void help_extended()
for (i = 0; i < sizeof(text)/sizeof(char *); i++)
{
- printf(text[i]);
+ printf("%s", text[i]);
putchar('\n');
}
#ifdef DOS
@@ -1225,7 +1225,7 @@ local void version_info()
CR_MAJORVER, CR_MINORVER, CR_BETA_VER, CR_VERSION_DATE);
for (i = 0; i < sizeof(cryptnote)/sizeof(char *); i++)
{
- printf(cryptnote[i]);
+ printf("%s", cryptnote[i]);
putchar('\n');
}
++i; /* crypt support means there IS at least one compilation option */

View file

@ -1,11 +0,0 @@
--- ./man/zip.1.old 2024-12-11 10:51:22.837845520 +0100
+++ ./man/zip.1 2024-12-11 10:51:34.458142392 +0100
@@ -2297,7 +2297,7 @@
.B \-X
.TP
.PD
-.B \-\-no\-extra
+.B \-\-strip\-extra
Do not save extra file attributes (Extended Attributes on OS/2, uid/gid
and file times on Unix). The zip format uses extra fields to include
additional information for each entry. Some extra fields are specific

View file

@ -1,15 +0,0 @@
zip uses C89-only features, so it needs to be built in C89 mode.
diff --git a/unix/Makefile b/unix/Makefile
index 86cf54bf0f56cea9..244390893eab5fc6 100644
--- a/unix/Makefile
+++ b/unix/Makefile
@@ -202,7 +202,7 @@ generic: flags
eval $(MAKE) $(MAKEF) zips `cat flags`
generic_gcc:
- $(MAKE) $(MAKEF) generic CC=gcc CPP="gcc -E"
+ $(MAKE) $(MAKEF) generic CC="gcc -std=gnu89" CPP="gcc -E"
# AT&T 6300 PLUS (don't know yet how to allocate 64K bytes):
att6300nodir:

249
zip.spec
View file

@ -1,27 +1,23 @@
Summary: A file compression and packaging utility compatible with PKZIP
Name: zip
Version: 3.0
Release: 46%{?dist}
License: Info-ZIP
Source: http://downloads.sourceforge.net/infozip/zip30.tar.gz
URL: http://www.info-zip.org/Zip.html
# This patch will probably be merged to zip 3.1
# http://www.info-zip.org/board/board.pl?m-1249408491/
Patch1: zip-3.0-exec-shield.patch
# Not upstreamed.
Patch2: zip-3.0-currdir.patch
# Not upstreamed.
Patch3: zip-3.0-time.patch
Patch4: man.patch
Patch5: zip-3.0-format-security.patch
Patch6: zipnote.patch
Patch7: zip-gnu89-build.patch
Patch8: buffer_overflow.patch
Patch9: zip-3.0-man-strip-extra.patch
BuildRequires: make
BuildRequires: bzip2-devel, gcc
Requires: unzip
Version: 2.31
Release: 6%{?dist}
License: BSD
Group: Applications/Archiving
Source: http://ftp.info-zip.org/pub/infozip/src/zip231.tar.gz
Source1: ftp://ftp.freesoftware.com/pub/infozip/src/zcrypt29.tar.gz
URL: http://www.info-zip.org/pub/infozip/Zip.html
Patch0: zip23.patch
Patch1: exec-shield.patch
Patch2: zip23-umask.patch
Patch5: zip-2.3-currdir.patch
Patch6: zip-2.31-install.patch
Patch7: zip-2.31-near-4GB.patch
Patch8: zip-2.31-configure.patch
Patch9: zip-2.31-time.patch
Patch10: zip-2.3-sf.patch
Patch11: zip-2.31-umask_mode.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
The zip program is a compression and file packaging utility. Zip is
@ -33,200 +29,49 @@ Install the zip package if you need to compress files using the zip
program.
%prep
%setup -q -n zip30
%patch -P1 -p1 -b .exec-shield
%patch -P2 -p1 -b .currdir
%patch -P3 -p1 -b .time
%patch -P4 -p1 -b .man
%patch -P5 -p1 -b .format-security
%patch -P6 -p1 -b .zipnote
%patch -P7 -p1 -b .gnu89-build
%patch -P8 -p1
%patch -P9 -p1
%setup -q -a 1
%patch0 -p1 -b .zip
%patch1 -p1 -b .zip
%patch2 -p1 -b .umask
%patch5 -p1 -b .currdir
%patch6 -p1 -b .install
%patch7 -p1 -b .4gb
%patch8 -p1 -b .lhh
%patch9 -p1 -b .time
%patch10 -p1 -b .out
%patch11 -p1 -b .um
%build
%{make_build} -f unix/Makefile prefix=%{_prefix} "CFLAGS_NOOPT=-I. -DUNIX $RPM_OPT_FLAGS" generic_gcc
make -f unix/Makefile prefix=%{_prefix} "CFLAGS=$RPM_OPT_FLAGS -I. -DUNIX -D_LARGEFILE64_SOURCE" generic_gcc %{?_smp_mflags}
%install
mkdir -p $RPM_BUILD_ROOT%{_bindir}
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BULD_ROOT%{_mandir}/man1
%{make_install} -f unix/Makefile prefix=$RPM_BUILD_ROOT%{_prefix} \
MANDIR=$RPM_BUILD_ROOT%{_mandir}/man1
make -f unix/Makefile prefix=$RPM_BUILD_ROOT%{_prefix} \
MANDIR=$RPM_BUILD_ROOT%{_mandir}/man1 install
pushd $RPM_BUILD_ROOT
for n in zipnote zipsplit zip zipcloak ; do
chmod 755 .%{_bindir}/$n
done
popd
%clean
rm -rf $RPM_BUILD_ROOT
%files
%license LICENSE
%doc README CHANGES TODO WHATSNEW WHERE README.CR
%defattr(-,root,root,-)
%doc README CHANGES TODO WHATSNEW WHERE LICENSE README.CR
%doc proginfo/algorith.txt
%{_bindir}/zipnote
%{_bindir}/zipsplit
%{_bindir}/zip
%{_bindir}/zipcloak
%{_mandir}/man1/zip.1*
%{_mandir}/man1/zipcloak.1*
%{_mandir}/man1/zipnote.1*
%{_mandir}/man1/zipsplit.1*
%changelog
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-46
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-45
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-44
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-43
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Dec 11 2024 Jakub Martisko <jamartis@redhat.com> - 3.0-42
- Fix teh manpage: --no-extra option is actually called --strip-extra
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-41
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Sep 18 2023 Jakub Martisko <jamartis@redhat.com> - 3.0-39
- Fixc buffer overflow in unicode file names
Resolves: rhbz#2165653
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-38
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Apr 13 2023 Lukáš Zaoral <lzaoral@redhat.com> - 3.0-37
- migrate to SPDX license format
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-36
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Fri Nov 18 2022 Florian Weimer <fweimer@redhat.com> - 3.0-35
- Really build with -std=gnu89 (#2143565)
* Thu Nov 17 2022 Florian Weimer <fweimer@redhat.com> - 3.0-34
- Build with -std=gnu89 (#2143565)
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-33
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-32
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-31
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Mar 05 2021 Jakub Martisko <jamartis@redhat.com> - 3.0-30
- Use generic build instead of generic_gcc
* Fri Mar 05 2021 Jakub Martisko <jamartis@redhat.com> - 3.0-29
- Use build macros
* Thu Jan 28 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-28
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-27
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-26
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-25
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Mar 01 2018 Jakub Martisko <jamartis@redhat.com> - 3.0-22
- Add gcc to buildrequires
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Wed Feb 01 2017 Stephen Gallagher <sgallagh@redhat.com> - 3.0-17
- Add missing %%license macro
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 26 2015 Petr Stodulka <pstodulk@redhat.com> - 3.0-15
- Added requirement for unzip (#1235956)
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed Jan 28 2015 Petr Stodulka <pstodulk@redhat.com> - 3.0-13
- fix crashing zipnote when editing .zip files (#1179420)
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Tue Apr 1 2014 Peter Robinson <pbrobinson@fedoraproject.org> 3.0-10
- Add patch to fix format-security FTBFS (RHBZ 1037412)
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Fri Apr 26 2013 Michal Luscon <mluscon@redhat.com> - 3.0-8
- Fix missing -q option in zipsplit and zipnote man pages
* Sat Feb 23 2013 Ville Skyttä <ville.skytta@iki.fi> - 3.0-7
- Enable bzip2 support.
- Fix bogus date in %%changelog.
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Mon May 24 2010 Karel Klic <kklic@redhat.com> - 3.0-2
- Removed BuildRoot tag
- Removed %%clean section
- Removed trailing whitespaces in the spec file
* Fri Nov 13 2009 Karel Klic <kklic@redhat.com> - 3.0-1
- New upstream version
- Removed zip23.patch, because ZMEM is not used anyway
- Removed zip-2.31-install.patch, problem solved in upstream
- Removed zip23-umask.patch, upstream uses mkstemp which solves the problem
- Removed zip-2.31-near-4GB.patch, because upstream version
handles large files well
- Removed zip-2.31-configure.patch, configure is better in the current version
- Removed zip-2.3-sf.patch, the error message doesn't exist in upstream anymore
- Removed zip-2.31-umask_mode.patch, which fixes also removed near-4GB patch
- Updated zip-2.31-time.patch for zip 3.0
- Updated exec-shield.patch for zip 3.0
- Updated zip-2.3-currdir.patch for zip 3.0
* Mon Jul 27 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.31-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.31-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 2.31-6
- Autorebuild for GCC 4.3
@ -242,7 +87,7 @@ Resolves: rhbz#2165653
- incorporate the next peckage review comment
* Tue Feb 6 2007 Ivana Varekova <varekova@redhat.com> - 2.31-2
- incorporate the package review
- incorporate the package review
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.31-1.2.2
- rebuild
@ -311,7 +156,7 @@ Resolves: rhbz#2165653
* Sun Jun 24 2001 Elliot Lee <sopwith@redhat.com>
- Bump release + rebuild.
* Fri Aug 25 2000 Bill Nottingham <notting@redhat.com>
* Thu Aug 25 2000 Bill Nottingham <notting@redhat.com>
- add encryption code (#16878)
* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>

23
zip23-umask.patch Normal file
View file

@ -0,0 +1,23 @@
diff -ur zip-2.3/zip.c zip-2.3-lhh/zip.c
--- zip-2.3/zip.c 1999-11-16 15:08:10.000000000 -0500
+++ zip-2.3-lhh/zip.c 2003-12-22 09:32:56.000000000 -0500
@@ -849,6 +849,7 @@
/* Add, update, freshen, or delete zip entries in a zip file. See the
command help in help() above. */
{
+ mode_t old_umask; /* umask prior to temp file creation */
int a; /* attributes of zip file */
ulg c; /* start of central directory */
int d; /* true if just adding to a zip file */
@@ -1830,9 +1831,11 @@
if ((tempzip = tempname(zipfile)) == NULL) {
ZIPERR(ZE_MEM, "allocating temp filename");
}
+ old_umask = umask(0066);
if ((tempzf = y = fopen(tempzip, FOPW_TMP)) == NULL) {
ZIPERR(ZE_TEMP, tempzip);
}
+ umask(old_umask);
}
#if (!defined(VMS) && !defined(CMS_MVS))

93
zip23.patch Normal file
View file

@ -0,0 +1,93 @@
--- zip-2.3/zip.h.zip Mon Nov 8 14:36:51 1999
+++ zip-2.3/zip.h Tue Jan 11 11:46:06 2000
@@ -60,6 +60,7 @@
/* Set up portability */
#include "tailor.h"
+#include <strings.h>
#ifdef USE_ZLIB
# include "zlib.h"
@@ -433,12 +434,6 @@
int setfileattr OF((char *, int));
char *tempname OF((char *));
int fcopy OF((FILE *, FILE *, ulg));
-
-#ifdef ZMEM
- char *memset OF((char *, int, unsigned int));
- char *memcpy OF((char *, char *, unsigned int));
- int memcmp OF((char *, char *, unsigned int));
-#endif /* ZMEM */
/* in system dependent fileio code (<system>.c) */
#ifndef UTIL
--- zip-2.3/fileio.c.zip Sun Nov 7 05:29:03 1999
+++ zip-2.3/fileio.c Tue Jan 11 11:46:43 2000
@@ -918,67 +918,3 @@
}
#endif /* NO_RENAME */
-
-
-#ifdef ZMEM
-
-/************************/
-/* Function memset() */
-/************************/
-
-/*
- * memset - for systems without it
- * bill davidsen - March 1990
- */
-
-char *
-memset(buf, init, len)
-register char *buf; /* buffer loc */
-register int init; /* initializer */
-register unsigned int len; /* length of the buffer */
-{
- char *start;
-
- start = buf;
- while (len--) *(buf++) = init;
- return(start);
-}
-
-
-/************************/
-/* Function memcpy() */
-/************************/
-
-char *
-memcpy(dst,src,len) /* v2.0f */
-register char *dst, *src;
-register unsigned int len;
-{
- char *start;
-
- start = dst;
- while (len--)
- *dst++ = *src++;
- return(start);
-}
-
-
-/************************/
-/* Function memcmp() */
-/************************/
-
-int
-memcmp(b1,b2,len) /* jpd@usl.edu -- 11/16/90 */
-register char *b1, *b2;
-register unsigned int len;
-{
-
- if (len) do { /* examine each byte (if any) */
- if (*b1++ != *b2++)
- return (*((uch *)b1-1) - *((uch *)b2-1)); /* exit when miscompare */
- } while (--len);
-
- return(0); /* no miscompares, yield 0 result */
-}
-
-#endif /* ZMEM */

View file

@ -1,13 +0,0 @@
diff --git a/zipnote.c b/zipnote.c
index 5e02cb6..996f012 100644
--- a/zipnote.c
+++ b/zipnote.c
@@ -661,7 +661,7 @@ char **argv; /* command line tokens */
if ((r = zipcopy(z)) != ZE_OK)
ziperr(r, "was copying an entry");
}
- fclose(x);
+ fclose(in_file);
/* Write central directory and end of central directory with new comments */
if ((c = zftello(y)) == (zoff_t)-1) /* get start of central */