/* * Copyright (C) 1995, 1997, 1999 Jeffrey A. Uphoff * Modified by Olaf Kirch, 1996. * * NSM for Linux. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "statd.h" /* * Services SM_STAT requests. * * According the the X/Open spec's on this procedure: "Implementations * should not rely on this procedure being operative. In many current * implementations of the NSM it will always return a 'STAT_FAIL' * status." My implementation is operative; it returns 'STAT_SUCC' * whenever it can resolve the hostname that it's being asked to * monitor, and returns 'STAT_FAIL' otherwise. * * sm_inter.x says the 'state' returned should be * "state number of site sm_name". It is not clear how to get this. * X/Open says: * STAT_SUCC * The NSM will monitor the given host. "sm_stat_res.state" contains * the state of the NSM. * Which implies that 'state' is the state number of the *local* NSM. * href=http://www.opengroup.org/onlinepubs/9629799/SM_STAT.htm * * We return the *local* state as * 1/ We have easy access to it. * 2/ It might be useful to a remote client who needs it and has no * other way to get it. * 3/ That's what we always did in the past. */ struct sm_stat_res * sm_stat_1_svc(struct sm_name *argp, __attribute__ ((unused)) struct svc_req *rqstp) { static sm_stat_res result; char *name; xlog(D_CALL, "Received SM_STAT from %s", argp->mon_name); name = statd_canonical_name(argp->mon_name); if (name == NULL) { result.res_stat = STAT_FAIL; xlog (D_GENERAL, "STAT_FAIL for %s", argp->mon_name); } else { result.res_stat = STAT_SUCC; xlog (D_GENERAL, "STAT_SUCC for %s", argp->mon_name); free(name); } result.state = MY_STATE; return(&result); }