Contrary to the comment above its definition, the field m_path always
has the same value as e_path: the *only* modifications of m_path are all
of the form:
strncpy(exp->m_export.m_path, exp->m_export.e_path,
sizeof (exp->m_export.m_path) - 1);
exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0';
So m_path is always just a copy of e_path. In places where we need to
store a path to a submount of a CROSSMNT-exported filesystem, as in
cache.c, we just use a local variable.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
-
-void
-export_reset(nfs_export *exp)
-{
- if (!exp)
- return;
-
- /* Restore m_path. */
- strncpy(exp->m_export.m_path, exp->m_export.e_path,
- sizeof (exp->m_export.m_path) - 1);
- exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0';
-}
nfs_client *clp = exp->m_client;
struct stat stb;
nfs_client *clp = exp->m_client;
struct stat stb;
- if (stat(exp->m_export.m_path, &stb) < 0)
+ if (stat(exp->m_export.e_path, &stb) < 0)
return 0;
memset(exparg, 0, sizeof(*exparg));
return 0;
memset(exparg, 0, sizeof(*exparg));
- strncpy(exparg->ex_path, exp->m_export.m_path,
+ strncpy(exparg->ex_path, exp->m_export.e_path,
sizeof (exparg->ex_path) - 1);
strncpy(exparg->ex_client, clp->m_hostname,
sizeof (exparg->ex_client) - 1);
sizeof (exparg->ex_path) - 1);
strncpy(exparg->ex_client, clp->m_hostname,
sizeof (exparg->ex_client) - 1);
struct exportent {
char * e_hostname;
char e_path[NFS_MAXPATHLEN+1];
struct exportent {
char * e_hostname;
char e_path[NFS_MAXPATHLEN+1];
- /* The mount path may be different from the exported path due
- to submount. It may change for every mount. The idea is we
- set m_path every time when we process a mount. We should not
- use it for anything else. */
- char m_path[NFS_MAXPATHLEN+1];
int e_flags;
int e_anonuid;
int e_anongid;
int e_flags;
int e_anonuid;
int e_anongid;
if (ok <= 0)
return NULL;
if (ok <= 0)
return NULL;
- strncpy (def_ee.m_path, def_ee.e_path, sizeof (def_ee.m_path) - 1);
- def_ee.m_path [sizeof (def_ee.m_path) - 1] = '\0';
ok = getexport(exp, sizeof(exp));
}
if (ok < 0) {
ok = getexport(exp, sizeof(exp));
}
if (ok < 0) {
rpath[sizeof (rpath) - 1] = '\0';
strncpy(ee.e_path, rpath, sizeof (ee.e_path) - 1);
ee.e_path[sizeof (ee.e_path) - 1] = '\0';
rpath[sizeof (rpath) - 1] = '\0';
strncpy(ee.e_path, rpath, sizeof (ee.e_path) - 1);
ee.e_path[sizeof (ee.e_path) - 1] = '\0';
- strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1);
- ee.m_path [sizeof (ee.m_path) - 1] = '\0';
}
strncpy(ee.e_path, path, sizeof (ee.e_path));
ee.e_path[sizeof (ee.e_path) - 1] = '\0';
}
strncpy(ee.e_path, path, sizeof (ee.e_path));
ee.e_path[sizeof (ee.e_path) - 1] = '\0';
- strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1);
- ee.m_path [sizeof (ee.m_path) - 1] = '\0';
if (parseopts(options, &ee, 0, NULL) < 0)
return NULL;
return ⅇ
if (parseopts(options, &ee, 0, NULL) < 0)
return NULL;
return ⅇ
- if (!new_cache)
- export_reset (exp);
-
mountlist_del(inet_ntoa(sin->sin_addr), p);
return 1;
}
mountlist_del(inet_ntoa(sin->sin_addr), p);
return 1;
}
} else if (stat(p, &stb) < 0) {
xlog(L_WARNING, "can't stat exported dir %s: %s",
p, strerror(errno));
} else if (stat(p, &stb) < 0) {
xlog(L_WARNING, "can't stat exported dir %s: %s",
p, strerror(errno));
res->pc_mask[0] = 0;
res->pc_mask[1] = 0;
res->pc_mask[0] = 0;
res->pc_mask[1] = 0;
if (fh != NULL) {
mountlist_add(inet_ntoa(sin->sin_addr), p);
*error = NFS_OK;
if (fh != NULL) {
mountlist_add(inet_ntoa(sin->sin_addr), p);
*error = NFS_OK;
return fh;
}
xlog(L_WARNING, "getfh failed: %s", strerror(errno));
*error = NFSERR_ACCES;
}
return fh;
}
xlog(L_WARNING, "getfh failed: %s", strerror(errno));
*error = NFSERR_ACCES;
}
for (i = 0; i < MCL_MAXTYPES; i++) {
for (exp = exportlist[i]; exp; exp = exp->m_next) {
for (e = elist; e != NULL; e = e->ex_next) {
for (i = 0; i < MCL_MAXTYPES; i++) {
for (exp = exportlist[i]; exp; exp = exp->m_next) {
for (e = elist; e != NULL; e = e->ex_next) {
- if (!strcmp(exp->m_export.m_path, e->ex_dir))
+ if (!strcmp(exp->m_export.e_path, e->ex_dir))
break;
}
if (!e) {
e = (struct exportnode *) xmalloc(sizeof(*e));
e->ex_next = elist;
e->ex_groups = NULL;
break;
}
if (!e) {
e = (struct exportnode *) xmalloc(sizeof(*e));
e->ex_next = elist;
e->ex_groups = NULL;
- e->ex_dir = xstrdup(exp->m_export.m_path);
+ e->ex_dir = xstrdup(exp->m_export.e_path);
}
while ((rep = getrmtabent(1, NULL)) != NULL) {
if (strcmp(rep->r_client, hp->h_name) == 0 &&
}
while ((rep = getrmtabent(1, NULL)) != NULL) {
if (strcmp(rep->r_client, hp->h_name) == 0 &&
- (exp = auth_authenticate("umountall", sin, rep->r_path))) {
- export_reset(exp);
+ (exp = auth_authenticate("umountall", sin, rep->r_path)))
fputrmtabent(fp, rep, NULL);
}
if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {
fputrmtabent(fp, rep, NULL);
}
if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) {