Ralph Boehme [Fri, 23 Nov 2012 09:23:27 +0000 (10:23 +0100)]
Remove lenght limitation of options like "valid users"
The options "valid users", "rolist" and others use the function
accessvol() for parsing the options string. accessfull uses
a static buffer limited to MAXPATHLEN which limits the maximum
length of these options.
Ralph Boehme [Fri, 23 Nov 2012 07:15:51 +0000 (08:15 +0100)]
"valid users" options and friends only use ',' as field delimiter
Netatalk 3 uses ',' and ' ' as field delimiter in the "valid users",
"invalid users", "rolist" and "rwlist" option for consistency with
other options that also allow the use of ' ' as field delimiter.
But as user and groupnames may contain spaces, we need to revert
to the Netatalk 2 behaviour where only ',' was used as delimiter.
Frank Lahm [Fri, 9 Nov 2012 11:48:53 +0000 (12:48 +0100)]
Fix pathname bug for FCE modified event
It's not guaranteed that cwd is the forks parent directory, thus
we can't use the fullpathname(forkname) wrapper.
Instead we use the DID stored in the ofork structure to dirlookup
the directory and use it's fullpath together with the fork's name.
Frank Lahm [Thu, 22 Nov 2012 08:58:02 +0000 (09:58 +0100)]
Use sigaction() instead of signal() for ignoring SIGPIPE
Move the code to ignore SIGPIPE from the DSI sesssion setup stage
to the main signal handling code in main() and avoid the use
of deprecated signal() function and use sigaction.
Frank Lahm [Sat, 17 Nov 2012 11:30:18 +0000 (12:30 +0100)]
Fix a bug where copying packages to a Netatalk share fails
The bug was caused by the 10.6 client trying to set the creation
date on a symlink in the package. This caused our setmetadata
routine to require a valid adouble handle for the symlink which is
not possible as symlink may not allow creating an EA, depending
on the filesystem. At least ZFS on Solaris doesnt.
The fix is to check whether the adouble handle creation failed
on a symlink and ignore the error.
Frank Lahm [Sat, 17 Nov 2012 13:14:17 +0000 (14:14 +0100)]
Always generate all initscripts
initscripts are now all created with variable substitution from
the templates, but they're not installed. Installation happens
only if the configure arg for the platform is used.
This should help packagers picking up an initscript for a package.
Frank Lahm [Fri, 9 Nov 2012 10:53:24 +0000 (11:53 +0100)]
FCE API change and cleanup
Change the FCE API by using a single function (fce_register()) as
a single point for callers to register events.
Remove all individual event functions.
Add types for events and file/directoy flag.
Use standard bool type instead of special defines FCE_TRUE/FALSE.
Frank Lahm [Tue, 9 Oct 2012 16:23:57 +0000 (18:23 +0200)]
Fix a bug where Mac OS X ZIP archives can't be extracted on Netatalk shares
Mac OS X ZIP archives may contain split AppleDouble forks named "._XXX".
The client needs to be able to fully access these files but we currently
prevent access to any valid AppleDouble file whose name starts with "._".
In order to distinguish our own ._ files from the one created by OS X,
we look at the filler bytes: luckily OS X stores a string "Mac OS X" there
which can be used to detect them.
Frank Lahm [Thu, 11 Oct 2012 11:02:55 +0000 (13:02 +0200)]
Fix check for nested and duplicated volume paths
The previous modification was based on ensuring the volume paths are
'/' terminated. That allowed for a simple and quick implementation of
the neccessary tests. Unfortunately that completely broke the whole
directory machinery and cache.
This patch reverts the previous change and tries another simple
implementation that avoid copying the paths.
Frank Lahm [Wed, 10 Oct 2012 13:34:34 +0000 (15:34 +0200)]
Ensure the volume path is '/' terminated and allow nested volumes
The previos change to the way checking for duplicate and nested paths only
works if the path is terminated with a '/'.
Allow nested volumes. This was working in 2.2 and can be used eg for sharing
a ZFS snapshot directory of a volume. Afaict it only works with sane AFP
semantics by adding 'cnid sheme = tdb' to the nested volume which also
makes it read-only and by adding the name of the nested directory to
the veto name list.
Frank Lahm [Wed, 10 Oct 2012 11:51:34 +0000 (13:51 +0200)]
Remove unneccessary call to getcwd()
getcwd() was called after a chdir(vol->v_path) in order to copy
the path to vol->v_path. But as v_path is now already set in netatalk_conf.c
when parsing the volumes config, this is not neccessary anymore.
Frank Lahm [Thu, 23 Aug 2012 10:20:00 +0000 (12:20 +0200)]
Fix data corruption bug
Received data from the client was written to the read-ahead buffer
from dsi_peek() which caused data corrution.
Fix is: change the DSI command buffer from static 8192 bytes to
an allocated buffer of size DSI quantum and use this buffer in
dsi_write/write_fork. That just requires dsi_writeinit to use
memmove instead of memcpy, because now we use the same buffer.
The bug is caused by passing ADFLAGS_NOHF to ad_open() when opening a
files data fork. For files without metadata then ad_open() doesn't
return an error for the ADFLAGS_HF request to open the metadata. As a
result of the successfull ad_open return AFPFORK_META is set in the
fork struct, which implies the meta is open. Later afp_close looked at
that flag and added ADFLAGS_HF to ad_close flags, resulting in a
refcount decement of 2 although the ad_open only incremented by 1. Eg
opening such a file twice, then closing once, close the fork. Later
operations on the other still open fork fail.
afp_openfork opens the fork and metadata in one call to ad_open which
lead to an insane if/else and error checking code path. I've
seperated this in two distincs calls to ad_open(): the first opens the
fork (data or ressource), the second opens the metadata. This gives a
cleaner code path but it required a subtle modifications to the way we
refcount and flag forks as open inside ad_open: currently we use the
fd and it's recount but these do not differente between open data and
metadata in the case of adouble:ea as both use the data fork handle,
fd and it's refcount. Now we add real refcounting for the forks
different from the recount on the file fd by adding three refcounting
variables to struct.adouble and change the AD_XXX_OPEN macros to use
these.
Frank Lahm [Fri, 3 Aug 2012 06:01:07 +0000 (08:01 +0200)]
sendfile on Solaris may return EINTR with bytes written https://issues.apache.org/bugzilla/show_bug.cgi?id=44550 http://wesunsolve.net/bugid/id/6408517
Frank Lahm [Fri, 27 Jul 2012 10:01:35 +0000 (12:01 +0200)]
Reset signal handlers and alarm timer after successfull PAM authentication
Fixes a problem with AFP disconnects caused by pam_smbpass.so messing with
our handlers and timer.
Thomas Johnson [Sun, 15 Jul 2012 15:55:20 +0000 (17:55 +0200)]
LDAP: Support for Active Directory objectGUID
Adds optional "ldap uuid encoding = string | ms-guid" parameter to afp.conf,
allowing for usage of the binary objectGUID fields from Active Directory.
If left unspecified, "string" is the default, which passes through the ASCII
UUID returned by most other LDAP stores. If set to ms-guid, the internal UUID
representation is converted to and from the binary format used in the
objectGUID attribute found on objects in Active Directory when interacting
with the server.
Frank Lahm [Wed, 20 Jun 2012 13:33:26 +0000 (15:33 +0200)]
Fix signal blocking, pthread_sigmask was called before mask initialisation. Also block all sigs instead of only SIGTERM (think I saw SIGHUP somewhere).