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 ssld_decrement_clicount(ssl_ctl_t *ctl);
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

View file

@ -68,6 +68,7 @@ struct _ssl_ctl
rb_dlink_list writeq;
uint8_t shutdown;
uint8_t dead;
char version[256];
};
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";
rb_dlink_node *ptr, *next;
ssl_ctl_buf_t *ctl_buf;
int len;
if(ctl->dead)
return;
RB_DLINK_FOREACH_SAFE(ptr, next, ctl->readq.head)
{
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);
ssl_killall();
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':
zlib_ok = 0;
break;
@ -938,7 +947,7 @@ get_ssld_count(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;
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;
func(data, ctl->pid, ctl->cli_count,
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
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;
sendto_one_numeric(source_p, RPL_STATSDEBUG,
"S :%u %c %u",
"S :%u %c %u :%s",
pid,
status == SSLD_DEAD ? 'D' : (status == SSLD_SHUTDOWN ? 'S' : 'A'),
cli_count);
cli_count,
version);
}
static void

View file

@ -973,6 +973,14 @@ send_i_am_useless(mod_ctl_t * ctl)
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
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);
read_pipe_ctl(mod_ctl->F_pipe, NULL);
mod_read_ctl(mod_ctl->F, mod_ctl);
send_version(mod_ctl);
if(!zlib_ok && !ssl_ok)
{
/* this is really useless... */