* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
- *
- * $Id$
*/
-#include <ratbox_lib.h>
+#include <rb_lib.h>
#include "stdinc.h"
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,
rb_close(F2);
rb_close(P1);
ctl = allocate_ssl_daemon(F1, P2, pid);
- if(ssl_ok)
+ if(ircd_ssl_ok)
{
send_init_prng(ctl, RB_PRNG_DEFAULT, NULL);
send_certfp_method(ctl, ConfigFileEntry.certfp_method);
uint32_t len;
uint8_t *certfp;
char *certfp_string;
- int i;
if(ctl_buf->buflen > 5 + RB_SSL_CERTFP_LEN)
return; /* bogus message..drop it.. XXX should warn here */
return;
rb_free(client_p->certfp);
certfp_string = rb_malloc(len * 2 + 1);
- for(i = 0; i < len; i++)
+ for(uint32_t i = 0; i < len; i++)
snprintf(certfp_string + 2 * i, 3, "%02x",
certfp[i]);
client_p->certfp = certfp_string;
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;
+ unsigned long len;
+
if(ctl->dead)
return;
+
RB_DLINK_FOREACH_SAFE(ptr, next, ctl->readq.head)
{
ctl_buf = ptr->data;
switch (*ctl_buf->buf)
{
case 'N':
- ssl_ok = 0; /* ssld says it can't do ssl/tls */
+ ircd_ssl_ok = false; /* ssld says it can't do ssl/tls */
break;
case 'D':
ssl_process_dead_fd(ctl, ctl_buf);
ssl_process_zipstats(ctl, ctl_buf);
break;
case 'I':
- ssl_ok = 0;
+ ircd_ssl_ok = false;
ilog(L_MAIN, "%s", cannot_setup_ssl);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", cannot_setup_ssl);
break;
case 'U':
- zlib_ok = 0;
- ssl_ok = 0;
+ ircd_zlib_ok = 0;
+ ircd_ssl_ok = false;
ilog(L_MAIN, "%s", no_ssl_or_zlib);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", no_ssl_or_zlib);
ssl_killall();
- break;
+ return;
+ 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;
+ ircd_zlib_ok = 0;
break;
default:
ilog(L_MAIN, "Received invalid command from ssld: %s", ctl_buf->buf);
rb_dlink_node *ptr;
if(ssl_cert == NULL || ssl_private_key == NULL || ssl_dh_params == NULL)
{
- ssl_ok = 0;
+ ircd_ssl_ok = false;
return;
}
RB_DLINK_FOREACH(ptr, ssl_daemons.head)
F[0] = server->localClient->F;
F[1] = xF1;
- del_from_cli_connid_hash(server);
+ del_from_zconnid_hash(server);
server->localClient->F = xF2;
/* need to redo as what we did before isn't valid now */
- uint32_to_buf(&buf[1], rb_get_fd(server->localClient->F));
- add_to_cli_connid_hash(server);
+ uint32_to_buf(&buf[1], server->localClient->zconnid);
+ add_to_zconnid_hash(server);
server->localClient->z_ctl = which_ssld();
if(!server->localClient->z_ctl)
}
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;
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);
}
}