Skip to content

Commit

Permalink
fix log and config file read (#8865)
Browse files Browse the repository at this point in the history
  • Loading branch information
EricJoy2048 committed Mar 14, 2022
1 parent d88656c commit adc2234
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,21 +76,35 @@ public void process(Channel channel, Command command) {
case GET_LOG_BYTES_REQUEST:
GetLogBytesRequestCommand getLogRequest = JSONUtils.parseObject(
command.getBody(), GetLogBytesRequestCommand.class);
byte[] bytes = getFileContentBytes(getLogRequest.getPath());
String path = getLogRequest.getPath();
if (!checkPathSecurity(path)) {
throw new IllegalArgumentException("Illegal path");
}
byte[] bytes = getFileContentBytes(path);
GetLogBytesResponseCommand getLogResponse = new GetLogBytesResponseCommand(bytes);
channel.writeAndFlush(getLogResponse.convert2Command(command.getOpaque()));
break;
case VIEW_WHOLE_LOG_REQUEST:
ViewLogRequestCommand viewLogRequest = JSONUtils.parseObject(
command.getBody(), ViewLogRequestCommand.class);
String msg = LoggerUtils.readWholeFileContent(viewLogRequest.getPath());
String viewLogPath = viewLogRequest.getPath();
if (!checkPathSecurity(viewLogPath)) {
throw new IllegalArgumentException("Illegal path");
}
String msg = LoggerUtils.readWholeFileContent(viewLogPath);
ViewLogResponseCommand viewLogResponse = new ViewLogResponseCommand(msg);
channel.writeAndFlush(viewLogResponse.convert2Command(command.getOpaque()));
break;
case ROLL_VIEW_LOG_REQUEST:
RollViewLogRequestCommand rollViewLogRequest = JSONUtils.parseObject(
command.getBody(), RollViewLogRequestCommand.class);
List<String> lines = readPartFileContent(rollViewLogRequest.getPath(),

String rollViewLogPath = rollViewLogRequest.getPath();
if (!checkPathSecurity(rollViewLogPath)) {
throw new IllegalArgumentException("Illegal path");
}

List<String> lines = readPartFileContent(rollViewLogPath,
rollViewLogRequest.getSkipLineNum(), rollViewLogRequest.getLimit());
StringBuilder builder = new StringBuilder();
for (String line : lines) {
Expand All @@ -104,7 +118,9 @@ public void process(Channel channel, Command command) {
command.getBody(), RemoveTaskLogRequestCommand.class);

String taskLogPath = removeTaskLogRequest.getPath();

if (!checkPathSecurity(taskLogPath)) {
throw new IllegalArgumentException("Illegal path");
}
File taskLogFile = new File(taskLogPath);
Boolean status = true;
try {
Expand All @@ -123,6 +139,15 @@ public void process(Channel channel, Command command) {
}
}

private boolean checkPathSecurity(String path) {
String dsHome = System.getProperty("DOLPHINSCHEDULER_HOME");
if (path.startsWith(dsHome) && !path.contains("../") && path.endsWith(".log")) {
return true;
}

return false;
}

public ExecutorService getExecutor() {
return this.executor;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,68 @@
@PrepareForTest({LoggerUtils.class})
public class LoggerRequestProcessorTest {

@Test(expected = None.class)
@Test
public void testProcessViewWholeLogRequest() {
System.setProperty("DOLPHINSCHEDULER_HOME", System.getProperty("user.dir"));
Channel channel = PowerMockito.mock(Channel.class);
PowerMockito.when(channel.writeAndFlush(Mockito.any(Command.class))).thenReturn(null);
PowerMockito.mockStatic(LoggerUtils.class);
PowerMockito.when(LoggerUtils.readWholeFileContent(Mockito.anyString())).thenReturn("");
String userDir = System.getProperty("user.dir");
ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/path/a.log");

ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand("/log/path");
Command command = new Command();
command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST);
command.setBody(JSONUtils.toJsonByteArray(logRequestCommand));

LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor();
loggerRequestProcessor.process(channel, command);
}

@Test(expected = IllegalArgumentException.class)
public void testProcessViewWholeLogRequestError() {
System.setProperty("DOLPHINSCHEDULER_HOME", System.getProperty("user.dir"));
Channel channel = PowerMockito.mock(Channel.class);
PowerMockito.when(channel.writeAndFlush(Mockito.any(Command.class))).thenReturn(null);
PowerMockito.mockStatic(LoggerUtils.class);
PowerMockito.when(LoggerUtils.readWholeFileContent(Mockito.anyString())).thenReturn("");
String userDir = System.getProperty("user.dir");
ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/path/a");

Command command = new Command();
command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST);
command.setBody(JSONUtils.toJsonByteArray(logRequestCommand));

LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor();
loggerRequestProcessor.process(channel, command);
}

@Test(expected = IllegalArgumentException.class)
public void testProcessViewWholeLogRequestErrorRelativePath() {
System.setProperty("DOLPHINSCHEDULER_HOME", System.getProperty("user.dir"));
Channel channel = PowerMockito.mock(Channel.class);
PowerMockito.when(channel.writeAndFlush(Mockito.any(Command.class))).thenReturn(null);
PowerMockito.mockStatic(LoggerUtils.class);
PowerMockito.when(LoggerUtils.readWholeFileContent(Mockito.anyString())).thenReturn("");
String userDir = System.getProperty("user.dir");
ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand(userDir + "/log/../../a.log");

Command command = new Command();
command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST);
command.setBody(JSONUtils.toJsonByteArray(logRequestCommand));

LoggerRequestProcessor loggerRequestProcessor = new LoggerRequestProcessor();
loggerRequestProcessor.process(channel, command);
}

@Test(expected = IllegalArgumentException.class)
public void testProcessViewWholeLogRequestErrorStartWith() {
System.setProperty("DOLPHINSCHEDULER_HOME", System.getProperty("user.dir"));
Channel channel = PowerMockito.mock(Channel.class);
PowerMockito.when(channel.writeAndFlush(Mockito.any(Command.class))).thenReturn(null);
PowerMockito.mockStatic(LoggerUtils.class);
PowerMockito.when(LoggerUtils.readWholeFileContent(Mockito.anyString())).thenReturn("");
ViewLogRequestCommand logRequestCommand = new ViewLogRequestCommand("/log/a.log");

Command command = new Command();
command.setType(CommandType.VIEW_WHOLE_LOG_REQUEST);
Expand Down
4 changes: 3 additions & 1 deletion script/dolphinscheduler-daemon.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ echo "Begin $startStop $command......"

BIN_DIR=`dirname $0`
BIN_DIR=`cd "$BIN_DIR"; pwd`
DOLPHINSCHEDULER_HOME=`cd "$BIN_DIR/.."; pwd`
export DOLPHINSCHEDULER_HOME=`cd "$BIN_DIR/.."; pwd`

chmod 700 -R ${DOLPHINSCHEDULER_HOME}

source /etc/profile
set -a
Expand Down

0 comments on commit adc2234

Please sign in to comment.