1*87d2adbcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*87d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*87d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*87d2adbcSAndrew Rist * distributed with this work for additional information 6*87d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*87d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*87d2adbcSAndrew Rist * "License"); you may not use this file except in compliance 9*87d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at 10*87d2adbcSAndrew Rist * 11*87d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*87d2adbcSAndrew Rist * 13*87d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*87d2adbcSAndrew Rist * software distributed under the License is distributed on an 15*87d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*87d2adbcSAndrew Rist * KIND, either express or implied. See the License for the 17*87d2adbcSAndrew Rist * specific language governing permissions and limitations 18*87d2adbcSAndrew Rist * under the License. 19*87d2adbcSAndrew Rist * 20*87d2adbcSAndrew Rist *************************************************************/ 21*87d2adbcSAndrew Rist 22*87d2adbcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sal.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir //------------------------------------------------------------------------ 28cdf0e10cSrcweir // header file 29cdf0e10cSrcweir //------------------------------------------------------------------------ 30cdf0e10cSrcweir #include <osl_Security_Const.h> 31cdf0e10cSrcweir 32cdf0e10cSrcweir using namespace osl; 33cdf0e10cSrcweir using namespace rtl; 34cdf0e10cSrcweir 35cdf0e10cSrcweir 36cdf0e10cSrcweir //------------------------------------------------------------------------ 37cdf0e10cSrcweir // helper functions and classes 38cdf0e10cSrcweir //------------------------------------------------------------------------ 39cdf0e10cSrcweir 40cdf0e10cSrcweir /** print Boolean value. 41cdf0e10cSrcweir */ 42cdf0e10cSrcweir inline void printBool( sal_Bool bOk ) 43cdf0e10cSrcweir { 44cdf0e10cSrcweir //t_print("#printBool# " ); 45cdf0e10cSrcweir ( sal_True == bOk ) ? t_print("TRUE!\n" ): t_print("FALSE!\n" ); 46cdf0e10cSrcweir } 47cdf0e10cSrcweir 48cdf0e10cSrcweir /** print a UNI_CODE String. 49cdf0e10cSrcweir */ 50cdf0e10cSrcweir inline void printUString( const ::rtl::OUString & str ) 51cdf0e10cSrcweir { 52cdf0e10cSrcweir rtl::OString aString; 53cdf0e10cSrcweir 54cdf0e10cSrcweir //t_print("#printUString_u# " ); 55cdf0e10cSrcweir aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ); 56cdf0e10cSrcweir t_print("%s\n", aString.getStr( ) ); 57cdf0e10cSrcweir } 58cdf0e10cSrcweir 59cdf0e10cSrcweir 60cdf0e10cSrcweir //------------------------------------------------------------------------ 61cdf0e10cSrcweir // test code start here 62cdf0e10cSrcweir //------------------------------------------------------------------------ 63cdf0e10cSrcweir 64cdf0e10cSrcweir namespace osl_Security 65cdf0e10cSrcweir { 66cdf0e10cSrcweir 67cdf0e10cSrcweir /** testing the method: 68cdf0e10cSrcweir Security() 69cdf0e10cSrcweir */ 70cdf0e10cSrcweir class ctors : public CppUnit::TestFixture 71cdf0e10cSrcweir { 72cdf0e10cSrcweir public: 73cdf0e10cSrcweir sal_Bool bRes, bRes1; 74cdf0e10cSrcweir 75cdf0e10cSrcweir void ctors_001( ) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir ::osl::Security aSec; 78cdf0e10cSrcweir 79cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: create a security its handle should not be NULL.", 80cdf0e10cSrcweir aSec.getHandle( ) != NULL ); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors ); 84cdf0e10cSrcweir CPPUNIT_TEST( ctors_001 ); 85cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 86cdf0e10cSrcweir }; // class ctors 87cdf0e10cSrcweir 88cdf0e10cSrcweir 89cdf0e10cSrcweir /** testing the methods: 90cdf0e10cSrcweir inline sal_Bool SAL_CALL logonUser(const ::rtl::OUString& strName, 91cdf0e10cSrcweir const ::rtl::OUString& strPasswd); 92cdf0e10cSrcweir inline sal_Bool SAL_CALL logonUser(const ::rtl::OUString & strName, 93cdf0e10cSrcweir const ::rtl::OUString & strPasswd, 94cdf0e10cSrcweir const ::rtl::OUString & strFileServer); 95cdf0e10cSrcweir */ 96cdf0e10cSrcweir class logonUser : public CppUnit::TestFixture 97cdf0e10cSrcweir { 98cdf0e10cSrcweir public: 99cdf0e10cSrcweir sal_Bool bRes; 100cdf0e10cSrcweir 101cdf0e10cSrcweir void logonUser_user_pwd( ) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir ::osl::Security aSec; 104cdf0e10cSrcweir bRes = aSec.logonUser( aLogonUser, aLogonPasswd ); 105cdf0e10cSrcweir 106cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd, passed in (UNX), failed in (W32).", 107cdf0e10cSrcweir ( sal_True == bRes ) ); 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir void logonUser_user_pwd_server( ) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir ::osl::Security aSec; 113cdf0e10cSrcweir bRes = aSec.logonUser( aLogonUser, aLogonPasswd, aFileServer ); 114cdf0e10cSrcweir 115cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: check logon user through forwarded user name, pwd and server name, failed in (UNX)(W32).", 116cdf0e10cSrcweir ( sal_True == bRes ) ); 117cdf0e10cSrcweir } 118cdf0e10cSrcweir 119cdf0e10cSrcweir 120cdf0e10cSrcweir CPPUNIT_TEST_SUITE( logonUser ); 121cdf0e10cSrcweir if ( !aStringForward.equals( aNullURL ) && aStringForward.indexOf( (sal_Unicode)' ' ) != -1 && ( aStringForward.indexOf( ( sal_Unicode ) ' ' ) == aStringForward.lastIndexOf( ( sal_Unicode ) ' ' ) ) ) 122cdf0e10cSrcweir /// if user name and passwd are forwarded 123cdf0e10cSrcweir { 124cdf0e10cSrcweir CPPUNIT_TEST( logonUser_user_pwd ); 125cdf0e10cSrcweir } 126cdf0e10cSrcweir if ( !aStringForward.equals( aNullURL ) && aStringForward.indexOf( (sal_Unicode)' ' ) != -1 && ( aStringForward.indexOf( ( sal_Unicode ) ' ' ) != aStringForward.lastIndexOf( ( sal_Unicode ) ' ' ) ) ) 127cdf0e10cSrcweir /// if user name and passwd and file server are forwarded 128cdf0e10cSrcweir { 129cdf0e10cSrcweir CPPUNIT_TEST( logonUser_user_pwd_server ); 130cdf0e10cSrcweir } 131cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 132cdf0e10cSrcweir }; // class logonUser 133cdf0e10cSrcweir 134cdf0e10cSrcweir 135cdf0e10cSrcweir /** testing the method: 136cdf0e10cSrcweir inline sal_Bool Security::getUserIdent( rtl::OUString& strIdent) const 137cdf0e10cSrcweir */ 138cdf0e10cSrcweir class getUserIdent : public CppUnit::TestFixture 139cdf0e10cSrcweir { 140cdf0e10cSrcweir public: 141cdf0e10cSrcweir sal_Bool bRes, bRes1; 142cdf0e10cSrcweir 143cdf0e10cSrcweir void getUserIdent_001( ) 144cdf0e10cSrcweir { 145cdf0e10cSrcweir ::osl::Security aSec; 146cdf0e10cSrcweir ::rtl::OUString strID; 147cdf0e10cSrcweir bRes = aSec.getUserIdent( strID ); 148cdf0e10cSrcweir 149cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserID and compare it with names got at the beginning of the test.", 150cdf0e10cSrcweir ( sal_True == strUserID.equals( strID ) ) && ( sal_True == bRes )); 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getUserIdent ); 154cdf0e10cSrcweir CPPUNIT_TEST( getUserIdent_001 ); 155cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 156cdf0e10cSrcweir }; // class getUserIdent 157cdf0e10cSrcweir 158cdf0e10cSrcweir 159cdf0e10cSrcweir /** testing the method: 160cdf0e10cSrcweir inline sal_Bool SAL_CALL getUserName( ::rtl::OUString& strName) const; 161cdf0e10cSrcweir */ 162cdf0e10cSrcweir class getUserName : public CppUnit::TestFixture 163cdf0e10cSrcweir { 164cdf0e10cSrcweir public: 165cdf0e10cSrcweir sal_Bool bRes, bRes1; 166cdf0e10cSrcweir 167cdf0e10cSrcweir void getUserName_001( ) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir ::osl::Security aSec; 170cdf0e10cSrcweir #ifdef WNT 171cdf0e10cSrcweir ::rtl::OUString strName( strUserName ), strGetName; 172cdf0e10cSrcweir #else 173cdf0e10cSrcweir ::rtl::OUString strName( strUserName ), strGetName; 174cdf0e10cSrcweir #endif 175cdf0e10cSrcweir bRes = aSec.getUserName( strGetName ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir sal_Int32 nPos = -1; 178cdf0e10cSrcweir if (strName.getLength() > 0) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir nPos = strGetName.indexOf(strName); 181cdf0e10cSrcweir } 182cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: get UserName and compare it with names got at the beginning of the test.", 183cdf0e10cSrcweir ( nPos >= 0 ) && ( sal_True == bRes ) ); 184cdf0e10cSrcweir } 185cdf0e10cSrcweir 186cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getUserName ); 187cdf0e10cSrcweir CPPUNIT_TEST( getUserName_001 ); 188cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 189cdf0e10cSrcweir }; // class getUserName 190cdf0e10cSrcweir 191cdf0e10cSrcweir 192cdf0e10cSrcweir 193cdf0e10cSrcweir /** testing the method: 194cdf0e10cSrcweir inline sal_Bool SAL_CALL getHomeDir( ::rtl::OUString& strDirectory) const; 195cdf0e10cSrcweir */ 196cdf0e10cSrcweir class getHomeDir : public CppUnit::TestFixture 197cdf0e10cSrcweir { 198cdf0e10cSrcweir public: 199cdf0e10cSrcweir sal_Bool bRes, bRes1; 200cdf0e10cSrcweir 201cdf0e10cSrcweir void getHomeDir_001( ) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir ::osl::Security aSec; 204cdf0e10cSrcweir ::rtl::OUString strHome; 205cdf0e10cSrcweir bRes = aSec.getHomeDir( strHome ); 206cdf0e10cSrcweir 207cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: getHomeDir and compare it with the info we get at the beginning.", 208cdf0e10cSrcweir ( sal_True == strHomeDirectory.equals( strHome ) ) && ( sal_True == bRes ) ); 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getHomeDir ); 212cdf0e10cSrcweir CPPUNIT_TEST( getHomeDir_001 ); 213cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 214cdf0e10cSrcweir }; // class getHomeDir 215cdf0e10cSrcweir 216cdf0e10cSrcweir /** testing the method: 217cdf0e10cSrcweir inline sal_Bool Security::getConfigDir( rtl::OUString& strDirectory ) const 218cdf0e10cSrcweir */ 219cdf0e10cSrcweir class getConfigDir : public CppUnit::TestFixture 220cdf0e10cSrcweir { 221cdf0e10cSrcweir public: 222cdf0e10cSrcweir sal_Bool bRes, bRes1; 223cdf0e10cSrcweir 224cdf0e10cSrcweir void getConfigDir_001( ) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir ::osl::Security aSec; 227cdf0e10cSrcweir ::rtl::OUString strConfig; 228cdf0e10cSrcweir bRes = aSec.getConfigDir( strConfig ); 229cdf0e10cSrcweir 230cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: getHomeDir and compare it with the info we get at the beginning.", 231cdf0e10cSrcweir ( sal_True == strConfigDirectory.equals( strConfig ) ) && ( sal_True == bRes ) ); 232cdf0e10cSrcweir } 233cdf0e10cSrcweir 234cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getConfigDir ); 235cdf0e10cSrcweir CPPUNIT_TEST( getConfigDir_001 ); 236cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 237cdf0e10cSrcweir }; // class getConfigDir 238cdf0e10cSrcweir 239cdf0e10cSrcweir /** testing the method: 240cdf0e10cSrcweir inline sal_Bool SAL_CALL isAdministrator() const; 241cdf0e10cSrcweir */ 242cdf0e10cSrcweir class isAdministrator : public CppUnit::TestFixture 243cdf0e10cSrcweir { 244cdf0e10cSrcweir public: 245cdf0e10cSrcweir sal_Bool bRes; 246cdf0e10cSrcweir 247cdf0e10cSrcweir void isAdministrator_001( ) 248cdf0e10cSrcweir { 249cdf0e10cSrcweir ::osl::Security aSec; 250cdf0e10cSrcweir bRes = aSec.isAdministrator( ); 251cdf0e10cSrcweir 252cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: check if the user is administrator at beginning, compare here.", 253cdf0e10cSrcweir bRes == isAdmin ); 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir CPPUNIT_TEST_SUITE( isAdministrator ); 257cdf0e10cSrcweir CPPUNIT_TEST( isAdministrator_001 ); 258cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 259cdf0e10cSrcweir }; // class isAdministrator 260cdf0e10cSrcweir 261cdf0e10cSrcweir /** testing the method: 262cdf0e10cSrcweir inline oslSecurity getHandle() const; 263cdf0e10cSrcweir */ 264cdf0e10cSrcweir class getHandle : public CppUnit::TestFixture 265cdf0e10cSrcweir { 266cdf0e10cSrcweir public: 267cdf0e10cSrcweir sal_Bool bRes; 268cdf0e10cSrcweir 269cdf0e10cSrcweir void getHandle_001( ) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir ::osl::Security aSec; 272cdf0e10cSrcweir bRes = aSec.isAdministrator( ) == osl_isAdministrator( aSec.getHandle( ) ); 273cdf0e10cSrcweir 274cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#test comment#: use getHandle function to call C API.", 275cdf0e10cSrcweir bRes == sal_True ); 276cdf0e10cSrcweir } 277cdf0e10cSrcweir 278cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getHandle ); 279cdf0e10cSrcweir CPPUNIT_TEST( getHandle_001 ); 280cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 281cdf0e10cSrcweir }; // class getHandle 282cdf0e10cSrcweir 283cdf0e10cSrcweir 284cdf0e10cSrcweir class UserProfile : public CppUnit::TestFixture 285cdf0e10cSrcweir { 286cdf0e10cSrcweir public: 287cdf0e10cSrcweir 288cdf0e10cSrcweir void loadUserProfile( ) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir ::osl::Security aSec; 291cdf0e10cSrcweir sal_Bool bValue = osl_loadUserProfile(aSec.getHandle()); 292cdf0e10cSrcweir 293cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "empty function.", bValue == sal_False ); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir void unloadUserProfile( ) 297cdf0e10cSrcweir { 298cdf0e10cSrcweir ::osl::Security aSec; 299cdf0e10cSrcweir osl_unloadUserProfile(aSec.getHandle()); 300cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "empty function.", sal_True ); 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir CPPUNIT_TEST_SUITE( UserProfile ); 304cdf0e10cSrcweir CPPUNIT_TEST( loadUserProfile ); 305cdf0e10cSrcweir CPPUNIT_TEST( unloadUserProfile ); 306cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 307cdf0e10cSrcweir }; // class UserProfile 308cdf0e10cSrcweir 309cdf0e10cSrcweir class loginUserOnFileServer : public CppUnit::TestFixture 310cdf0e10cSrcweir { 311cdf0e10cSrcweir public: 312cdf0e10cSrcweir 313cdf0e10cSrcweir void loginUserOnFileServer_001( ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir rtl::OUString suUserName; 316cdf0e10cSrcweir rtl::OUString suPassword; 317cdf0e10cSrcweir rtl::OUString suFileServer; 318cdf0e10cSrcweir ::osl::Security aSec; 319cdf0e10cSrcweir oslSecurity pSec = aSec.getHandle(); 320cdf0e10cSrcweir 321cdf0e10cSrcweir oslSecurityError erg = osl_loginUserOnFileServer(suUserName.pData, suPassword.pData, suFileServer.pData, &pSec); 322cdf0e10cSrcweir 323cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "empty function.", erg == osl_Security_E_UserUnknown ); 324cdf0e10cSrcweir } 325cdf0e10cSrcweir 326cdf0e10cSrcweir CPPUNIT_TEST_SUITE( loginUserOnFileServer ); 327cdf0e10cSrcweir CPPUNIT_TEST( loginUserOnFileServer_001 ); 328cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( ); 329cdf0e10cSrcweir }; // class loginUserOnFileServer 330cdf0e10cSrcweir 331cdf0e10cSrcweir // ----------------------------------------------------------------------------- 332cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::ctors, "osl_Security"); 333cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::logonUser, "osl_Security"); 334cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::getUserIdent, "osl_Security"); 335cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::getUserName, "osl_Security"); 336cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::getHomeDir, "osl_Security"); 337cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::getConfigDir, "osl_Security"); 338cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::isAdministrator, "osl_Security"); 339cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::getHandle, "osl_Security"); 340cdf0e10cSrcweir 341cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::UserProfile, "osl_Security"); 342cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Security::loginUserOnFileServer, "osl_Security"); 343cdf0e10cSrcweir 344cdf0e10cSrcweir // ----------------------------------------------------------------------------- 345cdf0e10cSrcweir 346cdf0e10cSrcweir } // namespace osl_Security 347cdf0e10cSrcweir 348cdf0e10cSrcweir 349cdf0e10cSrcweir // ----------------------------------------------------------------------------- 350cdf0e10cSrcweir 351cdf0e10cSrcweir // this macro creates an empty function, which will called by the RegisterAllFunctions() 352cdf0e10cSrcweir // to let the user the possibility to also register some functions by hand. 353cdf0e10cSrcweir 354cdf0e10cSrcweir /** to do some initialized work, we replace the NOADDITIONAL macro with the initialize work which 355cdf0e10cSrcweir get current user name, . 356cdf0e10cSrcweir */ 357cdf0e10cSrcweir 358cdf0e10cSrcweir void RegisterAdditionalFunctions(FktRegFuncPtr) 359cdf0e10cSrcweir { 360cdf0e10cSrcweir /// start message 361cdf0e10cSrcweir t_print("#Initializing ...\n" ); 362cdf0e10cSrcweir t_print("#\n#logonUser function need root/Administrator account to test.\n" ); 363cdf0e10cSrcweir t_print("#You can test by login with root/Administrator, and excute:\n" ); 364cdf0e10cSrcweir t_print("#testshl2 -forward \"username password\" ../../../wntmsci9/bin/Security.dll\n" ); 365cdf0e10cSrcweir t_print("# where username and password are forwarded account info.\n" ); 366cdf0e10cSrcweir t_print("#if no text forwarded, this function will be skipped.\n" ); 367cdf0e10cSrcweir 368cdf0e10cSrcweir /// get system information 369cdf0e10cSrcweir #if ( defined UNX ) || ( defined OS2 ) 370cdf0e10cSrcweir /// some initialization work for UNIX OS 371cdf0e10cSrcweir 372cdf0e10cSrcweir 373cdf0e10cSrcweir struct passwd* pw; 374cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "getpwuid: no password entry\n",( pw = getpwuid( getuid() ) ) != NULL ); 375cdf0e10cSrcweir 376cdf0e10cSrcweir /// get user ID; 377cdf0e10cSrcweir strUserID = ::rtl::OUString::valueOf( ( sal_Int32 )getuid( ) ); 378cdf0e10cSrcweir 379cdf0e10cSrcweir /// get user Name; 380cdf0e10cSrcweir strUserName = ::rtl::OUString::createFromAscii( pw->pw_name ); 381cdf0e10cSrcweir 382cdf0e10cSrcweir /// get home directory; 383cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#Convert from system path to URL failed.", 384cdf0e10cSrcweir ::osl::File::E_None == ::osl::File::getFileURLFromSystemPath( ::rtl::OUString::createFromAscii( pw->pw_dir ), strHomeDirectory ) ); 385cdf0e10cSrcweir 386cdf0e10cSrcweir /// get config directory; 387cdf0e10cSrcweir strConfigDirectory = strHomeDirectory.copy(0); 388cdf0e10cSrcweir 389cdf0e10cSrcweir /// is administrator; 390cdf0e10cSrcweir if( !getuid( ) ) 391cdf0e10cSrcweir isAdmin = sal_True; 392cdf0e10cSrcweir 393cdf0e10cSrcweir #endif 394cdf0e10cSrcweir #if defined ( WNT ) 395cdf0e10cSrcweir /// some initialization work for Windows OS 396cdf0e10cSrcweir 397cdf0e10cSrcweir 398cdf0e10cSrcweir /// Get the user name, computer name, user home directory. 399cdf0e10cSrcweir LPTSTR lpszSystemInfo; // pointer to system information string 400cdf0e10cSrcweir DWORD cchBuff = BUFSIZE; // size of computer or user name 401cdf0e10cSrcweir TCHAR tchBuffer[BUFSIZE]; // buffer for string 402cdf0e10cSrcweir 403cdf0e10cSrcweir lpszSystemInfo = tchBuffer; 404cdf0e10cSrcweir cchBuff = BUFSIZE; 405cdf0e10cSrcweir if( GetUserNameA(lpszSystemInfo, &cchBuff) ) 406cdf0e10cSrcweir strUserName = ::rtl::OUString::createFromAscii( lpszSystemInfo ); 407cdf0e10cSrcweir 408cdf0e10cSrcweir if( GetComputerName(lpszSystemInfo, &cchBuff) ) 409cdf0e10cSrcweir strComputerName = ::rtl::OUString::createFromAscii( lpszSystemInfo ); 410cdf0e10cSrcweir 411cdf0e10cSrcweir /// Get user home directory. 412cdf0e10cSrcweir HKEY hRegKey; 413cdf0e10cSrcweir sal_Char PathA[_MAX_PATH]; 414cdf0e10cSrcweir ::rtl::OUString strHome; 415cdf0e10cSrcweir if (RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hRegKey) == ERROR_SUCCESS) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir LONG lRet, lSize = sizeof(PathA); 418cdf0e10cSrcweir DWORD Type; 419cdf0e10cSrcweir 420cdf0e10cSrcweir lRet = RegQueryValueEx(hRegKey, "AppData", NULL, &Type, ( unsigned char * )PathA, ( unsigned long * )&lSize); 421cdf0e10cSrcweir if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _access( PathA, 0 ) == 0 ) ) 422cdf0e10cSrcweir { 423cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#Convert from system path to URL failed.", 424cdf0e10cSrcweir ::osl::File::E_None == ::osl::File::getFileURLFromSystemPath( ::rtl::OUString::createFromAscii( PathA ), strConfigDirectory ) ); 425cdf0e10cSrcweir } 426cdf0e10cSrcweir 427cdf0e10cSrcweir lRet = RegQueryValueEx(hRegKey, "Personal", NULL, &Type, ( unsigned char * )PathA, ( unsigned long * )&lSize); 428cdf0e10cSrcweir if ( ( lRet == ERROR_SUCCESS ) && ( Type == REG_SZ ) && ( _access( PathA, 0 ) == 0 ) ) 429cdf0e10cSrcweir { 430cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#Convert from system path to URL failed.", 431cdf0e10cSrcweir ::osl::File::E_None == ::osl::File::getFileURLFromSystemPath( ::rtl::OUString::createFromAscii( PathA ), strHomeDirectory ) ); 432cdf0e10cSrcweir } 433cdf0e10cSrcweir 434cdf0e10cSrcweir RegCloseKey(hRegKey); 435cdf0e10cSrcweir } 436cdf0e10cSrcweir 437cdf0e10cSrcweir 438cdf0e10cSrcweir /// Get user Security ID: 439cdf0e10cSrcweir 440cdf0e10cSrcweir // Create buffers that may be large enough. If a buffer is too small, the count parameter will be set to the size needed. 441cdf0e10cSrcweir const DWORD INITIAL_SIZE = 32; 442cdf0e10cSrcweir DWORD cbSid = 0; 443cdf0e10cSrcweir DWORD dwSidBufferSize = INITIAL_SIZE; 444cdf0e10cSrcweir DWORD cchDomainName = 0; 445cdf0e10cSrcweir DWORD dwDomainBufferSize = INITIAL_SIZE; 446cdf0e10cSrcweir WCHAR * wszDomainName = NULL; 447cdf0e10cSrcweir SID_NAME_USE eSidType; 448cdf0e10cSrcweir DWORD dwErrorCode = 0; 449cdf0e10cSrcweir 450cdf0e10cSrcweir LPCWSTR wszAccName = ( LPWSTR ) strUserName.getStr( ); 451cdf0e10cSrcweir 452cdf0e10cSrcweir // Create buffers for the SID and the domain name. 453cdf0e10cSrcweir PSID pSid = (PSID) new WIN_BYTE[dwSidBufferSize]; 454cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("# creating SID buffer failed.\n", pSid!= NULL ); 455cdf0e10cSrcweir memset( pSid, 0, dwSidBufferSize); 456cdf0e10cSrcweir 457cdf0e10cSrcweir wszDomainName = new WCHAR[dwDomainBufferSize]; 458cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("# creating Domain name buffer failed.\n", wszDomainName != NULL ); 459cdf0e10cSrcweir memset(wszDomainName, 0, dwDomainBufferSize*sizeof(WCHAR)); 460cdf0e10cSrcweir 461cdf0e10cSrcweir // Obtain the SID for the account name passed. 462cdf0e10cSrcweir for ( ; ; ) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir // Set the count variables to the buffer sizes and retrieve the SID. 465cdf0e10cSrcweir cbSid = dwSidBufferSize; 466cdf0e10cSrcweir cchDomainName = dwDomainBufferSize; 467cdf0e10cSrcweir if (LookupAccountNameW( 468cdf0e10cSrcweir NULL, // Computer name. NULL for the local computer 469cdf0e10cSrcweir wszAccName, 470cdf0e10cSrcweir pSid, // Pointer to the SID buffer. Use NULL to get the size needed, 471cdf0e10cSrcweir &cbSid, // Size of the SID buffer needed. 472cdf0e10cSrcweir wszDomainName, // wszDomainName, 473cdf0e10cSrcweir &cchDomainName, 474cdf0e10cSrcweir &eSidType 475cdf0e10cSrcweir )) 476cdf0e10cSrcweir { 477cdf0e10cSrcweir if (IsValidSid( pSid) == FALSE) 478cdf0e10cSrcweir wprintf(L"# The SID for %s is invalid.\n", wszAccName); 479cdf0e10cSrcweir break; 480cdf0e10cSrcweir } 481cdf0e10cSrcweir dwErrorCode = GetLastError(); 482cdf0e10cSrcweir 483cdf0e10cSrcweir // Check if one of the buffers was too small. 484cdf0e10cSrcweir if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER) 485cdf0e10cSrcweir { 486cdf0e10cSrcweir if (cbSid > dwSidBufferSize) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir // Reallocate memory for the SID buffer. 489cdf0e10cSrcweir wprintf(L"# The SID buffer was too small. It will be reallocated.\n"); 490cdf0e10cSrcweir FreeSid( pSid); 491cdf0e10cSrcweir pSid = (PSID) new WIN_BYTE[cbSid]; 492cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("# re-creating SID buffer failed.\n", pSid!= NULL ); 493cdf0e10cSrcweir memset( pSid, 0, cbSid); 494cdf0e10cSrcweir dwSidBufferSize = cbSid; 495cdf0e10cSrcweir } 496cdf0e10cSrcweir if (cchDomainName > dwDomainBufferSize) 497cdf0e10cSrcweir { 498cdf0e10cSrcweir // Reallocate memory for the domain name buffer. 499cdf0e10cSrcweir wprintf(L"# The domain name buffer was too small. It will be reallocated.\n"); 500cdf0e10cSrcweir delete [] wszDomainName; 501cdf0e10cSrcweir wszDomainName = new WCHAR[cchDomainName]; 502cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("# re-creating domain name buffer failed.\n", wszDomainName!= NULL ); 503cdf0e10cSrcweir memset(wszDomainName, 0, cchDomainName*sizeof(WCHAR)); 504cdf0e10cSrcweir dwDomainBufferSize = cchDomainName; 505cdf0e10cSrcweir } 506cdf0e10cSrcweir } 507cdf0e10cSrcweir else 508cdf0e10cSrcweir { 509cdf0e10cSrcweir wprintf(L"# LookupAccountNameW failed. GetLastError returned: %d\n", dwErrorCode); 510cdf0e10cSrcweir break; 511cdf0e10cSrcweir } 512cdf0e10cSrcweir } 513cdf0e10cSrcweir 514cdf0e10cSrcweir // now got SID successfully, only need to compare SID, so I copied the rest lines from source to convert SID to OUString. 515cdf0e10cSrcweir PSID_IDENTIFIER_AUTHORITY psia; 516cdf0e10cSrcweir DWORD dwSubAuthorities; 517cdf0e10cSrcweir DWORD dwSidRev=SID_REVISION; 518cdf0e10cSrcweir DWORD dwCounter; 519cdf0e10cSrcweir DWORD dwSidSize; 520cdf0e10cSrcweir sal_Char *Ident; 521cdf0e10cSrcweir 522cdf0e10cSrcweir /* obtain SidIdentifierAuthority */ 523cdf0e10cSrcweir psia=GetSidIdentifierAuthority(pSid); 524cdf0e10cSrcweir 525cdf0e10cSrcweir /* obtain sidsubauthority count */ 526cdf0e10cSrcweir dwSubAuthorities=*GetSidSubAuthorityCount(pSid)<=5?*GetSidSubAuthorityCount(pSid):5; 527cdf0e10cSrcweir 528cdf0e10cSrcweir /* buffer length: S-SID_REVISION- + identifierauthority- + subauthorities- + NULL */ 529cdf0e10cSrcweir Ident=(sal_Char * )malloc(88*sizeof(sal_Char)); 530cdf0e10cSrcweir 531cdf0e10cSrcweir /* prepare S-SID_REVISION- */ 532cdf0e10cSrcweir dwSidSize=wsprintf(Ident, TEXT("S-%lu-"), dwSidRev); 533cdf0e10cSrcweir 534cdf0e10cSrcweir /* prepare SidIdentifierAuthority */ 535cdf0e10cSrcweir if ((psia->Value[0] != 0) || (psia->Value[1] != 0)) 536cdf0e10cSrcweir { 537cdf0e10cSrcweir dwSidSize+=wsprintf(Ident + strlen(Ident), 538cdf0e10cSrcweir TEXT("0x%02hx%02hx%02hx%02hx%02hx%02hx"), 539cdf0e10cSrcweir (USHORT)psia->Value[0], 540cdf0e10cSrcweir (USHORT)psia->Value[1], 541cdf0e10cSrcweir (USHORT)psia->Value[2], 542cdf0e10cSrcweir (USHORT)psia->Value[3], 543cdf0e10cSrcweir (USHORT)psia->Value[4], 544cdf0e10cSrcweir (USHORT)psia->Value[5]); 545cdf0e10cSrcweir } 546cdf0e10cSrcweir else 547cdf0e10cSrcweir { 548cdf0e10cSrcweir dwSidSize+=wsprintf(Ident + strlen(Ident), 549cdf0e10cSrcweir TEXT("%lu"), 550cdf0e10cSrcweir (ULONG)(psia->Value[5] ) + 551cdf0e10cSrcweir (ULONG)(psia->Value[4] << 8) + 552cdf0e10cSrcweir (ULONG)(psia->Value[3] << 16) + 553cdf0e10cSrcweir (ULONG)(psia->Value[2] << 24) ); 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir /* loop through SidSubAuthorities */ 557cdf0e10cSrcweir for (dwCounter=0; dwCounter < dwSubAuthorities; dwCounter++) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir dwSidSize+=wsprintf(Ident + dwSidSize, TEXT("-%lu"), 560cdf0e10cSrcweir *GetSidSubAuthority(pSid, dwCounter) ); 561cdf0e10cSrcweir } 562cdf0e10cSrcweir 563cdf0e10cSrcweir strUserID = ::rtl::OUString::createFromAscii( Ident ); 564cdf0e10cSrcweir 565cdf0e10cSrcweir free(Ident); 566cdf0e10cSrcweir delete pSid; 567cdf0e10cSrcweir delete [] wszDomainName; 568cdf0e10cSrcweir 569cdf0e10cSrcweir 570cdf0e10cSrcweir /// check if logged in user is administrator: 571cdf0e10cSrcweir 572cdf0e10cSrcweir WIN_BOOL b; 573cdf0e10cSrcweir SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; 574cdf0e10cSrcweir PSID AdministratorsGroup; 575cdf0e10cSrcweir b = AllocateAndInitializeSid( 576cdf0e10cSrcweir &NtAuthority, 577cdf0e10cSrcweir 2, 578cdf0e10cSrcweir SECURITY_BUILTIN_DOMAIN_RID, 579cdf0e10cSrcweir DOMAIN_ALIAS_RID_ADMINS, 580cdf0e10cSrcweir 0, 0, 0, 0, 0, 0, 581cdf0e10cSrcweir &AdministratorsGroup); 582cdf0e10cSrcweir if(b) 583cdf0e10cSrcweir { 584cdf0e10cSrcweir if (!CheckTokenMembership( NULL, AdministratorsGroup, &b)) 585cdf0e10cSrcweir { 586cdf0e10cSrcweir b = FALSE; 587cdf0e10cSrcweir } 588cdf0e10cSrcweir FreeSid(AdministratorsGroup); 589cdf0e10cSrcweir } 590cdf0e10cSrcweir 591cdf0e10cSrcweir isAdmin = ( sal_Bool )b; 592cdf0e10cSrcweir 593cdf0e10cSrcweir #endif 594cdf0e10cSrcweir 595cdf0e10cSrcweir /// print the information. 596cdf0e10cSrcweir t_print("#\n#Retrived system information is below:\n"); 597cdf0e10cSrcweir 598cdf0e10cSrcweir t_print("Computer Name: "); 599cdf0e10cSrcweir if ( strComputerName == aNullURL ) 600cdf0e10cSrcweir t_print(" Not retrived\n" ); 601cdf0e10cSrcweir else 602cdf0e10cSrcweir printUString( strComputerName ); 603cdf0e10cSrcweir 604cdf0e10cSrcweir t_print("Current User Name: "); 605cdf0e10cSrcweir if ( strUserName == aNullURL ) 606cdf0e10cSrcweir t_print(" Not retrived\n" ); 607cdf0e10cSrcweir else 608cdf0e10cSrcweir printUString( strUserName ); 609cdf0e10cSrcweir 610cdf0e10cSrcweir t_print("Current User Home Directory:"); 611cdf0e10cSrcweir if ( strHomeDirectory == aNullURL ) 612cdf0e10cSrcweir t_print(" Not retrived\n" ); 613cdf0e10cSrcweir else 614cdf0e10cSrcweir printUString( strHomeDirectory ); 615cdf0e10cSrcweir 616cdf0e10cSrcweir t_print("Current Config Directory: "); 617cdf0e10cSrcweir if ( strConfigDirectory == aNullURL ) 618cdf0e10cSrcweir t_print(" Not retrived\n" ); 619cdf0e10cSrcweir else 620cdf0e10cSrcweir printUString( strConfigDirectory ); 621cdf0e10cSrcweir 622cdf0e10cSrcweir t_print("Current UserID: "); 623cdf0e10cSrcweir if ( strUserID == aNullURL ) 624cdf0e10cSrcweir t_print(" Not retrived\n" ); 625cdf0e10cSrcweir else 626cdf0e10cSrcweir printUString( strUserID ); 627cdf0e10cSrcweir 628cdf0e10cSrcweir t_print("Current User is"); 629cdf0e10cSrcweir if ( isAdmin == sal_False ) 630cdf0e10cSrcweir t_print(" NOT Administrator.\n" ); 631cdf0e10cSrcweir else 632cdf0e10cSrcweir t_print(" Administrator.\n" ); 633cdf0e10cSrcweir 634cdf0e10cSrcweir 635cdf0e10cSrcweir /// get and display forwarded text if available. 636cdf0e10cSrcweir aStringForward = ::rtl::OUString::createFromAscii( getForwardString() ); 637cdf0e10cSrcweir if ( !aStringForward.equals( aNullURL ) && aStringForward.indexOf( (sal_Unicode)' ' ) != -1 ) 638cdf0e10cSrcweir { 639cdf0e10cSrcweir sal_Int32 nFirstSpacePoint = aStringForward.indexOf( (sal_Unicode)' ' );; 640cdf0e10cSrcweir sal_Int32 nLastSpacePoint = aStringForward.lastIndexOf( (sal_Unicode)' ' );; 641cdf0e10cSrcweir if ( nFirstSpacePoint == nLastSpacePoint ) 642cdf0e10cSrcweir /// only forwarded two parameters, username and password. 643cdf0e10cSrcweir { 644cdf0e10cSrcweir aLogonUser = aStringForward.copy( 0, nFirstSpacePoint ); 645cdf0e10cSrcweir t_print("\n#Forwarded username: "); 646cdf0e10cSrcweir printUString( aLogonUser); 647cdf0e10cSrcweir 648cdf0e10cSrcweir aLogonPasswd = aStringForward.copy( nFirstSpacePoint +1, aStringForward.getLength( ) - 1 ); 649cdf0e10cSrcweir t_print("#Forwarded password: "); 650cdf0e10cSrcweir for ( int i = nFirstSpacePoint +1; i <= aStringForward.getLength( ) - 1; i++, t_print("*") ); 651cdf0e10cSrcweir t_print("\n" ); 652cdf0e10cSrcweir } 653cdf0e10cSrcweir else 654cdf0e10cSrcweir /// forwarded three parameters, username, password and fileserver. 655cdf0e10cSrcweir { 656cdf0e10cSrcweir aLogonUser = aStringForward.copy( 0, nFirstSpacePoint ); 657cdf0e10cSrcweir t_print("#Forwarded username: "); 658cdf0e10cSrcweir printUString( aLogonUser); 659cdf0e10cSrcweir 660cdf0e10cSrcweir aLogonPasswd = aStringForward.copy( nFirstSpacePoint +1, nLastSpacePoint ); 661cdf0e10cSrcweir t_print("#Forwarded password: "); 662cdf0e10cSrcweir for ( int i = nFirstSpacePoint +1; i <= nLastSpacePoint; i++, t_print("*") ); 663cdf0e10cSrcweir t_print("\n" ); 664cdf0e10cSrcweir 665cdf0e10cSrcweir aFileServer = aStringForward.copy( nLastSpacePoint +1, aStringForward.getLength( ) - 1 ); 666cdf0e10cSrcweir t_print("#Forwarded FileServer: "); 667cdf0e10cSrcweir printUString( aFileServer ); 668cdf0e10cSrcweir 669cdf0e10cSrcweir } 670cdf0e10cSrcweir } 671cdf0e10cSrcweir 672cdf0e10cSrcweir t_print("#\n#Initialization Done.\n" ); 673cdf0e10cSrcweir 674cdf0e10cSrcweir } 675