X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Frmtab.c;fp=utils%2Fmountd%2Frmtab.c;h=cd6abc8823c59f340181690c202d2017a4f8a178;hp=854d519808dd23f7861b4623b3407ae6b55a99bd;hb=76209cdbe989ee4cdfbf489f2695ac779457e763;hpb=a8348c2c48d45f991995707fa22a2fa441aaa907 diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c index 854d519..cd6abc8 100644 --- a/utils/mountd/rmtab.c +++ b/utils/mountd/rmtab.c @@ -16,7 +16,7 @@ #include #include #include -#include "xmalloc.h" + #include "misc.h" #include "exportfs.h" #include "xio.h" @@ -179,9 +179,9 @@ mountlist_freeall(mountlist list) while (list != NULL) { mountlist m = list; list = m->ml_next; - xfree(m->ml_hostname); - xfree(m->ml_directory); - xfree(m); + free(m->ml_hostname); + free(m->ml_directory); + free(m); } } @@ -211,16 +211,32 @@ mountlist_list(void) setrmtabent("r"); while ((rep = getrmtabent(1, NULL)) != NULL) { - m = (mountlist) xmalloc(sizeof(*m)); + m = calloc(1, sizeof(*m)); + if (m == NULL) { + mountlist_freeall(mlist); + mlist = NULL; + xlog(L_ERROR, "%s: memory allocation failed", + __func__); + break; + } if (reverse_resolve && inet_aton((const char *) rep->r_client, &addr) && (he = gethostbyaddr(&addr, sizeof(addr), AF_INET))) - m->ml_hostname = xstrdup(he->h_name); + m->ml_hostname = strdup(he->h_name); else - m->ml_hostname = xstrdup(rep->r_client); + m->ml_hostname = strdup(rep->r_client); + + m->ml_directory = strdup(rep->r_path); + + if (m->ml_hostname == NULL || m->ml_directory == NULL) { + mountlist_freeall(mlist); + mlist = NULL; + xlog(L_ERROR, "%s: memory allocation failed", + __func__); + break; + } - m->ml_directory = xstrdup(rep->r_path); m->ml_next = mlist; mlist = m; }