## IN PROGRESS ##

- use 'rats','splint', 'pscan' for security audit

'********'
- feature: warn if protocol is not recognized (wzd_events.c)
'********'
- cleanup code:
    - remove hook_call_custom() and related functions (wzd_mod.c) / OK
    - hook_call_external() is used only in crontab ?!
    - replace hook_add with event_connect in modules Perl and TCL / OK
'********'
- support ipv6 addresses enclosed in [] (RFC2732)
- support CIDR notations
'********'
- convert dir_open and others to process one file at a time (to reduce memory usage
  and allow stream processing in do_mlsd)
'********'
- recode site backend
'********'
- add the sockaddr* structs for local and remote part to the context
- use this structs to guess the data port (and ip ?)
'********'
- write unit tests for dirs/files access
- add function to recurse directories / vfs / ... and apply function, like
  chmod
'********'
- add options to
    - disable TLS / OK
    - disable ident lookups / OK
    - disable colors when logging
    - disable timestamps
    - set log level in command args
'********'
- add config file parser
    - function config_to_data() / OK
    - write functions / OK
    - functions to parse values / OK
    - remove functions / OK
    - multi-lines ?
'********'
- redhat/wzdftpd.spec: replace -mcpu= by -march=
'********'
- find a way to uninstall libwzd-perl
'********'
- provide a socket registration interface to have ~ servers
'********'
- change 257 reply to allow customization, and force valid FTP reply
'********'
- override internal site commands (wipe, etc)
'********'
- threads management:
  better use thread_id instead of pid_child in displays, etc.
'********'
- modules: activate/desactivate module, remove from list
'********'
- siteconfig: get bw, etc. change stats, mkdir open, etc.
'********'
- remove limit on msg
'********'
- announce:
Tue Sep 10 12:28:49 2002 SFV: "/path/to/rlz/" "Got SFV for rlz_name. Expecting 50."
Tue Sep 10 12:31:48 2002 UPDATE: "/path/to/rlz/" "kakao was the first to upload file in rlz_name. Expecting 715.3 mB."
Tue Sep 10 12:49:57 2002 HALFWAY: "/path/to/rlz/" "rlz_name is in halfway. Leading uploader is kakao/pubbers [357.6M/25F/100%/76KB/s]. Leading group is pubbers [357.6M/25F/100%/76KB/s]."
Tue Sep 10 15:23:48 2002 COMPLETE: "/path/to/rlz/" "rlz_name [711mB in 50F at 69kB/s - 22h 54m 57s] was completed by 1 racer(s) from (1) group(s). Compression method: m5. Slowest upload by kakao/pubbers at 58KB/s. Fastest upload by kakao/pubbers at 89KB/s."
'********'
- finish 'PRET' command implementation
'********'
- sfv checker:
  verify zip integrity / OK
  extract .diz info / OK
  if no .diz present in dir, extract .diz from zip
  add nfo to zip
'********'
- v_format_message (wzd_misc.c): replace 220-first line ... 220 last line with
  220- ... 220 command ok (easier !)
'********'
- commit backend iff it was modified
'********'
- permissions: siteop always have all perms on files (wzd_perm.c) / OK
  and gadmins on their group files
'********'
- finish cache implementation
'********'
- To Be Documented :
  -- if root run server, must use server_uid + chown users, user.OLD to
     server_uid
'********'
- ratio: weekly allotment
  -- modify crontab to accept dates (each day/week/month at specified time) / OK
'********'
- give back slots to GAdmins if deleting user
  -- need to store info on who created user
'********'
- implement recursive chown/chmod
- allow users to chmod/chown/chgrp their own files if owner
'********'
- implement group flags
'********'
- hide files should be configurable: hide = .* recycler recycled *ioftpd*
'********'


'********'
current objectives:

* ratios
* dupecheck
* quotas

'********'

- display correct permissions on ls

- option to disable timestamps in log
- recursive directory listing (LIST -R)
- rewrite fct do_mkdir
- SFV: trap EVENT_DELETE, and re-create .missing if file from sfv is deleted ?? (not sure it is a good idea ...)
- SFV: site rescan
- per dir global permissions (to pass over rootpath)
- use options in ls
- modify checkpath to return 0 if ok and file exists, -1 if !ok, 1 if file does not
  exist but path was converted
- bandwidth limit: add global limit / group limit
- perms: implement permissions on global commands like delete, mkdir, site ...
  these perms will complete per-user rights
  3 modes of perms: user/group/flag
- user/group: ALWAYS create a special user nobody and special group nogroup
- modify acls to accept groupnames (instead of users), or wildcards (*)


## PRIORITY ##

- when CWD to a symlink, change CWD to _real_ destination (if inside ftproot)
- Sub-vfs work, but need to put the physical path after the first node
  e.g:
   vfs = |/home/pollux/mp3|/cygdrive/e/sons/mp3|
   vfs = |/cygdrive/e/sons/mp3/pouet|/cygdrive/d/adobe|
- more cookies
- anti-hammering: per ip/user, ban time
- special flag to start server and connect to existing shm without
  creating/blanking it (goal: replace exe instance by another on the fly)
- add option to SITE SHUTDOWN, to kick (or not) users
- possibility to regroup txt files in 1
- hooks for events (on_file_upload, etc)
- external hooks for events (call external programs)
- ACL: ascendant recursion for permissions ? need to check if >= rootpath !
- bandwith limitations: global / group / user
    + possibility of relatives restrictions: 75g == 75 % of the group limit (for 1 user)
- implement permissions
- finish implementation of ssl: explicit, port, data protection, buffer size
- give choice between hard/soft chroot
- option to enable/disable FXP to certain users
- XCRC/XMD5 command
 -> implement calc_md5 with pre-computed MD5


## NORMAL ##

- special files auto-deleted after download, possibility to reserve
  for one user only
- multiple binds / restricted binds: bind to only specified ip(s)
- change / add / remove vfs with site commands
- global config flag to close server except for users having this flag
- message system for users: site msg and/or inline messages
- add random in PASV port choose, to avoid always using the same
    will be REALLY usefull if we use fork()
_ possibility to link a backend statically (instead of dll)
- option : check certificate
- option : check CA for certificate
- option : check certificate only at login (not at port/pasv)
- reward mechanism for top ten winners (credits/slots/...)
- support ident on different port per user
- find out what's wrong with CLONEf_CLONE_HOST for perl 5.6 (perl module)

## I'LL THINK ABOUT IT ##

- mount several dir in one (only for download)
- rolling range of ips, with change date:
   e.g during one week use ip 1, then 1 week ip 2, etc.
- statistics
- quota per user/group
- ratio: per user/group, credit (time to re-add ?)
- add size limit for directories
- dupe checker
- default backend hard-coded ?
- per-dir special permissions (glftpd like)
