X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=ossec-hids.git;a=blobdiff_plain;f=src%2Fshared%2Ffile_op.c;h=17778e28bfa0c6abf23737c57f488f96011a26e5;hp=f97597af8847553dda01bf2d60fc67ed88151be7;hb=6ef2f786c6c8ead94841b5f93baf9f43421f08c8;hpb=301048b51990573e58a30dc4a5bb4ec285cad554 diff --git a/src/shared/file_op.c b/src/shared/file_op.c index f97597a..17778e2 100755 --- a/src/shared/file_op.c +++ b/src/shared/file_op.c @@ -1,4 +1,5 @@ -/* @(#) $Id$ */ +/* @(#) $Id: ./src/shared/file_op.c, 2011/09/08 dcid Exp $ + */ /* Copyright (C) 2009 Trend Micro Inc. * All rights reserved. @@ -10,7 +11,7 @@ */ -/* Functions to handle operation with files +/* Functions to handle operation with files */ @@ -52,7 +53,7 @@ #ifndef PRODUCT_DATACENTER_SERVER_CORE_V #define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027 #define PRODUCT_DATACENTER_SERVER_CORE_V_C "Datacenter Edition (core) " -#endif +#endif #ifndef PRODUCT_DATACENTER_SERVER_V #define PRODUCT_DATACENTER_SERVER_V 0x00000025 @@ -250,7 +251,7 @@ int CreatePID(char *name, int pid) { char file[256]; FILE *fp; - + if(isChroot()) { snprintf(file,255,"%s/%s-%d.pid",OS_PIDFILE,name,pid); @@ -264,18 +265,20 @@ int CreatePID(char *name, int pid) fp = fopen(file,"a"); if(!fp) return(-1); - + fprintf(fp,"%d\n",pid); - + + chmod(file, 0640); + fclose(fp); - + return(0); } int DeletePID(char *name) { char file[256]; - + if(isChroot()) { snprintf(file,255,"%s/%s-%d.pid",OS_PIDFILE,name,(int)getpid()); @@ -288,9 +291,9 @@ int DeletePID(char *name) if(File_DateofChange(file) < 0) return(-1); - + unlink(file); - + return(0); } @@ -309,7 +312,7 @@ int UnmergeFiles(char *finalpath, char *optdir) finalfp = fopen(finalpath, "r"); if(!finalfp) { - merror("%s: ERROR: Unable to read merged file: '%s'.", + merror("%s: ERROR: Unable to read merged file: '%s'.", __local_name, finalpath); return(0); } @@ -322,7 +325,7 @@ int UnmergeFiles(char *finalpath, char *optdir) break; } - + /* Initiator. */ if(buf[0] != '!') continue; @@ -360,7 +363,7 @@ int UnmergeFiles(char *finalpath, char *optdir) if(!fp) { ret = 0; - merror("%s: ERROR: Unable to unmerge file '%s'.", + merror("%s: ERROR: Unable to unmerge file '%s'.", __local_name, final_name); } @@ -430,7 +433,7 @@ int MergeAppendFile(char *finalpath, char *files) finalfp = fopen(finalpath, "w"); if(!finalfp) { - merror("%s: ERROR: Unable to create merged file: '%s'.", + merror("%s: ERROR: Unable to create merged file: '%s'.", __local_name, finalpath); return(0); } @@ -443,7 +446,7 @@ int MergeAppendFile(char *finalpath, char *files) finalfp = fopen(finalpath, "a"); if(!finalfp) { - merror("%s: ERROR: Unable to create merged file: '%s'.", + merror("%s: ERROR: Unable to create merged file: '%s'.", __local_name, finalpath); return(0); } @@ -501,7 +504,7 @@ int MergeFiles(char *finalpath, char **files) finalfp = fopen(finalpath, "w"); if(!finalfp) { - merror("%s: ERROR: Unable to create merged file: '%s'.", + merror("%s: ERROR: Unable to create merged file: '%s'.", __local_name, finalpath); return(0); } @@ -566,7 +569,7 @@ char *getuname() if(ret == NULL) return(NULL); - snprintf(ret, 255, "%s %s %s %s %s - %s %s", + snprintf(ret, 255, "%s %s %s %s %s - %s %s", uts_buf.sysname, uts_buf.nodename, uts_buf.release, @@ -582,9 +585,9 @@ char *getuname() ret = calloc(256, sizeof(char)); if(ret == NULL) return(NULL); - + snprintf(ret, 255, "No system info available - %s %s", - __name, __version); + __name, __version); return(ret); } @@ -641,7 +644,7 @@ void goDaemonLight() /* Going to / */ chdir("/"); - + return; } @@ -699,7 +702,7 @@ void goDaemon() /* Going to / */ chdir("/"); - + /* Closing stdin, stdout and stderr */ /* fclose(stdin); @@ -713,7 +716,7 @@ void goDaemon() open("/dev/null", O_RDWR); open("/dev/null", O_RDWR); */ - + return; } @@ -732,12 +735,13 @@ int checkVista() } - /* We check if the system is vista (most be called during the startup. */ + /* We check if the system is vista (must be called during the startup.) */ if(strstr(m_uname, "Windows Server 2008") || - strstr(m_uname, "Vista")) + strstr(m_uname, "Vista") || + strstr(m_uname, "Windows 7")) { isVista = 1; - verbose("%s: INFO: System is Vista or Windows Server 2008.", + verbose("%s: INFO: System is Vista or Windows Server 2008.", __local_name); } @@ -759,7 +763,7 @@ char *getuname() typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD); - /* Extracted from ms web site + /* Extracted from ms web site * http://msdn.microsoft.com/library/en-us/sysinfo/base/getting_the_system_version.asp */ OSVERSIONINFOEX osvi; @@ -775,25 +779,37 @@ char *getuname() if(!(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi))) { osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (!GetVersionEx((OSVERSIONINFO *)&osvi)) + if (!GetVersionEx((OSVERSIONINFO *)&osvi)) return(NULL); } /* Allocating the memory */ os_calloc(OS_SIZE_1024 +1, sizeof(char), ret); ret[OS_SIZE_1024] = '\0'; - + switch(osvi.dwPlatformId) { /* Test for the Windows NT product family. */ case VER_PLATFORM_WIN32_NT: - if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 ) + if(osvi.dwMajorVersion == 6) { - if(osvi.wProductType == VER_NT_WORKSTATION ) - strncat(ret, "Microsoft Windows Vista ", ret_size -1); - else + if(osvi.dwMinorVersion == 0) + { + if(osvi.wProductType == VER_NT_WORKSTATION ) + strncat(ret, "Microsoft Windows Vista ", ret_size -1); + else + { + strncat(ret, "Microsoft Windows Server 2008 ", ret_size -1); + } + } + else if(osvi.dwMinorVersion == 1) { - strncat(ret, "Microsoft Windows Server 2008 ", ret_size -1); + if(osvi.wProductType == VER_NT_WORKSTATION ) + strncat(ret, "Microsoft Windows 7 ", ret_size -1); + else + { + strncat(ret, "Microsoft Windows Server 2008 R2 ", ret_size -1); + } } ret_size-=strlen(ret) +1; @@ -801,7 +817,7 @@ char *getuname() /* Getting product version. */ pGPI = (PGPI) GetProcAddress( - GetModuleHandle(TEXT("kernel32.dll")), + GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo"); pGPI( 6, 0, 0, 0, &dwType); @@ -926,7 +942,7 @@ char *getuname() strncat(ret, PRODUCT_WEB_SERVER_CORE_C, ret_size -1); break; } - + ret_size-=strlen(ret) +1; } @@ -934,18 +950,18 @@ char *getuname() else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) { pGNSI = (PGNSI) GetProcAddress( - GetModuleHandle("kernel32.dll"), + GetModuleHandle("kernel32.dll"), "GetNativeSystemInfo"); if(NULL != pGNSI) pGNSI(&si); if( GetSystemMetrics(89) ) - strncat(ret, "Microsoft Windows Server 2003 R2 ", + strncat(ret, "Microsoft Windows Server 2003 R2 ", ret_size -1); else if(osvi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) { - strncat(ret, + strncat(ret, "Microsoft Windows XP Professional x64 Edition ", ret_size -1 ); } @@ -953,7 +969,7 @@ char *getuname() { strncat(ret, "Microsoft Windows Server 2003, ",ret_size-1); } - + ret_size-=strlen(ret) +1; } @@ -963,7 +979,7 @@ char *getuname() ret_size-=strlen(ret) +1; } - + else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) { strncat(ret, "Microsoft Windows 2000 ", ret_size -1); @@ -995,15 +1011,15 @@ char *getuname() strncat(ret, "Workstation 4.0 ", ret_size -1); else if( osvi.wSuiteMask & VER_SUITE_PERSONAL ) strncat(ret, "Home Edition ", ret_size -1); - else + else strncat(ret, "Professional ",ret_size -1); /* Fixing size */ - ret_size-=strlen(ret) +1; + ret_size-=strlen(ret) +1; } /* Test for the server type. */ - else if( osvi.wProductType == VER_NT_SERVER || + else if( osvi.wProductType == VER_NT_SERVER || osvi.wProductType == VER_NT_DOMAIN_CONTROLLER ) { if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2) @@ -1012,7 +1028,7 @@ char *getuname() PROCESSOR_ARCHITECTURE_IA64 ) { if( osvi.wSuiteMask & VER_SUITE_DATACENTER ) - strncat(ret, + strncat(ret, "Datacenter Edition for Itanium-based Systems ", ret_size -1); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) @@ -1020,7 +1036,7 @@ char *getuname() "Enterprise Edition for Itanium-based Systems ", ret_size -1); - ret_size-=strlen(ret) +1; + ret_size-=strlen(ret) +1; } else if ( si.wProcessorArchitecture== @@ -1032,11 +1048,11 @@ char *getuname() else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strncat(ret, "Enterprise x64 Edition ", ret_size -1 ); - else + else strncat(ret, "Standard x64 Edition ", ret_size -1 ); - ret_size-=strlen(ret) +1; + ret_size-=strlen(ret) +1; } else @@ -1048,10 +1064,10 @@ char *getuname() strncat(ret,"Enterprise Edition ",ret_size -1); else if ( osvi.wSuiteMask == VER_SUITE_BLADE ) strncat(ret,"Web Edition ",ret_size -1 ); - else + else strncat(ret, "Standard Edition ",ret_size -1); - ret_size-=strlen(ret) +1; + ret_size-=strlen(ret) +1; } } else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0) @@ -1060,25 +1076,25 @@ char *getuname() strncat(ret, "Datacenter Server ",ret_size -1); else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strncat(ret, "Advanced Server ",ret_size -1 ); - else + else strncat(ret, "Server ",ret_size -1); - ret_size-=strlen(ret) +1; + ret_size-=strlen(ret) +1; } else if(osvi.dwMajorVersion <= 4) /* Windows NT 4.0 */ { if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE ) strncat(ret, "Server 4.0, Enterprise Edition ", ret_size -1 ); - else + else strncat(ret, "Server 4.0 ",ret_size -1); - + ret_size-=strlen(ret) +1; } } } /* Test for specific product on Windows NT 4.0 SP5 and earlier */ - else + else { HKEY hKey; char szProductType[81]; @@ -1091,7 +1107,7 @@ char *getuname() if(lRet == ERROR_SUCCESS) { char __wv[32]; - + lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL, (LPBYTE) szProductType, &dwBufLen); RegCloseKey( hKey ); @@ -1108,7 +1124,7 @@ char *getuname() ret_size-=strlen(ret) +1; memset(__wv, '\0', 32); - snprintf(__wv, 31, + snprintf(__wv, 31, "%d.%d ", (int)osvi.dwMajorVersion, (int)osvi.dwMinorVersion); @@ -1121,9 +1137,9 @@ char *getuname() /* Display service pack (if any) and build number. */ - if( osvi.dwMajorVersion == 4 && + if( osvi.dwMajorVersion == 4 && lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 ) - { + { HKEY hKey; LONG lRet; char __wp[64]; @@ -1134,8 +1150,8 @@ char *getuname() "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009", 0, KEY_QUERY_VALUE, &hKey ); if( lRet == ERROR_SUCCESS ) - snprintf(__wp, 63, "Service Pack 6a (Build %d)", - (int)osvi.dwBuildNumber & 0xFFFF ); + snprintf(__wp, 63, "Service Pack 6a (Build %d)", + (int)osvi.dwBuildNumber & 0xFFFF ); else /* Windows NT 4.0 prior to SP6a */ { snprintf(__wp, 63, "%s (Build %d)", @@ -1169,13 +1185,13 @@ char *getuname() { strncat(ret, "Microsoft Windows 95 ", ret_size -1); ret_size-=strlen(ret) +1; - } + } if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) { strncat(ret, "Microsoft Windows 98 ", ret_size -1); ret_size-=strlen(ret) +1; - } + } if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) { @@ -1183,7 +1199,7 @@ char *getuname() ret_size -1); ret_size-=strlen(ret) +1; - } + } break; case VER_PLATFORM_WIN32s: @@ -1197,10 +1213,10 @@ char *getuname() /* Adding ossec version */ snprintf(os_v, 128, " - %s %s", __name, __version); strncat(ret, os_v, ret_size -1); - - + + /* Returning system information */ - return(ret); + return(ret); } #endif