X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=a265ecda9f6412fefa457b79a915f32cfa0506c9;hb=b01c85ea978f15d313961724d9a64c8ae18b3766;hp=9d7d20d99e9c1a4cc651d7256fcde109f759210a;hpb=d38ea02d0e4bcdc4e0114567028596f7bcba45b9;p=nfs-utils.git diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 9d7d20d..a265ecd 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); } @@ -358,15 +368,19 @@ void cache_export(nfs_export *exp) * { * echo $domain $path $length * read filehandle <&0 - * } <> /proc/fs/nfs/filehandle + * } <> /proc/fs/nfsd/filehandle */ struct nfs_fh_len * cache_get_filehandle(nfs_export *exp, int len, char *p) { - FILE *f = fopen("/proc/fs/nfs/filehandle", "r+"); + FILE *f = fopen("/proc/fs/nfsd/filehandle", "r+"); char buf[200]; char *bp = buf; + int failed; static struct nfs_fh_len fh; + + if (!f) + f = fopen("/proc/fs/nfs/filehandle", "r+"); if (!f) return NULL; @@ -375,7 +389,9 @@ cache_get_filehandle(nfs_export *exp, int len, char *p) qword_printint(f, len); qword_eol(f); - if (fgets(buf, sizeof(buf), f) == NULL) + failed = (fgets(buf, sizeof(buf), f) == NULL); + fclose(f); + if (failed) return NULL; memset(fh.fh_handle, 0, sizeof(fh.fh_handle)); fh.fh_size = qword_get(&bp, fh.fh_handle, NFS3_FHSIZE);