(1) the specified path for "fs examine, whereis, whichcell, flush" and so
always has the follow symlinks and mount points semantics. This makes
it impossible to determine what the FID of a symlink or mount point is.
(2) "fs examine" out is not the result of a single pioctl operation but is
actually the combined output of half a dozen operations. Path evaluation
is an expensive operation. It would be faster if the caller could
evaluate the FID first and then perform all of the rest of the operations
by specifying the FID instead of the path.
(3) fs output reports all objects as files. By adding a GetFileType
pioctl more informative output can be provided that indicates what
type of object the path evaluates to.
(4) the Windows fs command includes a number of commands that do nothing
but exist only because the Unix cache manager supports them.
This delta adds a new extendible data structure cm_ioctl_query_opts_t which
can be optionally specified with pioctls that do not already require
input data. The first two fields of this structure are 'literal' and
'fid'. The literal field is used to indicate whether the last component
of the path should be evaluated following symlinks and mount points.
The fid field permits a fid to be specified.
A new GetFileType pioctl has been added. The type of objects are now
output.
A new "-literal" option is available for "fs examine, flush, whereis, and
whichcell.
Nname() is used to concatenate two strings and is frequently used with
the first string being the name of the executable perhaps with a full
path. The static buffer specified is too small for a full path and
there was no protection against writing beyond the end of it.
This option will retrieve the volume location database information
for all cells known to the cache manager and output the data in the
format required by the CellServDB file.
This functionality is supported by the UNIX cache managers and
Windows cache managers 1.5.31 and later.
Add support for RXAFS_GetCellServDB. Implemented by generalizing
RXAFS_GetCellByNum and special casing the index values to do the
right thing.
Conditionalize grabbing the callp->lock in the callback functions.
The race conditions in rx have long since been fixed and the potential
for deadlocks are too great.
Add a new flag CM_FLAG_NOPROBE for use in calls to cm_GetCell. When
set the newly discovered servers will not be immediately probed. Useful
when setting tokens, setting server preferences, or responding to cmdebug
callbacks.
1. prevent stopping the smb_Listeners due to an ip addr change when the
LANA is determined either by registry assignment or loopback detection
2. add synchronization logic to prevent smb_Listener restarts prior to
smb_Listener thread stoppage
3. no longer permit panics from smb_Listener threads
4. move the probe logic from cm_IPAddrDaemon thread to the cm_Daemon
thread in order to avoid the loss of ip addr change events. If an
adapter stops and restarts fast enough there might not be anything
for us to do.
Add a registry value "PioctlFollowMountPoint" to permit the use of the
old pioctl path evaluation behavior that always followed mountpoints
and symlinks.
One of the challenges to deploying NIM has been the configuration of
AFS token acquisition. This patch adds a new registry key hierarchy
HKLM\SOFTWARE\OpenAFS\Client\Realms
which is used to configure the AFS Provider for a new identity based
upon the realm of the identity. The Realms key contains subkeys for
each realm for which configuration data is being provided
HKLM\SOFTWARE\OpenAFS\Client\Realms\"RealmName"
"RealmName" contains one optional value, "AFSEnabled", and subkeys for
each Cell that is to be added to the configuration. "AFSEnabled" defaults
to 0x01.
In "CellName", there are two optional values, "Realm" and "MethodName".
If the values are not specified, the automatic realm and method determination
algorithms are used.
These values can be added to an MSI transform or deployed via Group Policy.
Do not pass strings generated from incoming network data to ??printf
as the format string. Instead use a format string of "%s". This protects
against %? expansions being inserted in the string.
After a network change, test to see if the desired LAN adapter to bind
the Netbios Name to has changed. If so, stop the Netbios Network and
restart with the new LAN adapter.
This can happen on Vista after a suspend if the service wakes up before
the Loopback adapter re-initializes.
If the realm name of the requested ticket is the empty string, decode
the actual service ticket to determine the actual realm. Obtaining the
actual realm prevents unnecessary pts registration failures.
make the aklog lam plugin work correctly in e.g. the CDE screenlocker, which is
part of the long-running and not-run-by-user dtsession; this means we do wackiness to
1) not pag ourselves in that case
2) setuid to the user to set uid tokens if we got a username and are root
3) do not use pr_mumble get the the AFS ID to put in the tokens, as multiple
initializations of Rx in the process space of dtsession crashes it
Do not trust the registry to determine whether or not krb4 support
is available. In a roaming profile the user data can say 'yes' even
if the plug-in or the kerberos library does not exist.
avoid a race condition between cm_SyncOpCheckContinue and cm_SyncOpDone
that can leave a request on an scp stuck in the waiting state even though
there are no other requests to wake it up.
cm_BkgPrefetch() contained two errors. First, the loop at the top of the
function that ensures that a cm_buf_t is allocated for each of the offset
positions failed to actually obtain the buffer for the specified offset.
Instead, it repeatedly obtained the buffer for the starting base address.
Second, cm_GetBuffer() would reserve all of the buffers associated with
the cm_scache_t even in the case where we already have a callback and the
existing buffer has the proper data version number. In that situation
reserving the buffers simply wastes valuable time.
1. avoid re-reading CellServDB each time a cell alias is specified
2. avoid reconstructing the vlserver list for the cell each time an
alias is specified
3. permit aliases to be used when AFSDB records were used previously
with the full cell name
Reduce the default number of background daemon threads used for prefetch and
store operations to one. Given the current implementation when more than
one thread is allocated they step on each other's toe while fighting over
locks.
A better model might be to divide up threads based upon cells or volumes
as a means of preventing contention.
The case of openafs.org and grand.central.org is a hideous abuse of
the AFS cell name space. There are many negatives associated with
trying to support two different cell names pointing at overlapping
vlserver lists:
(1) The CM can store duplicate entries for all of the data simply because
the cell name that was used is different
(2) If the CM attempts to optimize the data storage by aliasing or otherwise
combining the cell names as part of one cm_cell_t object, then future
attempts to separate the two cell names will require the destruction
of the cache.
(3) If the CM does not associate a callback revoke with a particular cell,
then the status data associated with any entry that matches the revoked
AFSFid will be discarded. For volume callbacks this can have a serious
impact because volume IDs are not unique across cells and discarding
status data for readonly volumes that are in use can result in a
significant number of FetchStatus requests being sent to the associated
file server.
There are other issues as well involving authentication.
The case of openafs.org advertising the vlserver addresses of
grand.central.org should be considered a hack; a hack that the Windows
client will no longer ensure will work.
Additional debugging messages have been added to assist individuals attempting
to debug why callback revokes do not appear to take affect when two cell
names share the same vlserver data.
The pthread_cond_timedwait/wait implementations were broken. Not only
did they return the wrong error values but more importantly, they did not
always return with the mutex locked.
Update event_handler() for Windows. The return code of
pthread_cond_timedwait() is not limited to 0 and -1 because 'errno'
cannot be set. Instead of setting 'errno' the error code is returned
directly by the function as the return code.
This patch is only for debugging purposes to track the number of
success, timeout, and other errors experienced by the routine.
Add some additional cross-references, add some missing man pages, fix a
few references to the OpenAFS manuals, document the -live flag to vos
move, and add an example for rxdebug.
Remove the callback revoke optimization that prevents a (vol,vn,uniq)
tupple from invalidating entries from multiple cells. We cannot reliably
determine the cell from the server because the server might be identified
as belonging to more than one cell. For example, openafs.org and
grand.central.org.
Windows Error Reporting received crashes caused by a failure to synchronize
the shutdown of the AFS client service with the background daemon threads.
The daemon threads (cm_Daemon, cm_BkgDaemon+, cm_IPAddrDaemon) could be
accessing data structures as they were being freed or unmapped.
Add synchronization mechanisms to signal the termination of the threads
with the shutdown of the service.
This patch completes the implementation of smb_ReceiveTran2GetDFSReferral()
which is called by Vista even if we do not advertise the support of DFS
referrals. It also adds DFS link mapping notifications to the volstat
interface which can be used by volstat plug-ins to redirect requests to
the dfs target path.
Other miscellaneous items:
(1) return EAS_NOT_SUPPORTED instead of EA length 0 and silently accepting
but not storing EA data
(2) Call cm_VolStatus_Service_Started() before smb initialization instead
of afterwards
(3) During directory enumeration and link assembly push the UNC path into
the lower levels by storing references to the tidPath and the relative
paths within the cm_req_t object.
(4) During directory enumeration make absolutely sure that we do not
reference an unallocated cm_dirEntry_t object
(5) publish a prototype for cm_FollowMountPoint()
(6) return ERROR_RETRY instead of BAD_NETWORK_PATH if the server returns
VBUSY
(7) return PATH_NOT_COVERED instead of BADSHARENAME for DfsLinks when
a volstat plugin is in use
In the error case (1) reference the mountPointString instead of the
output of cm_AssembleLink() which was not generated and (2) do not
free memory and objects that were not allocated nor reference counted.
remove panic due to lock being grabbedin another thread can't be accurately
covered with this test on darwin, as e.g. proc_selfthread() is not in the KPI
When a cm_MergeStatus operation determines that the current data buffers
are out of date, remove them from the buffer hash tables in order to speed
the lookup of valid data buffers.
after removing cm_buf_t objects from the hash tables, clear the HT list
pointers to make debugging easier.
when modifying data version values in buf_ForceDataVersion() grab a
read lock on buf_globalLock instead of a write lock. A write lock is
only required if the hash table linked lists are being modified.
The dataVersion itself is protected by the cm_scache_t mx mutex being
held.