summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vchat-client.c7
-rw-r--r--vchat-connection.h2
-rwxr-xr-xvchat-keygen7
-rw-r--r--vchat-protocol.c1
-rw-r--r--vchat-tls.h2
-rw-r--r--vchat-ui.c31
-rw-r--r--vchat.h3
-rw-r--r--[-rwxr-xr-x]vchatrc.ex0
8 files changed, 44 insertions, 9 deletions
diff --git a/vchat-client.c b/vchat-client.c
index a22df94..92d1905 100644
--- a/vchat-client.c
+++ b/vchat-client.c
@@ -343,8 +343,13 @@ void cleanup(int signal) {
343 /* inform user if we where killed by signal */ 343 /* inform user if we where killed by signal */
344 if (signal > 1) { 344 if (signal > 1) {
345 fprintf(stderr, "vchat-client: terminated with signal %d.\n", signal); 345 fprintf(stderr, "vchat-client: terminated with signal %d.\n", signal);
346 } else if (errstr[0]) 346 if (!loggedin)
347 dumpconnect();
348 } else if (errstr[0]) {
347 fputs(errstr, stderr); 349 fputs(errstr, stderr);
350 if (!loggedin)
351 dumpconnect();
352 }
348 /* end of story */ 353 /* end of story */
349 exit(0); 354 exit(0);
350} 355}
diff --git a/vchat-connection.h b/vchat-connection.h
index 766dc0a..84294f6 100644
--- a/vchat-connection.h
+++ b/vchat-connection.h
@@ -5,7 +5,7 @@
5int vc_connect(const char *host, const char *port); 5int vc_connect(const char *host, const char *port);
6void vc_sendmessage(const char *message); 6void vc_sendmessage(const char *message);
7int vc_receive(); 7int vc_receive();
8int vc_poll(); 8int vc_poll(int);
9void vc_disconnect(); 9void vc_disconnect();
10 10
11const char *vchat_tls_version_external(); 11const char *vchat_tls_version_external();
diff --git a/vchat-keygen b/vchat-keygen
index 91fcbba..4163838 100755
--- a/vchat-keygen
+++ b/vchat-keygen
@@ -29,7 +29,8 @@ if [ ! -e $KEYBASE.key ]; then
29 echo "vchat-keygen: generating RSA key $KEYBASE.key" 29 echo "vchat-keygen: generating RSA key $KEYBASE.key"
30 echo "vchat-keygen: please set passphrase for local security" 30 echo "vchat-keygen: please set passphrase for local security"
31 umask 0077 31 umask 0077
32 openssl genrsa -des3 -out $KEYBASE.key 4096 32 openssl ecparam -genkey -name secp384r1 | \
33 openssl ec -out $KEYBASE.key -aes256
33else 34else
34 echo "vchat-keygen: private key $KEYBASE.key exists" 35 echo "vchat-keygen: private key $KEYBASE.key exists"
35fi 36fi
@@ -40,11 +41,11 @@ fi
40 echo "vchat-keygen: generating config-file for self-signing $KEYBASE.ca.keyconf" 41 echo "vchat-keygen: generating config-file for self-signing $KEYBASE.ca.keyconf"
41 cat >$KEYBASE.ca.keyconf <<EOT 42 cat >$KEYBASE.ca.keyconf <<EOT
42[ req ] 43[ req ]
43default_bits = 4096
44default_keyfile = user.key 44default_keyfile = user.key
45distinguished_name = req_distinguished_name 45distinguished_name = req_distinguished_name
46string_mask = nombstr 46string_mask = nombstr
47req_extensions = v3_req 47req_extensions = v3_req
48default_md = sha384
48[ req_distinguished_name ] 49[ req_distinguished_name ]
49commonName = Name 50commonName = Name
50commonName_max = 64 51commonName_max = 64
@@ -57,7 +58,7 @@ EOT
57 fi 58 fi
58 echo "vchat-keygen: generating Certificate Signing Request $KEYBASE.csr" 59 echo "vchat-keygen: generating Certificate Signing Request $KEYBASE.csr"
59 echo "vchat-keygen: please enter your nickname at the 'Name []:' prompt" 60 echo "vchat-keygen: please enter your nickname at the 'Name []:' prompt"
60 openssl req -new -sha1 -config $KEYBASE.ca.keyconf -key $KEYBASE.key -out $KEYBASE.csr 61 openssl req -new -sha256 -config $KEYBASE.ca.keyconf -key $KEYBASE.key -out $KEYBASE.csr
61 echo "vchat-keygen: send this ($KEYBASE.csr) Certificate Signing Request to 62 echo "vchat-keygen: send this ($KEYBASE.csr) Certificate Signing Request to
62 vchat@vchat.berlin.ccc.de to get it signed by the vchat-CA. You will 63 vchat@vchat.berlin.ccc.de to get it signed by the vchat-CA. You will
63 receive your signed Certificate shortly." 64 receive your signed Certificate shortly."
diff --git a/vchat-protocol.c b/vchat-protocol.c
index ac65639..c5021e4 100644
--- a/vchat-protocol.c
+++ b/vchat-protocol.c
@@ -235,6 +235,7 @@ static void justloggedin(char *message) {
235 loadcfg(getstroption(CF_LOGINSCRIPT), 0, handleline); 235 loadcfg(getstroption(CF_LOGINSCRIPT), 0, handleline);
236 handleline(".S"); 236 handleline(".S");
237 loggedin = 1; 237 loggedin = 1;
238 flushconnect();
238 } 239 }
239} 240}
240 241
diff --git a/vchat-tls.h b/vchat-tls.h
index 5399820..2771173 100644
--- a/vchat-tls.h
+++ b/vchat-tls.h
@@ -26,7 +26,7 @@ void vc_cleanup_x509store(vc_x509store_t *s);
26 26
27#if !defined(TLS_LIB_OPENSSL) && !defined(TLS_LIB_MBEDTLS) 27#if !defined(TLS_LIB_OPENSSL) && !defined(TLS_LIB_MBEDTLS)
28#error \ 28#error \
29 "Neither TLS_LIB_OPENSSL nor TLS_LIB_MBEDTLS are defined. Please select exactly one." 29 "Neither TLS_LIB_OPENSSL nor TLS_LIB_MBEDTLS are defined. Please select at least one."
30#endif 30#endif
31 31
32#ifdef TLS_LIB_OPENSSL 32#ifdef TLS_LIB_OPENSSL
diff --git a/vchat-ui.c b/vchat-ui.c
index bb33287..185cad0 100644
--- a/vchat-ui.c
+++ b/vchat-ui.c
@@ -91,6 +91,7 @@ struct sb_data {
91static struct sb_data *sb_pub = NULL; 91static struct sb_data *sb_pub = NULL;
92static struct sb_data *sb_priv = NULL; 92static struct sb_data *sb_priv = NULL;
93static struct sb_data *sb_out = NULL; 93static struct sb_data *sb_out = NULL;
94static struct sb_data *sb_connect = NULL;
94 95
95/* Tells, which window is active */ 96/* Tells, which window is active */
96static int sb_win = 0; /* 0 for pub, 1 for priv */ 97static int sb_win = 0; /* 0 for pub, 1 for priv */
@@ -310,14 +311,18 @@ static void sb_flush(struct sb_data *sb) {
310 now = tmp; 311 now = tmp;
311 } 312 }
312 sb->entries = NULL; 313 sb->entries = NULL;
314 sb->last = NULL;
315 sb->count = 0;
316 sb->scroll = 0;
313} 317}
314 318
315/*static void 319/*
316sb_clear ( struct sb_data **sb ) { 320static void sb_clear ( struct sb_data **sb ) {
317 sb_flush(*sb); 321 sb_flush(*sb);
318 free( *sb ); 322 free( *sb );
319 *sb = NULL; 323 *sb = NULL;
320}*/ 324}
325*/
321 326
322static struct sb_entry *sb_add(struct sb_data *sb, const char *line, 327static struct sb_entry *sb_add(struct sb_data *sb, const char *line,
323 time_t when) { 328 time_t when) {
@@ -407,9 +412,27 @@ int writecf(formtstr id, char *str) {
407 else 412 else
408 consoleline(NULL); 413 consoleline(NULL);
409 414
415 if (!loggedin)
416 sb_add(sb_connect, str, now);
417
410 return i; 418 return i;
411} 419}
412 420
421void dumpconnect() {
422 struct sb_entry *now = sb_connect->entries, *prev = NULL, *tmp;
423 while (now) {
424 tmp = (struct sb_entry *)((unsigned long)prev ^ (unsigned long)now->link);
425 fputs(now->what, stderr);
426 fputc(10, stderr);
427 prev = now;
428 now = tmp;
429 }
430}
431
432void flushconnect() {
433 sb_flush(sb_connect);
434}
435
413int writepriv(char *str, int maybeep) { 436int writepriv(char *str, int maybeep) {
414 int i = 0; 437 int i = 0;
415 if (private) { 438 if (private) {
@@ -1222,6 +1245,7 @@ void initui(void) {
1222 /* Prepare our scrollback buffers */ 1245 /* Prepare our scrollback buffers */
1223 sb_pub = (struct sb_data *)malloc(sizeof(struct sb_data)); 1246 sb_pub = (struct sb_data *)malloc(sizeof(struct sb_data));
1224 sb_out = (struct sb_data *)malloc(sizeof(struct sb_data)); 1247 sb_out = (struct sb_data *)malloc(sizeof(struct sb_data));
1248 sb_connect = (struct sb_data *)malloc(sizeof(struct sb_data));
1225 if (privheight) 1249 if (privheight)
1226 sb_priv = (struct sb_data *)malloc(sizeof(struct sb_data)); 1250 sb_priv = (struct sb_data *)malloc(sizeof(struct sb_data));
1227 else 1251 else
@@ -1230,6 +1254,7 @@ void initui(void) {
1230 memset(sb_pub, 0, sizeof(struct sb_data)); 1254 memset(sb_pub, 0, sizeof(struct sb_data));
1231 memset(sb_priv, 0, sizeof(struct sb_data)); 1255 memset(sb_priv, 0, sizeof(struct sb_data));
1232 memset(sb_out, 0, sizeof(struct sb_data)); 1256 memset(sb_out, 0, sizeof(struct sb_data));
1257 memset(sb_connect, 0, sizeof(struct sb_data));
1233 1258
1234 /* set colors for windows */ 1259 /* set colors for windows */
1235 if (has_colors()) { 1260 if (has_colors()) {
diff --git a/vchat.h b/vchat.h
index 412566a..3fdbb37 100644
--- a/vchat.h
+++ b/vchat.h
@@ -195,6 +195,9 @@ void flushout(void);
195 } 195 }
196void hideout(void); 196void hideout(void);
197int writecf(formtstr id, char *str); 197int writecf(formtstr id, char *str);
198/* dumps aggregated connect output in case of a connection error */
199void dumpconnect();
200void flushconnect();
198 201
199extern int outputcountdown; 202extern int outputcountdown;
200 203
diff --git a/vchatrc.ex b/vchatrc.ex
index c66d1f9..c66d1f9 100755..100644
--- a/vchatrc.ex
+++ b/vchatrc.ex