summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--support/export/client.c15
-rw-r--r--support/include/exportfs.h2
-rw-r--r--utils/mountd/auth.c9
3 files changed, 15 insertions, 11 deletions
diff --git a/support/export/client.c b/support/export/client.c
index 19b53aa..1754aa0 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -118,6 +118,7 @@ client_dup(nfs_client *clp, struct hostent *hp)
new = (nfs_client *) xmalloc(sizeof(*new));
memcpy(new, clp, sizeof(*new));
new->m_type = MCL_FQDN;
+ new->m_hostname = NULL;
client_init(new, (char *) hp->h_name, hp);
client_add(new);
@@ -127,14 +128,11 @@ client_dup(nfs_client *clp, struct hostent *hp)
static void
client_init(nfs_client *clp, const char *hname, struct hostent *hp)
{
- if (hp) {
- strncpy(clp->m_hostname, hp->h_name,
- sizeof (clp->m_hostname) - 1);
- } else {
- strncpy(clp->m_hostname, hname,
- sizeof (clp->m_hostname) - 1);
- }
- clp->m_hostname[sizeof (clp->m_hostname) - 1] = '\0';
+ xfree(clp->m_hostname);
+ if (hp)
+ clp->m_hostname = xstrdup(hp->h_name);
+ else
+ clp->m_hostname = xstrdup(hname);
clp->m_exported = 0;
clp->m_count = 0;
@@ -207,6 +205,7 @@ client_freeall(void)
head = clientlist + i;
while (*head) {
*head = (clp = *head)->m_next;
+ xfree(clp->m_hostname);
xfree(clp);
}
}
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
index 431b5ce..a491b1a 100644
--- a/support/include/exportfs.h
+++ b/support/include/exportfs.h
@@ -32,7 +32,7 @@ enum {
typedef struct mclient {
struct mclient * m_next;
- char m_hostname[NFSCLNT_IDMAX+1];
+ char * m_hostname;
int m_type;
int m_naddr;
struct in_addr m_addrlist[NFSCLNT_ADDRMAX];
diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c
index f7fe23d..950ea20 100644
--- a/utils/mountd/auth.c
+++ b/utils/mountd/auth.c
@@ -93,8 +93,13 @@ auth_authenticate_internal(char *what, struct sockaddr_in *caller,
*error = unknown_host;
if (!n)
return NULL;
- strcpy(my_client.m_hostname, *n?n:"DEFAULT");
- free(n);
+ free(my_client.m_hostname);
+ if (*n) {
+ my_client.m_hostname = n;
+ } else {
+ free(n);
+ my_client.m_hostname = xstrdup("DEFAULT");
+ }
my_client.m_naddr = 1;
my_exp.m_client = &my_client;