X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=socketwrapper.c;h=caae5893cf3eccf0fecd8da33d0077d537398c1a;hp=e5ab3f75dd610a7db8eb3d85edca72134bb6edd0;hb=607cd5899fe0ff3692e440cc5fd27e1b21a6cd77;hpb=190e1b19f7b48bbf636b2a0a5e7b71d01929def5 diff --git a/socketwrapper.c b/socketwrapper.c index e5ab3f7..caae589 100644 --- a/socketwrapper.c +++ b/socketwrapper.c @@ -114,11 +114,11 @@ BOOL LoadOpenSSL() return FALSE; #ifdef ENABLE_PROCESS_PROTECTION // 同梱するOpenSSLのバージョンに合わせてSHA1ハッシュ値を変更すること - // ssleay32.dll 1.0.0e - // libssl32.dll 1.0.0e - RegisterTrustedModuleSHA1Hash("\x4E\xB7\xA0\x22\x14\x4B\x58\x6D\xBC\xF5\x21\x0D\x96\x78\x0D\x79\x7D\x66\xB2\xB0"); - // libeay32.dll 1.0.0e - RegisterTrustedModuleSHA1Hash("\x01\x32\x7A\xAE\x69\x26\xE6\x58\xC7\x63\x22\x1E\x53\x5A\x78\xBC\x61\xC7\xB5\xC1"); + // ssleay32.dll 1.0.0g + // libssl32.dll 1.0.0g + RegisterTrustedModuleSHA1Hash("\x42\x32\x3E\x44\x35\xBC\x98\x6C\x45\xC9\xA2\xB8\x41\xE7\xDA\x7B\x6A\x98\xB2\x28"); + // libeay32.dll 1.0.0g + RegisterTrustedModuleSHA1Hash("\x3F\xC8\x07\x84\xB3\xF0\x71\x4A\x18\x59\x52\x1F\x99\x09\x65\xB9\x49\xA7\x15\x36"); #endif g_hOpenSSL = LoadLibrary("ssleay32.dll"); // バージョン固定のためlibssl32.dllの読み込みは脆弱性の原因になり得るので廃止 @@ -641,6 +641,8 @@ int FTPS_recv(SOCKET s, char * buf, int len, int flags) // IPv6対応 +const struct in6_addr IN6ADDR_NONE = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + typedef struct { HANDLE h; @@ -682,7 +684,7 @@ DWORD WINAPI WSAAsyncGetHostByNameIPv6ThreadProc(LPVOID lpParameter) pHost->h_addr_list[0] = (char*)(&pHost->h_addr_list[2]); pHost->h_addr_list[1] = NULL; memcpy(pHost->h_addr_list[0], &((struct sockaddr_in*)p->ai_addr)->sin_addr, sizeof(struct in_addr)); - PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + p->ai_addrlen)); + PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + sizeof(struct in_addr))); } else PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(WSAENOBUFS << 16)); @@ -700,7 +702,7 @@ DWORD WINAPI WSAAsyncGetHostByNameIPv6ThreadProc(LPVOID lpParameter) pHost->h_addr_list[0] = (char*)(&pHost->h_addr_list[2]); pHost->h_addr_list[1] = NULL; memcpy(pHost->h_addr_list[0], &((struct sockaddr_in6*)p->ai_addr)->sin6_addr, sizeof(struct in6_addr)); - PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + p->ai_addrlen)); + PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + sizeof(struct in6_addr))); } else PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(WSAENOBUFS << 16)); @@ -717,10 +719,11 @@ DWORD WINAPI WSAAsyncGetHostByNameIPv6ThreadProc(LPVOID lpParameter) } else PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(ERROR_INVALID_FUNCTION << 16)); - free(pData->name); - free(pData); // CreateThreadが返すハンドルが重複するのを回避 Sleep(10000); + CloseHandle(pData->h); + free(pData->name); + free(pData); return 0; } @@ -767,7 +770,10 @@ int WSACancelAsyncRequestIPv6(HANDLE hAsyncTaskHandle) int Result; Result = SOCKET_ERROR; if(TerminateThread(hAsyncTaskHandle, 0)) + { + CloseHandle(hAsyncTaskHandle); Result = 0; + } return Result; } @@ -843,7 +849,7 @@ struct in6_addr inet6_addr(const char* cp) { if(!cp) { - memset(&Result, 0xff, sizeof(Result)); + memcpy(&Result, &IN6ADDR_NONE, sizeof(struct in6_addr)); break; } if(i >= AfterZero) @@ -867,7 +873,7 @@ struct in6_addr inet6_addr(const char* cp) Result.u.Word[i] = ((Result.u.Word[i] & 0xff00) >> 8) | ((Result.u.Word[i] & 0x00ff) << 8); if(strncmp(p, ":", 1) != 0 && strlen(p) > 0) { - memset(&Result, 0xff, sizeof(Result)); + memcpy(&Result, &IN6ADDR_NONE, sizeof(struct in6_addr)); break; } if(cp = strstr(cp, ":")) @@ -1045,8 +1051,17 @@ BOOL LoadPuTTY() // ビルドしたputty.dllに合わせてSHA1ハッシュ値を変更すること RegisterTrustedModuleSHA1Hash("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"); #endif -// g_hPuTTY = LoadLibrary("putty.dll"); - g_hPuTTY = LoadLibrary("C:\\SourceForge\\ffftp\\putty\\Debug\\PuTTY.dll"); + // デバッグ用 +#ifdef _DEBUG + { + char Path[MAX_PATH]; + GetModuleFileName(NULL, Path, MAX_PATH); + strcpy(strrchr(Path, '\\'), "\\..\\putty\\Debug\\PuTTY.dll"); + g_hPuTTY = LoadLibrary(Path); + } +#else + g_hPuTTY = LoadLibrary("putty.dll"); +#endif if(!g_hPuTTY || !(p_SFTP_Create = (_SFTP_Create)GetProcAddress(g_hPuTTY, "SFTP_Create")) || !(p_SFTP_Destroy = (_SFTP_Destroy)GetProcAddress(g_hPuTTY, "SFTP_Destroy"))