[ https://issues.apache.org/jira/browse/FTPSERVER-105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Don Leone updated FTPSERVER-105: -------------------------------- Attachment: (was: Square Trade ALMEU.rar) > Problems with MySQL 5.0.x with SQL Statements in Config file > ------------------------------------------------------------ > > Key: FTPSERVER-105 > URL: https://issues.apache.org/jira/browse/FTPSERVER-105 > Project: FtpServer > Issue Type: Improvement > Components: Core > Environment: Windows XP > Reporter: Christoph Rueger > > Hi, > Last week I have checked out the trunk from SVN and made a build using maven. > That worked so far. > I configured the Usermanagement for MySQL and here I have found some > problems. > I use mySQL 5.0.24a and my Server runs in sql_mode='' which actually means > Traditional MySQL Mode. > [ INFO] 2007-08-10 17:12:26,079 ------- Apache FTP Server started ------ > [ INFO] 2007-08-10 17:24:05,251 Database connection closed. > [ INFO] 2007-08-10 17:24:05,986 Database connection opened. > [ INFO] 2007-08-10 17:24:06,126 SELECT uid, userpassword, homedirectory, > enableflag, writepermission, idletime, uploadrate, downloadrate FROM FTP_USER > WHERE uid = 'admin' > [ INFO] 2007-08-10 17:24:06,204 Creating user : admin > [ INFO] 2007-08-10 17:24:06,220 SELECT uid, userpassword, homedirectory, > enableflag, writepermission, idletime, uploadrate, downloadrate FROM FTP_USER > WHERE uid = 'admin' > [ INFO] 2007-08-10 17:24:06,220 INSERT INTO FTP_USER (uid, userpassword, > homedirectory, enableflag, writepermission, idletime, uploadrate, > downloadrate) VALUES ('admin', 'admin', './res/home', 'true', 'true', 0, 0, 0) > [ERROR] 2007-08-10 17:24:06,345 DbUserManager.save() > java.sql.SQLException: Incorrect integer value: 'true' for column > 'enableflag' at row 1 > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941) > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715) > at com.mysql.jdbc.Connection.execSQL(Connection.java:3243) > at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343) > at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260) > at > org.apache.ftpserver.usermanager.DbUserManager.save(DbUserManager.java:427) > at > org.apache.ftpserver.ConfigurableFtpServerContext.createDefaultUsers(ConfigurableFtpServerContext.java:219) > at > org.apache.ftpserver.ConfigurableFtpServerContext.<init>(ConfigurableFtpServerContext.java:105) > at org.apache.ftpserver.gui.RootPanel.startServer(RootPanel.java:351) > at > org.apache.ftpserver.gui.RootPanel$4.actionPerformed(RootPanel.java:229) > at > javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) > at > javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) > at > javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) > at > javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) > at > javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) > at java.awt.Component.processMouseEvent(Component.java:6038) > at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) > at java.awt.Component.processEvent(Component.java:5803) > at java.awt.Container.processEvent(Container.java:2058) > at java.awt.Component.dispatchEventImpl(Component.java:4410) > at java.awt.Container.dispatchEventImpl(Container.java:2116) > at java.awt.Component.dispatchEvent(Component.java:4240) > at > java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) > at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) > at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) > at java.awt.Container.dispatchEventImpl(Container.java:2102) > at java.awt.Window.dispatchEventImpl(Window.java:2429) > at java.awt.Component.dispatchEvent(Component.java:4240) > at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) > at > java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) > at > java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) > at > java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) > at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) > at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) > at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) > The problems began in > org.apache.ftpserver.ConfigurableFtpServerContext#createDefaultUsers() > when the Default Users are created. > In org.apache.ftpserver.usermanager.DbUserManager#save(User user) (line 383) > you do a > map.put( ATTR_ENABLE, String.valueOf(user.getEnabled()) ); > The problem is the Stringvalue of "true" or "false" which was converted to 0 > or 1 in older mySQL Versions. Appearantly in newer versions, this > autoconversion > doesn't work maybe. > I googled around and I have found a MySQL Bugentry which could be related: > http://bugs.mysql.com/bug.php?id=18551 > The CREATE_TABLE Statement I used was: > DROP TABLE IF EXISTS `ftpserver`.`ftp_user`; > CREATE TABLE FTP_USER ( > uid VARCHAR(64) NOT NULL PRIMARY KEY, > userpassword VARCHAR(64), > homedirectory VARCHAR(128) NOT NULL, > enableflag BOOLEAN DEFAULT TRUE, > writepermission BOOLEAN DEFAULT FALSE, > idletime INT DEFAULT 0, > uploadrate INT DEFAULT 0, > downloadrate INT DEFAULT 0, > maxloginnumber INT DEFAULT 0, > maxloginperip INT DEFAULT 0 > ); > Now solution which worked for me: > I modified the SQL Statements for Insert and Update in the ftpd.properties to > the following: > config.user-manager.sql-user-insert=INSERT IGNORE INTO FTP_USER (uid, > userpassword, homedirectory, enableflag, writepermission, idletime, > uploadrate, downloadrate) VALUES ('{uid}', '{userpassword}', > '{homedirectory}', '1', '{writepermission}', {idletime}, {uploadrate}, > {downloadrate}) > config.user-manager.sql-user-update=UPDATE IGNORE FTP_USER SET > userpassword\='{userpassword}',homedirectory\='{homedirectory}',enableflag\='{enableflag}',writepermission\='{writepermission}',idletime\={idletime},uploadrate\={uploadrate},downloadrate\={downloadrate} > WHERE uid\='{uid}' > Note the IGNORE command after INSERT and UPDATE. > That did the trick for me to avoid the SQLException. > Another thing which is also an incomplete config file is the following > stacktrace: > [ INFO] 2007-08-10 18:15:25,048 SELECT uid, userpassword, homedirectory, > enableflag, writepermission, idletime, uploadrate, downloadrate FROM FTP_USER > WHERE uid = 'anonymous' > [ERROR] 2007-08-10 18:15:25,048 DbUserManager.getUserByName() > java.sql.SQLException: Column 'maxloginnumber' not found. > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) > at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:970) > at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2747) > at > org.apache.ftpserver.usermanager.DbUserManager.getUserByName(DbUserManager.java:479) > at > org.apache.ftpserver.gui.UserManagerPanel.actionPerformed(UserManagerPanel.java:528) > at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1242) > at javax.swing.JComboBox.setSelectedItem(JComboBox.java:569) > at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:605) > The reason was that the columns > maxloginnumber > maxloginperip > where missing in the SELECT statement in ftpd.properties > I just changed it to > SELECT * FROM FTP_USER WHERE uid \= '{uid}' > instead of every single column. > After these two things I got it working. > I hope you can include these fixes into the source code. I would also like to > contribute these things, but I couldnt find the ftpd.properties in the > sourcecode which I got from SVN. Maybe I am missing something. > I would appreciate some hints. > Thanks > Christoph -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.