Esempio n. 1
0
int main(void) {
  int ns;
  int connected_socket;

  if (!NaClSrpcModuleInit()) {
    return 1;
  }
  ns = -1;
  nacl_nameservice(&ns);
  assert(-1 != ns);

  connected_socket = imc_connect(ns);
  assert(-1 != connected_socket);
  if (!NaClSrpcClientCtor(&ns_channel, connected_socket)) {
    fprintf(stderr, "Srpc client channel ctor failed\n");
    return 1;
  }
  close(ns);

  if (!NaClSrpcAcceptClientConnection(srpc_methods)) {
    return 1;
  }
  NaClSrpcModuleFini();
  return 0;
}
Esempio n. 2
0
unsigned long get_good_seed(void) {
  int               ns;
  int               connected_socket;
  NaClSrpcChannel   ns_channel;
  NaClSrpcError     rpc_result;
  int               status;
  int               rng;
  unsigned long     seed;

  ns = -1;
  if (-1 == nacl_nameservice(&ns)) {
    fprintf(stderr, "nacl_nameservice failed\n");
    abort();
  }
  connected_socket = imc_connect(ns);
  assert(-1 != connected_socket);
  if (!NaClSrpcClientCtor(&ns_channel, connected_socket)) {
    fprintf(stderr, "SRPC client channel ctor failed\n");
    abort();
  }
  (void) close(ns);

  rpc_result = NaClSrpcInvokeBySignature(&ns_channel,
                                         NACL_NAME_SERVICE_LOOKUP,
                                         "SecureRandom", O_RDONLY,
                                         &status, &rng);
  assert(NACL_SRPC_RESULT_OK == rpc_result);
  assert(NACL_NAME_SERVICE_SUCCESS == status);
  assert(sizeof seed == read(rng, &seed, sizeof seed));
  close(rng);
  NaClSrpcDtor(&ns_channel);

  return seed;
}
int main(void) {
  int ns;
  NaClSrpcChannel channel;
  int connected_socket;
  int status;
  int rng;

  if (!NaClSrpcModuleInit()) {
    fprintf(stderr, "srpc module init failed\n");
    return 1;
  }
  printf("Hello world\n");
  ns = -1;
  nacl_nameservice(&ns);
  printf("ns = %d\n", ns);
  assert(-1 != ns);

  connected_socket = imc_connect(ns);
  assert(-1 != connected_socket);
  if (!NaClSrpcClientCtor(&channel, connected_socket)) {
    fprintf(stderr, "Srpc client channel ctor failed\n");
    return 1;
  }
  printf("NaClSrpcClientCtor succeeded\n");
  if (!EnumerateNames(&channel)) {
    fprintf(stderr, "Could not enumerate names\n");
    return 1;
  }
  printf("EnumerateNames succeeded\n");
  if (NACL_SRPC_RESULT_OK !=
      NaClSrpcInvokeBySignature(&channel, NACL_NAME_SERVICE_LOOKUP,
                                "SecureRandom", O_RDONLY, &status, &rng)) {
    fprintf(stderr, "nameservice lookup failed, status %d\n", status);
    return 1;
  }
  printf("rpc status %d\n", status);
  assert(NACL_NAME_SERVICE_SUCCESS == status);
  printf("rng descriptor %d\n", rng);

  dump_output(rng, RNG_OUTPUT_BYTES);

  return 0;
}
Esempio n. 4
0
void NaClPluginLowLevelInitializationCompleteInternal(void) {
    int                     nameservice_conn_desc;
    int                     kernel_service_conn_cap_desc = -1;
    int                     kernel_service_desc;
    struct NaClSrpcChannel  srpc_channel;
    int                     status;

    NaClLog(4, "Entered NaClPluginLowLevelInitializationComplete\n");

    if (-1 != gNaClNameServiceConnCapDesc) {
        NaClLog(LOG_ERROR,
                "Double call to NaClPluginLowLevelInitializationComplete?\n");
        return;
    }
    /*
     * The existence of the bootstrap nameservice is independent of
     * whether NaCl is running as a standalone application or running as
     * a untrusted Pepper plugin, browser extension environment.
     */
    if (-1 == nacl_nameservice(&gNaClNameServiceConnCapDesc)) {
        NaClLog(LOG_FATAL,
                "NaClPluginLowLevelInitializationComplete: no name service?!?\n");
    }

    nameservice_conn_desc = imc_connect(gNaClNameServiceConnCapDesc);
    if (-1 == nameservice_conn_desc) {
        NaClLog(LOG_FATAL,
                "Could not connect to bootstrap name service\n");
    }
    if (!NaClSrpcClientCtor(&srpc_channel, nameservice_conn_desc)) {
        (void) close(nameservice_conn_desc);
        NaClLog(LOG_FATAL, "SRPC channel ctor to name service failed\n");
    }
    if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature(
                &srpc_channel,
                NACL_NAME_SERVICE_LOOKUP,
                "KernelService",
                O_RDWR,
                &status,
                &kernel_service_conn_cap_desc)) {
        NaClSrpcDtor(&srpc_channel);
        NaClLog(LOG_FATAL, "Name service lookup RPC for KernelService failed\n");
    }
    NaClSrpcDtor(&srpc_channel);
    if (-1 == kernel_service_conn_cap_desc) {
        NaClLog(LOG_FATAL, "Name service lookup for KernelService failed, %d\n",
                status);
    }
    if (-1 == (kernel_service_desc = imc_connect(kernel_service_conn_cap_desc))) {
        (void) close(kernel_service_conn_cap_desc);
        NaClLog(LOG_FATAL, "Connect to KernelService failed\n");
    }
    (void) close(kernel_service_conn_cap_desc);
    if (!NaClSrpcClientCtor(&srpc_channel, kernel_service_desc)) {
        (void) close(kernel_service_desc);
        NaClLog(LOG_FATAL, "SRPC channel ctor to KernelService failed\n");
    }
    if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature(
                &srpc_channel,
                NACL_KERNEL_SERVICE_INITIALIZATION_COMPLETE)) {
        NaClLog(LOG_FATAL, "KernelService init_done RPC failed!\n");
    }
    NaClSrpcDtor(&srpc_channel);
}