X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=b2b56bed874bc590b362ce31e3ae241b717a0d24;hp=cdd610ee8edbd028ee7f80c151c64c2ed350c97f;hb=331c2ca949d5b4b4d18d0aca90afb8ae9475bcd6;hpb=fd54675db0806e81c17ee7e7eec0abfcd33f1f23 diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index cdd610e..b2b56be 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -218,14 +218,35 @@ static int fix_mounthost_option(struct mount_options *options) return 0; } +/* + * Returns zero if the "lock" option is in effect, but statd + * can't be started. Otherwise, returns 1. + */ +static int verify_lock_option(struct mount_options *options) +{ + if (po_rightmost(options, "nolock", "lock") == PO_KEY1_RIGHTMOST) + return 1; + + if (!start_statd()) { + nfs_error(_("%s: rpc.statd is not running but is " + "required for remote locking."), progname); + nfs_error(_("%s: Either use '-o nolock' to keep " + "locks local, or start statd."), progname); + return 0; + } + + return 1; +} + /* * Set up mandatory mount options. * * Returns 1 if successful; otherwise zero. */ -static int set_mandatory_options(const char *type, - struct sockaddr_in *saddr, - struct mount_options *options) +static int validate_options(const char *type, + struct sockaddr_in *saddr, + struct mount_options *options, + int fake) { if (!append_addr_option(saddr, options)) return 0; @@ -236,6 +257,8 @@ static int set_mandatory_options(const char *type, } else { if (!fix_mounthost_option(options)) return 0; + if (!fake && !verify_lock_option(options)) + return 0; } return 1; @@ -691,7 +714,7 @@ int nfsmount_string(const char *spec, const char *node, const char *type, goto fail; } - if (!set_mandatory_options(type, &saddr, options)) + if (!validate_options(type, &saddr, options, fake)) goto out; if (po_rightmost(options, "bg", "fg") == PO_KEY1_RIGHTMOST)