/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_framework.hxx" #include namespace framework { #ifdef WNT //_________________________________________________________________________________________________________________ // Windows //_________________________________________________________________________________________________________________ #define UNICODE #if defined _MSC_VER #pragma warning(push, 1) #endif #include #if defined _MSC_VER #pragma warning(pop) #endif //_________________________________________________________________________________________________________________ // Win NT, Win 2000, Win XP //_________________________________________________________________________________________________________________ static DWORD WINAPI GetUserDomainW_NT( LPWSTR lpBuffer, DWORD nSize ) { return GetEnvironmentVariable( TEXT("USERDOMAIN"), lpBuffer, nSize ); } //_________________________________________________________________________________________________________________ // Win 9x,Win ME //_________________________________________________________________________________________________________________ static DWORD WINAPI GetUserDomainW_WINDOWS( LPWSTR lpBuffer, DWORD nSize ) { HKEY hkeyLogon; HKEY hkeyWorkgroup; DWORD dwResult = 0; if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("Network\\Logon"), 0, KEY_READ, &hkeyLogon ) ) { DWORD dwLogon = 0; DWORD dwLogonSize = sizeof(dwLogon); RegQueryValueEx( hkeyLogon, TEXT("LMLogon"), 0, NULL, (LPBYTE)&dwLogon, &dwLogonSize ); RegCloseKey( hkeyLogon ); if ( dwLogon ) { HKEY hkeyNetworkProvider; if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Services\\MSNP32\\NetworkProvider"), 0, KEY_READ, &hkeyNetworkProvider ) ) { DWORD dwBufferSize = nSize; LONG lResult = RegQueryValueEx( hkeyNetworkProvider, TEXT("AuthenticatingAgent"), 0, NULL, (LPBYTE)lpBuffer, &dwBufferSize ); if ( ERROR_SUCCESS == lResult || ERROR_MORE_DATA == lResult ) dwResult = dwBufferSize / sizeof(TCHAR); RegCloseKey( hkeyNetworkProvider ); } } } else if ( ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Services\\VxD\\VNETSUP"), 0, KEY_READ, &hkeyWorkgroup ) ) { DWORD dwBufferSize = nSize; LONG lResult = RegQueryValueEx( hkeyWorkgroup, TEXT("Workgroup"), 0, NULL, (LPBYTE)lpBuffer, &dwBufferSize ); if ( ERROR_SUCCESS == lResult || ERROR_MORE_DATA == lResult ) dwResult = dwBufferSize / sizeof(TCHAR); RegCloseKey( hkeyWorkgroup ); } return dwResult; } static rtl::OUString GetUserDomain() { sal_Unicode aBuffer[256]; long nVersion = GetVersion(); DWORD nResult; if ( nVersion < 0 ) nResult = GetUserDomainW_WINDOWS( reinterpret_cast(aBuffer), sizeof( aBuffer ) ); else nResult = GetUserDomainW_NT( reinterpret_cast(aBuffer), sizeof( aBuffer ) ); if ( nResult > 0 ) return rtl::OUString( aBuffer ); else return rtl::OUString(); } //_________________________________________________________________________________________________________________ // Windows //_________________________________________________________________________________________________________________ rtl::OUString NetworkDomain::GetYPDomainName() { return ::rtl::OUString(); } rtl::OUString NetworkDomain::GetNTDomainName() { return GetUserDomain(); } #elif defined( UNIX ) #include #include #include #include //_________________________________________________________________________________________________________________ // Unix //_________________________________________________________________________________________________________________ #if defined( SOLARIS ) //_________________________________________________________________________________________________________________ // Solaris //_________________________________________________________________________________________________________________ #include #include static rtl_uString *getDomainName() { /* Initialize and assume failure */ rtl_uString *ustrDomainName = NULL; char szBuffer[256]; long nCopied = sizeof(szBuffer); char *pBuffer = szBuffer; long nBufSize; do { nBufSize = nCopied; nCopied = sysinfo( SI_SRPC_DOMAIN, pBuffer, nBufSize ); /* If nCopied is greater than buffersize we need to allocate a buffer with suitable size */ if ( nCopied > nBufSize ) pBuffer = (char *)alloca( nCopied ); } while ( nCopied > nBufSize ); if ( -1 != nCopied ) { rtl_string2UString( &ustrDomainName, pBuffer, nCopied - 1, osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); } return ustrDomainName; } #elif defined( LINUX ) /* endif SOLARIS */ //_________________________________________________________________________________________________________________ // Linux //_________________________________________________________________________________________________________________ #include #include static rtl_uString *getDomainName() { /* Initialize and assume failure */ rtl_uString *ustrDomainName = NULL; char *pBuffer; int result; size_t nBufSize = 0; do { nBufSize += 256; /* Increase buffer size by steps of 256 bytes */ pBuffer = (char *)alloca( nBufSize ); result = getdomainname( pBuffer, nBufSize ); /* If buffersize in not large enough -1 is returned and errno is set to EINVAL. This only applies to libc. With glibc the name is truncated. */ } while ( -1 == result && EINVAL == errno ); if ( 0 == result ) { rtl_string2UString( &ustrDomainName, pBuffer, strlen( pBuffer ), osl_getThreadTextEncoding(), OSTRING_TO_OUSTRING_CVTFLAGS ); } return ustrDomainName; } #else /* LINUX */ //_________________________________________________________________________________________________________________ // Other Unix //_________________________________________________________________________________________________________________ static rtl_uString *getDomainName() { return NULL; } #endif //_________________________________________________________________________________________________________________ // Unix //_________________________________________________________________________________________________________________ rtl::OUString NetworkDomain::GetYPDomainName() { rtl_uString* pResult = getDomainName(); if ( pResult ) return rtl::OUString( pResult ); else return rtl::OUString(); } rtl::OUString NetworkDomain::GetNTDomainName() { return ::rtl::OUString(); } #else /* UNIX */ //_________________________________________________________________________________________________________________ // Other operating systems (non-Windows and non-Unix) //_________________________________________________________________________________________________________________ rtl::OUString NetworkDomain::GetYPDomainName() { return rtl::OUString(); } rtl::OUString NetworkDomain::GetNTDomainName() { return rtl::OUString(); } #endif } // namespace framework