summaryrefslogtreecommitdiffstats
path: root/meta/recipes-extended/logrotate
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-extended/logrotate')
-rw-r--r--meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch39
-rw-r--r--meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch149
-rw-r--r--meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch36
-rwxr-xr-xmeta/recipes-extended/logrotate/logrotate/run-ptest5
-rw-r--r--meta/recipes-extended/logrotate/logrotate_3.21.0.bb (renamed from meta/recipes-extended/logrotate/logrotate_3.18.0.bb)51
5 files changed, 42 insertions, 238 deletions
diff --git a/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch b/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch
deleted file mode 100644
index 50a3852078..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/0001-Update-the-manual.patch
+++ /dev/null
@@ -1,39 +0,0 @@
1From 3e2cfa88b6538bb0fee3d9a6e99622055d05ac4a Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Tue, 17 Feb 2015 21:14:37 -0800
4Subject: [PATCH] Update the manual
5
6Update the manual for rotating on different filesystems.
7
8Upstream-Status: Pending
9
10Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
11
12---
13 logrotate.8.in | 10 ++++------
14 1 file changed, 4 insertions(+), 6 deletions(-)
15
16diff --git a/logrotate.8.in b/logrotate.8.in
17index 98fea91..70b4c44 100644
18--- a/logrotate.8.in
19+++ b/logrotate.8.in
20@@ -202,12 +202,10 @@ at all (use with caution, may waste performance and disk space). Default is 0.
21
22 .TP
23 \fBolddir \fIdirectory\fR
24-Logs are moved into \fIdirectory\fR for rotation. The \fIdirectory\fR must be
25-on the same physical device as the log file being rotated, unless \fBcopy\fR,
26-\fBcopytruncate\fR or \fBrenamecopy\fR option is used. The \fIdirectory\fR
27-is assumed to be relative to the directory holding the log file
28-unless an absolute path name is specified. When this option is used all
29-old versions of the log end up in \fIdirectory\fR. This option may be
30+Logs are moved into \fIdirectory\fR for rotation. The \fIdirectory\fR
31+is assumed to be relative to the directory holding the log file unless
32+an absolute path name is specified. When this option is used all old
33+versions of the log end up in \fIdirectory\fR. This option may be
34 overridden by the \fBnoolddir\fR option.
35
36 .TP
37--
382.24.0
39
diff --git a/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch b/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch
deleted file mode 100644
index 671fce4ac8..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/act-as-mv-when-rotate.patch
+++ /dev/null
@@ -1,149 +0,0 @@
1From 17d57a2a923a4af53c8910a9999aebeab3f5d83a Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Tue, 17 Feb 2015 21:08:07 -0800
4Subject: [PATCH] Act as the "mv" command when rotate log
5
6Act as the "mv" command when rotate log, first rename, if failed, then
7read and write.
8
9Upstream-Status: Pending
10
11Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
12
13---
14 logrotate.c | 71 ++++++++++++++++++++++++++++++++++++++++++++---------
15 1 file changed, 59 insertions(+), 12 deletions(-)
16
17diff --git a/logrotate.c b/logrotate.c
18index 45b3eb6..231371a 100644
19--- a/logrotate.c
20+++ b/logrotate.c
21@@ -1463,6 +1463,53 @@ static int findNeedRotating(const struct logInfo *log, unsigned logNum, int forc
22 return 0;
23 }
24
25+/* Act as the "mv" command, if rename failed, then read the old file and
26+ * write to new file. The function which invokes the mvFile will use
27+ * the strerror(errorno) to handle the error message, so we don't have
28+ * to print the error message here */
29+
30+int mvFile (char *oldName, char *newName, struct logInfo *log, acl_type acl)
31+{
32+ struct stat sbprev;
33+ int fd_old, fd_new, n;
34+ char buf[BUFSIZ];
35+
36+ /* Do the rename first */
37+ if (!rename(oldName, newName))
38+ return 0;
39+
40+ /* If the errno is EXDEV, then read old file, write newfile and
41+ * remove the oldfile */
42+ if (errno == EXDEV) {
43+ /* Open the old file to read */
44+ if ((fd_old = open(oldName, O_RDONLY)) < 0)
45+ return 1;
46+
47+ /* Create the file to write, keep the same attribute as the old file */
48+ if (stat(oldName, &sbprev))
49+ return 1;
50+ else {
51+ if ((fd_new = createOutputFile(newName,
52+ O_WRONLY | O_CREAT | O_TRUNC, &sbprev, acl, 0)) < 0 )
53+ return 1;
54+ }
55+
56+ /* Read and write */
57+ while ((n = read(fd_old, buf, BUFSIZ)) > 0)
58+ if (write(fd_new, buf, n) != n)
59+ return 1;
60+
61+ if ((close(fd_old) < 0) ||
62+ removeLogFile(oldName, log) ||
63+ (close(fd_new) < 0))
64+ return 1;
65+
66+ return 0;
67+ }
68+
69+ return 1;
70+}
71+
72 /* find the rotated file with the highest index */
73 static int findLastRotated(const struct logNames *rotNames,
74 const char *fileext, const char *compext)
75@@ -1958,15 +2005,15 @@ static int prerotateSingleLog(const struct logInfo *log, unsigned logNum,
76 }
77
78 message(MESS_DEBUG,
79- "renaming %s to %s (rotatecount %d, logstart %d, i %d), \n",
80+ "moving %s to %s (rotatecount %d, logstart %d, i %d), \n",
81 oldName, newName, rotateCount, logStart, i);
82
83- if (!debug && rename(oldName, newName)) {
84+ if (!debug && mvFile(oldName, newName, log, prev_acl)) {
85 if (errno == ENOENT) {
86 message(MESS_DEBUG, "old log %s does not exist\n",
87 oldName);
88 } else {
89- message(MESS_ERROR, "error renaming %s to %s: %s\n",
90+ message(MESS_ERROR, "error moving %s to %s: %s\n",
91 oldName, newName, strerror(errno));
92 hasErrors = 1;
93 }
94@@ -2051,10 +2098,10 @@ static int rotateSingleLog(const struct logInfo *log, unsigned logNum,
95 return 1;
96 }
97
98- message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
99+ message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
100 tmpFilename);
101- if (!debug && !hasErrors && rename(log->files[logNum], tmpFilename)) {
102- message(MESS_ERROR, "failed to rename %s to %s: %s\n",
103+ if (!debug && !hasErrors && mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
104+ message(MESS_ERROR, "failed to move %s to %s: %s\n",
105 log->files[logNum], tmpFilename,
106 strerror(errno));
107 hasErrors = 1;
108@@ -2063,11 +2110,11 @@ static int rotateSingleLog(const struct logInfo *log, unsigned logNum,
109 free(tmpFilename);
110 }
111 else {
112- message(MESS_DEBUG, "renaming %s to %s\n", log->files[logNum],
113+ message(MESS_DEBUG, "moving %s to %s\n", log->files[logNum],
114 rotNames->finalName);
115 if (!debug && !hasErrors &&
116- rename(log->files[logNum], rotNames->finalName)) {
117- message(MESS_ERROR, "failed to rename %s to %s: %s\n",
118+ mvFile(log->files[logNum], rotNames->finalName, log, prev_acl)) {
119+ message(MESS_ERROR, "failed to move %s to %s: %s\n",
120 log->files[logNum], rotNames->finalName,
121 strerror(errno));
122 hasErrors = 1;
123@@ -2480,7 +2527,7 @@ static int rotateLogSet(const struct logInfo *log, int force)
124 return hasErrors;
125 }
126
127-static int writeState(const char *stateFilename)
128+static int writeState(struct logInfo *log, char *stateFilename)
129 {
130 struct logState *p;
131 FILE *f;
132@@ -2659,7 +2706,7 @@ static int writeState(const char *stateFilename)
133 fclose(f);
134
135 if (error == 0) {
136- if (rename(tmpFilename, stateFilename)) {
137+ if (mvFile(tmpFilename, stateFilename, log, prev_acl)) {
138 message(MESS_ERROR, "error renaming temp state file %s to %s: %s\n",
139 tmpFilename, stateFilename, strerror(errno));
140 unlink(tmpFilename);
141@@ -3073,7 +3120,7 @@ int main(int argc, const char **argv)
142 rc |= rotateLogSet(log, force);
143
144 if (!debug)
145- rc |= writeState(stateFile);
146+ rc |= writeState(log, stateFile);
147
148 return (rc != 0);
149 }
diff --git a/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch b/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch
deleted file mode 100644
index d7f9a02cc8..0000000000
--- a/meta/recipes-extended/logrotate/logrotate/disable-check-different-filesystems.patch
+++ /dev/null
@@ -1,36 +0,0 @@
1From 16c1833ade4c036b30b8761d2c4a5bd85cc65c44 Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Tue, 8 Jan 2019 06:27:06 +0000
4Subject: [PATCH] Disable the check for different filesystems
5
6The logrotate supports rotate log across different filesystems now, so
7disable the check for different filesystems.
8
9Upstream-Status: Pending
10
11Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
12
13---
14 config.c | 9 ---------
15 1 file changed, 9 deletions(-)
16
17diff --git a/config.c b/config.c
18index d2488f1..1de3745 100644
19--- a/config.c
20+++ b/config.c
21@@ -1902,15 +1902,6 @@ duperror:
22 }
23
24 free(ld);
25-
26- if (sb.st_dev != sb2.st_dev
27- && !(newlog->flags & (LOG_FLAG_COPYTRUNCATE | LOG_FLAG_COPY | LOG_FLAG_TMPFILENAME))) {
28- message(MESS_ERROR,
29- "%s:%d olddir %s and log file %s "
30- "are on different devices\n", configFile,
31- lineNum, newlog->oldDir, newlog->files[j]);
32- goto error;
33- }
34 }
35 }
36
diff --git a/meta/recipes-extended/logrotate/logrotate/run-ptest b/meta/recipes-extended/logrotate/logrotate/run-ptest
new file mode 100755
index 0000000000..b272def65f
--- /dev/null
+++ b/meta/recipes-extended/logrotate/logrotate/run-ptest
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3set -u
4
5make -k check
diff --git a/meta/recipes-extended/logrotate/logrotate_3.18.0.bb b/meta/recipes-extended/logrotate/logrotate_3.21.0.bb
index 270052f46f..10a6149abc 100644
--- a/meta/recipes-extended/logrotate/logrotate_3.18.0.bb
+++ b/meta/recipes-extended/logrotate/logrotate_3.21.0.bb
@@ -1,7 +1,8 @@
1SUMMARY = "Rotates, compresses, removes and mails system log files" 1SUMMARY = "Rotates, compresses, removes and mails system log files"
2SECTION = "console/utils" 2SECTION = "console/utils"
3HOMEPAGE = "https://github.com/logrotate/logrotate/issues" 3HOMEPAGE = "https://github.com/logrotate/logrotate/"
4LICENSE = "GPLv2" 4DESCRIPTION = "The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files."
5LICENSE = "GPL-2.0-only"
5 6
6# TODO: Document coreutils dependency. Why not RDEPENDS? Why not busybox? 7# TODO: Document coreutils dependency. Why not RDEPENDS? Why not busybox?
7 8
@@ -9,23 +10,22 @@ DEPENDS="coreutils popt"
9 10
10LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" 11LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
11 12
12UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases" 13SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BP}.tar.xz \
13UPSTREAM_CHECK_REGEX = "logrotate-(?P<pver>\d+(\.\d+)+).tar" 14 file://run-ptest \
15 "
14 16
15SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz \ 17SRC_URI[sha256sum] = "8fa12015e3b8415c121fc9c0ca53aa872f7b0702f543afda7e32b6c4900f6516"
16 file://act-as-mv-when-rotate.patch \
17 file://0001-Update-the-manual.patch \
18 file://disable-check-different-filesystems.patch \
19 "
20 18
21SRC_URI[sha256sum] = "841f81bf09d0014e4a2e11af166bb33fcd8429cc0c2d4a7d3d9ceb3858cfccc5" 19CVE_STATUS_GROUPS = "CVE_STATUS_RECIPE"
20CVE_STATUS_RECIPE = "CVE-2011-1548 CVE-2011-1549 CVE-2011-1550"
21CVE_STATUS_RECIPE[status] = "not-applicable-platform: CVE is debian, gentoo or SUSE specific on the way logrotate was installed/used"
22 22
23PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}" 23PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
24 24
25PACKAGECONFIG[acl] = ",,acl" 25PACKAGECONFIG[acl] = ",,acl"
26PACKAGECONFIG[selinux] = ",,libselinux" 26PACKAGECONFIG[selinux] = ",,libselinux"
27 27
28CONFFILES_${PN} += "${localstatedir}/lib/logrotate.status \ 28CONFFILES:${PN} += "${localstatedir}/lib/logrotate.status \
29 ${sysconfdir}/logrotate.conf \ 29 ${sysconfdir}/logrotate.conf \
30 ${sysconfdir}/logrotate.d/btmp \ 30 ${sysconfdir}/logrotate.d/btmp \
31 ${sysconfdir}/logrotate.d/wtmp" 31 ${sysconfdir}/logrotate.d/wtmp"
@@ -47,9 +47,9 @@ EXTRA_OEMAKE = "\
47# INSTALL=install and BASEDIR=/usr. 47# INSTALL=install and BASEDIR=/usr.
48OS_NAME = "Linux" 48OS_NAME = "Linux"
49 49
50inherit autotools systemd 50inherit autotools systemd github-releases ptest
51 51
52SYSTEMD_SERVICE_${PN} = "\ 52SYSTEMD_SERVICE:${PN} = "\
53 ${BPN}.service \ 53 ${BPN}.service \
54 ${BPN}.timer \ 54 ${BPN}.timer \
55" 55"
@@ -67,7 +67,6 @@ do_install(){
67 install -p -m 644 ${S}/examples/logrotate.conf ${D}${sysconfdir}/logrotate.conf 67 install -p -m 644 ${S}/examples/logrotate.conf ${D}${sysconfdir}/logrotate.conf
68 install -p -m 644 ${S}/examples/btmp ${D}${sysconfdir}/logrotate.d/btmp 68 install -p -m 644 ${S}/examples/btmp ${D}${sysconfdir}/logrotate.d/btmp
69 install -p -m 644 ${S}/examples/wtmp ${D}${sysconfdir}/logrotate.d/wtmp 69 install -p -m 644 ${S}/examples/wtmp ${D}${sysconfdir}/logrotate.d/wtmp
70 touch ${D}${localstatedir}/lib/logrotate.status
71 70
72 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then 71 if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
73 install -d ${D}${systemd_system_unitdir} 72 install -d ${D}${systemd_system_unitdir}
@@ -89,3 +88,27 @@ do_install(){
89 install -p -m 0755 ${S}/examples/logrotate.cron ${D}${sysconfdir}/cron.daily/logrotate 88 install -p -m 0755 ${S}/examples/logrotate.cron ${D}${sysconfdir}/cron.daily/logrotate
90 fi 89 fi
91} 90}
91
92do_install_ptest() {
93 cp -r ${S}/test/* ${D}${PTEST_PATH}
94 cp ${S}/test-driver ${D}${PTEST_PATH}
95 cp ${B}/test/Makefile ${D}${PTEST_PATH}
96
97 # Do not rebuild Makefile
98 sed -i 's/^Makefile:/_Makefile:/' ${D}${PTEST_PATH}/Makefile
99
100 # Fix top_builddir and top_srcdir
101 sed -e 's/^top_builddir = \(.*\)/top_builddir = ./' \
102 -e 's/^top_srcdir = \(.*\)/top_srcdir = ./' \
103 -i ${D}${PTEST_PATH}/Makefile
104
105 # Replace bash with sh
106 sed -i 's,/bin/bash,/bin/sh,' ${D}${PTEST_PATH}/Makefile
107
108 # Replace gawk with awk
109 sed -i 's/gawk/awk/' ${D}${PTEST_PATH}/Makefile
110 ln -s ${sbindir}/logrotate ${D}${PTEST_PATH}
111}
112
113# coreutils is needed to have "readlink"
114RDEPENDS:${PN}-ptest += "make coreutils"