Commit graph

128 commits

Author SHA1 Message Date
Casey Bodley
a320a1b17e idmap: get uid/gid for each upcall
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-08 12:54:40 -05:00
Casey Bodley
cd1251758d idmap.c for ldap caching and configuration
struct idmap_context contains configuration data (struct idmap_config), a cache for users, and a cache for groups.  idmap_context is declared in idmap.c, and only available as an opaque pointer (nfs41_idmapper) elsewhere.  similarly, Winldap.h is only included by idmap.c, and not needed elsewhere

nfs41_idmap_create() allocates the idmap_context, loads the configuration from file, and calls ldap_init().  it does not call ldap_connect(); we'll still be able to start the daemon if ldap isn't configured, or the ldap server is down.  calling ldap_connect() is optional, as any ldap operation that requires a connection will establish it internally.  this behavior, along with the LDAP_OPT_AUTO_RECONNECT option (defaults to on), means that we shouldn't have to maintain a separate connection for each thread

nfs41_idmap_*() functions return windows errors codes.  LDAP_RETCODEs are mapped to windows errors with LdapMapErrorToWin32()

the user and group caches share a common generic interface in struct idmap_cache, which uses a linked list for storage, and protects access with a SRWLOCK.  expiration of cache entries can be adjusted by the config option 'cache_ttl'

struct config_option g_options[] is a table of available config options and their default values.  this patch adds a 'ms-nfs41-idmap.conf' file with all possible options set to default values, and commented out.  the daemon expects to find this file under c:\etc\, and won't start if it can't be opened or parsed

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-08 12:54:40 -05:00
Casey Bodley
8321939c90 fix for warning C4204: non-constant aggregate initializer
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-08 12:29:47 -05:00
Casey Bodley
575200952a tirpc: memory corruption in clnt_vc_destroy()
stop the callback thread before freeing any memory!

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-08 11:17:25 -05:00
Casey Bodley
50dbd847f0 driver: open files for one mount won't prevent unmount another
IOCTL_NFS41_DELCONN had a check for RxDeviceObject->NumberOfActiveFcbs before calling nfs41_DeleteConnection().  this prevents us from unmounting even if the netroot has no open files, and is redundant because nfs41_FinalizeNetRoot() already has the necessary check for NetRoot->NumberOfFcbs/SrvOpens

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 15:36:10 -04:00
Casey Bodley
38813e13d8 cosmetic: cleaning up small functions
attempted to get rid of short functions that are only called from one place

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 15:10:20 -04:00
Casey Bodley
f70e454988 driver: added error mapping for symlink outside filesystem
also fixed print_open_error() to check STATUS_ values, since map_open_errors() is called first

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 14:35:28 -04:00
Casey Bodley
b8f0f5673f driver: nfs41_FsCtl() calls print_debug_header()
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 14:35:27 -04:00
Casey Bodley
3bdabdf918 driver: link and rename print target filename
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 14:35:27 -04:00
Casey Bodley
bfb5a55861 driver: print_error() for error messages
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-05 14:35:27 -04:00
Casey Bodley
4398678517 symlinks: GetReparsePoint will return NOT_A_REPARSE_POINT
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-11-04 11:53:04 -04:00
unknown
7eae229661 setting SUPPORTS_HARD_LINKS if link_support is enabled 2010-11-04 11:51:26 -04:00
unknown
8688d75574 adding env.props to mount 2010-11-03 14:18:02 -04:00
unknown
c9bbf91d4b [cosmetic] bumping debug level for remove_unsupported_attrs 2010-11-02 15:55:38 -04:00
unknown
6df50ba65c adding refcount on nfs41_root to callback server 2010-11-02 15:54:50 -04:00
unknown
7d5e6eead2 storing backpointer to nfs41_root from nfs41_client 2010-11-02 15:17:22 -04:00
unknown
7527c022a1 making upcall_marshal void 2010-11-02 14:40:52 -04:00
unknown
a57e7a78f1 removed unnecessary free_open_state() function 2010-11-02 14:31:12 -04:00
unknown
db1c02cc28 set REPARSE_POINT attr only if symlink_support attr is set 2010-11-02 14:21:06 -04:00
unknown
9c84f71623 fixing timestamps off by 3 days 2010-11-02 13:45:08 -04:00
Casey Bodley
bcc707d3b8 ref counting for nfs41_root
very similar to the issue with nfs41_open_state, an abandoned upcall could outlive its mount. to prevent their nfs41_root from being freed, upcalls need to hold a reference until they're finished. this also keeps all of its clients/sessions/rpc connections alive

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-27 16:18:23 -04:00
Olga Kornievskaia
006bdfa47a ref counting for nfs41_open_state 2010-10-27 16:18:12 -04:00
Casey Bodley
ae4c67c21e upcall: added upcall_cleanup() to interface
added call to upcall_cleanup() after both upcall_marshall() and upcall_cancel()
individual upcall operations define their nfs41_upcall_op structs locally, instead of putting tons of function prototypes in upcall.c
made the upcall_marshall() function optional; most marshall functions are noops

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-27 16:16:17 -04:00
Casey Bodley
7e7f73766d readdir cookie is stored with nfs41_open_state
fixes a memory leak that occurs when a readdir loop doesn't complete, since the cookie was only freed on the last readdir upcall.  by storing the cookie with nfs41_open_state, we can avoid passing the cookie to the driver and back, and not worry about having to free it separately

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-27 15:25:27 -04:00
Casey Bodley
4930e7caca each mount has unique client_owner
add the netroot name to the hash for generating its client_owner

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-27 15:21:57 -04:00
unknown
f61bd10560 fixing timestamps for cygwin 2010-10-27 15:00:13 -04:00
Olga Kornievskaia
e51ba46d8b adding tags to compounds
contributed by Tigran
2010-10-27 15:00:12 -04:00
Casey Bodley
dd5dc2289e cthon: added missing patches 2010-10-27 13:02:16 -04:00
Casey Bodley
5c4f9e789f readme: formatting changes
use <strong> instead of <span class="filename"> and <code> instead of <span class="code">

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-21 08:45:51 -04:00
Olga Kornievskaia
1b88791f6f always make an upcall
if the thread placing an upcall was woken up from the sleep, but have not been picked up by the daemon thread from the upcall queue, we would just cancel the upcall. thus nfsd would never see it. however, it was causing leaks in the open state. we would allocate open state but matching close would never make it to the daemon.

