// Make sure the key size is a multiple of 8 bits.
bits &= ~0x7;
- // Force them to be between 1024 and 8192 bits long.
- if(bits < 1024)
- bits = 1024;
- if(bits > 8192)
- bits = 8192;
+ // Make sure that a valid key size is used.
+ if(bits < 1024 || bits > 8192) {
+ fprintf(stderr, "Invalid key size %d specified! It should be between 1024 and 8192 bits.\n", bits);
+ return false;
+ } else if(bits < 2048) {
+ fprintf(stderr, "WARNING: generating a weak %d bits RSA key! 2048 or more bits are recommended.\n", bits);
+ }
fprintf(stderr, "Generating %d bits keys:\n", bits);
va_start(ap, format);
blen = vsnprintf(buffer, sizeof buffer, format, ap);
+ buffer[sizeof buffer - 1] = 0;
va_end(ap);
if(blen < 1 || blen >= sizeof buffer)
}
fclose(f);
+ if ((pid == 0) || (kill(pid, 0) && (errno == ESRCH))) {
+ fprintf(stderr, "Could not find tincd running at pid %d\n", pid);
+ /* clean up the stale socket and pid file */
+ unlink(pidfilename);
+ unlink(unixsocketname);
+ return false;
+ }
#ifndef HAVE_MINGW
struct sockaddr_un sa;
if(!pid) {
close(pfd[0]);
- char buf[100] = "";
+ char buf[100];
snprintf(buf, sizeof buf, "%d", pfd[1]);
setenv("TINC_UMBILICAL", buf, true);
exit(execvp(c, nargv));
return 1;
}
- if(!connect_tincd(true) && !pid)
+ if(!connect_tincd(true) || !pid)
return 1;
printf("%d\n", pid);
char *newline = memchr(data, '\n', len);
if(!newline || (newline - data > MAX_STRING_SIZE - 1)) {
fprintf(stderr, "Invalid input\n");
+ free(data);
return 1;
}
if(sscanf(data, "Signature = %s %ld %s", signer, &t, sig) != 3 || strlen(sig) != 86 || !t || !check_id(signer)) {
fprintf(stderr, "Invalid input\n");
+ free(data);
return 1;
}
if(node && strcmp(node, signer)) {
fprintf(stderr, "Signature is not made by %s\n", node);
+ free(data);
return 1;
}
if(nargc == argc)
continue;
- if(!strcasecmp(nargv[argc], "exit") || !strcasecmp(nargv[argc], "quit"))
+ if(!strcasecmp(nargv[argc], "exit") || !strcasecmp(nargv[argc], "quit")) {
+ free(nargv);
return result;
+ }
bool found = false;