Home | History | Annotate | Download | only in pocdll
      1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "sandbox/win/sandbox_poc/pocdll/exports.h"
      6 #include "sandbox/win/sandbox_poc/pocdll/utils.h"
      7 
      8 // This file contains the tests used to verify the security of the network.
      9 
     10 void POCDLL_API TestNetworkListen(HANDLE log) {
     11   HandleToFile handle2file;
     12   FILE *output = handle2file.Translate(log, "w");
     13 #if DONT_WANT_INTERCEPTIONS_JUST_WANT_NETWORK
     14   // Initialize Winsock
     15   WSADATA wsa_data;
     16   int result = ::WSAStartup(MAKEWORD(2, 2), &wsa_data);
     17   if (result != NO_ERROR) {
     18     fprintf(output, "[ERROR] Cannot initialize winsock. Error%d\r\n", result);
     19     return;
     20   }
     21 
     22   // Create a SOCKET for listening for
     23   // incoming connection requests.
     24   SOCKET listen_socket;
     25   listen_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     26   if (listen_socket == INVALID_SOCKET) {
     27     fprintf(output, "[ERROR] Failed to create socket. Error %ld\r\n",
     28            ::WSAGetLastError());
     29     ::WSACleanup();
     30     return;
     31   }
     32 
     33   // The sockaddr_in structure specifies the address family,
     34   // IP address, and port for the socket that is being bound.
     35   sockaddr_in service;
     36   service.sin_family = AF_INET;
     37   service.sin_addr.s_addr = inet_addr("127.0.0.1");
     38   service.sin_port = htons(88);
     39 
     40   if (bind(listen_socket, reinterpret_cast<SOCKADDR*>(&service),
     41            sizeof(service)) == SOCKET_ERROR) {
     42     fprintf(output, "[BLOCKED] Bind socket on port 88. Error %ld\r\n",
     43             ::WSAGetLastError());
     44     closesocket(listen_socket);
     45     ::WSACleanup();
     46     return;
     47   }
     48 
     49   // Listen for incoming connection requests
     50   // on the created socket
     51   if (listen(listen_socket, SOMAXCONN) == SOCKET_ERROR) {
     52     fprintf(output, "[BLOCKED] Listen socket on port 88. Error %ld\r\n",
     53             ::WSAGetLastError());
     54 
     55   } else {
     56     fprintf(output, "[GRANTED] Listen socket on port 88.\r\n",
     57             ::WSAGetLastError());
     58   }
     59 
     60   ::WSACleanup();
     61   return;
     62 #else  // DONT_WANT_INTERCEPTIONS_JUST_WANT_NETWORK
     63   // Just print out that this test is not running.
     64   fprintf(output, "[ERROR] No network tests.\r\n");
     65 #endif  // DONT_WANT_INTERCEPTIONS_JUST_WANT_NETWORK
     66 }
     67