Evan Broder [Wed, 25 Mar 2009 23:18:09 +0000 (18:18 -0500)]
Allow passing in human-readable units for specifying amounts of space
Add a util_GetHumanInt32 function for parsing numbers human-readable
units using single-character, uppercase suffixes for indicating orders
of magnitude (e.g. 'M', 'G').
Use this function to parse human readable values for all arguments
that previously accepted a value in kilobytes: fs setquota, fs
setcachesize, vos setfields, and vos create.
Ensure PAM modules are built PIC and pthread-aware where needed
Link the PAM modules against libafsauthent_pic and libafsrpc_pic instead
of the large collection of LWP AFS libraries so that they are always
built PIC, even on platforms that don't normally build everything PIC.
This also uses the pthread-aware version of the AFS routines on platforms
that support it, avoiding conflict problems between LWP in PAM modules
and pthread in a calling application.
Build a separate copy of ktc.krb.o in the pam directory for pam_afs.krb
since there is no AFS_KERBEROS_ENV-aware version of libafsauthent.
Enable the PAM module build by default on x86_64-linux now that it's
properly built PIC and can compile.
Stop ignoring build failures in the PAM modules if they're configured to
build. On platforms where they should not be built, they should be
excluded in acinclude.m4.
ktc_curpag isn't specific to a Kerberos v4 environment, so move it outside
the AFS_KERBEROS_ENV #ifdef. Add it to the auth.h header and to the
exports from the shared libafsauthent.
Add strlcat and strlcpy to libafsauthent and libafsrpc
Other functions included in libafsauthent and libafsrpc are using strlcpy
and strlcat, so include those objects in the libraries so that they stay
self-contained.
strlcat and strlcpy shouldn't be part of the public API for the libraries,
for various reasons including the fact that they're not built on all
platforms. Therefore, don't add the functions to the library exports and
include them separately in each library.
Marc Dionne [Mon, 13 Jul 2009 02:03:36 +0000 (22:03 -0400)]
Linux build: properly install built kernel module
Fix a problem introduced by the recent parallel make patches - the
resulting kernel module was not getting copied to the install or
dest location.
Copy some of the code from the COMPDIRS target for INSTDIRS and
DESTDIRS. We still have to call into the lower level make and have it
install the module.
Simon Wilkinson [Fri, 10 Jul 2009 17:14:21 +0000 (18:14 +0100)]
Tidy up the rx directory
Give functions that need them return values
Add prototyping for server_proc and rx_ts_tinfo_init
Make debug functions only build when RXDEBUG is enabled
Simon Wilkinson [Sat, 11 Jul 2009 17:07:20 +0000 (18:07 +0100)]
Remove vlclient.h
The vlcient.h header file just provides definitions for functions that
are now protoyped elsewhere by rxgen. It is only referenced by
vlclient.c which was already including the rxgen header. So, nuke
vlcient.h, and references to it.
Marc Dionne [Sat, 11 Jul 2009 22:18:08 +0000 (18:18 -0400)]
Parallel make: additional fixes
Testing turned up a few more errors with parallel builds:
- Linux: Apply a similar fix for "make dest" to the one in the previous
patch for "make install". Avoid conflict between DESTDIRS and COMPDIRS,
which also prevents unneeded duplicate work.
- Fix a couple of cases where we have 2 targets in a single rule with a
command that generates both of them. Two parallel jobs can run this
command at the same time, with missing or corrrupted files as a result.
The workaround: make one of the targets build the files, and make the
second target depend on the other one.
Simon Wilkinson [Sat, 11 Jul 2009 13:37:37 +0000 (14:37 +0100)]
Make lwp.h always provide fasttime prototypes
The fasttime functions are used regardles of whether we're using
pthreads or LWP. Previously, lwp.h only provided their prototypes
if LWP was in use. Change this so these prototypes are always provided,
by refactoring the header a little. In the process, remove some
duplicate header includes.
Marc Dionne [Tue, 7 Jul 2009 00:41:25 +0000 (20:41 -0400)]
Parallel make fixes
Fixes several problems with parallel makes in the current source:
- Add '+' prefix to many top-level Makefile commands. This informs make that
the following command should be treated as a sub-make and propagates the -jN
flag.
- Add a few missing dependencies
- Tweak some Makefiles that work with generated header files to prevent cases
where we attempt to use the file while it's being generated
- For the Linux kernel build, eliminate duplicated effort between COMPDIRS
and INSTDIRS, which also prevents conflict between the two in a
parallel situation.
Simon Wilkinson [Fri, 10 Jul 2009 23:41:02 +0000 (00:41 +0100)]
Rename printf cast helpers and clean up format string warnings
Some confusion had ensued about the usage of our printf cast helper
functions. Rename these to attempt to allay that confusion, and restore
the functions themselves to their original definitions.
Essentially, afs_printable_int32_ld() and friends are helpers to go
from afs specifc types to things that can be emitted by printf without
causing compiler warnings.
Also clean up some additional warnings from type mismatches between
escapes in printf format strings and the variables being printed.
Simon Wilkinson [Fri, 10 Jul 2009 23:07:37 +0000 (00:07 +0100)]
Warning cleanup for the libadmin directory
Where we can, include headers from the include directory
Resolve a load of const char* /char * issues
Mark some Windows only variables as such
Fix prototypes
Simon Wilkinson [Fri, 10 Jul 2009 21:27:30 +0000 (22:27 +0100)]
Export budb_prototypes.h
Other modules need prototypes from the budb directory, so we need
to export this header. However it contains lots of internal functions.
So, split the header into budb_prototypes.h and budb_internal.h, and
reference the internal.h header locally.
src/util/netutils.c must include rx/rx.h in order to avoid
warnings due to the lack of prototypes for rx functions.
src/rx depends on src/util being built in order to properly
compile. Add a rx_headers build rule to the top level
NTMakefile to permit rx headers to be installed before
src/util is built.
Simon Wilkinson [Fri, 10 Jul 2009 12:52:16 +0000 (13:52 +0100)]
Roughly prototype the kauth directory
A first pass at prototyping and warning reduction for the kauth
directory. kauth is plagued by the des key type problems, and
no attempt to remedy this has been made. Some other complex
warnings remain - it didn't seem worth the effort to do this
in too much detail, as it's dying soon.
Simon Wilkinson [Fri, 10 Jul 2009 17:33:38 +0000 (18:33 +0100)]
Rework bucoord prototypes for external dlq use
Rework prototyping in the bucoord directory so that bucoord_prototypes.h
can be used by others who need definitions of the dlq_* types.
Add additional prototyping and header includes so these types work correctly
No Windows specific changes are required, as the NTMakefile doesn't have
header dependencies
Simon Wilkinson [Fri, 10 Jul 2009 11:54:10 +0000 (12:54 +0100)]
Prototyping for the volser directory
Prototyping and warning message reduction for the volser directory.
Adds physio.h and dumpstuff.h as internal header files,
Many error code variables are changed from being afs_int32, to the
'Error' typedef, to remove signed comparison errors.
Simon Wilkinson [Fri, 10 Jul 2009 12:40:56 +0000 (13:40 +0100)]
Remove pr_PrintEntry from public headers
pr_PrintEntry isn't used outside of the ptserver directory, and requires
struct prentry, which is defined internally, so remove it from ptuser.h,
and create a new internal header to hold it.
Also, tidy up some type mismatch warnings by making static strings const
char *
The Windows Makefiles provide macros for various commands.
The MKDIR macro is current assigned to mkdir which causes
the cygwin/msys mkdir.exe commands to be used instead of
the cmd.exe built-in command. Change this to use "md" instead
so that the built-in will be used by default.
In addition, permit the macros to be overridden by the top
level NTMakefile or the environment.
The HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon
"PerFileAccessCheck" registry value (DWORD) is intended for
use only by developers who wish to test how Windows would
behave if a per-file access rights check was performed.
Windows performs all access rights checks using the directory
access rights. There is no support for the VL_DFSFILESET flag.
During CreateFile() processing the requested access rights are
checked against the access rights reported by the file server
for the directory. If the reported rights are more permissive than
the effective access rights for the file, Windows applications
(including the Explorer Shell) will behave quite poorly. In other
words, if the request is for write privilege and the CreateFile()
successfully opens the file with write privilege, subsequently
reporting an access denied on a WriteFile() call will result in
very poor behavior.
The addition of this option is simply to make it easier on
developers to test various prototype solutions for adding per-file
access rights.
Simon Wilkinson [Fri, 10 Jul 2009 10:58:44 +0000 (11:58 +0100)]
Tidy the vol directory
- Remove some further warnings from the vol directory
- Add volutil_PartitionName2_r to afsutil_prototypes.h
- Export vol_prototypes.h so it can be used elsewhere in the tree
Always use kbuild for all Linux kernel configure probes
Some Linux kernel probes for the existence of header files were done
with file existence checks (test -f). This breaks if the kernel build
system is stacking multiple directories of headers together with
compile-time -I include path options, as is the case for the current
Debian Linux header packages. Instead, always use kbuild to check
whether a kernel header is available.
Similarly, use AC_TRY_KBUILD instead of AC_TRY_COMPILE when checking
for an SELinux kernel, since AC_TRY_COMPILE doesn't call into kbuild
and won't get the correct kernel header paths.
This is part of the fix for Debian Bug#521745 and has been included in
the Debian package since 1.4.10+dfsg1-1.
The current kernel module build infrastructure relies on the ability to
create symlinks from known directory names used in the AFS code to the
actual locations of the kernel header files. This breaks if there is no
single kernel header tree and instead multiple trees are layered together
by kbuild using compile-time -I include paths.
Attempt to detect this case by seeing if linux/types.h is in the kernel
header directory where we expect it. If not, rather than creating
symlinks for h, sys, and netinet, create directories and populate them
with single-line headers that just include the corresponding linux/*.h
header. The list of headers for which to do this is generated dynamically
by analyzing the AFS kernel source code and looking for relevant #include
directives.
This patch has been part of the Debian OpenAFS package since
1.4.10+dfsg1-1. The check for whether we have layered kernel header trees
may be specific to Debian and may require modification later if other
Linux distributions do something similar.
Simon Wilkinson [Thu, 9 Jul 2009 14:08:32 +0000 (15:08 +0100)]
Remove the RCSID macro
The move to git means that we can no longer populate the RCSID
macro in the way that it was used with CVS. This patch simply
removes the macro from every file, except where it contains
information from upstream (and it's in a comment).
Build and install PIC versions of libafsrpc and libafsauthent
To include AFS code in loadable modules such as PAM modules, NSS modules,
or Perl/Python/PHP/Ruby extensions, it needs to be built PIC or one must
link with the AFS shared libraries. Since we haven't historically been
that great about maintaining the shared library ABI, it's nice to have
static libraries built with PIC code that can be linked into such modules.
Based on a patch by Garrett Wollman updated with the build system changes
that happened after 1.4.
Make shlib makefiles have clean rules for PIC libraries.
Make RedHat specfile know how to deal with PIC libraries.
Search for the Linux version in the correct header
src/config/linux-version already had support for handling either versioned
or unversioned kernel source directories, but the grep for UTS_RELEASE
was unconditionally done against the versioned source tree, ignoring the
previous determination of where the header file was.
Instead, check instead the header file location that we'd previously
determined.
This patch has been tested in the Debian OpenAFS 1.4.11~pre3+dfsg-1
package.
Simon Wilkinson [Mon, 6 Jul 2009 13:38:42 +0000 (14:38 +0100)]
Revise git ignore files
Revise our git ignores to match the current state of the tree, and include
entires in the top level for all of the 'dest' directories for all of the
architectures we claim to support.
Reviewed-on: http://gerrit.openafs.org/2 Reviewed-by: Derrick Brashear <shadow@gmail.com> Verified-by: Simon Wilkinson <sxw@inf.ed.ac.uk>
when performing offline volume checks, do so in most recently used order
if the system is entering suspend state, short circuit the background
daemon operations to avoid extra work that is going to fail when the
network is shutdown behind the back of the service.
rework all linux vnode ops so the vulnerability we previously had can't
recur later just because someone makes a change that would leak a negative
error
On Windows there is no chown or chgrp command that can be used to
change the owner or group of an object in AFS. Therefore we
add them to the fs command.
Usage: fs chown -owner <user name or id> [-path <dir/file path>+] [-literal] [-help]
Where: -literal literal evaluation of mountpoints and symlinks
Usage: fs chgrp -group <user/group name or id> [-path <dir/file path>+] [-literal] [-help]
Where: -literal literal evaluation of mountpoints and symlinks
Add a debug log warning if the target volume is a DFS File Set.
If so, the client will not properly protect against information
leakage or properly deal with directory name caching, symlinks,
and other behavioral differences between AFS and DFS.
Fix issue reported by Marc Dionne. RXAFS_FetchData and RXAFS_StoreData
return access denied errors that are not reported by the subsequent
call to rx_EndCall which should be preferred.
cm_Link() is used to create hard links. It did not apply the updated
link target status info to the target cm_scache_t object. As a result
the linkCount would be incorrect.
cm_Unlink() did not take linkCount into account. It did not reduce the
locally known linkCount, nor did it invalidate any currently known
callback. As a result the linkCount would be incorrect.
Properly handle callbacks from multi-homed file servers.
Comparing cm_server_t pointers is insufficient. For a multi-homed
server there will be multiple entries. The UUID for all of the
equivalent entries will be the same. What matters is not that
the pointers are the same but whether in the case of UUID labeled
servers that the UUIDs match.
Readonly volume callbacks apply to every cm_scache_t from the
same volume. We were already tracking the cbExpires time in
the cm_volume_t. We need to also track the cbServerp in the
cm_volume_t so that the cm_scache_t objects can be assigned
the correct server from which the callback was issued.
Add cbServerpRO field to the cm_volume_t. Bump the memory
map version to force a rebuild of the cache data.
call inode's setattr op instead of just inode_setattr, when one is available.
needed for xfs, notably also will cause truncates to be journalled for ext3,
which may solve some existing issues
The CellServDB processing in auth/cellconfig and WINNT/afsd/cm_config
differ in one important way. cellconfig uses the IP addresses specified
in the CellServDB file and ignores the host name; whereas cm_config
calls gethostbyname() on the host name and falls back to the specified
address only if gethostbyname() fails.
This commit modifies cellconfig to use gethostbyname() calls on the
host names when the client CellServDB file is being used. The server
CellServDB file is left alone because ubik servers need to be given
the exact list of ip addresses specified by the administrator and
there is no method of indicating clones to other servers using DNS.
This change permits a greater resilency to cell server configuration
changes due to IP address renumbering as the DNS names in the CellServDB
file can be CNAME or A records.
A host name can be resolved to multiple IP addresses and all of the
addresses will be added to the hostAddr list for the cell provided
that they do not exceed the maximum number of hosts. If the same
host name is listed multiple times the duplicate IP addresses will
be ignored.
The behavior of all tools that use CellServDB files on Windows will now
be consistent.
When processing RX_CALL_TIMEOUT, if there is no fid specified its a vldb
rpc and we should retry. If there is a fid and the volume is a readonly
volume then we should also retry. Only fail if the request has no alternate
server to look at.
When processing RX_CALL_DEAD, log the fact that the call is dead.
When processing any other RX error between -2 and -64, do not force
a new connection to the same server. Mark the server down and retry
with a new server if possible.
When inserting a new vldb server, if the rank is 0 (unknown), do not
override the default rank assigned by cm_NewServer(). Doing so erases
the randomized ranking.