-
Notifications
You must be signed in to change notification settings - Fork 191
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
firstaction and lastaction do not check "hasErrors" #12
Comments
The problem with firstaction is that it's executed before the rotation begins. So when there are log files to rotate, firstaction is called, but later logrotate finds out that the log file with the same date extension exists and skips the rotation. I could check for this particular error before running firstaction script, but there are bunch of other errors which cannot be detected like that. I therefore think the situation with "firstaction" execution is OK. During the firstaction, we just do know if the future rotation succeeds or not. The lastaction is more problematic. Logrotate could stop calling that script and even the man-page suggests that by "lastaction is called .... only if at least one log is rotated". We actually have that info, so maybe it's really good thing to check for the errors there. What worries me little bit that some people could use firstaction and lastaction to cleanup after each rotation without taking the care about rotation success. For those people, logrotate would break if lastaction would be called in case of rotation errror. Anyway, I think for now I will: |
I agree that firstaction does not have enough knowledge whether the rotation will succeeds or not. Updating the documentation sounds good enough. For lastaction, I have patched out internal repo with the error check. Another subtle suggestion of documentation is to highlight the "-f" option will actually set the numRotated non-zero. If the user wants to use "-f", be aware of the implication of scripts. |
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#15 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#16 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#17 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#18 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#19 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#20 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#21 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#22 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#23 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#24 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#25 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#26 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#27 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#28 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#29 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#30 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#31 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#32 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 logrotate#34 0x4d961d in main logrotate/logrotate.c:2791:9 logrotate#35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) logrotate#36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING fixes: logrotate#271
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#15 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#16 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#17 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#18 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#19 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#20 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#21 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#22 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#23 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#24 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#25 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#26 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#27 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#28 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#29 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#30 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#31 0x4d164c in readConfigFile logrotate/config.c:1457:30 logrotate#32 0x4c78fc in readConfigPath logrotate/config.c:685:13 logrotate#33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 logrotate#34 0x4d961d in main logrotate/logrotate.c:2791:9 logrotate#35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) logrotate#36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING fixes: logrotate#271
logrotate might crash when using invalid configuration settings in combination with include example configuration: /tmp/logsegv/segv.log { include /tmp/logsegv/segv.cfg "" { } } will lead to $ ./logrotate -vfd -s /tmp/logsegv/segv.state /tmp/logsegv/segv.cfg WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /tmp/logsegv/segv.cfg including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg reading config file /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:1 duplicate log entry for /tmp/logsegv/segv.log including /tmp/logsegv/segv.cfg error: /tmp/logsegv/segv.cfg:2 include nesting too deep error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in /tmp/logsegv/segv.log , skipping removing last 1 log configs error: /tmp/logsegv/segv.cfg:4 unexpected log filename error: found error in log config, skipping removing last 1 log configs config.c:553:23: runtime error: load of null pointer of type 'struct logInfo *' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior config.c:553:23 in AddressSanitizer:DEADLYSIGNAL ================================================================= ==12601==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x0000004d79a1 bp 0x7ffca98d0c30 sp 0x7ffca98d0c10 T0) ==12601==The signal is caused by a READ memory access. ==12601==Hint: address points to the zero page. #0 0x4d79a0 in freeTailLogs logrotate/config.c:553:23 #1 0x4cb482 in readConfigFile logrotate/config.c:1870:21 #2 0x4c78fc in readConfigPath logrotate/config.c:685:13 #3 0x4d164c in readConfigFile logrotate/config.c:1457:30 #4 0x4c78fc in readConfigPath logrotate/config.c:685:13 #5 0x4d164c in readConfigFile logrotate/config.c:1457:30 #6 0x4c78fc in readConfigPath logrotate/config.c:685:13 #7 0x4d164c in readConfigFile logrotate/config.c:1457:30 #8 0x4c78fc in readConfigPath logrotate/config.c:685:13 #9 0x4d164c in readConfigFile logrotate/config.c:1457:30 #10 0x4c78fc in readConfigPath logrotate/config.c:685:13 #11 0x4d164c in readConfigFile logrotate/config.c:1457:30 #12 0x4c78fc in readConfigPath logrotate/config.c:685:13 #13 0x4d164c in readConfigFile logrotate/config.c:1457:30 #14 0x4c78fc in readConfigPath logrotate/config.c:685:13 #15 0x4d164c in readConfigFile logrotate/config.c:1457:30 #16 0x4c78fc in readConfigPath logrotate/config.c:685:13 #17 0x4d164c in readConfigFile logrotate/config.c:1457:30 #18 0x4c78fc in readConfigPath logrotate/config.c:685:13 #19 0x4d164c in readConfigFile logrotate/config.c:1457:30 #20 0x4c78fc in readConfigPath logrotate/config.c:685:13 #21 0x4d164c in readConfigFile logrotate/config.c:1457:30 #22 0x4c78fc in readConfigPath logrotate/config.c:685:13 #23 0x4d164c in readConfigFile logrotate/config.c:1457:30 #24 0x4c78fc in readConfigPath logrotate/config.c:685:13 #25 0x4d164c in readConfigFile logrotate/config.c:1457:30 #26 0x4c78fc in readConfigPath logrotate/config.c:685:13 #27 0x4d164c in readConfigFile logrotate/config.c:1457:30 #28 0x4c78fc in readConfigPath logrotate/config.c:685:13 #29 0x4d164c in readConfigFile logrotate/config.c:1457:30 #30 0x4c78fc in readConfigPath logrotate/config.c:685:13 #31 0x4d164c in readConfigFile logrotate/config.c:1457:30 #32 0x4c78fc in readConfigPath logrotate/config.c:685:13 #33 0x4c70bb in readAllConfigPaths logrotate/config.c:759:13 #34 0x4d961d in main logrotate/logrotate.c:2791:9 #35 0x7fa31d719bba in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x26bba) #36 0x41f7a9 in _start (logrotate/logrotate+0x41f7a9) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/christian/Coding/workspaces/smartgit/logrotate/config.c:553:23 in freeTailLogs ==12601==ABORTING Fixes: #271 Closes #272
When logrotate is run with "-f" option, the firstaction and lastaction will be run even there are errors detected. For example, if I do a "logrotate -f /path/to/lgorotate.conf" after logrotate has happened in the current hour, logrotate will not stomp the rotated file after it finds the file already exists. However, the lastaction script is still run because it did not check the "hasErros" variable. Is this intentional or a bug? The "-f" option will set numRotated no-zero.
The text was updated successfully, but these errors were encountered: