desired features (in no particular order):
via a database (that handles ro media, -db <path>):
Add afp_fileid capabilities - done
cname expansion to handle 8+3 and 255-unicode.
server messages in useful places
Other useful bits of AFP 2.0/2.1. are there any?
change afp/ddp child handling to be in line w/ generic?
administrative control program (using asip API?)
redo uams as dynamically loaded libraries.
appledouble v2 (gets us persistent DIDs). we'll need a did
database for non-hfs volumes. i think mmapping a
bitmap with dids at the root level should work.
also, v2 gets us much better prodos support and
provides for shortname support. shortname support can
be dealt with via symlinks to !<name> files.
variable substitutions where appropriate. expanded afpd.conf
various toggles to afpd.conf (-timeout, etc.)
separate appletalk from tcp/ip stuff more.
figure out more ways of optimizing things. current places
1) reading/writing. currently there's character
replacement. we should have a better way of doing
it that speeds things up the no-replacement case.
i've already done that for the crlf case.
2) use of mmap where appropriate. NOTE: this will only
be a win if we mmap heavily used files. likely
candidates include file-based databases.
3) change lookup algorithms where appropriate.
ability to interact with hfs desktop databases (either by
changing hfs or changing afpd).
add one more level of indirection via <atalk_dir>/etc/netatalk_key
and use that so that ~/.passwd isn't readable?
have a means of turning off .AppleDouble generation and depend upon
file mapping and such for these files? done
atalkd: it would be great if we had two capabilities --
1) zones on single interfaces -- DONE!
2) ability to control which interfaces get routes between
papd: implementing uams would be a good idea
things to fix:
cleaner separation of layers.
fcntl-style byte locks. currently, opening the same file
multiple times within the same process will get
trounced. in addition, we need byte locks for correct
Trash Can usage. i think this is solvable by keeping
around a mapping of locks -> fds -> files through an
expanded adouble. here's the strategy:
of_findname to get any existing forks.
call ad_open with existing ad file
attach that ad to a list of "same name" ad's
all locks on "same name" list get checked
on ad_close, reset locks for all the other ones.
(we can optimize this a little by coalescing
all of the whole file locks)
we need to serialize the byte locks. to do that,
i'll probably use /var/lock or the equivalent to
store a temporary whole file lock.
AFP <-> Unix permissions. there are a couple cases where they
don't map perfectly. in particular, gid == 0 means
ignore group permissions while uid == 0 means anybody
can fiddle with this file. in addition, we need to be
able to still change permissions on a directory with u-a
real variable DIDs for now: it turns out that afpd lies about
this and says that it's doing fixed dids. bad bad
bad. i just have to implement Open/CloseDir and fiddle
a little with did assignment. argh. apple's appleshare
client doesn't like non-fixed directory ids.
more of AFP 2.0!
sped up of_findname and of_dealloc.
increased AFP compliance w.r.t. open forks and renames:
wordperfect and simpletext now both work!
nfs quota support
solaris beta STREAMS driver added.
added debug messages to dsi_write areas.
fixed server info unexpected disconnects (due to OT bug).
afp/ddp and afp/tcp cohabitation. afp/ddp and afp/tcp can
operate separately now (-T turns off tcp, -D turns off ddp).
incorporated the netbsd patches
[source: firstname.lastname@example.org (Bill Studenmund)]
added/fixed quota support for linux/bsd4.4
codepage support/casefolding on a per volume basis.
expanded per-volume options