#include "xalloc.h"
#include "random.h"
#include "pidfile.h"
+#include "fs.h"
#include "ed25519/sha512.h"
return 1;
}
+ if(argc > 2) {
+ fprintf(stderr, "Too many arguments!\n");
+ return 1;
+ }
+
// Check validity of the new node's name
if(!check_id(argv[1])) {
fprintf(stderr, "Invalid name for node.\n");
}
}
- snprintf(filename, sizeof(filename), "%s" SLASH "invitations", confbase);
-
- if(mkdir(filename, 0700) && errno != EEXIST) {
- fprintf(stderr, "Could not create directory %s: %s\n", filename, strerror(errno));
- return 1;
+ if(!makedirs(DIR_INVITATIONS)) {
+ return false;
}
+ snprintf(filename, sizeof(filename), "%s" SLASH "invitations", confbase);
+
// Count the number of valid invitations, clean up old ones
DIR *dir = opendir(filename);
}
static char *grep(const char *data, const char *var) {
- static char value[1024];
+ char value[1024];
const char *p = data;
size_t varlen = strlen(var);
memcpy(value, p, e - p);
value[e - p] = 0;
- return value;
+ return xstrdup(value);
}
static bool finalize_join(void) {
}
if(!netname) {
- const char *net = grep(data, "NetName");
+ char *net = grep(data, "NetName");
if(net) {
- netname = xstrdup(net);
+ netname = net;
if(!check_netname(netname, true)) {
fprintf(stderr, "Unsafe NetName found in invitation!\n");
goto make_names;
}
- 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));
+ if(!makedirs(DIR_HOSTS | DIR_CONFBASE | DIR_CACHE)) {
return false;
}
}
// Make sure confbase exists and is accessible.
- if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) {
- fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno));
- return 1;
- }
-
- if(mkdir(confbase, 0777) && errno != EEXIST) {
- fprintf(stderr, "Could not create directory %s: %s\n", confbase, strerror(errno));
- return 1;
+ if(!makedirs(DIR_CONFDIR | DIR_CONFBASE)) {
+ return false;
}
if(access(confbase, R_OK | W_OK | X_OK)) {
if(!fgets(line, sizeof(line), stdin)) {
fprintf(stderr, "Error while reading stdin: %s\n", strerror(errno));
- return false;
+ return 1;
}
invitation = line;
}
// Start an SPTPS session
- if(!sptps_start(&sptps, NULL, true, false, key, hiskey, "tinc invitation", 15, invitation_send, invitation_receive)) {
+ sptps_params_t params = {
+ .initiator = true,
+ .mykey = key,
+ .hiskey = hiskey,
+ .label = "tinc invitation",
+ .send_data = invitation_send,
+ .receive_record = invitation_receive,
+ };
+
+ if(!sptps_start(&sptps, ¶ms)) {
ecdsa_free(hiskey);
ecdsa_free(key);
return 1;