diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-07-31 17:45:38 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-07-31 17:45:38 +0300 |
commit | 400d6b61b98c3be5eebb095019dfe6310e1ca253 (patch) | |
tree | 27c542ecd4643c27d55f31aca0ef222779a02527 /tests/setstat02.at | |
parent | 15d29bd0863a819ed950f65523b6000961d1213e (diff) | |
download | cpio-400d6b61b98c3be5eebb095019dfe6310e1ca253.tar.gz cpio-400d6b61b98c3be5eebb095019dfe6310e1ca253.tar.bz2 |
Delay setting directory attributes until end of run, if they do not permit writing. Fix debian bug #458079.
* src/copyin.c (copyin_mkdir): New function.
(copyin_directory): Use copyin_mkdir to create directory.
Call set_perms only when safe, otherwise use repair_delayed_set_stat.
* src/extern.h (cpio_to_stat): New prototype.
(repair_delayed_set_stat): Change prototype.
* src/util.c (cpio_to_stat): New function.
(repair_delayed_set_stat): New function.
* tests/setstat01.at: New test case.
* tests/setstat02.at: New test case.
* tests/Makefile.am (TESTSUITE_AT): Add setstat01.at and setstat02.at
* tests/testsuite.at: Include setstat01.at and setstat02.at.
* NEWS: Update.
Diffstat (limited to 'tests/setstat02.at')
-rw-r--r-- | tests/setstat02.at | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/setstat02.at b/tests/setstat02.at new file mode 100644 index 0000000..0b919c6 --- /dev/null +++ b/tests/setstat02.at @@ -0,0 +1,44 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# Copyright (C) 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# 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, see <http://www.gnu.org/licenses/>. + +AT_SETUP([delayed setstat (with -depth)]) +AT_KEYWORDS([setstat setstat01]) + +# Cpio versions up to 2.10 failed to restore directory permissions, if +# the directory was already present on dist (e.g. when using find . -depth). +# +# References: +# <20090620185721.GA18708@scru.org> +# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=458079 + +AT_CHECK([ +mkdir dir +echo "test file" > file +chmod 500 dir + +find dir -depth | cpio -o --quiet > archive +mv dir old + +cpio -i --quiet < archive +genfile --stat=mode.777 dir +], +[0], +[500 +]) + +AT_CLEANUP + + |