aboutsummaryrefslogtreecommitdiff
path: root/sys/rpc/rpcsec_gss
diff options
context:
space:
mode:
Diffstat (limited to 'sys/rpc/rpcsec_gss')
-rw-r--r--sys/rpc/rpcsec_gss/svc_rpcsec_gss.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c b/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
index 8e4af69959f8..5449eb49b2cc 100644
--- a/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
+++ b/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
@@ -173,6 +173,7 @@ struct svc_rpc_gss_cookedcred {
#define CLIENT_MAX 1024
u_int svc_rpc_gss_client_max = CLIENT_MAX;
u_int svc_rpc_gss_client_hash_size = CLIENT_HASH_SIZE;
+u_int svc_rpc_gss_lifetime_max = 0;
SYSCTL_NODE(_kern, OID_AUTO, rpc, CTLFLAG_RW, 0, "RPC");
SYSCTL_NODE(_kern_rpc, OID_AUTO, gss, CTLFLAG_RW, 0, "GSS");
@@ -185,6 +186,10 @@ SYSCTL_UINT(_kern_rpc_gss, OID_AUTO, client_hash, CTLFLAG_RDTUN,
&svc_rpc_gss_client_hash_size, 0,
"Size of rpc-gss client hash table");
+SYSCTL_UINT(_kern_rpc_gss, OID_AUTO, lifetime_max, CTLFLAG_RW,
+ &svc_rpc_gss_lifetime_max, 0,
+ "Maximum lifetime (seconds) of rpc-gss clients");
+
static u_int svc_rpc_gss_client_count;
SYSCTL_UINT(_kern_rpc_gss, OID_AUTO, client_count, CTLFLAG_RD,
&svc_rpc_gss_client_count, 0,
@@ -956,8 +961,15 @@ svc_rpc_gss_accept_sec_context(struct svc_rpc_gss_client *client,
* that out).
*/
if (cred_lifetime == GSS_C_INDEFINITE)
- cred_lifetime = time_uptime + 24*60*60;
+ cred_lifetime = 24*60*60;
+ /*
+ * Cap cred_lifetime if sysctl kern.rpc.gss.lifetime_max is set.
+ */
+ if (svc_rpc_gss_lifetime_max > 0 && cred_lifetime >
+ svc_rpc_gss_lifetime_max)
+ cred_lifetime = svc_rpc_gss_lifetime_max;
+
client->cl_expiration = time_uptime + cred_lifetime;
/*