Hi,

This patch remove the function _osl_getDomainName and replace it by a
_osl_gethostbyname_r. Next part of the previous patch. I think maybe
without this patch, there is some problems on Android with the function
getdomainname due to my previous patch, sorry.

Best regards

-- 
Arnaud Versini
From 57d12f3e9b2b82ae8b1d8a7397268b3742ba0d3e Mon Sep 17 00:00:00 2001
From: Arnaud Versini <[email protected]>
Date: Sun, 13 Nov 2011 16:01:31 +0100
Subject: [PATCH] Remove _osl_getDomainName and simplify
 _osl_getFullQualifiedDomainName

---
 sal/osl/unx/socket.c |  142 ++++---------------------------------------------
 1 files changed, 12 insertions(+), 130 deletions(-)

diff --git a/sal/osl/unx/socket.c b/sal/osl/unx/socket.c
index 9c33eaf..ed31a82 100644
--- a/sal/osl/unx/socket.c
+++ b/sal/osl/unx/socket.c
@@ -40,7 +40,6 @@
 
 #include "sockimpl.h"
 
-
 /* defines for poll */
 #ifdef HAVE_POLL_H
 #undef HAVE_POLL_H
@@ -809,142 +808,25 @@ static struct hostent* _osl_gethostbyname_r (
 #endif
 }
 
-static sal_Bool  _osl_getDomainName (sal_Char *buffer, sal_Int32 bufsiz)
-{
-    sal_Bool result = (getdomainname(buffer, bufsiz) == 0);
-    if  (!result) {
-        OSL_TRACE("osl_getDomainName failed. Errno: %d; %s\n",
-                      errno,
-                      strerror(errno));
-    }
-    return (result);
-}
-
 static sal_Char* _osl_getFullQualifiedDomainName (const sal_Char *pHostName)
 {
 #   define DOMAINNAME_LENGTH 512
-    sal_uInt32          nLengthOfHostName;
-    static sal_uInt32   nLengthOfDomainName = 0;
-    static sal_Char    *pDomainName = NULL;
-
-    sal_Char  *pFullQualifiedName;
-
-    /* get a '\0' terminated domainname */
-
-    /* read default domainname default from environment */
-    if (nLengthOfDomainName == 0)
-    {
-        sal_Char *pEnvDomain;
-
-        pEnvDomain = getenv ("STAR_OVERRIDE_DOMAINNAME");
-        if (pEnvDomain)
-        {
-            pDomainName = strdup (pEnvDomain);
-            nLengthOfDomainName = strlen (pDomainName);
-        }
-    }
-
-    if (nLengthOfDomainName == 0)
-    {
-        sal_Char pDomainNameBuffer[ DOMAINNAME_LENGTH ];
-
-        pDomainNameBuffer[0] = '\0';
-
-        if (_osl_getDomainName (pDomainNameBuffer, DOMAINNAME_LENGTH))
-        {
-            pDomainName = strdup (pDomainNameBuffer);
-            nLengthOfDomainName = strlen (pDomainName);
-        }
-    }
-
-    /* compose hostname and domainname */
-    nLengthOfHostName = strlen( pHostName );
-    pFullQualifiedName = (sal_Char*) malloc( (nLengthOfHostName + 1
-                            + nLengthOfDomainName + 1) * sizeof(sal_Char) );
-    memcpy( pFullQualifiedName, pHostName,
-        (nLengthOfHostName + 1) * sizeof(sal_Char) );
+    struct hostent  aHostByName;
+    struct hostent *pHostByName;
+    sal_Char        pQualifiedHostBuffer[ MAX_HOSTBUFFER_SIZE ];
+    sal_Char  *pFullQualifiedName = NULL;
+    int     nErrorNo;
 
-    if ( nLengthOfDomainName > 0 )
+    pHostByName = _osl_gethostbyname_r (
+        pHostName,
+        &aHostByName, pQualifiedHostBuffer,
+        sizeof(pQualifiedHostBuffer), &nErrorNo );
+    if (pHostByName != NULL)
     {
-        /* fqdn = hostname + '.' + domainname + '\0' */
-        pFullQualifiedName[ nLengthOfHostName ] = '.';
-        memcpy( pFullQualifiedName + nLengthOfHostName + 1, pDomainName,
-            nLengthOfDomainName + 1 );
+        pFullQualifiedName = strdup(pHostByName->h_name);
     }
-
-    /* check whether full-qualified name and hostname point to the same host
-     * should almost always be true */
-    if ( nLengthOfDomainName > 0 )
-    {
-        struct hostent *pQualifiedHostByName;
-        struct hostent *pHostByName;
-        sal_Bool        bHostsAreEqual;
-
-        /* buffer for calls to reentrant version of gethostbyname */
-        struct hostent  aHostByName, aQualifiedHostByName;
-        sal_Char        pHostBuffer[ MAX_HOSTBUFFER_SIZE ];
-        sal_Char        pQualifiedHostBuffer[ MAX_HOSTBUFFER_SIZE ];
-        int     nErrorNo;
-
-        pHostBuffer[0] = '\0';
-        pQualifiedHostBuffer[0] = '\0';
-
-        /* get list of addresses */
-        pQualifiedHostByName = _osl_gethostbyname_r (
-            pFullQualifiedName,
-            &aQualifiedHostByName, pQualifiedHostBuffer,
-            sizeof(pQualifiedHostBuffer), &nErrorNo );
-        pHostByName = _osl_gethostbyname_r (
-            pHostName,
-            &aHostByName, pHostBuffer,
-            sizeof(pHostBuffer), &nErrorNo );
-
-        /* compare addresses */
-        bHostsAreEqual = sal_False;
-        if ( pQualifiedHostByName && pHostByName )
-        {
-            sal_Char **p, **q;
-            struct in_addr in;
-
-            /* lists are expected to be (very) short */
-            for ( p = pQualifiedHostByName->h_addr_list; *p != NULL; p++ )
-            {
-                for ( q = pHostByName->h_addr_list; *q != NULL; q++ )
-                {
-                    /* in.s_addr may be in_addr_t or uint32_t or heaven knows */
-                    if ( memcmp( *p, *q, sizeof(in.s_addr) ) == 0 )
-                    {
-                        bHostsAreEqual = sal_True;
-                        break;
-                    }
-                }
-                if ( bHostsAreEqual )
-                    break;
-            }
-        }
-
-        /* very strange case, but have to believe it: reduce the
-         * full qualified name to the unqualified host name */
-        if ( !bHostsAreEqual )
-        {
-            sal_Char *pTmp;
-
-            OSL_TRACE("_osl_getFullQualifiedDomainName: "
-                      "suspect FQDN: %s\n", pFullQualifiedName);
-
-            pFullQualifiedName[ nLengthOfHostName ] = '\0';
-            pTmp = (sal_Char*)realloc ( pFullQualifiedName,
-                                (nLengthOfHostName + 1) * sizeof( sal_Char ));
-            if (pTmp)
-                pFullQualifiedName = pTmp;
-        }
-    }
-
-    /* always return a hostname looked up as carefully as possible
-     * this string must be freed by the caller */
     return pFullQualifiedName;
 }
-
 /*****************************************************************************/
 /* _osl_isFullQualifiedDomainName */
 /*****************************************************************************/
-- 
1.7.5.4

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to