X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=inline;f=src%2Flibmeshlink.c;fp=src%2Flibmeshlink.c;h=04e3141561b4aa1d582562872de17278d82d69f9;hb=4d1de7e2f6e014675fd3404686b524a3afa3cee8;hp=1631fb1aee9e72e32cdadf15f66b572ba70936e3;hpb=cd5066a634a2cde0b7fc27818554614016a873a5;p=meshlink diff --git a/src/libmeshlink.c b/src/libmeshlink.c index 1631fb1a..04e31415 100644 --- a/src/libmeshlink.c +++ b/src/libmeshlink.c @@ -20,12 +20,50 @@ #include "libmeshlink.h" //tinc_setup() should basically do what cmd_init() from src/tincctl.c does, except it doesn't have to generate a tinc-up script. -bool tinc_setup(const char* path) { +bool tinc_setup(const char* tinc_conf, const char* name) { + if(!access(tinc_conf, F_OK)) { + fprintf(stderr, "Configuration file %s already exists!\n", tinc_conf); + return false; + } -init_configuration(&config_tree); + if(!check_id(name)) { + fprintf(stderr, "Invalid Name! Only a-z, A-Z, 0-9 and _ are allowed characters.\n"); + return false; + } + + if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) { + fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno)); + return false; + } + + if(mkdir(confbase, 0777) && errno != EEXIST) { + fprintf(stderr, "Could not create directory %s: %s\n", confbase, strerror(errno)); + return false; + } + + if(mkdir(hosts_dir, 0777) && errno != EEXIST) { + fprintf(stderr, "Could not create directory %s: %s\n", hosts_dir, strerror(errno)); + return false; + } + + FILE *f = fopen(tinc_conf, "w"); + if(!f) { + fprintf(stderr, "Could not create file %s: %s\n", tinc_conf, strerror(errno)); + return 1; + } + + fprintf(f, "Name = %s\n", name); + fclose(f); + + if(!rsa_keygen(2048, false) || !ecdsa_keygen(false)) + return false; + + check_port(name); + + return true; + +} -return true; -}; bool tinc_start(const char* path);