* retry it.
*/
case STATE_RUNNING:
- if (time(NULL) < (data->running + data->retry_interval)) {
+ if (time(NULL) < (data->running + (int)data->retry_interval)) {
return NULL;
}
*/
if (!strcasecmp(key, "Client-IP-Address")) {
data->client_ip.af = AF_INET;
- if (ip_hton(value, AF_INET, &data->client_ip) < 0) {
+ if (ip_hton(&data->client_ip, AF_INET, value, false) < 0) {
ERROR("Failed parsing Client-IP-Address");
pairfree(&data->vps);
* Allocate the packet. If we fail, it's a serious
* problem.
*/
- packet = rad_alloc(NULL, 1);
+ packet = rad_alloc(NULL, true);
if (!packet) {
ERROR("FATAL: Failed allocating memory for detail");
fr_exit(1);
#ifdef WITH_DETAIL_THREAD
if (!check_config) {
+ ssize_t ret;
void *arg = NULL;
/*
/*
* Wait for it to acknowledge that it's stopped.
*/
- if (read(data->master_pipe[0], &arg, sizeof(arg)) < 0) {
+ ret = read(data->master_pipe[0], &arg, sizeof(arg));
+ if (ret < 0) {
ERROR("Reader thread exited without informing the master: %s", fr_syserror(errno));
+ } else if (ret != sizeof(arg)) {
+ ERROR("Invalid thread pointer received from reader thread during exit");
+ ERROR("Expected %zu bytes, got %zi bytes", sizeof(arg), ret);
}
close(data->master_pipe[0]);
close(data->master_pipe[1]);
- pthread_join(data->pthread_id, &arg);
+ if (arg) pthread_join(data->pthread_id, &arg);
}
#endif
static void *detail_handler_thread(void *arg)
{
char c;
- ssize_t rcode;
rad_listen_t *this = arg;
listen_detail_t *data = this->data;
static const CONF_PARSER detail_config[] = {
- { "detail", PW_TYPE_FILE_OUTPUT | PW_TYPE_DEPRECATED,
- offsetof(listen_detail_t, filename), NULL, NULL },
- { "filename", PW_TYPE_FILE_OUTPUT | PW_TYPE_REQUIRED,
- offsetof(listen_detail_t, filename), NULL, NULL },
- { "load_factor", PW_TYPE_INTEGER,
- offsetof(listen_detail_t, load_factor), NULL, STRINGIFY(10)},
- { "poll_interval", PW_TYPE_INTEGER,
- offsetof(listen_detail_t, poll_interval), NULL, STRINGIFY(1)},
- { "retry_interval", PW_TYPE_INTEGER,
- offsetof(listen_detail_t, retry_interval), NULL, STRINGIFY(30)},
- { "one_shot", PW_TYPE_BOOLEAN,
- offsetof(listen_detail_t, one_shot), NULL, NULL},
- { "max_outstanding", PW_TYPE_INTEGER,
- offsetof(listen_detail_t, load_factor), NULL, NULL},
+ { "detail", FR_CONF_OFFSET(PW_TYPE_FILE_OUTPUT | PW_TYPE_DEPRECATED, listen_detail_t, filename), NULL },
+ { "filename", FR_CONF_OFFSET(PW_TYPE_FILE_OUTPUT | PW_TYPE_REQUIRED, listen_detail_t, filename), NULL },
+ { "load_factor", FR_CONF_OFFSET(PW_TYPE_INTEGER, listen_detail_t, load_factor), STRINGIFY(10) },
+ { "poll_interval", FR_CONF_OFFSET(PW_TYPE_INTEGER, listen_detail_t, poll_interval), STRINGIFY(1) },
+ { "retry_interval", FR_CONF_OFFSET(PW_TYPE_INTEGER, listen_detail_t, retry_interval), STRINGIFY(30) },
+ { "one_shot", FR_CONF_OFFSET(PW_TYPE_BOOLEAN, listen_detail_t, one_shot), NULL },
+ { "max_outstanding", FR_CONF_OFFSET(PW_TYPE_INTEGER, listen_detail_t, load_factor), NULL },
{ NULL, -1, 0, NULL, NULL } /* end the list */
};
memset(client, 0, sizeof(*client));
client->ipaddr.af = AF_INET;
client->ipaddr.ipaddr.ip4addr.s_addr = INADDR_NONE;
- client->prefix = 0;
+ client->ipaddr.prefix = 0;
client->longname = client->shortname = data->filename;
client->secret = client->shortname;
client->nas_type = talloc_strdup(data, "none"); /* Part of 'data' not dynamically allocated */