X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Frmtab.c;h=854d519808dd23f7861b4623b3407ae6b55a99bd;hp=d23712b28d500cf46df749fd9502e293eb7fc0ab;hb=a8348c2c48d45f991995707fa22a2fa441aaa907;hpb=f35762f959cc5f29ad7817f8b7968e3792132651 diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c index d23712b..854d519 100644 --- a/utils/mountd/rmtab.c +++ b/utils/mountd/rmtab.c @@ -131,21 +131,20 @@ mountlist_del(char *hname, const char *path) } void -mountlist_del_all(struct sockaddr_in *sin) +mountlist_del_all(const struct sockaddr *sap) { char *hostname; struct rmtabent *rep; - nfs_export *exp; FILE *fp; int lockid; if ((lockid = xflock(_PATH_RMTABLCK, "w")) < 0) return; - hostname = host_canonname((struct sockaddr *)sin); + hostname = host_canonname(sap); if (hostname == NULL) { - char buf[INET_ADDRSTRLEN]; + char buf[INET6_ADDRSTRLEN]; xlog(L_ERROR, "can't get hostname of %s", - host_ntop((struct sockaddr *)sin, buf, sizeof(buf))); + host_ntop(sap, buf, sizeof(buf))); goto out_unlock; } @@ -157,8 +156,7 @@ mountlist_del_all(struct sockaddr_in *sin) while ((rep = getrmtabent(1, NULL)) != NULL) { if (strcmp(rep->r_client, hostname) == 0 && - (exp = auth_authenticate("umountall", - (struct sockaddr *)sin, rep->r_path))) + auth_authenticate("umountall", sap, rep->r_path) != NULL) continue; fputrmtabent(fp, rep, NULL); } @@ -175,6 +173,18 @@ out_unlock: xfunlock(lockid); } +static void +mountlist_freeall(mountlist list) +{ + while (list != NULL) { + mountlist m = list; + list = m->ml_next; + xfree(m->ml_hostname); + xfree(m->ml_directory); + xfree(m); + } +} + mountlist mountlist_list(void) { @@ -196,12 +206,7 @@ mountlist_list(void) return NULL; } if (stb.st_mtime != last_mtime) { - while (mlist) { - mlist = (m = mlist)->ml_next; - xfree(m->ml_hostname); - xfree(m->ml_directory); - xfree(m); - } + mountlist_freeall(mlist); last_mtime = stb.st_mtime; setrmtabent("r");