diff options
-rw-r--r-- | zhm/zhm.8 | 7 | ||||
-rw-r--r-- | zhm/zhm.c | 7 | ||||
-rw-r--r-- | zhm/zhm_client.c | 10 |
3 files changed, 19 insertions, 5 deletions
@@ -20,6 +20,8 @@ zhm \- Zephyr HostManager ] [ .BI -i ] [ +.BI -f +] [ .BI server .BI ... ] @@ -63,6 +65,11 @@ designated for hostmanager use. In this mode, SIGHUP is handled as if the .I -h option were specified. .PP +The +.I -f +option disables the "flush" operation which allows any client to flush +all subscriptions for the host. +.PP The optional .I server arguments are used to replace the set of server names supplied by @@ -24,7 +24,7 @@ int use_hesiod = 0; #define PIDDIR "/var/athena/" -int hmdebug, rebootflag, errflg, dieflag, inetd, oldpid, nofork; +int hmdebug, rebootflag, noflushflag, errflg, dieflag, inetd, oldpid, nofork; int no_server = 1, nservchang, nserv, nclt; int booting = 1, timeout_type, deactivated = 1; long starttime; @@ -76,7 +76,7 @@ char *argv[]; exit(-1); } prim_serv[0] = '\0'; - while ((opt = getopt(argc, argv, "drhin")) != EOF) + while ((opt = getopt(argc, argv, "drhinf")) != EOF) switch(opt) { case 'd': hmdebug = 1; @@ -98,6 +98,9 @@ char *argv[]; case 'n': nofork = 1; break; + case 'f': + noflushflag = 1; + break; case '?': default: errflg++; diff --git a/zhm/zhm_client.c b/zhm/zhm_client.c index 539c43a..6ee448b 100644 --- a/zhm/zhm_client.c +++ b/zhm/zhm_client.c @@ -18,7 +18,7 @@ static char rcsid_hm_client_c[] = "$Id$"; #endif /* SABER */ #endif /* lint */ -extern int no_server, nclt, deactivated; +extern int no_server, nclt, deactivated, noflushflag; extern struct sockaddr_in cli_sin, serv_sin, from; void transmission_tower(notice, packet, pak_len) @@ -33,8 +33,12 @@ void transmission_tower(notice, packet, pak_len) nclt++; if (notice->z_kind == HMCTL) { if (!strcmp(notice->z_opcode, CLIENT_FLUSH)) { - send_flush_notice(HM_FLUSH); - deactivated = 1; + if (noflushflag) + syslog(LOG_INFO, "Client requested hm flush (disabled)."); + else { + send_flush_notice(HM_FLUSH); + deactivated = 1; + } } else if (!strcmp(notice->z_opcode, CLIENT_NEW_SERVER)) { new_server((char *)NULL); } else { |