X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=2e35b17417173914899234d4cfe28f6ff9aa42a4;hp=9d7d20d99e9c1a4cc651d7256fcde109f759210a;hb=18fc7a86a2a1213762cc4107565903127efadafc;hpb=d38ea02d0e4bcdc4e0114567028596f7bcba45b9 diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 9d7d20d..2e35b17 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -78,6 +78,9 @@ void auth_unix_ip(FILE *f) qword_print(f, *client?client:"DEFAULT"); qword_eol(f); + if (client && strcmp(ipaddr, client)) + mountlist_add(ipaddr, *client?client:"DEFAULT"); + if (client) free(client); } @@ -189,7 +192,8 @@ void nfsd_fh(FILE *f) goto out; } - cache_export_ent(dom, found); + if (found) + cache_export_ent(dom, found); qword_print(f, dom); qword_printint(f, fsidtype); @@ -257,6 +261,7 @@ void nfsd_export(FILE *f) qword_printint(f, found->m_export.e_anonuid); qword_printint(f, found->m_export.e_anongid); qword_printint(f, found->m_export.e_fsid); + mountlist_add(dom, path); } qword_eol(f); out: @@ -319,7 +324,7 @@ int cache_process_req(fd_set *readfds) void cache_export_ent(char *domain, struct exportent *exp) { - FILE *f = fopen("/proc/net/rpc/nfsd.export/channel", "r+"); + FILE *f = fopen("/proc/net/rpc/nfsd.export/channel", "w"); if (!f) return; @@ -333,13 +338,15 @@ void cache_export_ent(char *domain, struct exportent *exp) qword_eol(f); fclose(f); + + mountlist_add(domain, exp->e_path); } void cache_export(nfs_export *exp) { FILE *f; - f = fopen("/proc/net/rpc/auth.unix.ip/channel", "r+"); + f = fopen("/proc/net/rpc/auth.unix.ip/channel", "w"); if (!f) return; @@ -351,6 +358,9 @@ void cache_export(nfs_export *exp) fclose(f); + if (strcmp(inet_ntoa(exp->m_client->m_addrlist[0]), exp->m_client->m_hostname)) + mountlist_add(inet_ntoa(exp->m_client->m_addrlist[0]), exp->m_client->m_hostname); + cache_export_ent(exp->m_client->m_hostname, &exp->m_export); }