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; }
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; }
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); }