X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=dcb5dac1369bc3621290f730fd3b3537d1115cd0;hp=34f949c66b90200973856b6230f9095fe8675fcc;hb=8fd9fad1ea4b25b8962d70133f476650ef0637b0;hpb=4929f11159f0e6568f13820f114594028fc81e2d diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 34f949c..dcb5dac 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -6,7 +6,10 @@ * and listen for requests (using my_svc_run) * */ -#include "config.h" + +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -32,7 +35,7 @@ * Record is terminated with newline. * */ -void cache_export_ent(char *domain, struct exportent *exp); +int cache_export_ent(char *domain, struct exportent *exp); char *lbuf = NULL; @@ -80,9 +83,6 @@ 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); } @@ -292,7 +292,6 @@ 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: @@ -353,12 +352,12 @@ int cache_process_req(fd_set *readfds) * % echo $domain $path $[now+30*60] $options $anonuid $anongid $fsid > /proc/net/rpc/nfsd.export/channel */ -void cache_export_ent(char *domain, struct exportent *exp) +int cache_export_ent(char *domain, struct exportent *exp) { - + int err; FILE *f = fopen("/proc/net/rpc/nfsd.export/channel", "w"); if (!f) - return; + return -1; qword_print(f, domain); qword_print(f, exp->e_path); @@ -367,33 +366,32 @@ void cache_export_ent(char *domain, struct exportent *exp) qword_printint(f, exp->e_anonuid); qword_printint(f, exp->e_anongid); qword_printint(f, exp->e_fsid); - qword_eol(f); + err = qword_eol(f); fclose(f); - - mountlist_add(domain, exp->e_path); + return err; } -void cache_export(nfs_export *exp) +int cache_export(nfs_export *exp) { + int err; FILE *f; f = fopen("/proc/net/rpc/auth.unix.ip/channel", "w"); if (!f) - return; + return -1; qword_print(f, "nfsd"); qword_print(f, inet_ntoa(exp->m_client->m_addrlist[0])); qword_printint(f, time(0)+30*60); qword_print(f, exp->m_client->m_hostname); - qword_eol(f); + err = qword_eol(f); 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); + err = cache_export_ent(exp->m_client->m_hostname, &exp->m_export) + || err; + return err; } /* Get a filehandle. @@ -419,14 +417,15 @@ cache_get_filehandle(nfs_export *exp, int len, char *p) qword_print(f, exp->m_client->m_hostname); qword_print(f, p); qword_printint(f, len); - qword_eol(f); + failed = qword_eol(f); - failed = (fgets(buf, sizeof(buf), f) == NULL); + if (!failed) + 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); + fh.fh_size = qword_get(&bp, (char *)fh.fh_handle, NFS3_FHSIZE); return &fh; }