summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2010-01-11 19:52:47 -0500
committerSteve Dickson <steved@redhat.com>2010-01-12 05:52:55 -0500
commita8449be2ab58d67d5028a280f94e661358b58e97 (patch)
tree75512ec399cd6da647337eee415800bc4af7f17d
parent99979a6cf2f862d2365d27fa90fab4416c374903 (diff)
downloadnfs-utils-a8449be2ab58d67d5028a280f94e661358b58e97.tar.gz
nfs-utils-a8449be2ab58d67d5028a280f94e661358b58e97.tar.xz
nfs-utils-a8449be2ab58d67d5028a280f94e661358b58e97.zip
nfs-utils: make private cookie to hex conversion a library routine
Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--support/include/nsm.h2
-rw-r--r--support/nsm/file.c44
2 files changed, 36 insertions, 10 deletions
diff --git a/support/include/nsm.h b/support/include/nsm.h
index 7554493..28314d1 100644
--- a/support/include/nsm.h
+++ b/support/include/nsm.h
@@ -60,5 +60,7 @@ extern _Bool nsm_insert_monitored_host(const char *hostname,
const struct sockaddr *sap, const struct mon *m);
extern void nsm_delete_monitored_host(const char *hostname);
extern void nsm_delete_notified_host(const char *hostname);
+extern size_t nsm_priv_to_hex(const char *priv, char *buf,
+ const size_t buflen);
#endif /* !NFS_UTILS_SUPPORT_NSM_H */
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
@@ -518,6 +518,33 @@ nsm_retire_monitored_hosts(void)
}
/*
+ * 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.
*/
__attribute_noinline__
@@ -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);