ssld: provide version in stats S output

This commit is contained in:
Simon Arlott 2016-03-03 22:08:13 +00:00
parent 08e43ffb21
commit e9ffc3c153
No known key found for this signature in database
GPG key ID: C8975F2043CA5D24
4 changed files with 26 additions and 6 deletions

View file

@ -42,7 +42,7 @@ void start_zlib_session(void *data);
void send_new_ssl_certs(const char *ssl_cert, const char *ssl_private_key, const char *ssl_dh_params, const char *ssl_cipher_list); void send_new_ssl_certs(const char *ssl_cert, const char *ssl_private_key, const char *ssl_dh_params, const char *ssl_cipher_list);
void ssld_decrement_clicount(ssl_ctl_t *ctl); void ssld_decrement_clicount(ssl_ctl_t *ctl);
int get_ssld_count(void); int get_ssld_count(void);
void ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_status status), void *data); void ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_status status, const char *version), void *data);
#endif #endif

View file

@ -68,6 +68,7 @@ struct _ssl_ctl
rb_dlink_list writeq; rb_dlink_list writeq;
uint8_t shutdown; uint8_t shutdown;
uint8_t dead; uint8_t dead;
char version[256];
}; };
static void send_new_ssl_certs_one(ssl_ctl_t * ctl, const char *ssl_cert, static void send_new_ssl_certs_one(ssl_ctl_t * ctl, const char *ssl_cert,
@ -479,8 +480,11 @@ ssl_process_cmd_recv(ssl_ctl_t * ctl)
static const char *no_ssl_or_zlib = "ssld has neither SSL/TLS or zlib support killing all sslds"; static const char *no_ssl_or_zlib = "ssld has neither SSL/TLS or zlib support killing all sslds";
rb_dlink_node *ptr, *next; rb_dlink_node *ptr, *next;
ssl_ctl_buf_t *ctl_buf; ssl_ctl_buf_t *ctl_buf;
int len;
if(ctl->dead) if(ctl->dead)
return; return;
RB_DLINK_FOREACH_SAFE(ptr, next, ctl->readq.head) RB_DLINK_FOREACH_SAFE(ptr, next, ctl->readq.head)
{ {
ctl_buf = ptr->data; ctl_buf = ptr->data;
@ -513,6 +517,11 @@ ssl_process_cmd_recv(ssl_ctl_t * ctl)
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", no_ssl_or_zlib); sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", no_ssl_or_zlib);
ssl_killall(); ssl_killall();
break; break;
case 'V':
len = ctl_buf->buflen - 1;
if (len > sizeof(ctl->version) - 1)
len = sizeof(ctl->version) - 1;
strncpy(ctl->version, &ctl_buf->buf[1], len);
case 'z': case 'z':
zlib_ok = 0; zlib_ok = 0;
break; break;
@ -938,7 +947,7 @@ get_ssld_count(void)
} }
void void
ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_status status), void *data) ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_status status, const char *version), void *data)
{ {
rb_dlink_node *ptr, *next; rb_dlink_node *ptr, *next;
ssl_ctl_t *ctl; ssl_ctl_t *ctl;
@ -947,7 +956,8 @@ ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_s
ctl = ptr->data; ctl = ptr->data;
func(data, ctl->pid, ctl->cli_count, func(data, ctl->pid, ctl->cli_count,
ctl->dead ? SSLD_DEAD : ctl->dead ? SSLD_DEAD :
(ctl->shutdown ? SSLD_SHUTDOWN : SSLD_ACTIVE)); (ctl->shutdown ? SSLD_SHUTDOWN : SSLD_ACTIVE),
ctl->version);
} }
} }

View file

@ -889,15 +889,16 @@ stats_resv(struct Client *source_p)
} }
static void static void
stats_ssld_foreach(void *data, pid_t pid, int cli_count, enum ssld_status status) stats_ssld_foreach(void *data, pid_t pid, int cli_count, enum ssld_status status, const char *version)
{ {
struct Client *source_p = data; struct Client *source_p = data;
sendto_one_numeric(source_p, RPL_STATSDEBUG, sendto_one_numeric(source_p, RPL_STATSDEBUG,
"S :%u %c %u", "S :%u %c %u :%s",
pid, pid,
status == SSLD_DEAD ? 'D' : (status == SSLD_SHUTDOWN ? 'S' : 'A'), status == SSLD_DEAD ? 'D' : (status == SSLD_SHUTDOWN ? 'S' : 'A'),
cli_count); cli_count,
version);
} }
static void static void

View file

@ -973,6 +973,14 @@ send_i_am_useless(mod_ctl_t * ctl)
mod_cmd_write_queue(ctl, useless, strlen(useless)); mod_cmd_write_queue(ctl, useless, strlen(useless));
} }
static void
send_version(mod_ctl_t * ctl)
{
char version[256] = { 'V', 0 };
strncpy(&version[1], rb_lib_version(), sizeof(version) - 2);
mod_cmd_write_queue(ctl, version, strlen(version));
}
static void static void
send_nozlib_support(mod_ctl_t * ctl, mod_ctl_buf_t * ctlb) send_nozlib_support(mod_ctl_t * ctl, mod_ctl_buf_t * ctlb)
{ {
@ -1242,6 +1250,7 @@ main(int argc, char **argv)
rb_event_add("check_handshake_flood", check_handshake_flood, NULL, 10); rb_event_add("check_handshake_flood", check_handshake_flood, NULL, 10);
read_pipe_ctl(mod_ctl->F_pipe, NULL); read_pipe_ctl(mod_ctl->F_pipe, NULL);
mod_read_ctl(mod_ctl->F, mod_ctl); mod_read_ctl(mod_ctl->F, mod_ctl);
send_version(mod_ctl);
if(!zlib_ok && !ssl_ok) if(!zlib_ok && !ssl_ok)
{ {
/* this is really useless... */ /* this is really useless... */