X-Git-Url: https://git.librecmc.org/?p=oweals%2Ftinc.git;a=blobdiff_plain;f=src%2Fnet_setup.c;h=3268f5db24b9c732b0a6371731efa77d3733c37c;hp=f18e3bfe46896d6a4d29d4d0ff308c6d9805441e;hb=3b1fad04de6bed2f284fdf3d5b27d4162aeebc8c;hpb=6d08eb1614b59d5f86a43edda9db06fca72b76cd diff --git a/src/net_setup.c b/src/net_setup.c index f18e3bf..3268f5d 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -1,7 +1,7 @@ /* net_setup.c -- Setup. Copyright (C) 1998-2005 Ivo Timmermans, - 2000-2010 Guus Sliepen + 2000-2012 Guus Sliepen 2006 Scott Lamb 2010 Brandon Black @@ -45,6 +45,7 @@ #include "xalloc.h" char *myport; +devops_t devops; bool read_rsa_public_key(connection_t *c) { FILE *fp; @@ -113,11 +114,14 @@ bool read_rsa_public_key(connection_t *c) { xasprintf(&fname, "%s/hosts/%s", confbase, c->name); fp = fopen(fname, "r"); - if(fp) { - c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL); - fclose(fp); + if(!fp) { + logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno)); + free(fname); + return false; } + c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL); + fclose(fp); free(fname); if(c->rsa_key) @@ -128,12 +132,15 @@ bool read_rsa_public_key(connection_t *c) { xasprintf(&fname, "%s/hosts/%s", confbase, c->name); fp = fopen(fname, "r"); - if(fp) { - c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL); -// RSA_blinding_on(c->rsa_key, NULL); - fclose(fp); + if(!fp) { + logger(LOG_ERR, "Error reading RSA public key file `%s': %s", fname, strerror(errno)); + free(fname); + return false; } + c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL); +// RSA_blinding_on(c->rsa_key, NULL); + fclose(fp); free(fname); if(c->rsa_key) @@ -270,7 +277,7 @@ void load_all_subnets(void) { static bool setup_myself(void) { config_t *cfg; subnet_t *subnet; - char *name, *hostname, *mode, *afname, *cipher, *digest; + char *name, *hostname, *mode, *afname, *cipher, *digest, *type; char *fname = NULL; char *address = NULL; char *envp[5]; @@ -533,7 +540,24 @@ static bool setup_myself(void) { /* Open device */ - if(!setup_device()) + devops = os_devops; + + if(get_config_string(lookup_config(config_tree, "DeviceType"), &type)) { + if(!strcasecmp(type, "dummy")) + devops = dummy_devops; + else if(!strcasecmp(type, "raw_socket")) + devops = raw_socket_devops; +#ifdef ENABLE_UML + else if(!strcasecmp(type, "uml")) + devops = uml_devops; +#endif +#ifdef ENABLE_VDE + else if(!strcasecmp(type, "vde")) + devops = vde_devops; +#endif + } + + if(!devops.setup()) return false; /* Run tinc-up script to further initialize the tap interface */ @@ -696,7 +720,7 @@ void close_network_connections(void) { for(i = 0; i < 4; i++) free(envp[i]); - close_device(); + devops.close(); return; }