Compare commits
No commits in common. "e1d773b0000123c3795587bd512b0dcc9aa28660" and "8fb6a81e11fe4544f651e02af8c90ac8a658fff7" have entirely different histories.
e1d773b000
...
8fb6a81e11
BIN
scrub-2.5.2.tar.bz2
Normal file
BIN
scrub-2.5.2.tar.bz2
Normal file
Binary file not shown.
Binary file not shown.
26
scrub.spec
26
scrub.spec
@ -1,18 +1,10 @@
|
|||||||
Name: scrub
|
Name: scrub
|
||||||
Version: 2.6.1
|
Version: 2.5.2
|
||||||
Release: 4
|
Release: 14
|
||||||
Summary: A disk overwrite utility
|
Summary: A disk overwrite utility
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: https://github.com/chaos/scrub
|
URL: https://github.com/chaos/scrub
|
||||||
Source0: http://github.com/chaos/scrub/releases/download/2.6.1/scrub-2.6.1.tar.gz
|
Source0: http://bbgentoo.ilb.ru/distfiles/scrub-2.5.2.tar.bz2
|
||||||
# https://github.com/chaos/scrub/commit/006fd942abd78d3128d427f1ede9786abe14c65f
|
|
||||||
Patch0: usage-Exit-with-status-code-0-for-help.patch
|
|
||||||
# https://github.com/chaos/scrub/commit/bd88864d8ee15a65d5ecdb3818afa4d5193d2455
|
|
||||||
Patch1: usage-Output-to-stdout-on-exit-code-0.patch
|
|
||||||
# https://github.com/chaos/scrub/commit/499a491c21b5a18be79334282dfa11fd4f408c49
|
|
||||||
Patch2: symlinks-to-block-device.patch
|
|
||||||
|
|
||||||
BuildRequires: gettext, gcc
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Scrub writes patterns on files or disk devices to make
|
Scrub writes patterns on files or disk devices to make
|
||||||
@ -40,17 +32,5 @@ retrieving the data more difficult. It operates in one of three modes:
|
|||||||
%{_mandir}/man1/scrub.1*
|
%{_mandir}/man1/scrub.1*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Mar 21 2024 cenhuilin <cenhuilin@kylinos.cn> - 2.6.1-4
|
|
||||||
- fix scrub stopped working for links pointing to a block device
|
|
||||||
|
|
||||||
* Tue Jan 30 2024 yaoxin <yao_xin001@hoperun.com> - 2.6.1-3
|
|
||||||
- Fix exit with status code 0 for --help
|
|
||||||
|
|
||||||
* Tue Jun 29 2021 zhouwenpei <zhouwenpei1@huawei.com> - 2.6.1-2
|
|
||||||
- add buildrequire gcc and gettext.
|
|
||||||
|
|
||||||
* Mon Oct 12 2020 Zhangpeng <zhangpeng228@huawei.com> - 2.6.1-1
|
|
||||||
- update to 2.6.1
|
|
||||||
|
|
||||||
* Thu Nov 28 2019 Jiangping Hu <hujiangping@huawei.com> - 2.5.2-14
|
* Thu Nov 28 2019 Jiangping Hu <hujiangping@huawei.com> - 2.5.2-14
|
||||||
- Package init
|
- Package init
|
||||||
|
|||||||
@ -1,125 +0,0 @@
|
|||||||
From e3382e63b9d30b9c56b000fbfbb2edb2e4319ee7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sergio Correia <scorreia@redhat.com>
|
|
||||||
Date: Thu, 21 Mar 2024 14:52:41 +0800
|
|
||||||
Subject: [PATCH] scrub should work for symlinks pointing to block devices
|
|
||||||
|
|
||||||
In [1] (add -L option to avoid scrubbing symlink target [Tim
|
|
||||||
Boronczyk]), scrub introduced a -L (--no-link) option so that it would
|
|
||||||
not scrub the target, if it was a link and this new option was set.
|
|
||||||
|
|
||||||
A side-effect of that change is that scrub stopped working for links
|
|
||||||
pointing to a block device, whereas it would still work for links
|
|
||||||
pointing to regular files -- it is not clear from the commit changelog
|
|
||||||
and the added documentation for this new option that this was an
|
|
||||||
intended change.
|
|
||||||
|
|
||||||
In this commit we fix this regression, and scrub works again for links
|
|
||||||
pointing to block devices. -L/--no-link option also works for these
|
|
||||||
links.
|
|
||||||
|
|
||||||
[1] https://github.com/chaos/scrub/commit/01915c442288b4b274261fa07e42e116fb9d6b60
|
|
||||||
---
|
|
||||||
src/scrub.c | 13 ++++++++-----
|
|
||||||
src/util.c | 13 +++++++++----
|
|
||||||
src/util.h | 2 +-
|
|
||||||
3 files changed, 18 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/scrub.c b/src/scrub.c
|
|
||||||
index 08389d8..22f18d0 100644
|
|
||||||
--- a/src/scrub.c
|
|
||||||
+++ b/src/scrub.c
|
|
||||||
@@ -329,6 +329,10 @@ static int scrub_object(char *filename, const struct opt_struct *opt,
|
|
||||||
fprintf(stderr, "%s: %s already scrubbed? (-f to force)\n",
|
|
||||||
prog, filename);
|
|
||||||
errcount++;
|
|
||||||
+ } else if (is_symlink(filename) && opt->nofollow) {
|
|
||||||
+ fprintf(stderr, "%s: skipping symlink %s because --no-link (-L) option was set\n",
|
|
||||||
+ prog, filename);
|
|
||||||
+ errcount++;
|
|
||||||
} else if (!noexec) {
|
|
||||||
if (dryrun) {
|
|
||||||
printf("%s: (dryrun) scrub special file %s\n",
|
|
||||||
@@ -338,8 +342,8 @@ static int scrub_object(char *filename, const struct opt_struct *opt,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
- case FILE_LINK:
|
|
||||||
- if (opt->nofollow) {
|
|
||||||
+ case FILE_REGULAR:
|
|
||||||
+ if (is_symlink(filename) && opt->nofollow) {
|
|
||||||
if (opt->remove && !noexec) {
|
|
||||||
if (dryrun) {
|
|
||||||
printf("%s: (dryrun) unlink %s\n", prog, filename);
|
|
||||||
@@ -354,8 +358,7 @@ static int scrub_object(char *filename, const struct opt_struct *opt,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- /* FALL THRU */
|
|
||||||
- case FILE_REGULAR:
|
|
||||||
+
|
|
||||||
if (access(filename, R_OK|W_OK) < 0) {
|
|
||||||
fprintf(stderr, "%s: no rw access to %s\n", prog, filename);
|
|
||||||
errcount++;
|
|
||||||
@@ -656,7 +659,7 @@ scrub_file(char *path, const struct opt_struct *opt)
|
|
||||||
filetype_t ftype = filetype(path);
|
|
||||||
off_t size = opt->devsize;
|
|
||||||
|
|
||||||
- assert(ftype == FILE_REGULAR || ftype == FILE_LINK);
|
|
||||||
+ assert(ftype == FILE_REGULAR);
|
|
||||||
|
|
||||||
if (stat(path, &sb) < 0) {
|
|
||||||
fprintf(stderr, "%s: stat %s: %s\n", prog, path, strerror(errno));
|
|
||||||
diff --git a/src/util.c b/src/util.c
|
|
||||||
index 96dd59b..fb85368 100644
|
|
||||||
--- a/src/util.c
|
|
||||||
+++ b/src/util.c
|
|
||||||
@@ -71,6 +71,15 @@ write_all(int fd, const unsigned char *buf, int count)
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Indicates whether the file represented by 'path' is a symlink.
|
|
||||||
+ */
|
|
||||||
+int
|
|
||||||
+is_symlink(char *path)
|
|
||||||
+{
|
|
||||||
+ struct stat sb;
|
|
||||||
+ return lstat(path, &sb) == 0 && S_ISLNK(sb.st_mode);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Return the type of file represented by 'path'.
|
|
||||||
*/
|
|
||||||
filetype_t
|
|
||||||
@@ -80,10 +89,6 @@ filetype(char *path)
|
|
||||||
|
|
||||||
filetype_t res = FILE_NOEXIST;
|
|
||||||
|
|
||||||
- if (lstat(path, &sb) == 0 && S_ISLNK(sb.st_mode)) {
|
|
||||||
- return FILE_LINK;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if (stat(path, &sb) == 0) {
|
|
||||||
if (S_ISREG(sb.st_mode))
|
|
||||||
res = FILE_REGULAR;
|
|
||||||
diff --git a/src/util.h b/src/util.h
|
|
||||||
index a409f2b..7beff4d 100644
|
|
||||||
--- a/src/util.h
|
|
||||||
+++ b/src/util.h
|
|
||||||
@@ -9,7 +9,6 @@ typedef enum {
|
|
||||||
FILE_REGULAR,
|
|
||||||
FILE_CHAR,
|
|
||||||
FILE_BLOCK,
|
|
||||||
- FILE_LINK,
|
|
||||||
FILE_OTHER,
|
|
||||||
} filetype_t;
|
|
||||||
|
|
||||||
@@ -17,6 +16,7 @@ typedef enum { UP, DOWN } round_t;
|
|
||||||
|
|
||||||
int read_all(int fd, unsigned char *buf, int count);
|
|
||||||
int write_all(int fd, const unsigned char *buf, int count);
|
|
||||||
+int is_symlink(char *path);
|
|
||||||
filetype_t filetype(char *path);
|
|
||||||
off_t blkalign(off_t offset, int blocksize, round_t rtype);
|
|
||||||
void * alloc_buffer(int bufsize);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
From 006fd942abd78d3128d427f1ede9786abe14c65f Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Ville=20Skytt=C3=A4?= <ville.skytta@iki.fi>
|
|
||||||
Date: Thu, 12 Apr 2018 08:07:29 +0300
|
|
||||||
Subject: [PATCH] usage: Exit with status code 0 for --help
|
|
||||||
|
|
||||||
---
|
|
||||||
src/scrub.c | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/scrub.c b/src/scrub.c
|
|
||||||
index 0a325cb..fceb639 100644
|
|
||||||
--- a/src/scrub.c
|
|
||||||
+++ b/src/scrub.c
|
|
||||||
@@ -110,7 +110,7 @@ static struct option longopts[] = {
|
|
||||||
char *prog;
|
|
||||||
|
|
||||||
static void
|
|
||||||
-usage(void)
|
|
||||||
+usage(int rc)
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"Usage: %s [OPTIONS] file [file...]\n"
|
|
||||||
@@ -132,7 +132,7 @@ usage(void)
|
|
||||||
|
|
||||||
fprintf(stderr, "Available patterns are:\n");
|
|
||||||
seq_list ();
|
|
||||||
- exit(1);
|
|
||||||
+ exit(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
@@ -225,12 +225,14 @@ main(int argc, char *argv[])
|
|
||||||
nopt = true;
|
|
||||||
break;
|
|
||||||
case 'h': /* --help */
|
|
||||||
+ usage(0);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
- usage();
|
|
||||||
+ usage(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (argc == optind)
|
|
||||||
- usage();
|
|
||||||
+ usage(1);
|
|
||||||
if (Xopt && argc - optind > 1) {
|
|
||||||
fprintf(stderr, "%s: -X only takes one directory name\n", prog);
|
|
||||||
exit(1);
|
|
||||||
@ -1,81 +0,0 @@
|
|||||||
From bd88864d8ee15a65d5ecdb3818afa4d5193d2455 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Ville=20Skytt=C3=A4?= <ville.skytta@iki.fi>
|
|
||||||
Date: Thu, 12 Apr 2018 08:39:20 +0300
|
|
||||||
Subject: [PATCH] usage: Output to stdout on exit code 0
|
|
||||||
|
|
||||||
---
|
|
||||||
src/pattern.c | 6 +++---
|
|
||||||
src/pattern.h | 4 +++-
|
|
||||||
src/scrub.c | 7 ++++---
|
|
||||||
3 files changed, 10 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/pattern.c b/src/pattern.c
|
|
||||||
index 10430f9..6c0eedc 100644
|
|
||||||
--- a/src/pattern.c
|
|
||||||
+++ b/src/pattern.c
|
|
||||||
@@ -420,7 +420,7 @@ seq2str(const sequence_t *sp, char *buf, int len)
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
-seq_list(void)
|
|
||||||
+seq_list(FILE *fp)
|
|
||||||
{
|
|
||||||
const int len = seq_count();
|
|
||||||
char buf[80];
|
|
||||||
@@ -428,10 +428,10 @@ seq_list(void)
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
seq2str(sequences[i], buf, sizeof(buf));
|
|
||||||
- fprintf(stderr, "%s\n", buf);
|
|
||||||
+ fprintf(fp, "%s\n", buf);
|
|
||||||
}
|
|
||||||
seq2str(&custom_seq, buf, sizeof(buf));
|
|
||||||
- fprintf(stderr, "%s\n", buf);
|
|
||||||
+ fprintf(fp, "%s\n", buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/src/pattern.h b/src/pattern.h
|
|
||||||
index bcf5374..e1d0144 100644
|
|
||||||
--- a/src/pattern.h
|
|
||||||
+++ b/src/pattern.h
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
#define MAXPATBYTES 16
|
|
||||||
#define MAXSEQPATTERNS 35
|
|
||||||
typedef enum {
|
|
||||||
@@ -19,7 +21,7 @@ typedef struct {
|
|
||||||
} sequence_t;
|
|
||||||
|
|
||||||
const sequence_t *seq_lookup(char *name);
|
|
||||||
-void seq_list(void);
|
|
||||||
+void seq_list(FILE *fp);
|
|
||||||
char *pat2str(pattern_t p);
|
|
||||||
void memset_pat(void *s, pattern_t p, size_t n);
|
|
||||||
|
|
||||||
diff --git a/src/scrub.c b/src/scrub.c
|
|
||||||
index fceb639..6671ed5 100644
|
|
||||||
--- a/src/scrub.c
|
|
||||||
+++ b/src/scrub.c
|
|
||||||
@@ -112,7 +112,8 @@ char *prog;
|
|
||||||
static void
|
|
||||||
usage(int rc)
|
|
||||||
{
|
|
||||||
- fprintf(stderr,
|
|
||||||
+ FILE *fp = rc ? stderr : stdout;
|
|
||||||
+ fprintf(fp,
|
|
||||||
"Usage: %s [OPTIONS] file [file...]\n"
|
|
||||||
" -v, --version display scrub version and exit\n"
|
|
||||||
" -p, --pattern pat select scrub pattern sequence\n"
|
|
||||||
@@ -130,8 +131,8 @@ usage(int rc)
|
|
||||||
" -h, --help display this help message\n"
|
|
||||||
, prog);
|
|
||||||
|
|
||||||
- fprintf(stderr, "Available patterns are:\n");
|
|
||||||
- seq_list ();
|
|
||||||
+ fprintf(fp, "Available patterns are:\n");
|
|
||||||
+ seq_list (fp);
|
|
||||||
exit(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user