initial import
[patches.git] / metalog-0.7beta-ext2attr.patch
CommitLineData
5e993f12 1diff -uwr metalog-0.7beta/configure.in metalog-0.7beta-ext2attr/configure.in
2--- metalog-0.7beta/configure.in 2002-04-29 23:30:00.000000000 +0200
3+++ metalog-0.7beta-ext2attr/configure.in 2002-10-30 00:35:28.000000000 +0100
4@@ -30,6 +30,7 @@
5 AC_CHECK_HEADERS(unistd.h)
6 AC_CHECK_HEADERS(sys/time.h sys/wait.h fcntl.h sys/fcntl.h)
7 AC_CHECK_HEADERS(getopt.h stddef.h sys/klog.h)
8+AC_CHECK_HEADERS(linux/ext2_fs.h)
9
10 dnl Checks for types
11
12diff -uwr metalog-0.7beta/src/metalog.h metalog-0.7beta-ext2attr/src/metalog.h
13--- metalog-0.7beta/src/metalog.h 2002-04-29 23:35:16.000000000 +0200
14+++ metalog-0.7beta-ext2attr/src/metalog.h 2002-10-30 00:44:53.000000000 +0100
15@@ -79,6 +79,16 @@
16 #endif
17 #include <pcre.h>
18
19+
20+/* PinG's ext2 patch */
21+/* Include headers if needed */
22+#if defined(__linux__) && defined(HAVE_LINUX_EXT2_FS_H)
23+# define USE_EXT2
24+# include <linux/ext2_fs.h>
25+# include <sys/ioctl.h>
26+#endif
27+
28+
29 #ifdef HAVE_ALLOCA
30 # ifdef HAVE_ALLOCA_H
31 # include <alloca.h>
32
33diff -uwr metalog-0.7beta/src/metalog.c metalog-0.7beta-ext2attr/src/metalogch
34--- metalog-0.7beta/src/metalog.c 2002-04-29 23:35:16.000000000 +0200
35+++ metalog-0.7beta-ext2attr/src/metalog.c 2002-10-30 01:13:57.000000000 +0100
36@@ -700,6 +700,13 @@
37
38 static int rotateLogFiles(const char * const directory, const int maxfiles)
39 {
40+
41+/* PinG's ext2 patch. I need a file descriptor 'n a long :op */
42+#ifdef USE_EXT2
43+ int fd;
44+ long flags;
45+#endif
46+
47 char path[PATH_MAX];
48 char old_name[PATH_MAX];
49 const char *name;
50@@ -710,6 +717,7 @@
51 int older_year, older_mon = INT_MAX, older_mday = INT_MAX,
52 older_hour = INT_MAX, older_min = INT_MAX, older_sec = INT_MAX;
53
54+
55 rescan:
56 foundlogs = 0;
57 *old_name = 0;
58@@ -754,6 +762,15 @@
59 directory, old_name);
60 return -4;
61 }
62+
63+ /* PinG's ext2 patch. Un-immutate file before unlink it ;) */
64+#ifdef USE_EXT2
65+ if ((fd = open(path,O_RDONLY))>0){
66+ flags = 0;
67+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
68+ close(fd);
69+ }
70+#endif
71 if (unlink(path) < 0) {
72 return -2;
73 }
74@@ -769,6 +786,14 @@
75 static int writeLogLine(Output * const output, const char * const date,
76 const char * const prg, const char * const info)
77 {
78+/* PinG's ext2 patch. */
79+#ifdef USE_EXT2
80+ int fd;
81+ long flags;
82+#endif
83+
84+
85+
86 time_t now = time(NULL);
87
88 if (output == NULL || output->directory == NULL) {
89@@ -787,7 +812,25 @@
90 fprintf(stderr, "Can't create [%s]\n", output->directory);
91 return -1;
92 }
93+ /* PinG's ext2 patch. Set noatime flag */
94+#ifdef USE_EXT2
95+ if ((fd = open(output->directory,O_RDONLY))>0){
96+ flags = EXT2_NOATIME_FL;
97+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
98+ close(fd);
99+ }
100+#endif
101+
102 } else if (!S_ISDIR(st.st_mode)) {
103+ /* PinG's ext2 patch. Blank flags */
104+#ifdef USE_EXT2
105+ if ((fd = open(output->directory,O_RDONLY))>0){
106+ flags = 0;
107+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
108+ close(fd);
109+ }
110+#endif
111+
112 if (unlink(output->directory) < 0) {
113 fprintf(stderr, "Can't unlink [%s]\n", output->directory);
114 return -1;
115@@ -800,6 +843,17 @@
116 output->directory);
117 return -2;
118 }
119+
120+/* PinG's ext2 patch. Set append-only & noatime flags */
121+#ifdef USE_EXT2
122+ if ((fd = open(path,O_RDONLY|O_CREAT))>0){
123+ flags = EXT2_APPEND_FL | EXT2_NOATIME_FL;
124+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
125+ close(fd);
126+ }
127+#endif
128+
129+
130 if ((fp = fopen(path, "at")) == NULL) {
131 fprintf(stderr, "Unable to access [%s]\n", path);
132 return -3;
133@@ -811,6 +865,15 @@
134 fclose(fp);
135 return -2;
136 }
137+ /* PinG's ext2 patch. */
138+#ifdef USE_EXT2
139+ if ((fd = open(path,O_RDONLY|O_CREAT))>0){
140+ flags = 0;
141+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
142+ close(fd);
143+ }
144+#endif
145+
146 if ((fp_ts = fopen(path, "rt")) == NULL) {
147 recreate_ts:
148 creatime = time(NULL);
149@@ -833,6 +896,15 @@
150 fprintf(stderr, "Unable to close [%s]\n", path);
151 return -3;
152 }
153+ /* PinG's ext2 patch. */
154+#ifdef USE_EXT2
155+ if ((fd = open(path,O_RDONLY|O_CREAT))>0){
156+ flags = EXT2_IMMUTABLE_FL | EXT2_NOATIME_FL;
157+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
158+ close(fd);
159+ }
160+#endif
161+
162 output->creatime = creatime;
163 output->size = (off_t) ftell(fp);
164 output->fp = fp;
165@@ -871,11 +943,33 @@
166 rotateLogFiles(output->directory, output->maxfiles);
167 fclose(output->fp);
168 output->fp = NULL;
169+
170+
171+/* PinG's ext2 patch. */
172+#ifdef USE_EXT2
173+ if ((fd = open(path,O_RDONLY))>0){
174+ flags = 0;
175+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
176+ close(fd);
177+ }
178+#endif
179+
180+
181 if (rename(path, newpath) < 0 && unlink(path) < 0) {
182 fprintf(stderr, "Unable to rename [%s] to [%s]\n",
183 path, newpath);
184 return -5;
185 }
186+
187+/* PinG's ext2 patch. Set immutable & noatime flags */
188+#ifdef USE_EXT2
189+ if ((fd = open(newpath,O_RDONLY))>0){
190+ flags = EXT2_IMMUTABLE_FL | EXT2_NOATIME_FL;
191+ ioctl(fd,EXT2_IOC_SETFLAGS,&flags);
192+ close(fd);
193+ }
194+#endif
195+
196 if (snprintf(path, sizeof path, "%s/" OUTPUT_DIR_TIMESTAMP,
197 output->directory) < 0) {
198 fprintf(stderr, "Path name too long for timestamp in [%s]\n",
199
200