When performing a SMB FindFirst/FindNext/FindClose operation if there
are no wildcards involved, we can optimize the case and turn it from
O(n) to O(1) where 'n' is the number of entries in the directory.
This can be done by performing a cm_Lookup() and if it succeeds,
constructing the appropriate response instead of parsing the contents
of each buffer associated with the directory looking for matches.
Without this optimization, FindFirst operations on directories containing
thousands of entries can take a large number of seconds to complete.
When rxBind was added it made an assumption that rx_GetIFInfo could be
called before rx_InitXYZ. This is true on non-Windows platforms, but
on Windows rxGetIFInfo relies on an initialized mutex. This patch adds
a DllMain for Windows in order to initialize the mutex object upon DLL
load.
make vldb_check able to repair at least some kinds of damage
run it on a vldb which does not have a server operating live on it
verify the result with vldb_check before using.
While investigating the reasons behind the Drive Mapping listbox
failing to permit entries 2 or above to be edited or removed and
the text string being truncated to two characters (on some systems)
I discovered that the subclasses were being recompiled into each
application instead of linking against the DLL that contains the
controls.
The custom controls have been renamed to address name space issues.
The "Drive X:" label changed to "X:" to permit single character item
selection within the listbox.
Still have no idea what is really going on. Spy++ shows the Windows
messages being sent to the correct Windows. However, the getcount
message never obtains a value other than 0 or 1. This is probably
why the selection code is broken. Still working on it.
When there are no free buffers, don't loop continuously.
Sleep so that the other threads that are holding the buffers
can grab the global buffer lock and release them.
(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.
(5) Increase the SMB Ioctl MaxData size
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.
wow, this is special
existed forever but only when we stopped leaking packets did it become a problem
anyway, don't free packets and forget to reduce the number of packets in play
Remove generated files from CVS.
====================
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.
Neale Ferguson contributed the assembler.
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.
FIXES 45692
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.
FIXES 44330
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.
FIXES 43862
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
FIXES 43862
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.