]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
libexport.a: export_find() should handle address parsing errors
authorChuck Lever <chuck.lever@oracle.com>
Fri, 16 Apr 2010 17:03:20 +0000 (13:03 -0400)
committerSteve Dickson <steved@redhat.com>
Fri, 16 Apr 2010 17:03:20 +0000 (13:03 -0400)
An address mask parsing error can cause client_init(), and therefore
client_dup(), to make our process exit suddenly.  Soon we want to add
more complex address parsing in client_init(), so we need this
interface to be a little more robust.

Since export_find() can return NULL in some cases, it can handle NULL
returns from its subroutines if an address parsing error occurs, or if
memory is exhausted.  Allow for client_dup() to return NULL instead of
exiting sideways.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
support/export/export.c

index ddc8a8482e58b9a33186c454b44b9c528dfbe041..3e4da699091110645362457b3d2f3e264949233e 100644 (file)
@@ -129,6 +129,10 @@ export_dup(nfs_export *exp, struct hostent *hp)
        if (exp->m_export.e_hostname)
                new->m_export.e_hostname = xstrdup(exp->m_export.e_hostname);
        clp = client_dup(exp->m_client, hp);
        if (exp->m_export.e_hostname)
                new->m_export.e_hostname = xstrdup(exp->m_export.e_hostname);
        clp = client_dup(exp->m_client, hp);
+       if (clp == NULL) {
+               export_free(new);
+               return NULL;
+       }
        clp->m_count++;
        new->m_client = clp;
        new->m_mayexport = exp->m_mayexport;
        clp->m_count++;
        new->m_client = clp;
        new->m_mayexport = exp->m_mayexport;