diff --git a/doc/man/man5/slapd-meta.5 b/doc/man/man5/slapd-meta.5 index 3a2acddc50899452fcf9ff423225b263a877ae38..d51d8fff44965e0b134e421cadfaacf732580db3 100644 --- a/doc/man/man5/slapd-meta.5 +++ b/doc/man/man5/slapd-meta.5 @@ -537,6 +537,25 @@ minutes and seconds. If set before any target specification, it affects all targets, unless overridden by any per-target directive. +.TP +.B keepalive <idle>:<probes>:<interval> +The +.B keepalive +parameter sets the values of \fIidle\fP, \fIprobes\fP, and \fIinterval\fP +used to check whether a socket is alive; +.I idle +is the number of seconds a connection needs to remain idle before TCP +starts sending keepalive probes; +.I probes +is the maximum number of keepalive probes TCP should send before dropping +the connection; +.I interval +is interval in seconds between individual keepalive probes. +Only some systems support the customization of these values; +the +.B keepalive +parameter is ignored otherwise, and system-wide settings are used. + .TP .B map "{attribute|objectclass} [<local name>|*] {<foreign name>|*}" This maps object classes and attributes as in the LDAP backend. diff --git a/servers/slapd/back-meta/config.c b/servers/slapd/back-meta/config.c index 231c583c93fbaf9d3cdc1a87483e35d54f9051df..06027a5adb2725b7fd875d8c69aac3a8da01a22d 100644 --- a/servers/slapd/back-meta/config.c +++ b/servers/slapd/back-meta/config.c @@ -100,6 +100,7 @@ enum { LDAP_BACK_CFG_SUBTREE_IN, LDAP_BACK_CFG_PSEUDOROOTDN, LDAP_BACK_CFG_PSEUDOROOTPW, + LDAP_BACK_CFG_KEEPALIVE, LDAP_BACK_CFG_LAST }; @@ -407,6 +408,15 @@ static ConfigTable metacfg[] = { "SYNTAX OMsDirectoryString " "SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL }, + { "keepalive", "keepalive", 2, 2, 0, + ARG_MAGIC|LDAP_BACK_CFG_KEEPALIVE, + meta_back_cf_gen, "( OLcfgDbAt:3.29 " + "NAME 'olcDbKeepalive' " + "DESC 'TCP keepalive' " + "SYNTAX OMsDirectoryString " + "SINGLE-VALUE )", + NULL, NULL }, + { NULL, NULL, 0, 0, 0, ARG_IGNORED, NULL, NULL, NULL, NULL } }; @@ -466,6 +476,7 @@ static ConfigOCs metaocs[] = { "$ olcDbSubtreeExclude " "$ olcDbSubtreeInclude " "$ olcDbTimeout " + "$ olcDbKeepalive " /* defaults may be inherited */ COMMON_ATTRS @@ -1589,6 +1600,16 @@ meta_back_cf_gen( ConfigArgs *c ) rc = 1; break; + case LDAP_BACK_CFG_KEEPALIVE: { + struct berval bv; + char buf[AC_LINE_MAX]; + bv.bv_len = AC_LINE_MAX; + bv.bv_val = &buf[0]; + slap_keepalive_parse(&bv, &mt->mt_tls.sb_keepalive, 0, 0, 1); + value_add_one( &c->rvalue_vals, &bv ); + break; + } + default: rc = 1; } @@ -1803,6 +1824,12 @@ meta_back_cf_gen( ConfigArgs *c ) } break; + case LDAP_BACK_CFG_KEEPALIVE: + mt->mt_tls.sb_keepalive.sk_idle = 0; + mt->mt_tls.sb_keepalive.sk_probes = 0; + mt->mt_tls.sb_keepalive.sk_interval = 0; + break; + default: rc = 1; break; @@ -2809,6 +2836,11 @@ map_fail:; break; #endif /* SLAPD_META_CLIENT_PR */ + case LDAP_BACK_CFG_KEEPALIVE: + slap_keepalive_parse( ber_bvstrdup(c->argv[1]), + &mt->mt_tls.sb_keepalive, 0, 0, 0); + break; + /* anything else */ default: return SLAP_CONF_UNKNOWN; diff --git a/servers/slapd/back-meta/conn.c b/servers/slapd/back-meta/conn.c index da8e0a13e3cf536694dcf1ec22b62db1b1eaa138..7e63fae89604e8b031dd868addb8bf5378b96c71 100644 --- a/servers/slapd/back-meta/conn.c +++ b/servers/slapd/back-meta/conn.c @@ -421,6 +421,8 @@ retry_lock:; ldap_set_option( msc->msc_ld, LDAP_OPT_REFERRALS, META_BACK_TGT_CHASE_REFERRALS( mt ) ? LDAP_OPT_ON : LDAP_OPT_OFF ); + slap_client_keepalive(msc->msc_ld, &mt->mt_tls.sb_keepalive); + #ifdef HAVE_TLS if ( !is_ldaps ) { slap_bindconf *sb = NULL;