History log of /freebsd-9.3-release/usr.sbin/rpc.lockd/lockd_lock.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 267654 19-Jun-2014 gjb

Copy stable/9 to releng/9.3 as part of the 9.3-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 225736 22-Sep-2011 kensmith

Copy head to stable/9 as part of 9.0-RELEASE release cycle.

Approved by: re (implicit)


# 216603 20-Dec-2010 uqs

rpc.lockd(8) WARNS cleanup

- Provide function prototype for nlm_syscall
- Don't assign a variable from the stack to a global var[1]
- Remove unused vars

Found by: clang static analyser [1]
Reviewed by: dfr


# 168640 12-Apr-2007 kuriyama

- Fix compilaton with DUMP_FILELOCK_VERBOSE.
- Use consistent "get_lock_matching_unlock" function name in
debuglog().


# 166054 16-Jan-2007 brueffer

Fix a typo in a comment, introduced in rev. 1.19.


# 165776 04-Jan-2007 mjacob

some whitespace cleanup (which I usually don't bother with)
so I could note that the previous delta was:

Reviewed by: Mohan


# 165775 04-Jan-2007 mjacob

Add a function that checks for duplicate requests (based
on some fairly tight criteria) so we avoid having broken
clients spam rpc.lockd to death.

PR: 107530
Obtained from: Doug Rudoff
MFC after: 1 week


# 161231 11-Aug-2006 thomas

Remove extraneous trailing \0 in string literal.

MFC after: 2 weeks


# 146445 20-May-2005 charnier

Add FBSDID. Add missing prototypes. Remove unused variables. Give variable
an initial value to silent compiler.


# 132262 16-Jul-2004 mr

Forced commit to actually list the changes of bin/61718, as requested by sam.

The attached patch fixes a number of problems present in rpc.lockd.

1)

Nfslocklist_head.lf_first is overwritten because of an off-by-one-bug
that happens when clnt_cache_next_to_use is incorrectly incremented.

2)

'struct sockaddr *addr' inside 'struct file_lock' is set to point to
the result from svc_getrpccaller(). This value is malloc:ed inside the
rpc libraries and is free:ed when clnt_destroy() is called. Fix,
maintain a copy of the result.

3)

The loop inside retry_blockingfilelocklist() that uses 3 pointers ifl,
nfl, and pfl thrashes the list pointed to by
blockedlocklist_head.lf_first. Fix, use a simpler loop. The new loop
does not preserve list order but the order is immaterial anyways. See
also revison 1.6-1.7 and kern/61122.

4)

struct file_lock
char client_name[SM_MAXSTRLEN];

and

struct host
char name[SM_MAXSTRLEN];

Be careful to not create open (non 0 terminated) C strings and later
passing them to e.g syslog. Fix, make sure that the strings are always
terminated with 0. When at it, move the strings to the end of the
structs and make them variable length. This saves about 1000 bytes for
every malloc:ed struct.

5)

The newfl = malloc(sizeof(struct file_lock)) memory was never properly
bzero:ed.

Minor changes:

A)

Nlmtonlm4(0) made assumptions about struct layouts.

B)

Don't close stdout and stderr when debugging (-d option).

C)

Remove unused pid_t locker and int fd in struct file_lock.

D)

s/printf/debuglog/

E)

Remove redundant sleep(1) and call to debuglog().

Cheers,
Björn


# 132254 16-Jul-2004 mr

After talking to Colin,
apply the patch of bin/61718 (which should include/elimatate kern/61122 also).
It seems to fix a few annoying bugs.

PR: bin/61718, kern/61122
Submitted by: bg@sics.se ohartman@mail.physik.uni-mainz.de


# 129302 16-May-2004 stefanf

Remove spurious semicolons. Outside of functions they are actually errors but
GCC doesn't warn about them without -pedantic.

Approved by: das (mentor)
PR: 56649
Reviewed by: md5


# 125903 16-Feb-2004 alfred

The callrpc call to unmonitor hosts was passing the wrong xdr
decode/encode functions for the arguments to the statd unmonitor
call. Fix it.


# 121558 26-Oct-2003 peter

Make this compile cleanly. It passes WARNS=2, but I haven't checked
it is so on more platforms.


