diff options
author | Jeff Layton <jlayton@redhat.com> | 2007-09-27 06:53:53 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-09-28 11:39:56 +1000 |
commit | 4c337e2131123c339bc4921779b57b69b77be2fd (patch) | |
tree | 2aa76fb9609a81e3945bc8cd2cf21c209e5054b0 /support/nfs | |
parent | 1cecd88106230fc9a8c3527bcdf4195150e9ad64 (diff) | |
download | nfs-utils-4c337e2131123c339bc4921779b57b69b77be2fd.tar.gz nfs-utils-4c337e2131123c339bc4921779b57b69b77be2fd.tar.xz nfs-utils-4c337e2131123c339bc4921779b57b69b77be2fd.zip |
rpc.mountd: make exportent->e_hostname a dynamically-allocated string
This makes the e_hostname field of the exportent into a pointer to a
dynamically allocated string. This is necessary since this is field is
often filled out from the m_hostname. This too adds a few
micro-optimizations as we can avoid copying the string in some places
and simply pass a pointer to the original string instead.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: Steve Dickson <steved@redhat.com>
Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'support/nfs')
-rw-r--r-- | support/nfs/exports.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/support/nfs/exports.c b/support/nfs/exports.c index c82bb0e..6b56708 100644 --- a/support/nfs/exports.c +++ b/support/nfs/exports.c @@ -176,13 +176,8 @@ getexportent(int fromkernel, int fromexports) if (!has_default_opts) xlog(L_WARNING, "No options for %s %s: suggest %s(sync) to avoid warning", ee.e_path, exp, exp); } - if (strlen(hostname) >= sizeof(ee.e_hostname)) { - syntaxerr("client name too long"); - export_errno = EINVAL; - return NULL; - } - strncpy(ee.e_hostname, hostname, sizeof (ee.e_hostname) - 1); - ee.e_hostname[sizeof (ee.e_hostname) - 1] = '\0'; + xfree(ee.e_hostname); + ee.e_hostname = xstrdup(hostname); if (parseopts(opt, &ee, fromexports && !has_default_subtree_opts, NULL) < 0) return NULL; @@ -335,6 +330,7 @@ dupexportent(struct exportent *dst, struct exportent *src) dst->e_mountpoint = strdup(src->e_mountpoint); if (src->e_fslocdata) dst->e_fslocdata = strdup(src->e_fslocdata); + dst->e_hostname = NULL; } struct exportent * @@ -355,12 +351,9 @@ mkexportent(char *hname, char *path, char *options) ee.e_nsqgids = 0; ee.e_uuid = NULL; - if (strlen(hname) >= sizeof(ee.e_hostname)) { - xlog(L_WARNING, "client name %s too long", hname); - return NULL; - } - strncpy(ee.e_hostname, hname, sizeof (ee.e_hostname) - 1); - ee.e_hostname[sizeof (ee.e_hostname) - 1] = '\0'; + xfree(ee.e_hostname); + ee.e_hostname = xstrdup(hname); + if (strlen(path) >= sizeof(ee.e_path)) { xlog(L_WARNING, "path name %s too long", path); return NULL; |