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