# 115004 14-May-2003 rwatson

Avoid registering for a lock on the server in the event the NFS client
has requested the lock in a non-blocking form, instead returning an
immediate failure. This appears to help reduce one of my "locks get
lost" symptoms involving lockf(1), which attempts a non-blocking lock
attempt before actually blocking on the lock. At this point the client
still gets back EACCES, which is an issue we're still working.

Approved by: re (scottl)
Submitted by: Andrew P. Lentvorski, Jr. <bsder@allcaps.org>


# 92975 22-Mar-2002 alfred

Remove cast that's not needed.


# 92911 21-Mar-2002 alfred

Bring code to WARNS=3 level. Mostly fix unused variables.


# 89440 16-Jan-2002 alfred

forced commit for previous revision:

PR: bin/33897


# 89439 16-Jan-2002 alfred

Fix boundry condition in lock management:

Alfred, I took a look at retry_blockingfilelocklist() and the
solution seemed simple enough. Please correct me if I am wrong.
It seems said routine doesn't take into account boundary conditions
when putting back file_lock entries into the blocked lock-list.
Specifically, it fails when the file_lock being put back is the
last element in the list, and when it is the only element in the
list. I've included a patch below.

Basically, it introduces another variable: pfl, which keeps track
of the list item before ifl. That way if nfl is NULL, ifl gets
inserted after pfl. If pfl is also NULL, then it gets inserted
at the head of the list (since it was the only element in the
list).

Submitted by: Mike Makonnen <mike_makonnen@yahoo.com>
Tested by: Thomas Quinot <thomas@cuivre.fr.eu.org>


# 87199 02-Dec-2001 alfred

prototype functions and fix some line wrapping


# 87096 29-Nov-2001 alfred

Fold ANDREW_LOCKD into -current.


# 86319 13-Nov-2001 alfred

Turn on NO_WERROR and set WARNS to 1.

Fix the WARNS 1 warnings except unused variables.

Add prototype for log_netobj().
Don't compare signed/unsigned.
Cast u_int64_t to 'unsigned long long' and print using %llu.
Fix constness of string arrays.
Use a cast to avoid an unused parameter in a signal handler.
alarm(2) can't fail, so don't check for it.
ANSI'ify some functions.


# 84923 14-Oct-2001 alfred

Implement partial-file NFS lock testing.

Submitted by: "Andrew P. Lentvorski" <andrewl@io.com>


# 75631 17-Apr-2001 alfred

Implement client side NFS locks.

Obtained from: BSD/os
Import Ok'd by: mckusick, jkh, motd on builder.freebsd.org


# 74462 19-Mar-2001 alfred

Bring in a hybrid of SunSoft's transport-independent RPC (TI-RPC) and
associated changes that had to happen to make this possible as well as
bugs fixed along the way.

Bring in required TLI library routines to support this.

Since we don't support TLI we've essentially copied what NetBSD
has done, adding a thin layer to emulate direct the TLI calls
into BSD socket calls.

This is mostly from Sun's tirpc release that was made in 1994,
however some fixes were backported from the 1999 release (supposedly
only made available after this porting effort was underway).

The submitter has agreed to continue on and bring us up to the
1999 release.

Several key features are introduced with this update:
Client calls are thread safe. (1999 code has server side thread
safe)
Updated, a more modern interface.

Many userland updates were done to bring the code up to par with
the recent RPC API.

There is an update to the pthreads library, a function
pthread_main_np() was added to emulate a function of Sun's threads
library.

While we're at it, bring in NetBSD's lockd, it's been far too
long of a wait.

New rpcbind(8) replaces portmap(8) (supporting communication over
an authenticated Unix-domain socket, and by default only allowing
set and unset requests over that channel). It's much more secure
than the old portmapper.

Umount(8), mountd(8), mount_nfs(8), nfsd(8) have also been upgraded
to support TI-RPC and to support IPV6.

Umount(8) is also fixed to unmount pathnames longer than 80 chars,
which are currently truncated by the Kernel statfs structure.

Submitted by: Martin Blapp <mb@imp.ch>
Manpage review: ru
Secure RPC implemented by: wpaul