Index: conf/ftpcommands.conf.dist =================================================================== --- conf/ftpcommands.conf.dist (revision 1638) +++ conf/ftpcommands.conf.dist (working copy) @@ -22,3 +22,5 @@ USER=org.drftpd.commands.login.LoginHandler.doUSER PASS=org.drftpd.commands.login.LoginHandler.doPASS QUIT=org.drftpd.commands.login.LoginHandler.doQUIT + +LIST=org.drftpd.commands.list.LIST.doLIST Index: src/plugins/org.drftpd.commands.list/src/org/drftpd/commands/list/LIST.java =================================================================== --- src/plugins/org.drftpd.commands.list/src/org/drftpd/commands/list/LIST.java (revision 0) +++ src/plugins/org.drftpd.commands.list/src/org/drftpd/commands/list/LIST.java (revision 0) @@ -0,0 +1,402 @@ +/* + * This file is part of DrFTPD, Distributed FTP Daemon. + * + * DrFTPD is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * DrFTPD is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with DrFTPD; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package org.drftpd.commands.list; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.net.Socket; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; + +import org.apache.log4j.Logger; +import org.drftpd.commandmanager.CommandInterface; +import org.drftpd.commandmanager.CommandRequest; +import org.drftpd.commandmanager.CommandResponse; +import org.drftpd.commandmanager.Reply; +import org.drftpd.commandmanager.StandardCommandManager; +import org.drftpd.master.BaseFtpConnection; +import org.drftpd.master.TransferState; +import org.drftpd.vfs.DirectoryHandle; +import org.drftpd.vfs.FileHandle; +import org.drftpd.vfs.InodeHandleInterface; +import org.drftpd.vfs.LinkHandle; +import org.drftpd.vfs.ListUtils; +import org.drftpd.vfs.ObjectNotValidException; + +/** + * @author mog + * + * @version $Id: LIST.java 1621 2007-02-13 20:41:31Z djb61 $ + */ +public class LIST extends CommandInterface { + private final static DateFormat AFTER_SIX = new SimpleDateFormat(" yyyy"); + + private final static DateFormat BEFORE_SIX = new SimpleDateFormat("HH:mm"); + + private final static String DELIM = " "; + + private final static DateFormat FULL = new SimpleDateFormat("HH:mm:ss yyyy"); + + private static final Logger logger = Logger.getLogger(LIST.class); + + private final static String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", + "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + private final static String NEWLINE = "\r\n"; + + /* */ + + /** + * Get file name. + */ + + /* + * private static String getName(LinkedRemoteFileInterface fl) { String + * flName = fl.getName(); + * + * int lastIndex = flName.lastIndexOf("/"); + * + * if (lastIndex == -1) { return flName; } else { return + * flName.substring(lastIndex + 1); } } + */ + + /** + * Get permission string. + */ + private static String getPermission(InodeHandleInterface fl) + throws FileNotFoundException { + StringBuffer sb = new StringBuffer(13); + + if (fl.isLink()) { + sb.append("l"); + } else if (fl.isDirectory()) { + sb.append("d"); + } else { + sb.append("-"); + } + sb.append("rw"); + sb.append(fl.isDirectory() ? "x" : "-"); + + sb.append("rw"); + sb.append(fl.isDirectory() ? "x" : "-"); + + sb.append("rw"); + sb.append(fl.isDirectory() ? "x" : "-"); + + return sb.toString(); + } + + public static String getUnixDate(long date, boolean fulldate) { + Date date1 = new Date(date); + long dateTime = date1.getTime(); + + if (dateTime < 0) { + return "------------"; + } + + Calendar cal = new GregorianCalendar(); + cal.setTime(date1); + + String firstPart = MONTHS[cal.get(Calendar.MONTH)] + ' '; + + String dateStr = String.valueOf(cal.get(Calendar.DATE)); + + if (dateStr.length() == 1) { + dateStr = ' ' + dateStr; + } + + firstPart += (dateStr + ' '); + + long nowTime = System.currentTimeMillis(); + + if (fulldate) { + return firstPart + FULL.format(date1); + } else if (Math.abs(nowTime - dateTime) > (183L * 24L * 60L * 60L * 1000L)) { + return firstPart + AFTER_SIX.format(date1); + } else { + return firstPart + BEFORE_SIX.format(date1); + } + } + + /** + * Get each directory line. + */ + private static void printLine(InodeHandleInterface fl, Writer out, + boolean fulldate) throws IOException { + StringBuffer line = new StringBuffer(); + + if (fl instanceof FileHandle + && !((FileHandle) fl).isAvailable()) { + line.append("----------"); + } else { + line.append(getPermission(fl)); + } + + line.append(DELIM); + line.append((fl.isDirectory() ? "3" : "1")); + line.append(DELIM); + line.append(ListUtils.padToLength(fl.getUsername(), 8)); + line.append(DELIM); + line.append(ListUtils.padToLength(fl.getGroup(), 8)); + line.append(DELIM); + line.append(fl.getSize()); + line.append(DELIM); + line.append(getUnixDate(fl.lastModified(), fulldate)); + line.append(DELIM); + line.append(fl.getName()); + if (fl.isLink()) { + line.append(DELIM + "->" + DELIM + ((LinkHandle)fl).getTargetString()); + } + line.append(NEWLINE); + out.write(line.toString()); + } + + /** + * Print file list. Detail listing. + * + *
+	 *    -a : display all (including hidden files)
+	 * 
+ * + * @return true if success + */ + private static void printList(Collection files, Writer os, boolean fulldate) + throws IOException { + // out = new BufferedWriter(out); + os.write("total 0" + NEWLINE); + + // print file list + for (Iterator iter = files.iterator(); iter.hasNext();) { + InodeHandleInterface file = iter.next(); + LIST.printLine(file, os, fulldate); + } + } + + /** + * Print file list. + * + *
+	 *    -l : detail listing
+	 *    -a : display all (including hidden files)
+	 * 
+ * + * @return true if success + */ + private static void printNList(Collection fileList, boolean bDetail, + Writer out) throws IOException { + for (Iterator iter = fileList.iterator(); iter.hasNext();) { + InodeHandleInterface file = iter.next(); + + if (bDetail) { + printLine(file, out, false); + } else { + out.write(file.getName() + NEWLINE); + } + } + } + + /** + * NLST [<SP> <pathname>] <CRLF>
+ * + * This command causes a directory listing to be sent from server to user + * site. The pathname should specify a directory or other system-specific + * file group descriptor; a null argument implies the current directory. The + * server will return a stream of names of files and no other information. + * + * + * LIST [<SP> <pathname>] <CRLF>
+ * + * This command causes a list to be sent from the server to the passive DTP. + * If the pathname specifies a directory or other group of files, the server + * should transfer a list of files in the specified directory. If the + * pathname specifies a file then the server should send current information + * on the file. A null argument implies the user's current working or + * default directory. The data transfer is over the data connection + * + * LIST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 + */ + public CommandResponse doLIST(CommandRequest request) { + try { + String directoryName = null; + String options = ""; + BaseFtpConnection conn = request.getConnection(); + TransferState ts = conn.getTransferState(); + + // String pattern = "*"; + // get options, directory name and pattern + // argument == null if there was no argument for LIST + if (request.hasArgument()) { + // argument = argument.trim(); + StringBuffer optionsSb = new StringBuffer(4); + StringTokenizer st = new StringTokenizer(request.getArgument(), + " "); + + while (st.hasMoreTokens()) { + String token = st.nextToken(); + + if (token.charAt(0) == '-') { + if (token.length() > 1) { + optionsSb.append(token.substring(1)); + } + } else { + directoryName = token; + } + } + + options = optionsSb.toString(); + } + + // check options + // boolean allOption = options.indexOf('a') != -1; + boolean fulldate = options.indexOf('T') != -1; + boolean detailOption = request.getCommand().equals("LIST") + || (options.indexOf('l') != -1); + + // boolean directoryOption = options.indexOf("d") != -1; + + if (!ts.isPasv() && !ts.isPort()) { + ts.reset(); + return StandardCommandManager.genericResponse("RESPONSE_503_BAD_SEQUENCE_OF_COMMANDS"); + } + + DirectoryHandle directoryFile; + + if (directoryName != null) { + try { + directoryFile = conn.getCurrentDirectory().getDirectory( + directoryName); + } catch (FileNotFoundException ex) { + return StandardCommandManager.genericResponse("RESPONSE_550_REQUESTED_ACTION_NOT_TAKEN"); + } catch (ObjectNotValidException e) { + return StandardCommandManager.genericResponse("RESPONSE_504_COMMAND_NOT_IMPLEMENTED_FOR_PARM"); + } + + if (!conn.getGlobalContext().getConfig().checkPathPermission( + "privpath", conn.getUserNull(), + directoryFile.getParent(), true)) { + return StandardCommandManager.genericResponse("RESPONSE_550_REQUESTED_ACTION_NOT_TAKEN"); + } + } else { + directoryFile = conn.getCurrentDirectory(); + } + + PrintWriter out = conn.getControlWriter(); + Socket dataSocket = null; + Writer os; + + + if (!ts.getSendFilesEncrypted() + && conn.getGlobalContext().getConfig().checkPermission( + "denydiruncrypted", conn.getUserNull())) { + return new CommandResponse(550, "Secure Listing Required"); + } + + out.write(Reply.RESPONSE_150_OK); + out.flush(); + + try { + dataSocket = ts.getDataSocketForLIST(); + os = new PrintWriter(new OutputStreamWriter(dataSocket + .getOutputStream())); + + // out2 = dataSocket.getChannel(); + } catch (IOException ex) { + logger.warn("from master", ex); + + return new CommandResponse(425, ex.getMessage()); + } + + // ////////////// + logger.debug("Listing directoryFile - " + directoryFile); + List listFiles = ListUtils.list( + directoryFile, conn); + + // ////////////// + try { + if (request.getCommand().equals("LIST") + || request.getCommand().equals("STAT")) { + printList(listFiles, os, fulldate); + } else if (request.getCommand().equals("NLST")) { + printNList(listFiles, detailOption, os); + } + + CommandResponse response = (CommandResponse) StandardCommandManager.genericResponse("RESPONSE_226_CLOSING_DATA_CONNECTION") + .clone(); + + try { + os.close(); + dataSocket.close(); + response.addComment(conn.status()); + + return response; + } catch (IOException ioe) { + logger.error("", ioe); + + return new CommandResponse(450, ioe.getMessage()); + } + } catch (IOException ex) { + logger.warn("from master", ex); + + return new CommandResponse(450, ex.getMessage()); + } + } finally { + request.getConnection().getTransferState().reset(); + } + } + + public CommandResponse doSTAT(CommandRequest request) { +/* if (request.getCommand().equals("STAT")) { + os = out; + out.write("213- Status of " + request.getArgument() + ":" + + NEWLINE); + return new Reply(213, "End of Status"); + }*/ + return null; + } + + public String[] getFeatReplies() { + return null; + } + + /** + * STAT [<SP> <pathname>] <CRLF>
+ * + * This command shall cause a status response to be sent over the control + * connection in the form of a reply. + */ + + // public void doSTAT(FtpRequest request, PrintWriter out) { + // reset(); + // if (request.hasArgument()) { + // doLIST(request, out); + // } else { + // out.print(FtpReply.RESPONSE_504_COMMAND_NOT_IMPLEMENTED_FOR_PARM); + // } + // return; + // } +} Index: src/plugins/org.drftpd.commands.list/plugin.xml =================================================================== --- src/plugins/org.drftpd.commands.list/plugin.xml (revision 0) +++ src/plugins/org.drftpd.commands.list/plugin.xml (revision 0) @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: src/plugins/org.drftpd.commands.list/build.xml =================================================================== --- src/plugins/org.drftpd.commands.list/build.xml (revision 0) +++ src/plugins/org.drftpd.commands.list/build.xml (revision 0) @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + Building ${plugin.id} plug-in to folder ${plugin.home} + + + + + + + + + + + Index: src/master/src/org/drftpd/master/CommitManager.java =================================================================== --- src/master/src/org/drftpd/master/CommitManager.java (revision 1638) +++ src/master/src/org/drftpd/master/CommitManager.java (working copy) @@ -32,6 +32,7 @@ import org.java.plugin.PluginManager; /** + * @author zubov * @version $Id$ */ public class CommitManager { Index: src/master/src/org/drftpd/commands/LIST.java =================================================================== --- src/master/src/org/drftpd/commands/LIST.java (revision 1638) +++ src/master/src/org/drftpd/commands/LIST.java (working copy) @@ -1,422 +0,0 @@ -/* - * This file is part of DrFTPD, Distributed FTP Daemon. - * - * DrFTPD is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * DrFTPD is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with DrFTPD; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package org.drftpd.commands; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.Writer; -import java.net.Socket; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; - - -import org.apache.log4j.Logger; -import org.drftpd.commandmanager.CommandHandler; -import org.drftpd.commandmanager.CommandHandlerFactory; -import org.drftpd.commandmanager.CommandManager; -import org.drftpd.commandmanager.CommandManagerFactory; -import org.drftpd.commandmanager.Reply; -import org.drftpd.master.BaseFtpConnection; -import org.drftpd.master.TransferState; -import org.drftpd.util.FtpRequest; -import org.drftpd.vfs.DirectoryHandle; -import org.drftpd.vfs.FileHandle; -import org.drftpd.vfs.InodeHandleInterface; -import org.drftpd.vfs.LinkHandle; -import org.drftpd.vfs.ListUtils; -import org.drftpd.vfs.ObjectNotValidException; - -/** - * @author mog - * - * @version $Id$ - */ -public class LIST implements CommandHandler, CommandHandlerFactory { - private final static DateFormat AFTER_SIX = new SimpleDateFormat(" yyyy"); - - private final static DateFormat BEFORE_SIX = new SimpleDateFormat("HH:mm"); - - private final static String DELIM = " "; - - private final static DateFormat FULL = new SimpleDateFormat("HH:mm:ss yyyy"); - - private static final Logger logger = Logger.getLogger(LIST.class); - - private final static String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", - "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - - private final static String NEWLINE = "\r\n"; - - /* */ - - /** - * Get file name. - */ - - /* - * private static String getName(LinkedRemoteFileInterface fl) { String - * flName = fl.getName(); - * - * int lastIndex = flName.lastIndexOf("/"); - * - * if (lastIndex == -1) { return flName; } else { return - * flName.substring(lastIndex + 1); } } - */ - - /** - * Get permission string. - */ - private static String getPermission(InodeHandleInterface fl) - throws FileNotFoundException { - StringBuffer sb = new StringBuffer(13); - - if (fl.isLink()) { - sb.append("l"); - } else if (fl.isDirectory()) { - sb.append("d"); - } else { - sb.append("-"); - } - sb.append("rw"); - sb.append(fl.isDirectory() ? "x" : "-"); - - sb.append("rw"); - sb.append(fl.isDirectory() ? "x" : "-"); - - sb.append("rw"); - sb.append(fl.isDirectory() ? "x" : "-"); - - return sb.toString(); - } - - public static String getUnixDate(long date, boolean fulldate) { - Date date1 = new Date(date); - long dateTime = date1.getTime(); - - if (dateTime < 0) { - return "------------"; - } - - Calendar cal = new GregorianCalendar(); - cal.setTime(date1); - - String firstPart = MONTHS[cal.get(Calendar.MONTH)] + ' '; - - String dateStr = String.valueOf(cal.get(Calendar.DATE)); - - if (dateStr.length() == 1) { - dateStr = ' ' + dateStr; - } - - firstPart += (dateStr + ' '); - - long nowTime = System.currentTimeMillis(); - - if (fulldate) { - return firstPart + FULL.format(date1); - } else if (Math.abs(nowTime - dateTime) > (183L * 24L * 60L * 60L * 1000L)) { - return firstPart + AFTER_SIX.format(date1); - } else { - return firstPart + BEFORE_SIX.format(date1); - } - } - - /** - * Get each directory line. - */ - private static void printLine(InodeHandleInterface fl, Writer out, - boolean fulldate) throws IOException { - StringBuffer line = new StringBuffer(); - - if (fl instanceof FileHandle - && !((FileHandle) fl).isAvailable()) { - line.append("----------"); - } else { - line.append(getPermission(fl)); - } - - line.append(DELIM); - line.append((fl.isDirectory() ? "3" : "1")); - line.append(DELIM); - line.append(ListUtils.padToLength(fl.getUsername(), 8)); - line.append(DELIM); - line.append(ListUtils.padToLength(fl.getGroup(), 8)); - line.append(DELIM); - line.append(fl.getSize()); - line.append(DELIM); - line.append(getUnixDate(fl.lastModified(), fulldate)); - line.append(DELIM); - line.append(fl.getName()); - if (fl.isLink()) { - line.append(DELIM + "->" + DELIM + ((LinkHandle)fl).getTargetString()); - } - line.append(NEWLINE); - out.write(line.toString()); - } - - /** - * Print file list. Detail listing. - * - *
-	 *    -a : display all (including hidden files)
-	 * 
- * - * @return true if success - */ - private static void printList(Collection files, Writer os, boolean fulldate) - throws IOException { - // out = new BufferedWriter(out); - os.write("total 0" + NEWLINE); - - // print file list - for (Iterator iter = files.iterator(); iter.hasNext();) { - InodeHandleInterface file = iter.next(); - LIST.printLine(file, os, fulldate); - } - } - - /** - * Print file list. - * - *
-	 *    -l : detail listing
-	 *    -a : display all (including hidden files)
-	 * 
- * - * @return true if success - */ - private static void printNList(Collection fileList, boolean bDetail, - Writer out) throws IOException { - for (Iterator iter = fileList.iterator(); iter.hasNext();) { - InodeHandleInterface file = iter.next(); - - if (bDetail) { - printLine(file, out, false); - } else { - out.write(file.getName() + NEWLINE); - } - } - } - - /** - * NLST [<SP> <pathname>] <CRLF>
- * - * This command causes a directory listing to be sent from server to user - * site. The pathname should specify a directory or other system-specific - * file group descriptor; a null argument implies the current directory. The - * server will return a stream of names of files and no other information. - * - * - * LIST [<SP> <pathname>] <CRLF>
- * - * This command causes a list to be sent from the server to the passive DTP. - * If the pathname specifies a directory or other group of files, the server - * should transfer a list of files in the specified directory. If the - * pathname specifies a file then the server should send current information - * on the file. A null argument implies the user's current working or - * default directory. The data transfer is over the data connection - * - * LIST 125, 150 226, 250 425, 426, 451 450 500, 501, 502, 421, 530 - */ - public Reply execute(BaseFtpConnection conn) { - try { - FtpRequest request = conn.getRequest(); - - String directoryName = null; - String options = ""; - TransferState ts = conn.getTransferState(); - - // String pattern = "*"; - // get options, directory name and pattern - // argument == null if there was no argument for LIST - if (request.hasArgument()) { - // argument = argument.trim(); - StringBuffer optionsSb = new StringBuffer(4); - StringTokenizer st = new StringTokenizer(request.getArgument(), - " "); - - while (st.hasMoreTokens()) { - String token = st.nextToken(); - - if (token.charAt(0) == '-') { - if (token.length() > 1) { - optionsSb.append(token.substring(1)); - } - } else { - directoryName = token; - } - } - - options = optionsSb.toString(); - } - - // check options - // boolean allOption = options.indexOf('a') != -1; - boolean fulldate = options.indexOf('T') != -1; - boolean detailOption = request.getCommand().equals("LIST") - || request.getCommand().equals("STAT") - || (options.indexOf('l') != -1); - - // boolean directoryOption = options.indexOf("d") != -1; - - if (!request.getCommand().equals("STAT")) { - - if (!ts.isPasv() && !ts.isPort()) { - return Reply.RESPONSE_503_BAD_SEQUENCE_OF_COMMANDS; - } - } - - DirectoryHandle directoryFile; - - if (directoryName != null) { - try { - directoryFile = conn.getCurrentDirectory().getDirectory( - directoryName); - } catch (FileNotFoundException ex) { - return Reply.RESPONSE_550_REQUESTED_ACTION_NOT_TAKEN; - } catch (ObjectNotValidException e) { - return Reply.RESPONSE_504_COMMAND_NOT_IMPLEMENTED_FOR_PARM; - } - - if (!conn.getGlobalContext().getConfig().checkPathPermission( - "privpath", conn.getUserNull(), - directoryFile.getParent(), true)) { - return Reply.RESPONSE_550_REQUESTED_ACTION_NOT_TAKEN; - } - } else { - directoryFile = conn.getCurrentDirectory(); - } - - PrintWriter out = conn.getControlWriter(); - Socket dataSocket = null; - Writer os; - - if (request.getCommand().equals("STAT")) { - os = out; - out.write("213- Status of " + request.getArgument() + ":" - + NEWLINE); - } else { - if (!ts.getSendFilesEncrypted() - && conn.getGlobalContext().getConfig().checkPermission( - "denydiruncrypted", conn.getUserNull())) { - return new Reply(550, "Secure Listing Required"); - } - - out.write(Reply.RESPONSE_150_OK); - out.flush(); - - try { - dataSocket = ts.getDataSocketForLIST(); - os = new PrintWriter(new OutputStreamWriter(dataSocket - .getOutputStream())); - - // out2 = dataSocket.getChannel(); - } catch (IOException ex) { - logger.warn("from master", ex); - - return new Reply(425, ex.getMessage()); - } - } - - // ////////////// - logger.debug("Listing directoryFile - " + directoryFile); - List listFiles = ListUtils.list( - directoryFile, conn); - - // ////////////// - try { - if (request.getCommand().equals("LIST") - || request.getCommand().equals("STAT")) { - printList(listFiles, os, fulldate); - } else if (request.getCommand().equals("NLST")) { - printNList(listFiles, detailOption, os); - } - - Reply response = (Reply) Reply.RESPONSE_226_CLOSING_DATA_CONNECTION - .clone(); - - try { - if (!request.getCommand().equals("STAT")) { - os.close(); - dataSocket.close(); - response.addComment(conn.status()); - - return response; - } - - return new Reply(213, "End of Status"); - } catch (IOException ioe) { - logger.error("", ioe); - - return new Reply(450, ioe.getMessage()); - } - } catch (IOException ex) { - logger.warn("from master", ex); - - return new Reply(450, ex.getMessage()); - } - } finally { - conn.getTransferState().reset(); - } - } - - public String[] getFeatReplies() { - return null; - } - - /** - * STAT [<SP> <pathname>] <CRLF>
- * - * This command shall cause a status response to be sent over the control - * connection in the form of a reply. - */ - - // public void doSTAT(FtpRequest request, PrintWriter out) { - // reset(); - // if (request.hasArgument()) { - // doLIST(request, out); - // } else { - // out.print(FtpReply.RESPONSE_504_COMMAND_NOT_IMPLEMENTED_FOR_PARM); - // } - // return; - // } - /* - * (non-Javadoc) - * - * @see net.sf.drftpd.master.command.CommandHandler#initialize(net.sf.drftpd.master.BaseFtpConnection) - */ - public CommandHandler initialize(BaseFtpConnection conn, - CommandManager initializer) { - return this; - } - - public void load(CommandManagerFactory initializer) { - } - - public void unload() { - } -} Index: build.xml =================================================================== --- build.xml (revision 1638) +++ build.xml (working copy) @@ -41,6 +41,7 @@ +