Bug 1007628 - [exportfs] Validate export entry fail. And when start nfs server, should not export the invalid entry;
[exportfs] Validate export entry fail. And when start nfs server, should not ...
Status: CLOSED WONTFIX
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: nfs-utils (Show other bugs)
7.0
All Linux
high Severity unspecified
: rc
: ---
Assigned To: Steve Dickson
Yongcheng Yang
:
Depends On: 1007626
Blocks: 1007627
  Show dependency treegraph
 
Reported: 2013-09-12 22:17 EDT by Yin.JianHong
Modified: 2017-05-02 00:15 EDT (History)
3 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: 1007626
Environment:
Last Closed: 2014-01-18 11:24:05 EST
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Yin.JianHong 2013-09-12 22:17:55 EDT
+++ This bug was initially created as a clone of Bug #1007626 +++

Description of problem:
when start nfs server, we should verify the export entries:
  -when I export an directory in tmpfs without fsid= specified,
  -I can export successfuly, * but can not mount it from client.
  --the server log indicate: "Cannot export $dir, possibly unsupported filesystem or fsid= required"
  -We think that, exportfs should verify the export entries, if invalid then tell user that's invalid, cannot export

Version-Release number of selected component (if applicable):
all version in RHEL5.9 5.10 6.x 7.0

How reproducible:
100%

Steps to Reproduce:
0. backup your /etc/exports
1. echo "/dev/shm  *(ro)" >/etc/exports
2. service nfs restart
3. exportfs   or  showmount -e

Actual results:
service nfs restart           ok
exportfs output:
/dev/shm      <world>

Expected results:
service nfs restart           should output error/warn: 
and should not export success, exportfs no output

Additional info:
Comment 2 Yin.JianHong 2013-09-13 08:32:22 EDT
Debug, and review the code of exportfs,
find that: this is a bug of exportfs(also about kernel):

static int test_export(char *path, int with_fsid)
{
        char buf[1024];
        int fd, n;

        sprintf(buf, "-test-client- %s 3 %d -1 -1 0\n",
                path,
                with_fsid ? NFSEXP_FSID : 0);
        fd = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY);
        if (fd < 0)
                return 0;
        n = write(fd, buf, strlen(buf));
        close(fd);
        if (n < 0)
                return 0;
        return 1;
}

1. if the path is an tmpfs(no uuid), and with_fsid==0,
this function test_export still return 1 (write success). that's wrong.

2. and another problem: validate_export() just generate log and return void.
We think that validate_export() should return an int value to indicate whether the path can export. And in export_all(), should not export the path if invalid;

static void
export_all(int verbose)
{
        nfs_export      *exp;
        int             i;

        for (i = 0; i < MCL_MAXTYPES; i++) {
                for (exp = exportlist[i].p_head; exp; exp = exp->m_next) {
                        if (verbose)
                                printf("exporting %s:%s\n",
                                       exp->m_client->m_hostname,
                                       exp->m_export.e_path);
                        exp->m_xtabent = 1;
                        exp->m_mayexport = 1;
                        exp->m_changed = 1;
                        exp->m_warned = 0;
                        validate_export(exp);
                }
        }
}


static void <<<- should return int value to indicate whether the path can export
validate_export(nfs_export *exp)
{
Comment 3 Yin.JianHong 2013-09-14 02:52:48 EDT
#BEGIN
--- exportfs.c	2013-06-06 15:12:58.881567360 +0800
+++ exportfs.c.new	2013-09-14 14:50:56.719877598 +0800
@@ -475,6 +475,9 @@ validate_export(nfs_export *exp)
 			xlog(L_ERROR, "%s does not support NFS export", path);
 		return;
 
+	} else {
+		xlog(L_ERROR, "Assert: test_export() %s fail", path);
+		return;
 	}
 }

#END

this patch could avoid the test_export work fail.
Comment 4 Steve Dickson 2014-01-18 11:24:05 EST
The following error is now logged for file system requiring fsids

exportfs[4042]: exportfs: /dev/shm requires fsid= for NFS export
Comment 5 Yongcheng Yang 2017-05-02 00:15:41 EDT
This issue is actually that "exportfs" should NOT show the invalid entries.

For examples:
[root ~]# exportfs -ua
[root ~]# exportfs -i *:/not.exist
exportfs: Failed to stat /not.exist: No such file or directory
[root ~]# echo $?
1
[root ~]# exportfs 
/not.exist    	<world>  <<<<<<<<<<< Invalid path is exported anyway
[root ~]# 

However, as the rhel6 bug 1007627 and rhel5 bug 1007626 are both closed as WONTFIX, updating this one to be WONTFIX too. Please correct me if there's any concern.

Note You need to log in before you can comment on or make changes to this bug.