Simon Wilkinson [Wed, 22 Jul 2009 00:11:15 +0000 (01:11 +0100)]
Rename installed version of compile_et
Rename the installed version of compile_et to afs_compile_et to avoid
conflicts with other, more standard, users of com_err. Also rename the
man page to match
Matt Benjamin [Tue, 21 Jul 2009 21:07:36 +0000 (17:07 -0400)]
Refactor OpenBSD param files into common and architecture-specific
sections.
The new structure follows the pattern of the NetBSD param files, as
suggested by Derrick. Since the change is retroactive, it seems
reasonable to also make the retroactive change to add the amd64 param
files, back to OpenBSD 3.6. OpenBSD 3.6 added SMP support for x86_64,
so the architecture was a mature subtarget at that point.
rxinfo's code to print out the principal corresponding to an rx_call uses
static arrays for the principal components but was checking that the array
pointer was non-NULL when deciding whether to print principal components.
Instead check whether each portion of the principal is the empty string.
Add explicit initializations of the static buffers to the empty string so
that we're not relying on rxkad_GetServerInfo always initializing them for
us.
This patch changes the common error reporting type from CE_PANIC
to CE_WARN and adds appropriate cleanup processing so that we do not
leak resources if an error occurs.
Simon Wilkinson [Wed, 22 Jul 2009 21:07:32 +0000 (22:07 +0100)]
Squish more warnings in xstat
Use a correct prototype for a_ProbeHandler in xstat_cm_Init
Fix a printf warning
rx_getAllAddr and afs_cb_interface.addr disagree on the sign of addresses
afs_interface.addr is a [], which we then use & to get the address of. Fix
this to stop the compiler from sulking.
Simon Wilkinson [Wed, 22 Jul 2009 21:40:13 +0000 (22:40 +0100)]
Do not call principal_ntoh to copy ktc_principal structs
principal_ntoh() is designed for butc_principal structures, which are a
different size from ktc_principal structures, and so it can't be used to
copy them.
This implements rx_GetLocalPeers(), which exposes peer statistics
that are currently collected to the cache manager. This function
will later be used to rank both the file server and vldb server
lists using the statistics exposed by rx_GetLocalPeers().
osi_pag_module.c should not be built conditionally based on whether the
NFS translator is enabled. This file is used by afspag.ko, which is run
on NFS translator clients, not servers, and should not have GPL symbol
problems.
Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/179 Reviewed-by: Derrick Brashear <shadow@dementia.org> Tested-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com>
Felix Frank [Thu, 2 Jul 2009 06:55:47 +0000 (08:55 +0200)]
Unite CacheStoreProcs and add abstraction calls.
The cache type specific differencies among afs_MemCacheStoreProc
and afs_UFSCacheStoreProc are divided into two sets of "storeOps".
Upon rxfs_storeInit, the appropriate set is chosen.
FIXME: Simon suggests that there should be a single set of storeOps,
as the main difference lies in what rx_ calls must be made.
This decision would then be made by calling a wrapper function from
each storeOp. These wrappers should be cachetype-specific and protocol-
independent. They would be associated to struct afs_cacheOps.
Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/107 Tested-by: Russ Allbery <rra@stanford.edu> Reviewed-by: Russ Allbery <rra@stanford.edu>
Simon Wilkinson [Tue, 21 Jul 2009 19:16:51 +0000 (20:16 +0100)]
Further prototyping and cleanup of UKERNEL
This patch continues to reduce the number of warnings that come from
a UKERNEL build. It also replaces the use of a system provided suser()
call (which isn't available everywhere), with afs_suser that's provided
by UKERNEL. Note that this makes UKERNEL applications usable by
everyone, not just root.
fork_syscall() becomes a normal function
call_syscall() is ANSIfied
UKERNEL/osi_groups.c gets the includes it needs
UKERNEL/osi_machdep.c stops thinking it's on Solaris
UKERNEL/osi_vnodeops.c stops confusing vnodes and vcaches
Normally pattern matching against volume names is done on the server, but
if this fails, the client (src/bucoord/commands.c) is doing this.
This program had no code to use regex(3) when HAVE_POSIX_REGEX is defined.
This patch adds calls to regex(3) if HAVE_POSIX_REGEX is defined.
For systems without POSIX regex there were two (slightly different)
implementations in src/bucoord/regex.c and src/util/regex.c. The newer
version src/bucoord/regex.c has been modified and moved to src/util/regex.c.
Some header files and Makefiles have been removed/updated to work with this
setup.
Marc Dionne [Tue, 21 Jul 2009 22:16:45 +0000 (18:16 -0400)]
Build fixes: prevent unnecessary rebuilding
Fixes to a few Makefiles to prevent needless rebuilding when using make
after a successful build.
Rework dependencies in src/bubasics to prevent needless rebuilding and
fix some remaining parallel build issues. Multiple targets really
have to be avoided.
Remove dependency on the include/afs directory from the src/config Makefile.
Depending on a directory means that we will rebuild the target if the
timestamp changes, for instance if other files or sub-directories are
installed. This caused param.h to get re-installed in some cases and
the kernel module source files to be recompiled. This directory is
created in the top-level Makefile anyway so we shouldn't need an
explicit dependency.
the function rx_ReadProc32 (src/rx/rx_rdwr.c) checks the pointer
call->currentPacket before the function rxi_FreePacket is called. This
test was missing in the function rx_ReadProc.
Matt Benjamin [Sat, 18 Jul 2009 13:29:20 +0000 (09:29 -0400)]
Add amd64 subtarget for OpenBSD
The subtarget name is amd64_obsd. A sysname is created for the
OpenBSD 4.5 release, since it's current. The sysname id range starting at
4000 is claimed for amd64_obsd, with amd64_obsd45 at 4014, so that prior
releases can be added in the correct order, if needed.
Mention of Jim Rees and CITI in new param file changed to line crediting
them for original work.
Andrew Deason [Wed, 15 Jul 2009 14:54:32 +0000 (09:54 -0500)]
Correct ctime arguments
Corrects a few places throughout the tree where ctime() is incorrectly passed a
pointer to an afs_uint32 or similar fixed-width datatype, instead of a pointer
to a time_t.
Simon Wilkinson [Tue, 21 Jul 2009 10:58:47 +0000 (11:58 +0100)]
Make DRelease take an anonymous pointer
DRelease is used to free data blocks returned by the dir package. These
can be any of a number of different types, which we were previously
dealing with by casting everything to (struct buffer *) before calling
DRelease.
Instead, make DRelease take a (void *), so we can free any dir package
product without requiring casts.
Simon Wilkinson [Tue, 21 Jul 2009 13:06:36 +0000 (14:06 +0100)]
Clarify the proscription of $<
Clarify the situations in which $< can be used, as we do use it in
some places in the tree. It is sufficiently portable in pattern rules,
but should not be used elsewhere
Also, change the function definition example to match the format used
through out the source tree.
Felix Frank [Mon, 20 Jul 2009 09:50:06 +0000 (11:50 +0200)]
Fixed out-of-tree builds.
The problems were
* wrong location of Makefile.version-CML
* lots of omissions of "$?" in favor of actual file names in Makefiles
* wrong dependencies in pam/Makefile.in
The latter now point to TOP_INCDIR. Still, ktc.c could not be built
from src/pam (buildtree), as include "..." would not work on generated
headers. Therefore, it uses include <...> where appropriate now.
Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/155 Tested-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Tested-by: Derrick Brashear <shadow@dementia.org> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Marc Dionne [Sat, 18 Jul 2009 04:15:01 +0000 (00:15 -0400)]
Warning cleanups for kernel module build
Take care of various warnings (about 70) during a libafs build.
A non-exhaustive list of changes:
- Unused variables, in some cases to be IFDEFed along with the code
that uses it
- Cast some const char * to char * for the afs_* functions
- Move afs_UFSCacheFetchProc and afs_UFSCacheStoreProc declarations
to afs_prototypes.h
- Include afsutil.h in error_msg.c to get strlcpy
- Change type of argument 3 in export_sysname, to match what the callers
are actually doing
- Rework a few lines in pthread_glock.c to avoid a warning about unused
value
- Fix a warning in rpc_scan.c that really looks like a bug (but
probably harmless in our case)
Marc Dionne [Sat, 18 Jul 2009 01:29:10 +0000 (21:29 -0400)]
Disable kdump build on linux 2.6
Don't try to build kdump on linux 2.6 where it has been known to be broken
for a long time. The build failure was ignored, but produced a large number
of errors and warnings, polluting the build log.
On a test amd64_linux26 system with a recent kernel and --enable-warnings,
this results in over 750 fewer warnings and 100+ fewer errors.
Simon Wilkinson [Mon, 13 Jul 2009 23:01:09 +0000 (00:01 +0100)]
Use AFS_PTR_FMT to format pointers
Replace "0x%x" with "%"AFS_FMT_PTR for pointer printing in all locations
where gcc flags a warning.
This change is warnings reduction driven - there are many more
occurences of this in the code which don't currently result in
compiler warnings, because the va_args functions they're used in
aren't defined as printflike.
Simon Wilkinson [Fri, 10 Jul 2009 15:13:09 +0000 (16:13 +0100)]
Make afs_warn() and afs_warnuser() va_args
The afs_warn() and afs_warnuser() functions take a variable number of
arguments. Historically, we've handled this by just not prototyping
them. This change builds on the work done a while back to get a
prototyped osi_Panic() working in the kernel, and contains the same
work arounds for platforms with no usable va_args support (HPUX) and
those where support is limited (some Darwin, some Linux)
For some reason, the code was, on all platforms other than Digital
UNIX, assigning the return value of catopen to an integer, with
and then immediately assigning it to an nl_catd (the actual return
value type). Remove all of that and store the return value directly
in an nl_catd variable.
Reviewed-on: http://gerrit.openafs.org/93 Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Verified-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Reviewed-by: Derrick Brashear <shadow@dementia.org>
Simplify fstrace message catalog and support non-dest installation
fstrace was searching for its message catalog first through the normal
NLS message catalog search paths and then falling back on the client
configuration directory. This, however, is neither a traditional
message catalog for internationalization nor is it a configuration file.
Instead, search for the message catalog only in a C directory under
AFSDIR_CLIENT_DATA_DIRPATH, which is for architecture-independent data,
and simplify the code.
Now that we have a standard location for the message catalog, install
it with make install as well as make dest.
Reviewed-on: http://gerrit.openafs.org/92 Verified-by: Simon Wilkinson <sxw@inf.ed.ac.uk> Reviewed-by: Derrick Brashear <shadow@dementia.org>
The same lines appears 17 lines up. So it is already done.
But here we shouldn't do it again after having released the
write lock in tdc and tdc itself
Provide an AFSDIR_DATA_DIR path for architecture-independent data
Add AFSDIR_DATA_DIR to dirpath.h, defined to be the location for
installing and finding architecture-independent data files. Add a
corresponding AFSDIR_CLIENT_DATA_DIRPATH macro that retrieves the
possibly-prefixed version of this path. This will be ${datadir}/openafs
with normal UNIX installation paths and /usr/vice/etc for Transarc
paths. Since there is no apparent need for this path on Windows, it
is not defined in Windows builds.
The only intended use for this path for right now is the message
catalog for fstrace.
Do not print volume name in DisplayFormat2 if status is not VOK
DisplayFormat2 is used to generate volume output for ListVolumes
and ExamineVolume. If the volume status is not VOK, the name field
will not have been populated with valid data. Do not print it.
This commit also removes an extraneous switch block from
XDisplayFormat2. The switch variable is already known to
have the value VOK due to an enclosing conditional.
Simon Wilkinson [Mon, 13 Jul 2009 22:00:44 +0000 (23:00 +0100)]
Make UAFS builds stop the main build
The sub-make invocations in libuafs ignored the return code of the make,
which allowed the libuafs build to appear to succeed even if files had
failed to build. Fix this.
Remove NLS message catalog implementation for pre-2.0 OSF
fstrace had its own copy of the NLS catopen/catgets/catclose library
functions only on OSF platforms prior to 2.0 with the functions
renamed to add a "1" (which looked cut and pasted from somewhere
else). This is old enough that we no longer support that platform,
so drop all of that code and partly untangle the #ifdefs to remove
the pre-2.0 OSF case.
Reviewed-on: http://gerrit.openafs.org/88 Reviewed-by: Derrick Brashear <shadow@dementia.org> Verified-by: Simon Wilkinson <sxw@inf.ed.ac.uk>
Michael Meffie [Wed, 15 Jul 2009 16:46:56 +0000 (12:46 -0400)]
Fix assert message to avoid printing garbage
Fix an off by one error in assert() to avoid printing garbage
characters to the log. Remove the newline character generated by
ctime() to match the format generated by the other logging functions.
Andrew Deason [Tue, 14 Jul 2009 16:29:01 +0000 (11:29 -0500)]
Ignore SIGSYS when issuing pioctl syscall
Ignore SIGSYS when we issue the pioctl syscall, so we don't dump core
when the kernel module hasn't yet been installed on several platforms.
Also, restore the old SIGSYS signal handler afterwards, so we don't
cause any side-effects.
Use InterlockedExchangeAdd() instead of InterlockedAdd() on Windows
InterlockedAdd() is not supported on all the platforms we wish to
support. However, InterlockedExchangeAdd() is. The two
functions are semantically similar with the exception that
InterlockedExchangeAdd() returns the initial value of the object
being modified while InterlockedAdd() returns the resulting
value. Since the return value of the rx_MutexAdd() macro is
unused, this is irrelevant.
RXAFSCB_GetCellServDB takes a serverList not an array of afs_int32
Reported by Marcus Watts
ListCellsRPC calls RXAFSCB_GetCellServDB which takes a serverList
and not an array of afs_int32. Add the serverList and copy the
resulting server addresses into the array of afs_int32 address
values.
Include afs/afscbint.h instead of afs/afsint.h in order to obtain
prototypes for RXAFSCB_ functions.
Do not call principal_hton() to copy ktc_principal structs
Reported by Marcus Watts.
principal_hton() is used to copy butc_principal structs.
Passing in a ktc_principal as source and destination will
result in beyond the end of the ktc_principal.
Reported by Marcus Watts. Two calls to ctime() in the same
fprintf() statement will result in only one of the times being
printed twice. This is due to the fact that ctime() returns
a static buffer.
Improve Windows Build System By Using MT-safe Versions of Libraries
For many years the Windows Build System has incorrectly mixed
some Pthread and LWP code. One of the side effects of this
mixing was the need for the EXT2 extern macro definition in
src/rx/rx_globals.h which permitted the LWP compiled routines
to link with the Pthreaded afsrpc library.
This commit creates or modifies multi-threaded versions of various
libraries including mtafsubik.lib, mtafsutil.lib, mtafsvldb.lib,
and mtafsvol.lib.
All of the threaded servers now make use of these libraries.
This reduces the number of times that many source files were
recompiled for each server directory.
util_GetInt32 was defined in both src/util/volparse.c and
src/WINNT/afsd/fs_utils.c. Now that mtafsutil.lib is being
used within src/WINNT/afsd there is no need to maintain the
duplicate copy.
The export list for afsauthent.def now includes all of the
ubik_PR_xxxx function variants and afsrpc.def now include
rxi_CallError as it is linked to outside the rx library.
The top-level NTMakefile has been modified to permit the
tree to build with the new header and library dependencies.
The threaded volserver which never built before now does.
Jason Edgecombe [Wed, 15 Jul 2009 02:12:18 +0000 (22:12 -0400)]
Updated chapter 2, sections 1-3 of the Admin Guide
Replaced some references to the Authentication Database with Kerberos.
Removed text about obsolete tools like rcp, inetd, and rlogin.
Corrected references to AFS Product support by replacing them with links
to the OpenAFS Support page. Added warnings about using the wrong fsck binary
with inode and namei-based fileserver binaries. Removed an obsolete paragraph
about ThisCell and how it interacts with the Authentication Database.
Prevent crash on Windows when data version goes backwards
Within cm_MergeStatus() cm_FindVolumeByID() was called with
a NULL pointer instead of a valid cm_req_t object pointer
in the case where the data version for an object received
from the file server is smaller than the value already stored
in the cache. This results in a NULL pointer dereference.
Allocate a cm_req_t object on the stack and initialize it
before calling cm_FindVolumeByID() in this case.
Michael Meffie [Tue, 14 Jul 2009 16:03:22 +0000 (12:03 -0400)]
Fix dirpath shell script generated from makefile
Generate the correct paths when building transarc style paths.
Remove the redundant dirpath shell script that was generated by the
afs-newcell script. Update the run-tests driver to use the build
time generated dirpaths.
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.