in core/src/main/java/org/apache/ftpserver/command/impl/MD5.java [57:165]
public void execute(final FtpIoSession session,
final FtpServerContext context, final FtpRequest request)
throws IOException {
// reset state variables
session.resetState();
boolean isMMD5 = false;
if ("MMD5".equals(request.getCommand())) {
isMMD5 = true;
}
// print file information
String argument = request.getArgument();
if (argument == null || argument.trim().length() == 0) {
session
.write(LocalizedFtpReply
.translate(
session,
request,
context,
FtpReply.REPLY_504_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER,
"MD5.invalid", null));
return;
}
String[] fileNames = null;
if (isMMD5) {
fileNames = argument.split(",");
} else {
fileNames = new String[] { argument };
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fileNames.length; i++) {
String fileName = fileNames[i].trim();
// get file object
FtpFile file = null;
try {
file = session.getFileSystemView().getFile(fileName);
} catch (Exception ex) {
LOG.debug("Exception getting the file object: " + fileName, ex);
}
if (file == null) {
session
.write(LocalizedFtpReply
.translate(
session,
request,
context,
FtpReply.REPLY_504_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER,
"MD5.invalid", fileName));
return;
}
// check file
if (!file.isFile()) {
session
.write(LocalizedFtpReply
.translate(
session,
request,
context,
FtpReply.REPLY_504_COMMAND_NOT_IMPLEMENTED_FOR_THAT_PARAMETER,
"MD5.invalid", fileName));
return;
}
InputStream is = null;
try {
is = file.createInputStream(0);
String md5Hash = md5(is);
if (i > 0) {
sb.append(", ");
}
boolean nameHasSpaces = fileName.indexOf(' ') >= 0;
if(nameHasSpaces) {
sb.append('"');
}
sb.append(fileName);
if(nameHasSpaces) {
sb.append('"');
}
sb.append(' ');
sb.append(md5Hash);
} catch (NoSuchAlgorithmException e) {
LOG.debug("MD5 algorithm not available", e);
session.write(LocalizedFtpReply.translate(session, request, context,
FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED,
"MD5.notimplemened", null));
} finally {
IoUtils.close(is);
}
}
if (isMMD5) {
session.write(LocalizedFtpReply.translate(session, request, context,
252, "MMD5", sb.toString()));
} else {
session.write(LocalizedFtpReply.translate(session, request, context,
251, "MD5", sb.toString()));
}
}