]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mountd/cache.c
Error check messages sent to the kernel.
[nfs-utils.git] / utils / mountd / cache.c
index 34f949c66b90200973856b6230f9095fe8675fcc..dcb5dac1369bc3621290f730fd3b3537d1115cd0 100644 (file)
@@ -6,7 +6,10 @@
  * and listen for requests (using my_svc_run)
  * 
  */
-#include "config.h"
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <sys/types.h>
 #include <sys/select.h>
@@ -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;
 }