Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 620038f6 authored by Andy Adamson's avatar Andy Adamson Committed by Trond Myklebust
Browse files

SUNRPC set gss gc_expiry to full lifetime



Only use the default GSSD_MIN_TIMEOUT if the gss downcall timeout is zero.
Store the full lifetime in gc_expiry (not 3/4 of the lifetime) as subsequent
patches will use the gc_expiry to determine buffered WRITE behavior in the
face of expired or soon to be expired gss credentials.

Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent be7e9858
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -192,17 +192,23 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct
	const void *q;
	unsigned int seclen;
	unsigned int timeout;
	unsigned long now = jiffies;
	u32 window_size;
	int ret;

	/* First unsigned int gives the lifetime (in seconds) of the cred */
	/* First unsigned int gives the remaining lifetime in seconds of the
	 * credential - e.g. the remaining TGT lifetime for Kerberos or
	 * the -t value passed to GSSD.
	 */
	p = simple_get_bytes(p, end, &timeout, sizeof(timeout));
	if (IS_ERR(p))
		goto err;
	if (timeout == 0)
		timeout = GSSD_MIN_TIMEOUT;
	ctx->gc_expiry = jiffies + (unsigned long)timeout * HZ * 3 / 4;
	/* Sequence number window. Determines the maximum number of simultaneous requests */
	ctx->gc_expiry = now + ((unsigned long)timeout * HZ);
	/* Sequence number window. Determines the maximum number of
	 * simultaneous requests
	 */
	p = simple_get_bytes(p, end, &window_size, sizeof(window_size));
	if (IS_ERR(p))
		goto err;
@@ -237,9 +243,12 @@ gss_fill_context(const void *p, const void *end, struct gss_cl_ctx *ctx, struct
		p = ERR_PTR(ret);
		goto err;
	}
	dprintk("RPC:       %s Success. gc_expiry %lu now %lu timeout %u\n",
		__func__, ctx->gc_expiry, now, timeout);
	return q;
err:
	dprintk("RPC:       %s returning %ld\n", __func__, -PTR_ERR(p));
	dprintk("RPC:       %s returns %ld gc_expiry %lu now %lu timeout %u\n",
		__func__, -PTR_ERR(p), ctx->gc_expiry, now, timeout);
	return p;
}