Fixes to make unexporting and exporting with wildcards nfs-utils-1-1-0-pre8
authorneilbrown <neilbrown>
Thu, 3 Jul 2003 01:28:13 +0000 (01:28 +0000)
committerneilbrown <neilbrown>
Thu, 3 Jul 2003 01:28:13 +0000 (01:28 +0000)
work more sensibly.

ChangeLog
support/export/export.c
support/export/rmtab.c
support/include/exportfs.h
utils/exportfs/exportfs.c

index 0f490c1..3b93636 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2003-07-03 NeilBrown <neilb@cse.unsw.edu.au>
+       fumihiko kakuma <kakmy@mvh.biglobe.ne.jp>
+
+       * utils/exportfs/exportfs.c(unexportfs): improve host comparison
+       so as to only export the wildcard exports that were asked for.
+       * support/export/export.c(export_allowed): changed to return the
+       nfs_export rather than a "struct exportent", as m_changed is
+       needed by called
+       * support/export/rmtab.c(rmtab_read): modified to deal with
+       interface change for export_allowed(), and enhanced to preserve
+       m_changed flag when a wild-card export causes the creation of
+       a non-wildcard export.
+       
 2003-07-02 NeilBrown <neilb@cse.unsw.edu.au>
        Steve Dickson <SteveD@redhat.com>
 
index eef2c3b..eedbb75 100644 (file)
@@ -172,10 +172,9 @@ export_allowed_internal (struct hostent *hp, char *path)
        return NULL;
 }
 
-struct exportent *
+nfs_export *
 export_allowed(struct hostent *hp, char *path)
 {
-       static struct exportent ee;
        nfs_export              *exp;
        char                    epath[MAXPATHLEN+1];
        char                    *p = NULL;
@@ -188,10 +187,8 @@ export_allowed(struct hostent *hp, char *path)
        /* Try the longest matching exported pathname. */
        while (1) {
                exp = export_allowed_internal (hp, epath);
-               if (exp) {
-                       dupexportent(&ee, &exp->m_export);
-                       return &ee;
-               }
+               if (exp)
+                       return exp;
                /* We have to treat the root, "/", specially. */
                if (p == &epath[1]) break;
                p = strrchr(epath, '/');
index 3c55267..58e59f4 100644 (file)
@@ -25,7 +25,6 @@ rmtab_read(void)
 
        setrmtabent("r");
        while ((rep = getrmtabent(1, NULL)) != NULL) {
-               struct exportent        *xp;
                struct hostent          *hp = NULL;
                int                     htype;
                
@@ -33,22 +32,23 @@ rmtab_read(void)
                if (htype == MCL_FQDN
                    && (hp = gethostbyname (rep->r_client))
                    && (hp = hostent_dup (hp),
-                       xp = export_allowed (hp, rep->r_path))) {
+                       exp = export_allowed (hp, rep->r_path))) {
                        /* see if the entry already exists, otherwise this was an instantiated
                         * wild card, and we must add it
                         */
-                       exp = export_lookup(rep->r_client, xp->e_path, 0);
-                       if (!exp) {
-                               strncpy (xp->e_hostname, rep->r_client,
-                                        sizeof (xp->e_hostname) - 1);
-                               xp->e_hostname[sizeof (xp->e_hostname) -1] = '\0';
-                               exp = export_create(xp, 0);
+                       nfs_export *exp2 = export_lookup(rep->r_client,
+                                                       exp->m_export.e_path, 0);
+                       if (!exp2) {
+                               struct exportent ee;
+                               dupexportent(&ee, &exp->m_export);
+                               strncpy (ee.e_hostname, rep->r_client,
+                                        sizeof (ee.e_hostname) - 1);
+                               ee.e_hostname[sizeof (ee.e_hostname) -1] = '\0';
+                               exp2 = export_create(&ee, 0);
+                               exp2->m_changed = exp->m_changed;
                        }
                        free (hp);
-
-                       if (!exp)
-                               continue;
-                       exp->m_mayexport = 1;
+                       exp2->m_mayexport = 1;
                } else if (hp) /* export_allowed failed */
                        free(hp);
        }
index dfd51f2..bf5bb67 100644 (file)
@@ -62,7 +62,7 @@ void                          export_add(nfs_export *);
 void                           export_reset(nfs_export *);
 nfs_export *                   export_lookup(char *hname, char *path, int caconical);
 nfs_export *                   export_find(struct hostent *, char *path);
-struct exportent *             export_allowed(struct hostent *, char *path);
+nfs_export *                   export_allowed(struct hostent *, char *path);
 nfs_export *                   export_create(struct exportent *, int canonical);
 nfs_export *                   export_dup(nfs_export *, struct hostent *);
 void                           export_freeall(void);
index bd48e98..ab8a4a2 100644 (file)
@@ -283,10 +283,14 @@ unexportfs(char *arg, int verbose)
        for (exp = exportlist[htype]; exp; exp = exp->m_next) {
                if (path && strcmp(path, exp->m_export.e_path))
                        continue;
-               if (htype != exp->m_client->m_type
-                   || (htype == MCL_FQDN
-                       && !matchhostname(exp->m_export.e_hostname,
-                                         hname)))
+               if (htype != exp->m_client->m_type)
+                       continue;
+               if (htype == MCL_FQDN
+                   && !matchhostname(exp->m_export.e_hostname,
+                                         hname))
+                       continue;
+               if (htype != MCL_FQDN
+                   && strcasecmp(exp->m_export.e_hostname, hname))
                        continue;
                if (verbose) {
 #if 0