instead, always place an upcall to the daemon, but mark it that nobody is waiting for it if the requesting thread gets interrupted and goes away.
2010-10-20 17:04:26 -04:00
unknown
aa49d80acc removing libraries needed for service-version only 2010-10-20 12:21:54 -04:00
Casey Bodley
bff723a91b symlink: report symlinks to cygwin in NfsV3Attributes
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-19 15:40:39 -04:00
Olga Kornievskaia
a7e2d6ad2a checking functions return values
while following symlinks on open, after we break from the loop we need to respect that nfs41_lookup could have returned some kind of error value. thus only return error_reparse if nfs41_lookup returned success or file_not_found error.

similarly in after calling nfs41_symlink_follow() only set the reparse_error if function was successful.
2010-10-19 12:14:40 -04:00
unknown
bacbf060e3 making eprintfs include filename in symlink 2010-10-19 11:18:32 -04:00
Casey Bodley
f8885dbad0 warnings from WDK 6000
fixed a few cases of warning 4242: possible loss of data

wincrypt.h appears to come with windows.h in later versions of the ddk, but nfs41_client.c fails to compile in WDK 6001 without #include <wincrypt.h>

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-19 11:17:29 -04:00
Casey Bodley
3613a75914 install: disabled warning 4711
nfs_install was failing to build in 'free' configurations because of warning 4711: function 'foo' selected for automatic inline expansion

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-19 11:17:13 -04:00
Casey Bodley
3df69e4749 readme: updated for next release
specified requirement of 64-bit version of Windows Vista or later
clarified which commands are run from the Cygwin shell, Windows command prompt, or WinDDK build environment
adding instructions for applying patches to connectathon
added known issue regarding AUTH_SYS
added which connectathon tests have been disabled in known issues

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-19 11:16:54 -04:00
unknown
caf8d3afaf fixing readlink buffer size in decode 2010-10-18 12:15:35 -04:00
unknown
fdd55e729a adding error mapping for TOO_MANY_LINKS in the drivers 2010-10-15 17:53:47 -04:00
Casey Bodley
64480d0aca symlink: on open for mklink, only check for FILE_EXISTS
avoid calling map_disposition_2_nfsopen() for this, because FILE_CREATE->ERROR_FILE_EXISTS is the only case we care about

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-15 17:24:10 -04:00
Casey Bodley
870b389e8f symlink: limit symlink depth to avoid following cyclical links
/* msdn: There is a maximum of 31 reparse points (and
 * therefore symbolic links) allowed in a particular path. */
#define NFS41_MAX_SYMLINK_DEPTH     31

also added checks for the return value of nfs41_symlink_target() on open/link/rename

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-15 17:24:04 -04:00
Casey Bodley
59526ba9d8 symlink: convert windows slashes when setting symlink
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-15 14:56:13 -04:00
Casey Bodley
1ad1c0f262 symlink: rename and link handle ERROR_REPARSE
when rename or link call nfs41_lookup() for the destination directory, they need to be able to handle ERROR_REPARSE and find the real dest dir

open now does the same thing when it sees ERROR_REPARSE; previously, it was only replacing the first symlink in the path, and could require multiple reparses on a path

modified nfs41_symlink_target() to support the case where the source and destination paths are the same (used by rename/link)

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-15 14:56:06 -04:00
unknown
e37b33a4df fixing memory mngmt of symlink name on open 2010-10-15 12:06:16 -04:00
Casey Bodley
eb9d9bbd4c symlink: nfs41_symlink_follow() for readdir and open
added nfs41_file_info.symlink_dir to replace readdir's info.cansettime hack.  when nfs_file_info_to_attributes() finds info.type==NF4LNK, it adds the FILE_ATTRIBUTE_DIRECTORY flag if info.symlink_dir is set

renamed nfs41_symlink_follow() to nfs41_symlink_target()
generalized lookup_symlink() into nfs41_symlink_follow(), which is called by readdir and open (also avoids an extra lookup)

added queries for symlink target type when doing normal GETATTRs (getattr.c) and opens with OPEN_REPARSE_POINT set (open.c)

Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-14 16:57:53 -04:00
unknown
a8f66804d5 [cosmetic] adding DbgEn/Ex to symlink functions 2010-10-14 13:46:14 -04:00
unknown
c414d5b84e fixing license in symlink.c 2010-10-14 13:23:48 -04:00
unknown
e535711acf fixing DbgP in marshal_nfs41_link 2010-10-14 13:23:25 -04:00
unknown
0be2b4e495 adding symlink.c to sources 2010-10-14 12:44:20 -04:00
Casey Bodley
f8d92d5894 symlink: bug fix for garbage characters in reparse path
Signed-off-by: Casey Bodley <cbodley@citi.umich.edu>
2010-10-14 12:42:39 -04:00