diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2001-06-22 02:55:16 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2001-06-22 02:55:16 +0000 |
commit | 76ce7549cec009ac1f4706f9c20da27d8c6b4239 (patch) | |
tree | f45b55655c61d952c869b6ba0cd85655aead8bff | |
parent | 9f832deecf028ca55dcf1e20996892cce8ab87d0 (diff) | |
download | busybox-w32-76ce7549cec009ac1f4706f9c20da27d8c6b4239.tar.gz busybox-w32-76ce7549cec009ac1f4706f9c20da27d8c6b4239.tar.bz2 busybox-w32-76ce7549cec009ac1f4706f9c20da27d8c6b4239.zip |
Dont change date or chmod on symlinks, lchown on symlinks if lchown available
-rw-r--r-- | libbb/unarchive.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/libbb/unarchive.c b/libbb/unarchive.c index e4150bda2..199123ec4 100644 --- a/libbb/unarchive.c +++ b/libbb/unarchive.c | |||
@@ -162,13 +162,23 @@ char *extract_archive(FILE *src_stream, FILE *out_stream, const file_header_t *f | |||
162 | } | 162 | } |
163 | break; | 163 | break; |
164 | } | 164 | } |
165 | if (function & extract_preserve_date) { | 165 | |
166 | t.actime = file_entry->mtime; | 166 | /* Changing a symlink's properties normally changes the properties of the |
167 | t.modtime = file_entry->mtime; | 167 | * file pointed to, so dont try and change the date or mode, lchown does |
168 | utime(full_name, &t); | 168 | * does the right thing, but isnt available in older versions of libc */ |
169 | if (S_ISLNK(file_entry->mode)) { | ||
170 | #if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1) | ||
171 | lchown(full_name, file_entry->uid, file_entry->gid); | ||
172 | #endif | ||
173 | } else { | ||
174 | if (function & extract_preserve_date) { | ||
175 | t.actime = file_entry->mtime; | ||
176 | t.modtime = file_entry->mtime; | ||
177 | utime(full_name, &t); | ||
178 | } | ||
179 | chmod(full_name, file_entry->mode); | ||
180 | chown(full_name, file_entry->uid, file_entry->gid); | ||
169 | } | 181 | } |
170 | chmod(full_name, file_entry->mode); | ||
171 | lchown(full_name, file_entry->uid, file_entry->gid); | ||
172 | } else { | 182 | } else { |
173 | /* If we arent extracting data we have to skip it, | 183 | /* If we arent extracting data we have to skip it, |
174 | * if data size is 0 then then just do it anyway | 184 | * if data size is 0 then then just do it anyway |