ChangeLog 92 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864
  1. * Version 1.0.49:
  2. - This version fixes a regression introduced in version 1.0.48 that broke
  3. the external authentication feature. Reported by Peter Hudec, thanks!
  4. - Sockets from `pure-authd` and `pure-extauth` are now always owned by
  5. `root` in order to cope with the absence of `CAP_DAC_OVERRIDE` on Linux.
  6. Suggested by Arkadiusz Miśkiewicz, thanks!
  7. * Version 1.0.48:
  8. - SNI support has been added. A new service, `pure-certd`, can run
  9. external code written in any language in order to map SNI names to TLS certificates.
  10. - External authentication handlers get a new
  11. `AUTHD_CLIENT_SNI_NAME` environment variable set when the client uses SNI.
  12. - TLS certificates and keys can now be in different files.
  13. - `make install` does not overwrite existing configuration files any
  14. more. The example files layout has changed.
  15. - TLS 1.3 is enabled when using OpenSSL 1.1.x.
  16. - TLS < 1.2 is disabled by default.
  17. - Quirks for obsolete OpenSSL versions have been removed.
  18. - Username _ftp can be used as an alternative to ftp everywhere.
  19. - Password hashing parameters are now chosen according to locally
  20. available resources. The `pure-pw` command gets to new switches: `-C` (as
  21. a hint regarding the number of simultaneous login attempts) and `-M`
  22. (total memory, in MB, to reserve for password hashing).
  23. - New translation: Albanian, thanks to Moisi Xhaferaj.
  24. - The `PRET` command has been added. It can avoid opening useless data
  25. connections for nonexistent content.
  26. - Dot-files are always displayed. We don't lie any more in some
  27. commands while not lying in other commands to respect the protocol.
  28. - Support for RFC 2640 has been removed from the free version, as it
  29. was early, experimental, slow, mostly broken and unmaintained code.
  30. - The `NLST` command doesn't perform globbing any more.
  31. - The `MLSD` command now prepends the path to file names.
  32. * Version 1.0.47:
  33. - Unlike other directory listing commands, the STAT command should
  34. use TLS on the control channel even if TLS has been disabled on the data
  35. channel. It wasn't the case; this has been fixed. Thanks to Carlo
  36. Cannas.
  37. - Return a 451 error code instead of 226 on aborted uploads.
  38. - The system user "_ftp" can be used as an alternative to "ftp" for
  39. anonymous sessions.
  40. - Compatibility with libsodium > 1.0.12 was added (including minimal
  41. mode).
  42. * Version 1.0.46:
  43. - The server can now be linked against OpenSSL 1.1.x with the strict API.
  44. - Unmaintained contributions have been removed.
  45. - Globbing: the number of * in an expression has been limited to 3.
  46. * Version 1.0.45:
  47. - TLS v1.0 sessions are now refused.
  48. - Version 1.0.44 didn't properly parse the TLSCipherSuite directive.
  49. This has been fixed.
  50. * Version 1.0.44:
  51. - The Perl and Python wrappers are gone. The daemon can now use a
  52. configuration file without requiring external dependencies.
  53. - Pure-FTPd can now be linked against OpenSSL 1.1.x
  54. - The QUIT command didn't work properly when the server was compiled
  55. without support for RFC2640. This has been fixed.
  56. - 3DES was removed from the default cipher suite.
  57. * Version 1.0.43:
  58. - Passwords can now be hashed using Argon2.
  59. - The -J switch didn't work any more in 1.0.42. This has been fixed.
  60. - The default cipher suite was simplified.
  61. - Authentication against system accounts is compatible with OpenBSD 6.0.
  62. - Fixed: protocol conformance when TLS sessions are refused.
  63. - Altlog records can now be sent to `stdout`/`stderr`.
  64. * Version 1.0.42:
  65. - Compilation fix for OpenBSD and Bitrig when Pure-FTPd is not
  66. compiled with libsodium.
  67. - The connection is now dropped if HTTP commands are received.
  68. - LDAP force_default_gid and force_default_uid now work as documented.
  69. - The ONLY_ACCEPT_REUSED_SSL_SESSIONS switch (introduced in Pure-FTPd
  70. 1.0.22 circa 2009, but disabled back then due to client compatibility
  71. concerns) is now on by default, except in broken clients compatibility mode.
  72. * Version 1.0.41:
  73. - libmariadb is looked for in addition to libmysqlclient
  74. - MySQL: my_make_scrambled_password() is not always an exported
  75. symbol any more, so pure-ftpd now ships a reimplementation.
  76. - openssl/ec.h is not available on some Linux distributions that
  77. disable EC in OpenSSL. This is being tested by autoconf.
  78. - New command-line switch: -2/--certfile= to set the path to the
  79. certificate file when using TLS.
  80. * Version 1.0.40:
  81. - Support for TCP_FASTOPEN added on Linux
  82. - The LDAP configuration file didn't allow a default gid without also
  83. defining a default uid. This is no longer the case.
  84. - OpenBSD's glob() left the glob_t structure uninitialized if the
  85. pattern was larger than PATH_MAX, causing globfree() to free() an
  86. unwanted pointer. The bug was introduced in Pure-FTPd 1.0.34.
  87. * Version 1.0.39:
  88. - Explicitly include openssl/ec.h for OpenSSL 0.9.8 (CentOS 5)
  89. - Retry if SSL_shutdown() returns -1 and SSL_ERROR_WANT_(READ|WRITE)
  90. * Version 1.0.38:
  91. - The default cipher suite is now ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SH
  92. - TLS forward secrecy support was added. DH parameters are loaded from
  93. TLS_DHPARAMS_FILE, if present. ECDH is also supported - Default curve
  94. is prime256v1 (TLS_DEFAULT_ECDH_CURVE). The best curve is automatically
  95. selected when using LibreSSL.
  96. - scrypt hashed passwords can be used in the MySQL, PostgreSQL and
  97. LDAP backends.
  98. * Version 1.0.37:
  99. - The -C: prefix can be added to the cipher suite in order to make valid
  100. client certificates mandatory. This is no longer a compile-time option.
  101. - The Clear Command Channel (CCC) command is now supported.
  102. - pure-config.py is compatible with Python 3.
  103. - SSL (v2, v3) is refused by default.
  104. - The PureDB backend supports the scrypt function in order to hash
  105. passwords. This is the preferred algorithm, but requires the presence
  106. of libsodium.
  107. - DES-hashed passwords are not supported any more.
  108. - LDAP uid and gid values can over overridden in the LDAP configuration file.
  109. - New LDAPUseTLS directive for LDAP.
  110. - RC4 was killed.
  111. * Version 1.0.36:
  112. - The safe_write()/safe_read() factorization broke extauth. Using
  113. safe_read_partial() to read from the extauth pipe wasn't enough.
  114. Bug reported by Rasmus Fauske.
  115. - Improved autoconf detection of -fstack-protector and -fPIE
  116. - If 10 digits are not enough to print the size of a file in an
  117. ls-like output, bump the max number of digits to 18. This adds support for
  118. files up to 1 exabyte.
  119. - Pure-FTPd can be compiled with Cygwin, ASLR/DEP is enabled by
  120. default on Windows, and ASCII downloads on Windows have been fixed.
  121. - A new undocumented macro, ALLOW_EVERYTHING_IN_FILE_NAMES, allows
  122. any characters in a file name. Disabled by default.
  123. - Don't display dot files (except . and ..) if dot_read_ok is 0 in
  124. donlist() - but not in sglob() yet. This change is purely cosmetic. There are
  125. many ways to figure out if a file exists.
  126. * Version 1.0.35:
  127. - Improve compatibility with the Intel and Ekopath compilers.
  128. - Use more paranoid compiler options whenever possible, and preliminary
  129. uncluttering of the autoconf script.
  130. - Try to cache locale-related data at startup after tzset(), rather
  131. than during a session.
  132. - Fix quota computation after rename() overwrites an existing file.
  133. Reported by Hiramoto Koujo, thanks!
  134. * Version 1.0.34:
  135. - Fix safe_write() inverted checks that broke uploads.
  136. * Version 1.0.33:
  137. - Sync built-in glob(3) code with OpenBSD-current, and remove code we
  138. don't use instead of ifdef'ing it.
  139. - Repair checkproc() on Linux when support for capabitilies is
  140. compiled in. Reported by Eric Gouyer.
  141. - Don't read /dev/*random every time we need a value. Just use
  142. arc4random() everywhere and seed it before we possibly chroot().
  143. - Add support for MFMT, with the same code as SITE UTIME.
  144. - Support 2-arguments SITE UTIME.
  145. - LDAP: Add LDAPDefaultHomeDirectory, suggested by Landry Breuil.
  146. - Add SSL_OP_NO_SSLv3 to SSL options if the list of ciphers is
  147. prefixed by -S: , needed by Brad.
  148. - Remove the various safe_read() / safe_write() instances and
  149. factorize them in safe_rw.c
  150. - Call OpenSSL_add_all_algorithms(), suggested by Brad.
  151. - Mention that WinSCP works fine with Pure-FTPd.
  152. - On Linux, opening a named pipe that nobody reads with O_WRONLY yields ENXIO.
  153. The workaround is to opens it O_RDWR. So, just do that.
  154. * Version 1.0.32:
  155. - Support SHA1 password hashing in MySQL and PostgreSQL backends
  156. - Support for braces expansion in directory listings has been
  157. disabled - Cf. CVE-2011-0418
  158. * Version 1.0.31:
  159. - Introduce --tlsciphersuite (-J) to set the list of allowed ciphers,
  160. thanks to Todd Rinaldo.
  161. - The -F switch has been documented in the built-in help.
  162. - Shell-like escaping is now partially handled when emulating the "ls"
  163. command.
  164. - Use my_make_scrambled_password() instead of make_scrambled_password().
  165. Suggested by Arkadiusz Miskiewicz.
  166. * Version 1.0.30:
  167. - Use malloc() instead of an ever-growing stack in pure-quotacheck.
  168. Fixes quota computation on a large number of files. Problem initially
  169. reported by jeff at cpanel dot net.
  170. - Treat OPTS UTF-8 like OPTS UTF8. Suggested by yjfan at longtop dot
  171. com.
  172. - Empty the command-line buffer after switching to TLS. Fixes a flaw
  173. similar to Postfix's CVE-2011-0411.
  174. - Provide ANSI-compliant MySQL configuration example.
  175. - Fix some issues with man pages.
  176. * Version 1.0.29:
  177. - max_dlmap_size was size_t instead off_t, causing misalignment while
  178. downloading > 4 Gb files on a 32-bits arch. Reported by Viktor Butskih.
  179. - pread() vs lseek()+read() was a useless optimization, since pread()
  180. doesn't change the file position and further reads weren't going through
  181. plain read() calls.
  182. - iconv_fd_* should be initialized by (iconv_t) -1 as we test them upon
  183. exit. Fixes segfaults on glibc.
  184. - pure-uploadscript tries to reach the pipe during 30 seconds instead of 10.
  185. * Version 1.0.28:
  186. - FTPD_PAM_SERVICE_NAME can be defined in order to change the PAM service
  187. name.
  188. - When an upload gets renamed (--autorename), send the new name to the
  189. uploadscript instead of the original one.
  190. - The ALLO command now checks for the actual disk space in addition to the
  191. virtal quota.
  192. - Work around OSX broken poll()
  193. - After an atomic resumed upload, don't append the previous file size to the
  194. quota.
  195. - Always accept OPTS UTF8 ON, but refuse OPTS UTF8 OFF if client_charset is
  196. UTF8.
  197. - Fix AUTHD_ENCRYPTED
  198. - Reset the CWD failures counter after a successful directory has been
  199. created. It avoids spurious disconnections with ncftp.
  200. - Support for iPhone has been moved to another branch.
  201. - Fix crash with PostgreSQL.
  202. * Version 1.0.27:
  203. - Have pureftpd_shutdown() shut the server down even if a client is
  204. connected on iPhone.
  205. - Allow users with no quota to delete .pureftpd-upload-* files.
  206. - Unbreak ipv6 support, reported by Brad Smith.
  207. - Disable SSLv3 renegotiation if an old SSL library is used. If you really
  208. want to re-enable SSLv3 renegotiation, even with a recent library, you can
  209. always define ACCEPT_SSL_RENEGOTIATION.
  210. * Version 1.0.26:
  211. - Fix incompatibilities with Cyberduck when TLS is enabled.
  212. - Don't TLS_accept() immediately after accept(). Reply on the connection
  213. socket first, so that clients don't have to wait before knowing that they
  214. can actually use TLS. It avoids lags with LFTP and hangs with Cyberduck.
  215. - Properly change the process name on Linux when the -S option is used, by
  216. Margus Kaidja.
  217. - Unbreak authentication of non-chrooted users. Thanks to Juergen Daubert
  218. for the bug report.
  219. * Version 1.0.25:
  220. - Show symlinks as symlinks in MLSD, except when the broken client
  221. compatibility mode is turned on and links are not dangling (just like the
  222. old LIST and NLIST commands). Reported by Mime Cuvalo.
  223. - More gcc 2 compatibility, thanks to Todd Rinaldo.
  224. - Properly handle custom paths in man pages. Thanks to Scott Haneda and
  225. Mathieu Parisot.
  226. - Have $localstatedir default to /var as it used to be unless
  227. --localstatedir=... is explicitly passed to ./configure
  228. - Use @VERSION@ in man pages.
  229. - --without-pam disables PAM on OSX and iPhone.
  230. - Allow cross-compilation.
  231. - Experimental iPhone target.
  232. - Change the way it links, building a library first.
  233. - Don't use mmap() any more for downloads. It's too slow.
  234. - Don't use hard-coded paths in order to find MySQL and PostgreSQL
  235. libraries and header files. Use mysql_config and pg_config instead.
  236. Suggested by John Alberts.
  237. - Log the DELE command similar to the RETR and STOR commands. Suggested by
  238. Martin Fuxa.
  239. - The primary group gets cached so that it's always displayed in directory
  240. listings.
  241. - Avoid a client process to burn CPU in an infinite loop if the command
  242. channel gets disconnected before the data channel. Reported by Thomas Min
  243. and Margus Kaidja.
  244. - Restore the traditional behavior of a download restarting at the end of a
  245. file. For some weird reasons, some clients still insist on doing that. Don't
  246. send a 55x return code, just let them download... nothing.
  247. - Documentation updates.
  248. * Version 1.0.24:
  249. - Refuse empty passwords in LDAP bind mode. Reported by Henning Brauer.
  250. - The package can now be compiled with gcc 2.
  251. * Version 1.0.23:
  252. - LDAP: accept "enabled" as a correct value for FTPStatus as it used
  253. to be.
  254. - More useful error logging for OpenSSL errors.
  255. - Don't read certificates twice.
  256. - Fix compilation on Solaris with privsep, thanks to Ritesh Patel.
  257. - Don't replace : (as in IPv6 addresses) in host names. Thanks to Tero
  258. Pelander.
  259. - Add SUP top AUXILIARY to LDAP schema, suggested by Zhang Huangbin.
  260. - Don't ignore dot files even if -D is not supplied with the MLSD command.
  261. - Deinline code
  262. - Throttling more reliable
  263. - STAT is now working over TLS
  264. - DH keys for ephemeral key exchange are now handled
  265. - Fix libiconv checking
  266. - The column was missing in the PassivePortRange comment (thanks to Igor
  267. Alexadrov)
  268. - LDAP authentication through binding is now possible in addition to
  269. passwords. This allows for the FTP server to run with an unprivileged LDAP
  270. account. It also adds a warning if auth method password is used and doesn't find
  271. a userPassword attribute. This usually indicates that the LDAP bind DN
  272. cannot read the attributes, because it doesn't have sufficient privileges.
  273. Contributed by Wilco Baan Hofman.
  274. - Perform charset conversions on directory names. Issue spotted by Xianghu
  275. Zhao.
  276. - Almost a complete rewrite of the upload, download and TLS code for more
  277. reliability
  278. - Seemlessly handle ABOR without any SIGURG
  279. - Try to immediately handle any kind of disconnection
  280. - Use poll() rather than select() as much as possible
  281. - Distinguish aborted (even the hard way) and completed download and upload
  282. operations in log files
  283. - Minor corrections to he French messages
  284. - Don't use atomic uploads unless --notruncate or --autorename have been
  285. enabled
  286. - Take care of removing .pureftpd-upload-* files in every possible case
  287. - List up to 10000 files per directory per default instead of 2000
  288. - Don't mess with TCP_NOPUSH, as it interferes with OpenSSL
  289. - New compile-time option: --with-implicittls in order to build a FTPS-only
  290. server
  291. - ./configure --localstatedir can now be used in order to avoid storing the
  292. scoreboard and other dynamic files in /var/run/
  293. - Quota handling reworked (easier, and way more reliable)
  294. - RNTO support even when quota are enabled.
  295. - A bunch of return codes were fixed to be more RFC-conformant.
  296. - ALLO command is now actually checking if an upload can occur without
  297. blowing the quota.
  298. - Don't change the TCP window size. Admins should do this as part of their
  299. system configuration.
  300. - Privsep is now enabled by default. Use --without-privsep to disable.
  301. - --without-banner is gone. If you have a cookie file (-F), the default
  302. banner won't be displayed.
  303. - Compile with PAM by default on OSX.
  304. - Switch the privsep process to _pure-ftpd or pure-ftpd when no privileged
  305. call is actually necessary. Since only the effective uid chances, it's not
  306. brutally useful yet, but it paves the way for forthcoming changes.
  307. - Install man pages with local paths instead of hard-coded ones.
  308. * Version 1.0.22:
  309. - New catalan translation, by Taik0.
  310. - TLS support for LDAP, contributed by Marc Balmer.
  311. - pureftpd.schema contained two errors. Reported by Ulrich Zehl.
  312. - Fix usage of MySQL 5 stored procedures, by Bernhard Fischer.
  313. - Don't issue a warning in ./configure when the certfile does exist.
  314. Reported by Michael Bowe.
  315. - Have LDAP FTPStatus work since the schema changed. Thanks to David Majorel.
  316. - Compatibility with newer OpenLDAP versions. Thanks to Johan Ström.
  317. - Don't hang up during uploads if we get any other command than QUIT and
  318. ABORT.
  319. - SITE UTIME reads UTC time
  320. - A space is needed for inline content in response to the MLST command.
  321. - Time zone issues should be fixed for good. We have to redefine TZ,
  322. tzset() is not enough on Linux when we are in a chroot environment.
  323. - Correctly respond to FEAT without removing extra features when passive
  324. mode is disabled. Thanks to upb.
  325. - Better process name change setup for Linux.
  326. - Auto-created home directories are now created with mode 0777 (and
  327. directory umask is applied), per common request. It's very important to
  328. double check your umask.
  329. - Extend gid / uid to 10 digits in ls output. Extend file size as well.
  330. - Brazilian portuguese translation was updated.
  331. - Support new MySQL password scrambling, thanks to Jan Hudoba.
  332. - Larger mmap() chunks: downloads needs less CPU usage on platforms with
  333. slow mmap() like OpenBSD.
  334. - Fix SecureFX compatibility.
  335. - Use PQescapeStringConn() for PostgreSQL instead of hand-made escaping.
  336. - messages_check.pl had to leave the package as it was GPL-licenced.
  337. - Don't respond to server that an upload succeeded before the temporary
  338. file has been renamed.
  339. - TLS support on data channels, contributed by Rajat Upadhyaya from Novell
  340. and Christian Cier-Zniewski.
  341. - Use sendfile() on recent Solaris versions in place of sendfilev().
  342. - Don't use a deprecated interface for Bonjour registration.
  343. - Tell authentication handlers if the connection is encrypted or not,
  344. through a new AUTHD_ENCRYPTED environment variable. Suggested by Koczka
  345. Ferenc.
  346. - README.Netfilter has been removed.
  347. - Create all directories, not only the basement when on-demand directory
  348. creation is enabled and the user's home directory looks like /basement/./user.
  349. Suggested by Frederico Gendorf.
  350. - Fixed error reporting when TLS support was compiled in, but TLS wasn't
  351. enabled on the current session. Thanks to Arkadiusz Miskiewicz.
  352. - Log full path on file deletion. Thanks to Arkadiusz Miskiewicz.
  353. - Handle "ftp" and "anonymous" like normal accounts (with passwords) if -E
  354. (no anonymous logins) is specified. Thanks to Arkadiusz Miskiewicz.
  355. - Sleep before answering a password failure, not the other way round. From
  356. PLD Linux.
  357. - Fix gcc warning in puredb.
  358. - In broken mode, show symlinks as their real target. It can have side
  359. effects, don't forget that broken mode is... broken mode.
  360. - Respect aliasing rules for sockaddr_storage usage.
  361. - Privsep is enabled by default in the installation GUI.
  362. - --with-everything now includes privsep.
  363. - update: fix compilation with gcc 2.x, reported by John Lightsey.
  364. * Version 1.0.21:
  365. When SHA1HANDSOFF is defined, we shouldn't cast a pointer to a large union
  366. to a char buffer, because of alignment required by some architectures.
  367. WITH_THROTTLING should actually be THROTTLING in src/log_extauth.c . It
  368. fixes throttling with extauth. Reported and fixed by Marcus Merighi
  369. <mcmer at tor.at> through Brad our beloved OpenBSD maintainer.
  370. Rendezvous has been renamed Bonjour.
  371. A double-close in the CHMOD command has been fixed, reported by Christer
  372. Mjellem Strand.
  373. The old PAM sample has been removed.
  374. -F option added to pure-pw.
  375. MAX_USER_LENGTH has been bumped to 127 due to popular demand.
  376. pam/* can now be used if security/* doesn't exist. Fixes PAM
  377. detection on MacOS X.
  378. Call tzset() in chrooted apps in order to get correct time zones in
  379. syslog messages.
  380. simplify() simplifies paths ending by /. and /..
  381. MySQL's hash_password() needs 3 arguments since mySQL 4.1.
  382. Experimental support for RFC2640 (UTF-8 filename encoding) has been
  383. added, derived from code by Jui-Nan Lin.
  384. The LDAP schema has been changed: FTPStatus should be a boolean.
  385. New switch: -p (--pidfile=) for pure-authd and pure-uploadscript, by Old
  386. Sparky.
  387. By popular request, even non-chrooted users are now denied access if their
  388. home directory is not mounted.
  389. If die() is called during a TLS-enabled session, encrypt the death
  390. message. Contributed by Cynix.
  391. Don't wrongly abort transfer during file upload. Fix by Patrick Gosling.
  392. WITH_LARGE_FILES is now defined by default.
  393. sendfile64() support on Linux.
  394. privsep and main processes were swapped out so that pure-ftpwho displays
  395. the right pid.
  396. OPTS MLST has been implemented.
  397. SITE UTIME has been implemented.
  398. TCP_CORK is on by default again. A new configure switch, --without-cork,
  399. can disable it.
  400. Correctly format %c and %% in fakesprintf().
  401. The connection socket is now created with the Nagle algorithm disabled.
  402. It was the trick to dramatically improve performance when transferring a lot
  403. of small files.
  404. Updated getopt_long() and realpath() substitutes.
  405. Allow logging to named pipes (thanks to Steve Marple).
  406. Use CLIENT_MULTI_STATEMENTS while connecting to a MySQL server.
  407. Documentation updates.
  408. MySQL errors are now logged.
  409. * Version 1.0.20:
  410. MacOS X Panther and Tiger sometimes returns EAI_SYSTEM (errno=ENOENT)
  411. when a host is not found.
  412. The BSD getopt() update has been partly reverted.
  413. * Version 1.0.19:
  414. Until OpenBSD has UBC, we need to explicitly call msync() to
  415. synchronize data written by mmap() and read by read().
  416. Real disk space is no more shown unless SHOW_REAL_DISK_SPACE is defined.
  417. Fygul's email address has changed.
  418. Don't try to catch SIGKILL any more, it's uncatchable.
  419. PureUserAdmin was added to the contribs.
  420. getopt_long() was resynced with the OpenBSD version.
  421. The client socket switches to non-blocking mode before forking in
  422. accept_client() - reported by Agri <agri at desnol.ru>.
  423. * Version 1.0.18:
  424. Autoconf was bumped to 2.59, automake to 1.8.
  425. The sample source code in README.Authentication-Modules was bogus
  426. because of a missing 'echo end' statement. Thanks to Peter Ahlert
  427. <petera at gmx.net> for reporting this.
  428. New translation : hungarian. Contributed by Bánhalmi Csaba
  429. <banhalmi at enternet.hu>.
  430. New translation : catalan. Contributed by Oriol Magrané
  431. <omagrane at mediapro.es>.
  432. Max CPU time was bumped to 60 min.
  433. Disable hash_password() function call on MySQL 4.1.x and later.
  434. We now use two listening sockets (listenfd / listenfd6), one for IPv4, one
  435. for IPv6. The standalone_server() function has been reworked and split.
  436. New urlencode() function to escape characters in W3C and CLF altlog files.
  437. Based upon a suggestion and a patch by Volodin D.
  438. The xferlog format was also implemented by the way.
  439. New global : no_ipv4 to only listen to IPv6 in standalone mode.
  440. Use closefrom() if available to close all descriptors.
  441. Support for Rendezvous on MacOS X by Jean-Matthieu Schaffhauser.
  442. Support for Apple / GNUSTEP plist data output in pure-ftpwho, also by
  443. Jean-Matthieu Schaffhauser.
  444. The FileInfo structure was renamed PureFileInfo to avoid a name clash on
  445. Darwin.
  446. A lot of compile-time default values like GLOB_TIMEOUT, MAX_CPU_TIME and
  447. MAX_USER_LENGTH, are now overridable without any change to src/ftpd.h
  448. ENABLE_UNICODE_CONTROL_CHARS has been replaced with
  449. DISABLE_UNICODE_CONTROL_CHARS and a new switch, --without-unicode, defines
  450. that macro.
  451. Unlink the right pid files in pure-authd and pure-uploadscript. Reported
  452. and fixed by Oscar Sundbon <moose at djuren.org>.
  453. * Version 1.0.17a:
  454. FD_SET(-1, ...) is invalid, but it could happen on aborted transfers,
  455. causing Pure-FTPd to exit without removing ftpwho entries nor atomic files.
  456. safe_fd_set() has been introduced to solve this, it just works like
  457. safe_fd_isset() and ignores descriptor -1 and it has been placed on the same
  458. places.
  459. * Version 1.0.17:
  460. Some fixes were made to the traditional Chinese translation by Flaw Zero
  461. <flawzero at eyou.com>.
  462. Autoconf was upgraded to 2.58.
  463. TLS_CERTIFICATE_PATH has been renamed TLS_CERTIFICATE_FILE.
  464. --with-certfile has been added to ./configure to set up a value for
  465. TLS_CERTIFICATE_FILE. The default value has been reverted to
  466. /etc/ssl/private/pure-ftpd.pem.
  467. Solaris NIS accounts can now be converted using pure-pwconvert.
  468. Don't drop capabilities too early, or even chroot will be prohibited.
  469. Thanks to Arkadiusz Patyk, Li-Ren and Philipp Kern for their report.
  470. Negative return codes are not used any more - reported by Andrew Victor
  471. <andrew at sanpeople.com>
  472. System users whose password is '********' are now imported by
  473. pure-pwconvert (for newer MacOS X).
  474. New file : README.MacOS-X.
  475. Use SO_REUSEPORT in place of SO_REUSEADDR to bind the ftp-data port on
  476. FreeBSD. Suggested by Henri Virtanen <hvirtanen at daous.com>.
  477. Big change in the way upload are handled. We now maintain a per-process
  478. unique file name in an "atomic_prefix" global. This is the name of a temporary
  479. file that is actually used for upload, through the get_atomic_file() function
  480. that adds the basename if needed. Once the upload is completed or aborted, the
  481. temporary file is renamed. Or hard links are created when autorename is asked
  482. for (autorename happens after the upload now, not before). It changes a lot of
  483. stuff in dostor(), but it makes the whole thing easier and atomic uploads are
  484. really nice for the end user. --no-truncate (and the global no_truncate) can
  485. keep the old file when a new version of a file is being uploaded.
  486. Redundant calls to get_usec_time() were removed.
  487. Julien Andrieux's parser has been added to contribs.
  488. Errors when SSL certificates are missing are more explicit.
  489. The SITE TIME command was implemented. Suggested by Mark.
  490. A new sample of a PAM configuration file has been written. The previous
  491. one is still available as pure-ftpd.old.
  492. * Version 1.0.16c:
  493. We should disable the raw mode and send full HTML headers in CGI mode.
  494. Reported by Bernard Lheureux <bernard.lheureux at bbsoft4.org>
  495. Spelling errors were fixed in the .no translation by Brynjar Eide
  496. <post at mislykket.no>
  497. Always try to include sys/param.h before sys/mount.h in the autoconf
  498. script. Patch by Brad Smith <brad at openbsd.org>.
  499. FAQ addition regarding the STOU command. Written by C. Jon Larsen
  500. <jlarsen at richweb.com>
  501. PAM was broken in 1.0.16b due to PAM_SUCCESS not being copied to the right
  502. slot. It has been fixed.
  503. Automake has been updated to 1.7.8.
  504. configure.ac has been cleaned up a bit regarding the conditionnal inclusion
  505. of stdlib.h/unistd.h .
  506. RPMs are now built with largefile support, privsep and sysquotas by
  507. default.
  508. * Version 1.0.16b:
  509. PAM fixes.
  510. TLS should now compile on RedHat 9 that moved Kerberos headers to
  511. a specific directory.
  512. free(NULL) is ok => all code like "if (<value> != NULL) free(<value>);"
  513. has been simplified.
  514. Automake has been upgraded to 1.7.7, Autoconf to 2.57a.
  515. The sysconf prefix is now used for SSL certificates as well.
  516. We break'ed too early when trying to resolve host names in
  517. pure-ftpwho and the local host name couldn't even be resolved. The problem was
  518. introduced in 1.0.16 when the MacOS X Panther workarounds were implemented.
  519. Thanks to JG <jg at cms.ac> for his bug report.
  520. /usr/local/include, /usr/kerberos/include and /usr/local/lib are only
  521. added to CPPFLAGS/LDFLAGS if they actually exist.
  522. pure-ftpwho now outputs XHTML 1.1 conformant code in CGI mode.
  523. pure-ftpwho now properly escapes XHTML special characters.
  524. pure-ftpwho now announces the ISO-8859-15 character set in XML mode.
  525. Disable IPV6_V6ONLY by popular request by people lost with the need of the
  526. -4 switch on some operating systems.
  527. * Version 1.0.16a:
  528. Fix typo (sizeof_resolved instead of sizeof resolved) in
  529. src/bsd-realpath.c . Not a vulnerability because it happens in the good way,
  530. but it sometimes used to break uploadscript.
  531. * Version 1.0.16:
  532. An obsolete comment in pure-ftpd.conf was fixed : RPMs don't parse
  533. /etc/sysconf/pure-ftpd any more.
  534. Recognize the '##' prefix as a shadowed password - make
  535. authentication work on Solaris with shadow/NIS.
  536. Add back some random sleep() between authentication failures in
  537. addition to the exponential sleep. Zzzzz... sleeping is good in summer...
  538. Upgrade to automake 1.7.5.
  539. The list of options in the pure-ftpd(8) man page was reordered -
  540. Thanks to our beloved Claudiu Costin.
  541. SSL/TLS support was added (bits in src/{ftpd.c,ftp_parser.c,tls.c,tls.h,
  542. configure.ac}, new doc: README.TLS, new globals: tls_ctx, tls_cnx). New
  543. related commands were introduced : AUTH, PBSZ and PROT.
  544. Uploaded files are now removed when realpath() fails and
  545. bsd_realpath() was modified to fall back to getcwd()/chdir() if we
  546. can't get a descriptor on the current directory because it is not
  547. readable. It fixes pure-uploadscript on some platforms like MacOS X.
  548. HAVE_BROKEN_REALPATH is gone. USE_BUILTIN_REALPATH is born.
  549. A typo in the Python configuration file wrapper was fixed : -t was used in
  550. place of -y.
  551. MacOS X Panther has a lousy getnameinfo() implementation that doesn't fill
  552. the buffer when no DNS entry is found for a host and a numerical result wasn't
  553. explicitly asked. As a result, Pure-FTPd didn't even start on Panther (saying
  554. "bad IP address") . We now check for EAI_NONAME if available and we retry with
  555. NI_NUMERICHOST if this is what getnameinfo() returns. Thanks to Yann Bizeul
  556. for his valuable help on this issue.
  557. Implement a working strdup() replacement in puredb for systems lacking it.
  558. Some MAXPATHLEN / MAXPATHLEN + 1 cleanups. Basically when paths are
  559. generated by our own functions, we use MAXPATHLEN for the complete
  560. zero-terminated string. When a buffer is passed to a libc function, we reserve
  561. a MAXPATHLEN + 1 buffer and give a MAXPATHLEN size, just to avoid bad
  562. surprises if an off-by-one ever occurs in a getcwd() like function.
  563. Don't use make_scrambled_password() in the MySQL backend because the API
  564. changed since MySQL 4.1.
  565. Removed fixed-size constant arrays in src/crypto.c because of MacOS X
  566. linker bugs (grrr...) .
  567. * Version 1.0.15:
  568. New translation : Turkish, contributed by Mehmet Cokcevik
  569. <dns at netline.com.tr> .
  570. PostgreSQL documentation templates have been fixed - At least User
  571. is a reserved keyword that needs quotes. Thanks to Henrik Edlund
  572. <henrik at edlund.org> .
  573. The maximal length of an account has been bumped a bit (42 chars),
  574. and that size is now consistent across functions through the
  575. MAX_USER_LENGTH macro. Thanks to Darth Vader (freddyke) for suggesting
  576. this.
  577. The comment about the location of the config file in the RedHat
  578. init script was synced with the new location.
  579. Tokens in the configuration file are now case independent.
  580. Automatic creation of home directories was fixed. Thanks to
  581. Anthony DeRobertis for the fix.
  582. A typo in quota handling was fixed.
  583. Cable & Wireless NL is now WideXS and their mirror seems to be
  584. working again.
  585. Always fill descriptors 0/1 in order to make pure-uploadscript
  586. actually work when daemonizing. Thanks to Joerg Pulz
  587. <Joerg.Pulz at frm2.tum.de> for pointing this out.
  588. Don't open pipes with O_NDELAY, some systems don't like it at all.
  589. As a side effect, the server will now wait until pure-uploadscript is
  590. actually started before accepting connections and this is a _good_ thing.
  591. The server load is not displayed any more, by popular request.
  592. The version number isn't displayed any more as well.
  593. GNU's getopt_long() has been replaced by an OpenBSD derivative.
  594. --without-longoptions has been removed. We keep the old macros and
  595. #ifdef though, just in case we want to improve the minimal mode later.
  596. New unofficial macro : DISPLAY_FILES_IN_UTC_TIME to display directory
  597. listings with UTC times.
  598. The danish translation was updated - Lyberth.
  599. pure-pw now returns error codes.
  600. WIN32_ANON_DIR can override the default anonymous FTP directory on
  601. Win32.
  602. Fix "pure-pw usermod -y" by introducing has_per_user_max.
  603. New subcommand : "pure-pw list", that summarizes available
  604. accounts in a puredb.
  605. Enlarge TCP window as it was a long time ago. It brings better
  606. performances on BSD systems. Define NO_TCP_LARGE_WINDOW to disable.
  607. Try to early detect timeouts by checking whether select() returns 0.
  608. Don't try to reduce capabilities if we obviously can't because the
  609. server has not been started by root.
  610. Pure-FTPd is now 100% covered by the BSD license.
  611. * Version 1.0.14:
  612. Use random() if available, not rand() for fortune cookies.
  613. Remove broken lseek(fd, -1, 0).
  614. When writing to clients data sockets fails, the client probably
  615. hung up. IE, for instance, doesn't seem to properly abort transfers
  616. and say "QUIT" when a transfer is canceled by the user. So, log
  617. MSG_ABORTED instead of MSG_DATA_WRITE_FAILED.
  618. Check whether we are inside a Virtuozzo virtual environment and
  619. disable sendfile() if this is the case. Thanks to Kittiwat Manosuthi
  620. for his help on this issue.
  621. Automake has been upgraded to version 1.7, autoconf to version 2.57.
  622. Introduce privsep.h, privsep_p.h, privsep.c and --with-privsep.
  623. Drop capabilities after the call to nice() because we need
  624. CAP_SYS_NICE.
  625. Don't waste time with in dopasv() to get the name of the socket we
  626. just created.
  627. Add "ptracetest".
  628. Enable __EXTENSIONS__ and _XPG4_2 on Solaris in ./configure.ac
  629. Also check whether a client has gone away by testing xferfd and
  630. introduce safe_fd_isset() that just works like FD_ISSET() but doesn't
  631. choke when the descriptor is -1. It fixes bus errors on FreeBSD.
  632. Add force_passive_ip_s in order to store the argument of -P.
  633. Passive IP addresses are now resolved in doit() for every new
  634. connection, by popular request. It means that "-P ftp.example.com" now
  635. works, even for dynamic addresses.
  636. Split the function that creates an active data socket into two
  637. parts : doport2() and doport3(). doport3() actually creates it,
  638. doport2() does other gadgets like checking for FXP, etc.
  639. Carefully check whether we have OpenBSD/MicroBSD-like MD5/SHA1
  640. functions in libc and not an incompatible variant like Cyrus SASL.
  641. The "Welcome to Pure-FTPd" decorations were replaced with
  642. something more neutral.
  643. Introduce ISCTRLCODE() instead of doing it by hand every time and
  644. properly reject Unicode control chars while we are at it.
  645. New contrib : Webmin module, by La Shampoo.
  646. * Version 1.0.13a:
  647. Fix pure-config.pl with old versions of the Perl interpreter.
  648. Fix compilation with PostgreSQL, thanks to Sakari Tanhua
  649. <stanhua at cc.hut.fi> .
  650. * Version 1.0.13 :
  651. Swap simplified and traditional chinese settings. Reported by Ying-Chieh
  652. Liao <ijliao at csie.nctu.edu.tw> .
  653. Ignore ESTA if a passive IP is forced or the NAT mode is enabled, because
  654. the private address is probably meaningless.
  655. README documentation improvements, contributed by Jeffrey Lim
  656. <jf_____ at fastmail.fm>
  657. Avoid NGROUPS_MAX when possible - Idea from tuxfamily.org CVS tree.
  658. LDAP schema changed to work with newer OpenLDAP releases.
  659. New LDAP directives : LDAPFilter, LDAPHomeDir and LDAPVersion.
  660. Be a bit more heavy when creating home directories, it should solve
  661. troubles users had with path containing extra slashes.
  662. Try again when the pipe can't be opened in pure-uploadscript.
  663. New --with-boring switch (BORING_MODE macro) .
  664. Fix sendfile() support on Solaris, thanks to Emmanuel Hocdet
  665. <man at t-online.fr>
  666. Add uptime support for pure-mrtginfo on FreeBSD. Contributed by
  667. Ying-Chieh Liao <ijliao at csie.nctu.edu.tw> .
  668. Fix error when deleting files with an absolute directory when quotas are
  669. enabled. Contributed by Johannes Erdfelt <johannes at erdfelt.com> .
  670. dobanner() rewritten. It's now the same code to display .message and
  671. .banner files and the content is sent line by line. We can't afford to load
  672. everything and simply call addreply_noformat(), because if a banner starts
  673. with a digit, it would be complicated to insert spaces to be RFC conformant.
  674. Fix typo in the example configuration file (pureftp -> pureftpd) .
  675. Reported by Kyle Herbert (http://www.firstnetimpressions.com/) .
  676. Spanish translation updated (Lluis) .
  677. Chinese translation updated (Fygul) .
  678. There's now an unique official spelling : "Pure-FTPd".
  679. Autoconf 2.54, Automake 1.6.3.
  680. Move getloadavg() and similar functions to getloadavg.{h,c}.
  681. Get the 5-min load average, not the instant load.
  682. Raise the default maxdiskpct from 90% to 99%, as many people don't figure
  683. out why they can't upload an ISO image when there's 700Mb free on a
  684. 7Gb partition.
  685. Relax permissions enforcement in dochmod() when quotas are enabled
  686. - Thanks to Claudiu.
  687. Introduce checkprintable() function in ls.c : don't display files
  688. whose name contains characters < 32.
  689. Contributed sfv-crc-check has been removed (people reported that it simply
  690. doesn't work) .
  691. PAM sample fixed : ftplockout should really be ftpusers. Add some
  692. common system accounts by the way.
  693. More flexible RPM spec file, contributed by Johannes Erdfelt
  694. <johannes at erdfelt.com> .
  695. New translation : Czech, contributed by Martin Sarfy
  696. <xsarfy at informatics.muni.cz> .
  697. Merge Clive Goodhead's patch to implement MYSQLDefaultGID and
  698. MYSQLDefaultUID and port it to PostgreSQL.
  699. pure-config.pl has been completely rewritten in a clean way by
  700. Aristoteles Pagaltzis <pagaltzis at gmx.de> .
  701. New contrib : pure-vpopauth.pl .
  702. Remove backtitle in gui/build.sh, it breaks radio lists on some
  703. dialog versions.
  704. Enable --without-ascii by default on Win32. It means that text
  705. files must be in Windows format (CR+LF) on the server, no more in an
  706. Unix fashion, or clients will get bare LFs (and intelligent clients
  707. will switch to binary mode, so files sent in Unix format will be
  708. retrieved in Unix format - great) .
  709. redhat.init now uses pure-config.pl as different configuration
  710. files was confusing people.
  711. * Version 1.0.12 :
  712. Style : opt_l_ is now an argument of donlist() - no more need to set
  713. up the global variable before calling the function.
  714. A (fake for now) ACCT command has been added. Maybe it will solve a
  715. conflict with some versions of Fetch for Macintosh.
  716. NLST and MLSD should be able to handle only one file. Don't split file
  717. names, don't parse options. Reported by Martin Hedenfalk.
  718. Support for sendfile() on HPUX and sendfilev() on Solaris. Contributed
  719. by Kenneth Stailey.
  720. Don't display "you are user number 0".
  721. Check whether we have pread() in configure.ac .
  722. Remove dead scoreboard files in pure-ftpwho, even those whose status
  723. isn't marked as free.
  724. New translation : Russian. Contributed by Andrey Ulanov
  725. <drey at rt.mipt.ru> .
  726. New translations : simplified and traditional Chinese. Contributed
  727. by Fygul Hether <fygul at fgs.org.tw> .
  728. New IPv6_OK message to tell people when a server also accepts IPv6
  729. connections if DISPLAY_IPV6_OK is defined.
  730. In extauth, there's no more need to fill fields except auth_ok
  731. when authentication is refused (auth_ok = {0,-1}) . uid/gid/dir are only
  732. checked with auth_ok = 1. It's then easier to chain other authentication
  733. modules.
  734. Linux binaries will now be linked against GlibC 2.2.x .
  735. Use the non-root mode for the Windows port.
  736. Don't forget to retrieve LDAP_FTPUID and LDAP_FTPGID when fetching
  737. LDAP info.
  738. Introduce closedata() to close the data socket. It avoids
  739. duplicate code. opendata() now returns void : the result is in the
  740. xferfd global.
  741. fakesnprintf() now supports %c.
  742. Implement FTP Data Connection Assurance
  743. (http://www.ietf.org/internet-drafts/draft-ietf-ftpext-data-connection-assurance-00.txt)
  744. Buglets fixed in the PostgreSQL documentation.
  745. Pure-FTPd User Manager added to the contribs.
  746. Add exponential delay after a 'cd' failure. Suggested by Jim.
  747. * Version 1.0.11 :
  748. New translation : Norwegian. Contributed by Kurt Inge Smådal /
  749. EasyISP.org <kurt at easyisp.org> .
  750. Fix typo (RATIO->RATIOS) in log_extauth.c and ratios are now working
  751. with the extauth module :)
  752. Autoconf upgraded to 2.53 .
  753. PAGE_SIZE can be non constant. So we try to get it with getpagesize() or
  754. sysconf() . PAGE_SIZE and MAP_SIZE have become page_size and map_size.
  755. Thanks to brad at openbsd.org .
  756. Dutch translation updated - Johan Huisman <sietze.jan.huisman at 12move.nl>
  757. Typo in log_extauth.h (bandwidth -> bandwidth) . Fixes throttling with
  758. extauth. Reported by iTooo <itooo at itooo.com> .
  759. Italian translation updates (Alex Dupre) .
  760. Workaround against Solaris streams bugs - Kenneth Stailey.
  761. getspnam() is now probed in addition to <shadow.h> in order to find
  762. whether shadow passwords are available - Kenneth.
  763. Check for setreuid/setresuid/setregid/setresgid is seteuid/setegid
  764. aren't available. Use them in place of seteuid/setegid if necessary - Kenneth.
  765. Fixed a typo in the previous line - Brad :)
  766. Use pstat_getdynamic() to get the load average if available. It works on
  767. HPUX - Kenneth.
  768. Use pstat() to change the process title on HPUX - Kenneth.
  769. Cosmetic cleanups (tabs instead of spaces, etc) .
  770. The good'ol poweredby.jpg logo has been replaced by pure-ftpd.png, the
  771. new official logo contributed by Gabriele Vinci <gabriele at pronto.it> .
  772. We now have plenty of FTP mirrors, see the end the README file.
  773. * Version 1.0.10 :
  774. GCC updated to 3.0.4.
  775. Automake updated to 1.6. configure.ac has zapped deprecated
  776. constructions.
  777. Autoconf updated to 2.52i. Autoconf doesn't like conditional *_LDFLAGS
  778. in Makefiles any more.
  779. Probe for *postgresql* in addition to *pgsql* to find include/lib paths
  780. for PostgreSQL (configure.ac) .
  781. *reply() functions rewritten from scratch: simpler code, no more
  782. recursivity (makes Solaris happy) and faster processing.
  783. Accept '..' in file names in fakexlate() .
  784. Use addreply_noformat() whenever possible (speedup).
  785. New switch : -Z (--customerproof) . Right now, it adds | 0600 or | 0700
  786. to chmod commands to avoid users locking their own files. Additionnaly, we
  787. now try a traditional chmod() call if fchmod() fails. There's a race here,
  788. but no security trouble to fear. Reported by Mark Reidel <mr at domainfactory.de>
  789. Spec file fixes, contributed by Jose Pedro Oliveira <jpo at di.uminho.pt>
  790. PureDB binary search could fail with -1 as a slot number - fixed.
  791. * Version 1.0.9 :
  792. Korean translation updated.
  793. Spanish translation updated.
  794. Slovak translation updated.
  795. Load average is now checked on Irix - Contributed by Florin Andrei
  796. <florin at sgi.com> and Chan Wilson <cwilson at sgi.com> .
  797. Make the PAM example more generic. -Thorsten.
  798. External authentication modules can now be compiled in even when
  799. ratio/quotas/throttling aren't enabled. -reported by pierre at epinetworx.com .
  800. /dev/*random devices can now be probed at run-time when
  801. PROBE_RANDOM_AT_RUNTIME is defined. Suggested by Kenneth Stailey.
  802. Remove loop alignment in minimal mode - GCC doesn't like it on Solaris.
  803. Enabling the non-root mode now implies virtual chroot. - Some big
  804. improvements to the non-root mode. Almost all features of the root mode are
  805. now working.
  806. SITE ALIAS buglet fixed - Kenneth.
  807. Parse a.b.c.d IP addresses (without /netmask) and blah.blah.blah
  808. (hostnames) in log_puredb access/deny rules. Suggested by Maxnerd.
  809. Autoconf updated to 2.52h.
  810. Don't drop CAP_CHOWN before login completion, so that on-demand
  811. directories are chown()ed to the right user when capabilities are enabled.
  812. fake* files are now under a BSD license.
  813. The PgSQL backend now accepts 'any' and 'md5' keywords for the password
  814. hashing - Contributed by Bjoern.
  815. External authentication modules are now working on non-Linux systems :
  816. we were sending every line from log_extauth to pure-authd in separate
  817. packets to the local unix socket, but we were only reading a single packet
  818. then. Now, we also group everything to a single packet before sending the
  819. data.
  820. Merge Ben Gertzfield's extended LDAP schema.
  821. AtheOS is unfortuntely gone from the list of supported OS because it
  822. lacks mmap().
  823. Invalid SQL queries are now logged in order to help debugging.
  824. * Version 1.0.8 :
  825. Set errno in fake functions.
  826. Get rid of rd_len, rename rd -> root_directory, always ensure that it
  827. has a trailing '/' to simplify further code.
  828. Recognize the /./ hack for anonymous users ('ftp' account). Contributed
  829. by Teo de Hesselle <teo.dehesselle at uts.edu.au> .
  830. Strip leading / in fakechroot (just to be coherent with the trailing /
  831. now in root_directory) .
  832. Have the non root mode work with virtual chroot. People are restricted
  833. to the directory pure-ftpd was started in.
  834. Fix compilation on AtheOS.
  835. Allow pure-quotacheck to run as a non-root user (suggested by Philip Mak
  836. <pmak at aaanime.net>) .
  837. Merge realpath() replacements from OpenBSD-current, because some Solaris
  838. libC have a broken realpath() implementation.
  839. Support for MD5 hashed passwords in log_mysql. Contributed by Nicolas
  840. Doye.
  841. Force a minimum of 64k i/o buffers.
  842. Get rid of the ugly daemons.c inclusion in pure-mrtginfo.c .
  843. Merge the W3C log format - contributed by Thomas Briggs <tom at sane.com> .
  844. Add initsupgroups() function and always call initgroups() *BEFORE*
  845. chroot. An important fix pointed out by Adam Kruszewski (Fantomik) and
  846. Wojtek "elluin" Kaniewski.
  847. Add CAP_SETUID if we're on a system with Linux capabilities, but no
  848. setfsuid() call. Who knows, there are maybe very strange GlibC.
  849. New switch : -G (--norename), new global : disallow_rename .
  850. sizeof(FTPWhoEntry_.filename) increased in ftpwho-update.h .
  851. Reply with 530, not 550 when user isn't logged in. Reported by Philip
  852. Mak <pmak at animeglobe.com> .
  853. Follow symlinks in pure-quotacheck. We need this to support virtual
  854. chroot.
  855. Remove extra "." in "Entering passive mode" message to please some very
  856. old BSD kernel proxies. Reported by BigAndy.
  857. Open descriptors 0,1,2 (->/dev/null) in forked uploadscripts, just to
  858. please some programs that are crashing when they can't write to stderr
  859. (example : Unison) .
  860. Add a fakechroot version of realpath() so that altlog works with
  861. absolute file names.
  862. New FAKECHROOT_EXCEPTION macro to avoid I/O wrappers. -Used in
  863. bsd-realpath() .
  864. Cygwin doesn't have a working initgroups() call (always returns -1) =>
  865. don't abort if the call doesn't succeed. Also, have getpwnam() and getpwuid()
  866. always return the same fake values on win32.
  867. Speedup : chroot("/") means no chroot at all, no need to wrap I/O
  868. functions in that case.
  869. mode_t is an unsigned short on MacOS X, so it's promoted to unsigned
  870. int - take care of that for fakeopen() mode.
  871. Fix throttling in ASCII mode - the nowait condition is o >= st.st_size,
  872. not left > skip.
  873. Log passwords when the server is compiled with DEBUG.
  874. Remove TVFS conformance announcement (FEAT command) when virtual chroot
  875. is enabled.
  876. Fix bashisms/zshmisms in configure.ac and links OpenSSL if needed with
  877. OpenLDAP. Contributed by Ben Gertzfield (che_fox) .
  878. Merge pure-authd and the 'extauth' external authentication handler.
  879. Relevant files are man/pure-authd.8, src/log_extauth* src/pure-authd* .
  880. Undefine fakechroot macros before their definition, it shuts the
  881. compiler up on Solaris.
  882. * Version 1.0.7 :
  883. Use /dev/arandom and random() instead of /dev/urandom and rand() when
  884. possible. Suggested by Brad Smith <brad at openbsd.org>.
  885. Korean translation updated (Im).
  886. GCC upgraded to 3.0.3 for binary packages.
  887. Don't chroot to /etc/pure-ftpd/<ip>/. , but to /etc/pure-ftpd/<ip> for
  888. virtual users. Virtual chroot didn't like it.
  889. RPM packages can now be built with LDAP, Mysql and PostgreSQL.
  890. Contributed by Ben <ben at zaeon.com> .
  891. Directory aliases (DIRALIASES macro, diraliases.{c,h}, minor tweaks to
  892. ftpd.c (docwd) and ftp_parser.c (site alias)) . Contributed by Kenneth
  893. Stailey <kstailey at yahoo.com> .
  894. Cindy has moved.
  895. Add a fake chroot wrapper for stat[v]fs[64]() and rm/mkdir.
  896. Check directory, not file for stat[v]fs[64]() - Option -k should really
  897. work now.
  898. Don't count .ftpquota in pure-quotacheck. Reported by Jan Pavlik.
  899. * Version 1.0.6 :
  900. New fakechroot.{c,h} files. They contain wrappers for most I/O functions
  901. to emulate chroot and follow symbolic links.
  902. PostgreSQL support, based upon log_mysql.
  903. Known issue with virtual chroot (FIXME) : files with ".." in their names
  904. are denied.
  905. Danish and Korean translations updated.
  906. Typos were fixed in the Polish translation (contributed by Mariusz
  907. Pekala <skoot at poczta.onet.pl>).
  908. Check for libelf before libkvm in Autoconf (Kenneth)
  909. Don't enable TCP_NODELAY any more on the connection socket. FTP Explorer
  910. doesn't like it.
  911. Don't assume that crypt() always returns non-NULL pointers. Thanks to
  912. Paul <paul at chipmunkweb.yi.org> for his help on that issue.
  913. New translation : Swedish (messages_sv.h).
  914. Don't clear dot_{read,write}_ok when quotas are enabled. Instead, check
  915. for enabled quotas in checknamesanity() and refuse everything with
  916. ".ftpquota" in it => ok because only 'ls' performs globbing.
  917. * Version 1.0.5 :
  918. Rename and delete operations are now syslogged.
  919. Strange characters are now stripped from .banner/.message files.
  920. Unofficial macros to give more power to anon users :
  921. ANON_CAN_CHANGE_PERMS, ANON_CAN_DELETE, ANON_CAN_RESUME and ANON_CAN_RENAME.
  922. Return 550 when an upload excess quota.
  923. New unofficial macro : LOG_ANON_EMAIL .
  924. File deletion and rename are now logged.
  925. [v]snprintf() replacements have been totally rewritten.
  926. Accept multiple ip/mask filtering rules in the puredb backend.
  927. The load average can now be read on Solaris < 2.6 (where getloadavg()
  928. isn't implemented) . Contributed by Keneth Stailey.
  929. Documentation updates (FAQ and pure-ftpd man page), translation updates.
  930. Autoconf updated to 2.52g, Automake to 1.5b.
  931. * Version 1.0.4 :
  932. Clean up pure-config.pl and use Perl's exec with an array, circumventing
  933. the system shell. (Gives less surprises with strange characters in the config
  934. file, is also more efficient.) (Matthias)
  935. Clean up pure-config.py and use os.execv, work done by Joshua Rodman.
  936. Thanks a lot. Autoconf adjustments to pure-config.py by Matthias.
  937. Fix configure.ac to use ":" in the path to AC_PATH_PROG rather than " ",
  938. add PYTHON search, declare PERL and PYTHON precious, if not found, default to
  939. /usr/bin/env <program>, add pure-config.py to AC_CONFIG_FILES. (Matthias)
  940. Close descriptors in pure-ftpwho (paranoia. I wasn't able to change any
  941. ftpwho file even without this -j.)
  942. New ADD_EXTRA_GROUPS_TO_ANON unofficial macro to enable supplementary
  943. groups for anonymous users (disabled by default) .
  944. Accept 2000 chars long .message files even on systems where MAXPATHLEN
  945. is very low (e.g. Irix and FreeBSD) . Contributed by Michael Glad
  946. <glad at daimi.au.dk> .
  947. Recognize "p@sw" as a synonym for "pasv" to bypass SMC Barricade mangling.
  948. Fixed compilation on Corel Netwinder devices (Gareth Woolridge).
  949. Allow EPSV when IPv6, regardless of the broken compatibility flag.
  950. A workaround for buggy Autoconf versions was added in configure.ac
  951. (AC_PATH_PROG didn't work when the path wasn't a variable : IFS was set but
  952. it wasn't effective without any substitution) .
  953. Have dodele() handle unlink() errors even when virtual quotas are
  954. enabled. Also, the stat() (that was changed to lstat())/rename() race was
  955. fixed by an additional lstat() on the destination file.
  956. simplify() has been moved to ftpd.c . We call it for mkd/rnto/stor file
  957. names before stripping spaces, just to be a bit more annoying with warez
  958. players.
  959. VUSERS stuff was removed. It has been obsoleted by the puredb backend.
  960. New FAQ file.
  961. The ML address has changed to pureftpd.org/ml instead of a direct link
  962. to SF, just in case we move to something more reliable.
  963. * Version 1.0.3 :
  964. New ASCII conversion function (doasciiwrite()), faster, easier and less
  965. buggy than the original one. And it fixes a funny compatibility issue with
  966. Homesite.
  967. Look for perl in /usr/bin before /usr/local/bin (better to build RPM
  968. packages) .
  969. Don't forget to remove libsafe before building binary packages :)
  970. New unofficial macros : DISABLE_MKD_RMD and DEFAULT_TO_BINARY_TYPE.
  971. * Version 1.0.2 :
  972. Upgraded to Autoconf 2.52f.
  973. Disallow rnto to existing files when quotas are enabled. Not for
  974. nonexistent files.
  975. Don't use setfsuid() when system quotas are enabled -> undef
  976. HAVE_SETFSUID_H in ftpd.h if SYSTEM_QUOTAS if defined.
  977. Always restrict the size of chunks for downloads when ftpwho is enabled.
  978. Parse every component of the path in create_home_and_chdir().
  979. Include some more (v)snprintf() implementations, using vfprintf() and
  980. _doprnt() . Needed for Tru64.
  981. The upload pipe now receives upload info as follows :
  982. \002username\001filename\000 . That way, virtual user names can be read.
  983. PureDB is now covered by a BSD license and it was upgraded to version
  984. 2.0 .
  985. Don't forget the -k option in Perl/Python parsers.
  986. * Version 1.0.1 :
  987. Enable keepalive on data sockets, disable ndelay.
  988. Downgrade to autoconf 2.52.
  989. Fix 'left' value when throttling is enabled in doretr() with sendfile() .
  990. Add --without-nonalnum / PARANOID_FILE_NAMES.
  991. New funny french messages.
  992. Quota fixes when uploads are aborted. New dostor_quota_update_close_f()
  993. function. Yeah, what a nice and long name :)
  994. * Version 1.0.0 :
  995. Remove the last dynamic array in dostor(), use ALLOCA instead.
  996. Solaris considers mmap()ed region as char * instead of void *. Add
  997. explicit casts to shut up the compiler.
  998. Add CallUploadScript in pureftpd.conf sample.
  999. Support Base64-encoded MD5/SHA and salted MD5 (SMD5) and SHA (SSHA)
  1000. LDAP passwords.
  1001. Updated danish translation - Lyberth.
  1002. Updated polish translation - Arkadiusz.
  1003. New messages_sk.h and messages_kr.h translation files.
  1004. Renamed messages_sp.h -> messages_es.h .
  1005. Separate {bandwidth,quota,ratio} changed pairs in AuthResult.
  1006. Accept @ for LDAP logins.
  1007. Have pure-uploadscript write a /var/run/pure-uploadscript.pid file.
  1008. Irix portability fixes, thanks to Florin Andrei <elf_too at yahoo.com>.
  1009. MLST/FEAT conformance fixes.
  1010. PAM fixes (Thorsten).
  1011. Get rid of the dot_ok global.
  1012. Have the main server delete ftpwho files.
  1013. Check for statvfs64().
  1014. Spec file improvements (Bernie).
  1015. keepallfiles = 0 when users belong to the trusted group.
  1016. Disable quota for anonymous users.
  1017. Fix various compiler warnings (Matthias).
  1018. Have pure-pw support puredb files even when the server hasn't been
  1019. compiled --with-puredb. Suggested by Arkadiusz.
  1020. New --with-sysconfdir configure switch. Suggested by Arkadiusz and
  1021. Matthias.
  1022. Don't strip spaces in commands, unless SKIP_TRAILING_SPACES is defined.
  1023. It was an historical behavior but it breaks spaces before and after file
  1024. names, passwords beginning with spaces, etc. Thanks to Andreas Piening
  1025. <Andreas.Piening at ePost.de> for helping to solve that issue.
  1026. Replace extra spaces around uploaded file names (and rnto) with '_' to
  1027. avoid stupid practices of warez folks.
  1028. New message files format checker (messages_check.pl) provided by
  1029. Matthias Andree.
  1030. Add mysnprintf.{c,h} wrapper for brain damaged snprintf() implementations.
  1031. Refuse rename() with --keepallfiles.
  1032. Upgraded autoconf to 2.52d. Get rid of acconfig.h .
  1033. Changed configure.ac trailer - Contributed by CmdrTaco of Slashdot (only
  1034. two people know why... this is the mystery of pureftpd :)
  1035. Misc. nice cleanups everywhere (Matthias, Bernhard, Jason, Arkadiusz).
  1036. Upgraded to gcc 3.0.2 for binaries.
  1037. Don't increase size quota when overwriting existing files - Reported by
  1038. Eric <ericnew at pacific.net.sg> .
  1039. * Version 0.99.9 :
  1040. Complete rewrite of src/*ftpwho*. We now use a scoreboard directory
  1041. (/var/run/pure-ftpd) with mmap()ed structures instead of SysV IPC. It might
  1042. be a bit slower than IPC, but it's definitely more reliable, it doesn't need
  1043. any OS tweaking, it's simpler code, etc.
  1044. Support the service part in getnameinfo() emulation code for pure-ftpwho.
  1045. Ansified bsd-glob* and gnu-getopt* .
  1046. Avoid a clash for struct statfs between sys/vfs.h and sys/capability.h .
  1047. Consider negative filedescriptors as valid (prepare for O_DIRECT).
  1048. -H is now a synonym for -n in pure-ftpwho.
  1049. Use safe_write() when possible instead of plain write().
  1050. Much efficient buffering code in ls.c .
  1051. New -m switch in pure-pw. New environment variables for the default path.
  1052. Refuse atomic replacement of files when quotas are enabled.
  1053. Accept pure-pw mkdb without any further argument.
  1054. New pid_file glob.
  1055. Documentation fixups. Contributed by James Metcalf <james at asset-ict.com>
  1056. and http://www.php4hosting.com/ .
  1057. * Version 0.99.4 :
  1058. Change uploaded and downloaded to unsigned long long. Display file
  1059. sizes as unsigned long long in src/ls.c. (Thorsten/Matthias)
  1060. RPM improvements. (Thorsten)
  1061. Chroot everyone by default in pure-pwconvert.
  1062. Refuse 0Kb bandwidth for throttling in pure-pw. Reported by Ben Weir.
  1063. * Version 0.99.3 :
  1064. Don't include users that don't have a valid directory in pure-pwconvert.
  1065. Old versions of MySQL (<= 3.22.x) are now supported.
  1066. mysql_real_escape_string() wasn't implemented. We now just check this in
  1067. configure and fallback to mysql_escape_string() if necessary.
  1068. Fixed RPM building with PAM, thanks to Sergey Mihailov.
  1069. Add PureDB to configuration file wrappers, thanks to Sergey Mihailov.
  1070. Include sysconfig sample in RPMs.
  1071. Support MySQL's password() hashing function. Contributed by Robin Ericsson.
  1072. Dutch translation updated (Johan Huisman <sietze.jan.huisman at 12move.nl>) .
  1073. New keyword in mysql config : MySQLTransactions.
  1074. Reject new uploads if user_quota_files/size > quota->files/size .
  1075. dynamic.c rewritten in a simpler way.
  1076. Allow @ and : in MySQL login names (Contributed by Arkadiusz).
  1077. Add ratios and bandwidth to the MySQL backend.
  1078. Accept the "any" keyword for MySQL auth. Don't if...else if
  1079. crypto schemes. Try them all in order instead. (src/log_mysql.c)
  1080. Duplicate the content of environ instead of nullizing it. Longer, but it
  1081. helps pure-ftpd work on older C libraries (libc5).
  1082. Individually check IPv6-specific functions and macros. Some systems e.g.
  1083. MacOS X have a partial implementation (getaddrinfo() without getnameinfo()) .
  1084. Check for SysV semaphores and don't enable ftpwho on operating systems
  1085. they are missing on.
  1086. Really support extended DES hashing.
  1087. Cleanups to german messages, more informative message for PASV usage
  1088. with IPv6. (Matthias Andree) .
  1089. Strip extra info in gecos (src/pure-pwconvert.c) .
  1090. Add IP filtering and time restrictions to log_puredb/pure-pw.
  1091. New SQL digraph : \D.
  1092. * Version 0.99.2a :
  1093. When quotas were enabled, but no quota was specified, uploads were
  1094. always truncated to 0 bytes. It has been fixed.
  1095. * Version 0.99.2 :
  1096. Upgraded Automake to 1.5.
  1097. New translation : dutch.
  1098. Fix --createhome option, reported by Lan Yufeng.
  1099. New quotas.{c,h} files.
  1100. Fix compilation when MySQL stuff is installed in /usr .
  1101. Remove host name in the minimal banner.
  1102. Add [NOTICE] and [DEBUG] qualifiers to logfile().
  1103. New DONT_LOG_IP macro, force '?' into host global.
  1104. Some operating systems (at least Solaris > 2.7 and FreeBSD < 4.3) have
  1105. strange troubles with reusing TCP ports, even when SO_REUSEADDR is enabled.
  1106. Although it is an OS issue, we try several unassigned privileged ports as a
  1107. workaround for active connections. The last ressort is to let the OS assign
  1108. a port. But you can filter everything >1023 on your firewall if you feel
  1109. paranoid (and fix the server OS) .
  1110. New unofficial macro : ANON_CAN_RESUME, to authorize anonymous users to
  1111. resume transfers.
  1112. New -n / --quota option.
  1113. New program : pure-quotacheck.
  1114. Merged the PureDB package.
  1115. RPM can now be build with PAM support, thanks to a new variable called
  1116. con_pam. Contributed by Juan Pablo Gimenez <jpg at rcom.com.ar>
  1117. Add a "password" attributes to the PAM sample.
  1118. Stat the / directory and compare it with what we are chmod()ing. If it's
  1119. the same inode/device pair, enforce read+exec+write rights for the user.
  1120. Use AF_UNSPEC as a family instead of AF_INET/AF_INET6 when getaddrinfo()
  1121. is called with AI_PASSIVE.
  1122. All authentication stuff has been moved in src/log_*.c files, including
  1123. what's needed to parse/allocate/free related structures. All modules have the
  1124. same hooks, grouped in a new structure : Authentication .
  1125. Semantic change for AuthResult.auth_ok : 0 means a soft error (user not
  1126. found, or server temporarely down), -1 means hard error (bad password), 1
  1127. means ok. To be secure, we fall back to the next authentication method only
  1128. on soft errors. Also, AuthResult objects are now passed by address to
  1129. authentication handlers.
  1130. New --with-puredb switch in the autoconf script.
  1131. New files : src/pure-pw.{c,h} man/pure-pw.8
  1132. Disable TCP_CORK, some Linux users reported strange behavior because of
  1133. this.
  1134. Disallow crazy chunk sizes for uploads, to save our beloved stack,
  1135. especially when throttling is enabled. Thanks to Daniel Tschan.
  1136. Made zrand() returns an unsigned int, so that zrand() % xxx is always
  1137. positive.
  1138. New files : src/log_puredb.{c,h}
  1139. Scan several common paths for pure-ftpd in pure-config.pl.
  1140. New pure-pwconvert tool, suggested by <olle at xmms.org> .
  1141. * Version 0.99.1b :
  1142. Fix access problems to remote MySQL servers. - Thanks to John Hart.
  1143. New program : "pure-statsdecode" to convert timestamps into human-
  1144. readable dates in "stats" logfiles.
  1145. Add peer info to authentication (pw_*_check()) functions.
  1146. When MySQL or LDAP are enabled, add additional groups of the system uid.
  1147. Made LDAP attributes more configurable (macroized strings in log_ldap.h) .
  1148. New digraph for SQL substitions : \R (remote IP) .
  1149. New fields for the LDAP configuration file parser : LDAPDefaultUID and
  1150. LDAPDefaultGID.
  1151. Updated the LDAP documentation.
  1152. Check that programs linked against mysqlclient can run in configure.ac .
  1153. Because some people forgot to add libmysqlclient.so in the configuration of
  1154. the dynamic linker.
  1155. New create_home global, new --createhomedir/-j switch, new
  1156. create_home_and_chdir() function.
  1157. * Version 0.99.1a :
  1158. New alternative logging format : "stats", designed for the ftpStats
  1159. application.
  1160. Cosmetic fix with ratios.
  1161. New -K / --keepallfiles directive.
  1162. Workaround for broken clients that don't properly end up their command
  1163. lines.
  1164. * Version 0.99.1 :
  1165. Don't call uploadscript on downloaded files when CLF logs are enabled.
  1166. New SNCHECK macro to check snprintf() return values. Older
  1167. implementations return -1 for overflows, while C99 dictates that the number
  1168. of chars that would have normally be written should be returned. So, we
  1169. check the implementation in configure.ac and define this macro to do the
  1170. right thing.
  1171. Don't try to read /dev/urandom when chrooted.
  1172. CORK and NODELAY can't be used together.
  1173. Support pipelining (fixes lftp async mode).
  1174. Changes of process names are now properly handled on Linux - Thanks to
  1175. Juergen Henge-Ernst.
  1176. Split Unix auth stuff into log_unix.{c,h}, new AuthResult structure.
  1177. Properly report download progression and speed in pure-ftpwho. The
  1178. problem was in sendfile() downloads, when both FTPWHO and THROTTLING were
  1179. defined (&& instead of || in the test... stupid failed optimization) .
  1180. Fix getnameinfo() emulation by passing a valid IP address to
  1181. gethostbyaddr() .
  1182. Allow LDAP path override.
  1183. Disallow root uid/gid in LDAP.
  1184. Document that adding "shadow" to PAM sample rules can fix some hardened
  1185. distributions, suggested by Joe Silva.
  1186. Use statvfs, not statvfs64 for large files on Linux when __REDIRECT is
  1187. defined.
  1188. Externalize zrand().
  1189. Merge MySQL authentication.
  1190. Fix throttling + large files.
  1191. * Version 0.99b :
  1192. Check socket/resolver libs in configure.ac before socket-related tests.
  1193. It fixes LDAP compilation on Solaris.
  1194. Pad the day to two characters in CLF.
  1195. Downloaded/uploaded files are now logged with LOG_NOTICE priority.
  1196. Add --without-sendfile configure switch - sets DISABLE_SENDFILE macro.
  1197. Disabling sendfile is useful on some OS with some filesystems that don't
  1198. support zero-copy transfers like SMBFS on FreeBSD 4.3 .
  1199. Merge hash functions : crypto.{c,h}, crypto-sha1.{c,h} and crypto-md5.{c,h}
  1200. Renamed pam_ftp_check() to pw_pam_check() .
  1201. Don't display group list in minimal mode.
  1202. Fill in the uid/name cache after an authenticated login.
  1203. Minor RPMs improvements. -Still not a relocatable package, though-
  1204. Fix non-root mode : don't dereference pw in dopass() if NULL.
  1205. Include the BSD license in COPYING.
  1206. * Version 0.99a :
  1207. Always display the local IP and port with pure-ftpwho -v.
  1208. Don't log an extra \001 is CLF output, properly report negative time
  1209. zones, zerofill hour/min/sec to 2 digits.
  1210. * Version 0.99 :
  1211. New README.Debian file.
  1212. Fix ls -C arithmetic error with long file names. Reported by Old Mole.
  1213. Corrected the german translation for grammatical/spelling errors,
  1214. translated missing messages. -Contributed by Bernhard Weisshuhn.
  1215. Danish translation. -Contributed by Isak Lyberth.
  1216. Log login attempts with disabled accounts. Admin can still check what's
  1217. wrong even --with-paranoidmsg . The new message is MSG_DISABLED_ACCOUNT.
  1218. Improved pure-config.pl.in : extra parameters can be added in command
  1219. line.
  1220. Fix throttling on FreeBSD : BSD sendfile() returns -1/0 , not the
  1221. number of transmitted bytes.
  1222. Show s/S/t/T flags in ls -l - Suggested by Bernie.
  1223. Removed --without-chmod, added -R options.
  1224. * Version 0.99pre2 :
  1225. Fixes to make pureftpd compile on Solaris 7 and 8. Warning:
  1226. untested. Large file support may be broken.
  1227. Minor robustness/warning fixes.
  1228. "ftp" can be used as a fake shell, no need to add it to /etc/shells.
  1229. Documented that anonymous FTP needs an "ftp" account in an LDAP
  1230. directory - Thanks to Adrian Zurek.
  1231. Fixed a typo in pure-config.pl : UserBandwidth handled $2 not $1 -
  1232. Thanks to Vincent the Herisson
  1233. Upgraded Automake to 1.4p5 and Autoconf 2.52.
  1234. Renamed deprecated configure.in to configure.ac .
  1235. RPM fixes - Contributed by Oliver Soell <oliver at fusionit.com>
  1236. More accurate throttling, don't only check seconds, but also usec
  1237. - Contributed by Frank de Bot.
  1238. Don't log client crashes as timeouts - Reported by Matthias Andree.
  1239. Stop if --with-pam was specified, but PAM headers are missing.
  1240. Add %s in die() - Thanks to Matthias Andree.
  1241. New logpid global - Matthias.
  1242. Added PARANOID_MESSAGES macro (see src/messages.h)
  1243. Have RNTO work when the target file name already exists - Reported by
  1244. Bernhard Weisshuhn.
  1245. Allow transfers through sendfile() longer than <idletime> , needed for
  1246. very large files transferred over slow links (odd idea, but why not) .
  1247. Changed the trustedgid behavior when the /./ trick is used : members of
  1248. the trusted group *are* chrooted, but they have no ratio and dot-files are
  1249. allowed.
  1250. Added --with-paranoidmsg compile-time option to enable PARANOID_MESSAGES.
  1251. Implemented alternative IPv6 functions for backward compatibility with
  1252. old IPv4 only stacks. Check out src/ipv4stack.* and the new OLD_IP_STACK
  1253. macro. We assume the stack is IPv4-only if getaddrinfo() doesn't exist.
  1254. Display version number in '-h'.
  1255. New files : altlog.{c,h}
  1256. New option : -O / --altlog , new macro WITH_ALTLOG, new globals altlog_*,
  1257. new autoconf switch --with-altlog .
  1258. Try to use ALLOCA in internal statement blocks instead of local
  1259. fixed-size arrays. The result is the same and the source code is a bit more
  1260. complex, but it saves stack space especially on path names.
  1261. Minor code cosmetic cleanups (I really hate if/loops without braces) .
  1262. Improvements to the FreeBSD port : LDAP can be compiled in.
  1263. List KcmPureftpd in README.Contrib .
  1264. New --with-bloat^H^H^H^H^Heverything autoconf switch.
  1265. Added NO_PROCNAME_CHANGE macro just in case people don't want processes
  1266. to change name (workaround for a bug on older glibc) .
  1267. Return 550 instead of 530 when CWD fails. Silly broken clients like
  1268. AbsoluteFTP choked on this.
  1269. Don't assume that no sendfile() implies support for large files.
  1270. * Version 0.99pre1 :
  1271. Have MSIE open an authentication dialog when anonymous users are
  1272. forbidden (-E) in compatibility mode (-b) .
  1273. Don't CORK_OFF a bad file descriptor in error() - Reported by Sami Farin.
  1274. Don't reply with PASV/SPSV/EPSV when -N is enabled.
  1275. Don't forget to initialize gl_pathc and gl_pathv in glob_() - OpenBSD
  1276. didn't like it.
  1277. Fixed typos in documentation.
  1278. * Version 0.98.7 :
  1279. gui/build.sh improvements by Peter Pentchev.
  1280. Correct typo in the pure-uploadscript man page.
  1281. Always parse the last element in upload ASCII conversion.
  1282. Reduce the random tapping delay, some users find it annoying.
  1283. More parser cleanups and optimizations.
  1284. Don't glob any more for chmod and dele.
  1285. Follow symbolic links for downloads.
  1286. Made autorename an argument for dostor() for dostou() atomicity.
  1287. Minor optimizations for passive port computation (to be paranoid, we
  1288. never rely on OS port assignment, so give up the old TrollFTP code)
  1289. Replace since -> xfer_since in pure-ftpwho to avoid FPE. Add even a
  1290. signal handler, just in case.
  1291. Never forget to check that shm_data_cur is != NULL before dereferencing
  1292. it.
  1293. Wait a bit when MAX_THROTTLING_DELAY is reached.
  1294. Don't make PAM sessions failures fatals. And don't even try to open a
  1295. session when WITHOUT_PAM_SESSION is defined.
  1296. * Version 0.98.6 :
  1297. Properly truncate uploaded files, even if restartat == 0.
  1298. Added MSG_NO_ASCII_RESUME.
  1299. * Version 0.98.5 :
  1300. Recognize ADAT command for Kerberized Fetch 5 (Macintosh).
  1301. Added a contrib/ directory and README.Contrib.
  1302. Minor Autoconf and code cleanups.
  1303. Debian package updates - no more hang at end of the install procedure.
  1304. Open PAM session (patch by Sami Koskinen <tossu at cc.hut.fi>).
  1305. It looks like some OS/C libraries don't like to share syslog
  1306. descriptors. To be safe, we have to reopen the syslog for each client,
  1307. grr!
  1308. Disable auto login (handy, but buggy clients sending fancy commands
  1309. before authentication choked on this) .
  1310. Disable the 'man page segfault' humor :(
  1311. Fix largefile compilation on Linux (reported hy Andreas Westin).
  1312. Don't wait for throttling when download is completed.
  1313. Use statfs() and getloadavg() on *BSD.
  1314. Don't keepalive, don't linger.
  1315. Don't forget to parse the last element in pure-ftpwho (reported by
  1316. Brandon Covert).
  1317. Merge the virtual host login code with the regular login code (suggested
  1318. by Chris Mentjox <chris at widexs.nl>.
  1319. ftp_parser.c/sfgets() rewritten to optimize read() calls.
  1320. Use the same policy to forbit dot-files for cd and for other commands,
  1321. for consistency and to ease migration from other servers.
  1322. Don't unlink() partially uploaded files unless user is anonymous.
  1323. Add fillenv() and newenv_*() in pure-uploadscript.c
  1324. Skip initial \n in banners.
  1325. Rewritten upload acceptation to avoid duplicate code and possible races.
  1326. Externalized some functions to save stack space.
  1327. Add non_noupload global and the -i flag.
  1328. Don't chmod 600 incomplete uploads. I will miss that feature, but some
  1329. people don't like it and pure-uploadscript may be a better alternative for
  1330. integrity checking.
  1331. New trustedip global, that contains the trusted IP address allowed
  1332. to accept non-anonymous connections.
  1333. WITH_VIRTUAL_HOST macro to #ifdef the virtual hosting code.
  1334. Check for statvfs_t, security/pam_misc.h and sys/loadavg.h for Solaris.
  1335. * Version 0.98.4 :
  1336. Slightly reduce the password delay if PAM and LDAP aren't enabled.
  1337. Open the syslog as soon as possible (before accepting client
  1338. connections) . It solves the nasty long-standing syslog-output-in-client-fd
  1339. bug.
  1340. Don't localtime(NULL), it crashes under FreeBSD.
  1341. * Version 0.98.3 :
  1342. Close listenfd, but close(2) only if it's a tty (maybe it's an
  1343. uploadscript descriptor) .
  1344. Save errno in signal handlers.
  1345. Paranoia : introduce a random delay after password entering.
  1346. Disable signals in die() and sigurg(). This is just paranoia, the signal
  1347. handlers are *not* vulnerable to the problems described in the Razor paper.
  1348. Fix ls <link to directory> behavior, to list the content of the
  1349. directory, not the directory name.
  1350. * Version 0.98.2a :
  1351. Upgrade to Automake 1.4-p2 and Autoconf 2.50.
  1352. Accept "." in LDAP user names.
  1353. Fix --sysloghack for Debian users (DEBUG was defined)
  1354. * Version 0.98.2 :
  1355. Portability : check for __ss_len, not only ss_len.
  1356. New function for platforms without setfsuid() : usleep2(), blocking
  1357. signals when we are sleeping.
  1358. long double usage in pure-ftpwho, to avoid floating point exceptions.
  1359. Upgraded to Automake 1.4-p1.
  1360. Define syslog names if libc hasn't them.
  1361. Check for nsl/socket/resolv requirements.
  1362. Use statvfs is statfs is not available.
  1363. Fix compilation against old OpenLDAP versions (1.x) .
  1364. Added --without-globbing (also defined in minimal mode) .
  1365. Check for sendfile() variants (Linux, FreeBSD or none) . FreeBSD (and
  1366. possibly other OS with a similar implementation) can now use sendfile().
  1367. ABOR is now handled. We do this by intercepting SIGURG and by keeping
  1368. the transfer file descriptor in xfer_fd (may be datafd or what accept()
  1369. returned) .
  1370. Added a restartat field in the ftpwho structure.
  1371. Complete rewrite of sreaddir(). We're now using two distinct memory
  1372. segments : one for metadata (struct FileInfo) and another one for file
  1373. names. Also, stat()ing data is done when reading the directory content and
  1374. kept in memory to avoid stat()ing again for displaying. And we have buffers
  1375. grow instead of restarting. And we don't rely on the what st_size returns
  1376. for the directory, that's useless and it eats memory for nothing. And ls -S
  1377. works. To summarize, the new built-in ls rocks, it's way more efficient than
  1378. the previous BSD horror. And it's portable. We stat() again for modern
  1379. listing, though (MLST), because we need inode and device numbers and we
  1380. have to deref links and MLST should be ready for extended attributes (like
  1381. ACL), while sreaddir() shouldn't fill memory with extra info.
  1382. Log virtual domains logins.
  1383. Handle virtual domains in pure-uploadscript.
  1384. Fix XML output (Jason Lunz)
  1385. Solaris port and documentation.
  1386. * Version 0.98.1 :
  1387. Fix display of group listing for group names with white spaces and very
  1388. long group names.
  1389. Umask for dirs and umask for files are now different (umask & umask_d) .
  1390. New --with-sysloghack flag.
  1391. * Version 0.98-final :
  1392. Added Spanish translation by Luis Llorente Campo
  1393. <luisllorente at luisllorente.com> .
  1394. Added download_total_size, download_current_size, local_addr and
  1395. xfer_date to the FTPWhoEntry structure.
  1396. New output targets : shell (-s) and verbose ASCII (-v) .
  1397. Paranoia : add more entropy to the zrand() function.
  1398. Changed u_mask default to 133, uploaded files are now 777.
  1399. bandwidth_throttling was split into bandwidth_throttling_ul and
  1400. bandwidth_throttling_dl.
  1401. Syslog is now opened after forking. It fixes the nasty syslog-to-
  1402. clientconn bug due to dup2() and/or syslog mutex internals.
  1403. Logging can be disabled with '-f none' .
  1404. * Version 0.98pre2 :
  1405. Don't use a fancy directory separator for recursive 'ls' because NcFTP
  1406. chokes on this when mirroring. It's a pity. The previous one looked great.
  1407. But we have to keep clients happy.
  1408. Listen on IPv4+IPv6 by default even on OpenBSD.
  1409. Minor optimizations (don't test for optarg != NULL, trust getopt() and
  1410. use switch instead of else if to parse command-line options) .
  1411. Renamed mrtginfo to pure-mrtginfo, because mrtginfo was too confusing
  1412. and it could clash with other packages.
  1413. Added pure-uploadscript and its man page.
  1414. Added the '-o' option and the --with-uploadscript configuration flag.
  1415. Documentation : added forgotten NATmode example in the pure-ftpd.conf
  1416. file.
  1417. * Version 0.98pre1 :
  1418. Don't hardcode the pure-ftpd path in pure-config.pl (Peter Pentchev).
  1419. Actually include the polish translation.
  1420. Updated the Netfilter documentation. The EPSV/EPRT patch is no longer
  1421. pertinent, because EPSV/EPRT support was merged in kernel 2.4.3ac14.
  1422. Fixed welcome.msg typo (Thanks to Togusa).
  1423. Increased the banner size to 2000.
  1424. Support long options even if getopt_long is unavailable (especially for
  1425. BSD) .
  1426. * Version 0.97.7 :
  1427. Upgraded to Autoconf 2.49e.
  1428. Semaphores/shared memory perms should be & 0777 for FreeBSD.
  1429. Merged polish translation (Arkadiusz) .
  1430. Cleaned up headers includes.
  1431. Added HTML and XML outputs to pure-ftpwho.
  1432. Added pure-ftpwho man page.
  1433. * Version 0.97.7pre3 :
  1434. Changed 'killall -HUP xinetd' to 'killall -USR2 xinetd' in the README
  1435. file (pointed out by Olivier Tharan <olive at zehc.net>) .
  1436. configure.in : fixed --without-ascii, add --with-welcomemsg.
  1437. * Version 0.97.7pre2 :
  1438. pure-ftpwho marks a slot as free is there is no associated process.
  1439. Possible fix for a realloc() problem reported by Emmanuel Hocdet.
  1440. Added dmalloc support.
  1441. * Version 0.97.7pre1 :
  1442. Block SIGCHLD before calling iptrack_add() .
  1443. HAS_WAITPID is HAVE_WAITPID.
  1444. Check for setproctitle (*BSD) .
  1445. Reset restartat to 0 after a successful stor/retr (Jobush) .
  1446. Don't open with LOG_CONS.
  1447. Completed the romanian translation (Claudiu) .
  1448. Added WELCOME_MSG_COMPATIBILITY hack.
  1449. Optimization : only call setprogname if state_needs_update != 0.
  1450. maxusers defaults to 50 and maxip to (1 + maxusers / 10) .
  1451. ftpwho. Added --with-ftpwho.
  1452. * Version 0.97.6 :
  1453. Merged docwd/ls bounds checking for ~ expansion.
  1454. Enable the '.banner' file for authenticated users.
  1455. Cleaned up the man page.
  1456. Added disallow_passive global.
  1457. Optimized bsd-glob.c.
  1458. * Version 0.97.5 :
  1459. Cleaned up bsd-glob, no need for alternate directory functions.
  1460. Replaced __ macro by _COMA_ to avoid conflicts on Tru64.
  1461. Replaced \s by \s+ in pure-config.pl.in and pure-config.py (Emmanuel
  1462. Hocdet) .
  1463. Properly probe next ports if a random port can't be bound.
  1464. In dostor(), get the file size is in 'filesize', not in the initial
  1465. stat() call.
  1466. Added the '-4' option.
  1467. Updated the 'Contributors' part in the man page.
  1468. Removed leading space in dosize() result.
  1469. Added u_mask global.
  1470. * Version 0.97.4 :
  1471. getgroups() should always be called *after* seteuid()! The BSD port
  1472. broke this.
  1473. * Version 0.97.3 :
  1474. Always log the speed, whatever it is (suggested by William Kern(el panic)) .
  1475. Always display the current number of clients in the initial banner.
  1476. Always chdir() before chroot().
  1477. Use of <config.h> instead of -D for cleaner compilation (contributed by
  1478. Jason Lunz).
  1479. Clear arguments, to avoid bloat in the 'ps auxw' table.
  1480. Recognize HELP SITE and SITE HELP.
  1481. Added addreply_noformat for multi-lines responses.
  1482. STAT command.
  1483. Support "modern" directory listings (modern_format() func) . Used to
  1484. implement MLST and MLSD. Listings are "modern" or "traditional" according to
  1485. the modern_listings global.
  1486. Added --with-minimal.
  1487. Added --with-nonroot to disable chroot()/setfsuid(), so that the server
  1488. can work without root privileges.
  1489. Added --with-language.
  1490. Fixed largefile+throttling compilation.
  1491. Changed 'quota' to 'ratio' everywhere. Quotas will be something else.
  1492. Create /var/run/pure-ftpd.pid . Remove it when a signal is caught.
  1493. Added romanian translation from Claudiu Costin <claudiuc at kde.org>.
  1494. Added german translation from Mathias Gumz <gumz at cs.uni-magdeburg.de>.
  1495. Added french translation from Ping <ping at root42.net>.
  1496. Allow download of 0-byte files (reported by Louis Rouxel).
  1497. Include <netinet/in_systm.h> and <sys/mount.h> if presents.
  1498. Define STORAGE_LEN and STORAGE_FAMILY for BSD and Glibc compatibility.
  1499. Use seteuid() instead of setfsuid() on non-linux systems.
  1500. Non-pam, non-shadow passwords are working again.
  1501. Upgraded to automake 1.4d.
  1502. Latest unstable glibc for Debian define ss_family instead of
  1503. __ss_family. A test in configure.in was added for this. A test for ss_len
  1504. was added by the way.
  1505. * Version 0.97.2 :
  1506. Added epsv_all.
  1507. Tell the client when per-IP limit is reached.
  1508. Daemonize if '-B' is given (daemonize global).
  1509. Don't assume that 0 isn't a valid file descriptor. Yes we use 0/1 for
  1510. the command socket so 0 should never be reused again. But it's to be quiet
  1511. in our mind and to prevent bad surprises if we ever change this in the
  1512. future.
  1513. Add file size to speedstring (speedrate() function) .
  1514. Compare dataconn IP with *peer* IP, not cltrconn!!! It broke passive
  1515. transfers in 0.97.1, grrr...
  1516. Corrected a bashiszm in configure.in (Arkadiusz Miskiewicz)
  1517. * Version 0.97.1 :
  1518. Added more entropy for the port number of passive connections and
  1519. refuse connections from hosts who doesn't own the control socket.
  1520. .message and .banner files couldn't contain only white spaces - fixed.
  1521. Disable HELP in broken mode because very old WSFTP clients send this.
  1522. Donnu why. But they do.
  1523. Add a message to the syslog when the per-IP limit is reached.
  1524. * Version 0.97-final :
  1525. Strip debugging mode (XDBG) unless compiled with -DDEBUG. Who needs this
  1526. on production servers, anyway?
  1527. In standalone mode, close the listening socket when SIGTERM is received.
  1528. Catch maxusers in the standalone server code. If the server is busy,
  1529. don't even try to fork (optimisation) .
  1530. The default syslog facility is now 'ftp' instead of 'local2'.
  1531. Paranoia : set the close-on-exec flag on the listening socket and close
  1532. stdin/stdout/stderr.
  1533. Dynamically change process titles to reflect their activity (pure-ftpd
  1534. [SERVER|IDLE|UPLOAD|DOWNLOAD]) .
  1535. Accept non-ascii (accents) file names (check if <32U in checknamesanity).
  1536. Added dynamic.c for IP tracking. Yes, the code could be optimized for
  1537. speed with two hashed tables (ip->number pid->link to the previous table).
  1538. But it's simple and fast enough if you don't have 500000000 simultaneous
  1539. users (and if you do, you have a high end machine, don't you?) .
  1540. Added '-E' flag. anon_only = 0 (normal mode) -1 (no anon) or +1 (anon
  1541. only) .
  1542. * Version 0.97pre5 :
  1543. Added '-U' option to change the umask (Thanks to Guenter Bittner for the
  1544. suggestion).
  1545. Standalone mode : updated configure.in (NO_STANDALONE, NO_INETD),
  1546. standalone_server(), standalone global, daemons() is skipped if we are only
  1547. standalone, ...
  1548. Added '-x' and '-X' options to prevent users from writing/reading
  1549. dot-files, even though they are authenticated (add globals
  1550. dot_write_forbidden and dot_read_forbidden) . Restricting access to
  1551. directories starting with '.' added many lines of code for such a simple
  1552. operation. However, it's done in a secure way : we don't get fooled by
  1553. relative paths and links.
  1554. Bandwidth throttling in now in KB/s (throttling_bandwidth global) . We
  1555. do it the long, but right way, with compensation_delay = (transmitted bytes
  1556. / throttling_bandwidth) - (tn - t0), recalculated between each
  1557. received/transmitted chunk. A bit slow and bloated, however, but more
  1558. efficient than a fixed approximation. To minimize bandwidth starvation with
  1559. non-transfer commands, we impose a delay (throttling_delay) of 1sec/bandwidth.
  1560. * Version 0.97pre4 :
  1561. Added '-D' option to force 'ls' display dot-files even when a client
  1562. doesn't send the '-a' option (ls -la) .
  1563. Keep the previous permissions when overwriting a file. Thanks to Darren
  1564. Casey for reporting this.
  1565. New '-I' option to change the maximum idle time (idletime global) .
  1566. Also, a new function (antiidle()) is called for each dummy command (no
  1567. login, no transfer) . Because many modern FTP client send "noop", "cwd" or
  1568. "pwd" all the time to avoid timeouts. When we encounter something like this,
  1569. we give it grace time (twice the normal timeout, because the client is
  1570. active), but we disconnect him if this grace time expires anyway.
  1571. * Version 0.97pre3 / 0.96.2 :
  1572. HELP is ignored if followed by an argument.
  1573. Made SITE commands work anew with subcommands in upper case.
  1574. Finally replaced the GNU globbing stuff by ported BSD code (NetBSD libc
  1575. variant) . It's faster, it's cleaner, it's less buggy. The code was modified
  1576. to accept recursion limits (rather than a maximum buffer size), match limits,
  1577. and tilde expansion was disabled.
  1578. Limited the default maximum listed files to 2000 instead of 4242 and 5
  1579. subdirectories for recursion.
  1580. Support for shadow passwords expiration dates.
  1581. New eye-candy delimiters for subdirectories in a directory listing.
  1582. Moved capabilities-related functions to caps{.c,.h,_p.h} .
  1583. Support for large (> 2 Gb) files.
  1584. Reduced the IPv6 EPRT code, we now call doport2() like IPv4 PORT/EPRT
  1585. commands. That way, we now support IPv6 FXP as well.
  1586. Added the new logfile() function to customize the syslog output.
  1587. * Version 0.97pre2 :
  1588. Fixed a memory leak/duplicate free problem in glib-glob().
  1589. Added memory usage limits.
  1590. Added missing messages from ls.c to the "messages.h" file for translation.
  1591. Reverted the cap_free() calls semantic.
  1592. * Version 0.97pre1 :
  1593. Check for and convert 4-in-6 addresses (fourinsix() function). Also
  1594. check for valid addresses (checkvalidaddr()) .
  1595. Also check /proc/net/tcp6 when IPv6 is enabled.
  1596. Code cleanups.
  1597. Added DIE and DIE_MEM macro to shrink the source code.
  1598. Commands are already in lower case, so don't call strcasecmp() anymore,
  1599. strcmp() is faster.
  1600. Paranoia : refuse invalid IP addresses (multicast, null, broadcast).
  1601. Converted all strings to macros for localisation.
  1602. Ignore ~ if we use LDAP to avoid useless queries. But tilde expansion
  1603. with LDAP is still implemented, just #undef IGNORE_TILDE if you want to use
  1604. it.
  1605. Added overlapcpy() function in place of safe strcpy. This looks pointless
  1606. under Linux, but we must follow the specs, anyway.
  1607. Upgraded to Autoconf 2.49d.
  1608. * Version 0.96.1 :
  1609. Changed the ASCII restart message ("Okay, but your client violates RFC")
  1610. to something more friendly.
  1611. New possibly more secure glob() implementation. It's a hack of GlibC
  1612. 2.2.2's glob() providing sglob(), able to limit recursion depth and the
  1613. number or results. It's not perfect (is should return GLOB_NOSPACE in some
  1614. situations instead of an empty list), but it should be a definitive solution
  1615. against all possible globbing attacks.
  1616. Added a limit of 17 minutes of CPU time consumming. Yes, 17 minutes is a
  1617. huge limit.
  1618. * Version 0.96 :
  1619. When FXP is refused, send 500 as a reply. It helps broken NAT boxes deal
  1620. with Pure-FTPd servers since the client thinks EPSV isn't supported and it
  1621. tries PORT instead.
  1622. Added chdir() after listing a directory just in case we didn't get back
  1623. where we started if we reached a limit.
  1624. Avoid loops in directory listings.
  1625. * Version 0.96pre1 :
  1626. Added '-P' flag to explicitly set an IP address in reply to a PASV
  1627. command.
  1628. Added '-A' flag to chroot() everyone. If '-A' is combined with '-a', the
  1629. last option takes precedence.
  1630. Added '-H' flag to avoid DNS resolution.
  1631. Reverted the 0.95.1 change : 7 bits is always supported, even without
  1632. '-b'.
  1633. Added FEAT command (rfc2389) .
  1634. Allow anonymous users to create directories if they have write access to
  1635. the parent directory.
  1636. Fixed virtual hosts and updated man page/README.
  1637. Changed every sockaddr_in structure to sockaddr_storage. Added
  1638. STORAGE_PORT, STORAGE_PORT6, STORAGE_SIN_ADDR, STORAGE_SIN_ADDR6 and
  1639. STORAGE_FAMILY macros (ftpd_p.h) . Added addrcmp() to compare two
  1640. sockaddr_storage addresses (is there a faster way to do this?) and
  1641. generic_aton() to have an ipv4/ipv6 inet_aton() function. IPv6 support
  1642. should be completed, yeah!
  1643. Added max_ls_depth and max_ls_files globals and changed listdir()
  1644. prototype to abort if we went to deep into the directory tree. Added -L
  1645. option.
  1646. Added allow_anon_mkdir global.
  1647. New function fortune() to display a random line of a text file. It
  1648. uses mmap() and should be very fast. A new global fortunes_file stores NULL
  1649. (no cookie) or the cookies file name. Added '-F' to set the file name.
  1650. * Version 0.95.2 :
  1651. Changed 'ls' format to add one space to the size format and the size
  1652. is now casted to unsigned long long.
  1653. Implemented STOU and ALLO.
  1654. Implemented APPE. The dostor() prototype was changed to accept an
  1655. 'append' parameter to 'restart' according to the current file size.
  1656. Added '-e' flag to only accept anonymous users (anon_only global,
  1657. checked in douser()).
  1658. Reverted the previous capabilities change. CAP_SYS_CHROOT can be safely
  1659. dropped, but we have to call drop_login_caps() later in dopass().
  1660. Updated man page (list of supported commands and minor typo fixes).
  1661. * Version 0.95.1 :
  1662. Daemons.c : only counts sockets in CONNECTED state (1). So that
  1663. listening sockets are implicetely ignored and closing sockets aren't
  1664. creating false counts.
  1665. Capabilities : we need CAP_SYS_CHROOT even after login to properly
  1666. handle the -a flag.
  1667. Removed 'md5' in the PAM example.
  1668. Ignore type (ASCII/8 bits) if broken == 0, always do 8 bits by default.
  1669. * Version 0.95 (final) :
  1670. Changed the PAM sample file (pam_pwdb->pam_unix) to please more
  1671. Linux distributions.
  1672. Fixed getpwnam() NULL pointer dereferencement when user didn't exist.
  1673. Changed passive mode acknowledgement to "227 Entering Passive Mode" to
  1674. please Netfilter's ip_conntrack_ftp module.
  1675. Added SPSV command.
  1676. Added XCWD and XCUP aliases.
  1677. Disallow PORT commands to ports < 1024.
  1678. Various source code cleanups.
  1679. Really reset restart offset to 0 when offset is too large for a file size.
  1680. Paranoia : disallow '\' characters when dot-files aren't allowed.
  1681. Added quotas (quota_upload, quota_download, quota_for_non_anon, -Q/-q
  1682. flags, autoconf QUOTAS macro) .
  1683. Paranoia : check every (v)snprintf() return value.
  1684. PAM is now disabled by default in autoconf. Spec file was updated to
  1685. reflect the change.
  1686. LDAP support. Added the log_ldap* files and a wrapper for getpwnam.
  1687. Cleaned the doc format (tabs).
  1688. Disallow EPSV in broken compatibility mode (-b).
  1689. Added a generic basic parser (parser.*), currently only used for LDAP.
  1690. Disallow command-line options whose support isn't compiled-in.
  1691. Documented Xinetd configuration and the Netfilter troubles.
  1692. Added a check for the 'gauge' typo instead of 'gauge' on some old Dialog
  1693. versions.
  1694. * Version 0.95-pre4 :
  1695. Added a Dialog GUI for easy compilation.
  1696. Version number is now displayed in the main banner.
  1697. Added alarm signals to timeout everywhere.
  1698. Check if peer structure is filled after accept() system call.
  1699. Implemented SITE HELP.
  1700. Updated spec file.
  1701. Added dot_ok and checknamesanity() to forbid ".xxx" uploads to
  1702. non-chrooted users and anonymous users.
  1703. * Version 0.95-pre3 :
  1704. Changed error handling for restart (REST) command to please CuteFTP
  1705. and LeechFTP.
  1706. Fixed a typo in the autoconf script (--with-throttling) .
  1707. Simplified dopass().
  1708. Added tapping delay in dopass() and MAX_PASSWD_TRIES macro.
  1709. Disabled IPv6. It will be enabled anew when full support will be
  1710. implemented (not only 4-in-6).
  1711. * Version 0.95-pre2 :
  1712. Upgraded to autoconf 2.49c and automake 1.4b .
  1713. Built binary packages : Debian, RPM and Slackware.
  1714. * Version 0.95-pre1 :
  1715. Added some paranoid bounds checking.
  1716. Support for bandwidth throttling. See throttling_delay (time we
  1717. should usleep() for between each packet or command) and global 'throttling'.
  1718. Upload should not be limited to a 16k window : adjust receive to the
  1719. size of 'window' (defaults to 51200. Should we have it default to
  1720. CONF_TCP_SO_RCVBUF?) .
  1721. * Version 0.94 :
  1722. Fixed cap_free() calls (needs a pointer).
  1723. Added CAP_DAC_READ_SEARCH (for initial user home directory chdir) to
  1724. the startup capabilities. Also added CAP_NET_ADMIN (to allow setting TOS) to
  1725. the login capabilities.
  1726. Added SITE CHMOD support.
  1727. * Version 0.93 :
  1728. Support for the FXP protocol.
  1729. * Version 0.92 :
  1730. LeechFTP (a popular Zindoz client) does a "REST 1" in ASCII mode
  1731. after logging in. Well, maybe this violates RFC, but let's add a workaround
  1732. (see dorest() / STRICT_REST) . Thanks to _PinG_ <ping at enjoy-unix.org> for
  1733. reporting that kludge.
  1734. Syslog identity changed to "pure-ftpd".
  1735. Added noopidle (time_t of the first NOOP) and idletime_noop (maximum
  1736. idle time with nothing but NOOP from the client) . idletime_noop defaults to
  1737. 1.5 * idletime.
  1738. Shortened the default idle time to 900 seconds.
  1739. Idle time is now in minutes if >= 120 sec.
  1740. * Version 0.91 :
  1741. Updated credits.
  1742. Use TCP_CORK.
  1743. Explicit super-server requirement notification.
  1744. Changed daemons() prototype to accept a port number to look for.
  1745. ftpd.c and mrtginfo.c were updated to reflect the change. Global
  1746. server_port now stores the real port the connection socket was bound to.
  1747. Updated man pages.
  1748. * Version 0.90 :
  1749. Initial release.