(1) Power Management improvements. Maintain a global flag that
specifies whether or not the service is in a suspend state.
Do not panic if Netbios() returns NRC_BRIDGE meaning that the
lana is no longer valid. Instead, stop the listener threads
and if all listener threads are stopped, reset the lana_list.
Allow the cm_Daemon() thread to periodically check the state
of the smb listeners. If they are all stopped and the service
is not suspended, attempt to restart them. If there are no valid
lanas, return to the stopped state.
(2) CreateX and NTCreateX use cm_CheckNTOpen() to test whether or not
the user is permitted to obtain read or write locks. This function
would obtain the lock and then drop it returning whether or not
the lock could be obtained. If the lock was in fact required,
CreateX/NTCreateX would then obtain it with cm_Lock(). The problem
of course being that this pattern results in three RPCs to the
file server (lock, unlock, lock). This is reduced to one RPC by
implementing cm_CheckNTOpenDone() which frees the allocated byte
range lock from cm_CheckNTOpen() after the cm_Lock() call is
performed.
(3) Remove unused code.
(4) Add debugging to SMB Directory Search functions.
Separately log TGT requests in addition to logging the authentication so
that one can distinguish in the logs between Kerberos v4 clients and uses
of klog.
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
Some initial obvious cleanup. Removed all the sections on Digital UNIX,
changed IBM AFS to OpenAFS throughout, and reformatted and cleaned up the
front matter and some of the first few pages.
Add some comments to the makefile, set up dependencies to build the index
automatically, remove a bunch of unnecessary @-signs in front of commands,
and add a clean target.
The false illusion of security some people want to play under is usually good for wasting a few hours; it was here. making the sys_call_table read nly for real of course fixes it, let's just hope keyrings come along before then on such platforms.
The old dirty buffer synchronization algorithm had a buf_IncrSyncer
thread walking the all buffer list periodically searching for dirty
buffers to write to the file server. This had several negative
results. The alogirithm ate up ever increasing amounts of CPU time
even when AFS is idle as the size of the cache increases. Also,
buffers were written to the file server in an order based upon the
original buffer allocation which has nothing to do with the order
in which the buffers became dirty.
The new algorithm maintains a dirty buffer list. Items are added
when the buffer is originally marked dirty. A buffer is only
removed from the list by the buf_IncrSyncer when the buffer is no
longer dirty. If the list is empty the thread goes back to thread
immediately without additional processing requirements.
Unlike previous versions of the OS, Vista performs a shutdown on
the Microsoft Loopback adapter just like it would on a real adapter.
This causes the smb_Listener threads to trigger a panic during a
suspend/hibernate power event.
The fix is to unbind from the network adapters in response to a
suspend/hibernate power event and then rebind to the adapters
when a resume power event is received. Note that the resume events
are not reliably delivered so it is possible the afs service will
not be accessible. However, this is the best we can do.
Be more liberal when parsing ThisCell. Accept and ignore leading and
trailing whitespace and anything after the first whitespace character on
the first line. Return an error for a read error or for an empty cell
name.
Rather than setting AFS_PARAM_COMMON as part of the sysname guessing code,
guess the sysname first and then sent AFS_PARAM_COMMON in a separate case
statement based on the results. Otherwise, it isn't set when
--with-afs-sysname is used explicitly, resulting in a broken Linux build.
Path canonicalization for commands such as bos getlog was only applied for
absolute paths; relative paths were still constructed relative to the
canonical directory. Modify the path canonicalization routines to also
canonicalize the base directory for relative paths.
when offline folders are enabled, the old file name sent in a rename
operation is sent in all uppercase even when the file name is not.
this patch attempts a case insensitive match after the case sensitive
match fails.
The return value of buf_CleanAsync is not an error value but a flag
indicating whether or not the buffer was in fact dirty. Do not treat
it as an error. The error state is stored in the buffer itself.
Document (at least partially) AFS's mapping of Kerberos v5 principal names
to Kerberos v4 format in the aklog man page. Also document that -setpag
may not always work.
Ensure that tkt_DecodeTicket and rxkad_CheckResponse return the right
RXKAD errors for ticket expiration or invalidity. Avoid calling
tkt_CheckTimes twice in rxkad_CheckResponse
The file server has been returning RXKADNOAUTH when the time between
the client and server is out of sync. tkt_CheckTimes returns -1 for
recently expired tickets and -2 for tickets that have been expired for
a while. In the -2 case we must return RXKADBADTICKET not RXKADNOAUTH.
Some sites expect single-threaded volume attaches to happen in a specific
order. The parallel attach patch also changed the attach order for sites
not specifying -vattachpar.
kreltime-guard-against-null-tm-20060731 was apparently an
attempt to deal with the possibility of localtime() returning NULL by
using localtime_r instead, and zeroing the tm structure first. This has
two problems. First, localtime_r is not guaranteed to leave its output
buffer untouched or in a sane state in the event it is given invalid
input. More importantly, the second half of this delta fixed the build
on Windows (which apparently lacks localtime_r) at the expense of using
the wrong level of indirection on other platforms.
Simple is nice, but correct is important too. There is nothing wrong
with switching to localtime_r to avoid thread safety issues. However,
the correct fix for the anticipated problem was and is to check the
return value of localtime (or localtime_r), and if it is NULL, fill in
the ktime_date with suitable default values.
The attached patch does not implement the correct fix, but does fix the
double-indirection problem, so butc will again perform correctly instead
of crashing.
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
iafs_InactiveVCache() calls afs_InvalidateAllSegments() which says
it should be called with the vnode locked. so the lock should
probably be moved to afs_InactiveVCache() so it can be droppped
before calling afs_remunlink().
#ifdef DEBUG_REFCOUNT the ref count log entries so they aren't always
compiled in
comment out the remaining location where the write lock on cm_scacheLock
is dropped in order to obtain the scache mutex on the object returned
from cm_GetNewSCache(). Dropping the lock results in more than one
thread being given the same cm_scache_t which is more dangerous than
blowing away the contents of the object without holding the mutex
ensure that cm_BufWrite is always called with a non-NULL scp. Add
an assertion to double check that we do it all the time.
more cleanup from recent patches. comment out the recycling code because
it is not possible to implement it using the current locking hierarchy.
change cm_BufWrite to take a pointer to cm_scache_t instead of a fid
which must be used to look up a new reference to the cm_scache_t.
more often than not we already have the scp and in the one case we
don't we can let the caller look up the scp and then call cm_BufWrite
if it is found. If not, we have saved a function call and a bunch
of lock operations.
add a lot more logging.
improve the scp mutex handling within smb_CloseFID