X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnsm%2Ffile.c;fp=support%2Fnsm%2Ffile.c;h=fc3241a1a4d9a10d128d22f3d352dcbc2445863d;hp=4dfc235dce5bc4f28562145420f236cc07123603;hb=a8449be2ab58d67d5028a280f94e661358b58e97;hpb=99979a6cf2f862d2365d27fa90fab4416c374903 diff --git a/support/nsm/file.c b/support/nsm/file.c index 4dfc235..fc3241a 100644 --- a/support/nsm/file.c +++ b/support/nsm/file.c @@ -517,6 +517,33 @@ nsm_retire_monitored_hosts(void) return count; } +/* + * nsm_priv_to_hex - convert a NSM private cookie to a hex string. + * + * @priv: buffer holding the binary NSM private cookie + * @buf: output buffer for NULL terminated hex string + * @buflen: size of output buffer + * + * Returns the length of the resulting string or 0 on error + */ +size_t +nsm_priv_to_hex(const char *priv, char *buf, const size_t buflen) +{ + int i, len; + size_t remaining = buflen; + + for (i = 0; i < SM_PRIV_SIZE; i++) { + len = snprintf(buf, remaining, "%02x", + (unsigned int)(0xff & priv[i])); + if (error_check(len, remaining)) + return 0; + buf += len; + remaining -= (size_t)len; + } + + return buflen - remaining; +} + /* * Returns the length in bytes of the created record. */ @@ -526,8 +553,8 @@ nsm_create_monitor_record(char *buf, const size_t buflen, const struct sockaddr *sap, const struct mon *m) { const struct sockaddr_in *sin = (const struct sockaddr_in *)sap; - size_t remaining = buflen; - int i, len; + size_t hexlen, remaining = buflen; + int len; len = snprintf(buf, remaining, "%08x %08x %08x %08x ", (unsigned int)sin->sin_addr.s_addr, @@ -539,14 +566,11 @@ nsm_create_monitor_record(char *buf, const size_t buflen, buf += len; remaining -= (size_t)len; - for (i = 0; i < SM_PRIV_SIZE; i++) { - len = snprintf(buf, remaining, "%02x", - (unsigned int)(0xff & m->priv[i])); - if (error_check(len, remaining)) - return 0; - buf += len; - remaining -= (size_t)len; - } + hexlen = nsm_priv_to_hex(m->priv, buf, remaining); + if (hexlen == 0) + return 0; + buf += hexlen; + remaining -= hexlen; len = snprintf(buf, remaining, " %s %s\n", m->mon_id.mon_name, m->mon_id.my_id.my_name);