authd/provider: exit on critical errors

This commit is contained in:
Elizabeth Myers 2016-03-31 00:26:48 -05:00
parent 1e89fb5fa2
commit c23f97550f

View file

@ -67,7 +67,8 @@ load_provider(struct auth_provider *provider)
{ {
if(rb_dlink_list_length(&auth_providers) >= MAX_PROVIDERS) if(rb_dlink_list_length(&auth_providers) >= MAX_PROVIDERS)
{ {
warn_opers(L_CRIT, "Exceeded maximum level of authd providers (%d max)", MAX_PROVIDERS); warn_opers(L_WARN, "provider: cannot load provider with id %d: maximum reached (%d)",
provider->id, MAX_PROVIDERS);
return; return;
} }
@ -142,6 +143,8 @@ destroy_providers(void)
if(provider->destroy) if(provider->destroy)
provider->destroy(); provider->destroy();
} }
rb_event_delete(timeout_ev);
} }
/* Cancel outstanding providers for a client */ /* Cancel outstanding providers for a client */
@ -261,9 +264,8 @@ start_auth(const char *cid, const char *l_ip, const char *l_port, const char *c_
rb_dictionary_add(auth_clients, RB_UINT_TO_POINTER(auth->cid), auth); rb_dictionary_add(auth_clients, RB_UINT_TO_POINTER(auth->cid), auth);
else else
{ {
warn_opers(L_CRIT, "BUG: duplicate client added via start_auth: %x", auth->cid); warn_opers(L_CRIT, "provider: duplicate client added via start_auth: %x", auth->cid);
rb_free(auth); exit(EX_PROVIDER_ERROR);
return;
} }
rb_strlcpy(auth->l_ip, l_ip, sizeof(auth->l_ip)); rb_strlcpy(auth->l_ip, l_ip, sizeof(auth->l_ip));
@ -321,8 +323,8 @@ handle_new_connection(int parc, char *parv[])
{ {
if(parc < 6) if(parc < 6)
{ {
warn_opers(L_CRIT, "BUG: received too few params for new connection (6 expected, got %d)", parc); warn_opers(L_CRIT, "provider: received too few params for new connection (6 expected, got %d)", parc);
return; exit(EX_PROVIDER_ERROR);
} }
start_auth(parv[1], parv[2], parv[3], parv[4], parv[5]); start_auth(parv[1], parv[2], parv[3], parv[4], parv[5]);
@ -336,20 +338,20 @@ handle_cancel_connection(int parc, char *parv[])
if(parc < 2) if(parc < 2)
{ {
warn_opers(L_CRIT, "BUG: received too few params for new connection (2 expected, got %d)", parc); warn_opers(L_CRIT, "provider: received too few params for new connection (2 expected, got %d)", parc);
return; exit(EX_PROVIDER_ERROR);
} }
if((lcid = strtol(parv[1], NULL, 16)) > UINT32_MAX) if((lcid = strtol(parv[1], NULL, 16)) > UINT32_MAX)
{ {
warn_opers(L_CRIT, "BUG: got a request to cancel a connection that can't exist: %lx", lcid); warn_opers(L_CRIT, "provider: got a request to cancel a connection that can't exist: %lx", lcid);
return; exit(EX_PROVIDER_ERROR);
} }
if((auth = rb_dictionary_retrieve(auth_clients, RB_UINT_TO_POINTER((uint32_t)lcid))) == NULL) if((auth = rb_dictionary_retrieve(auth_clients, RB_UINT_TO_POINTER((uint32_t)lcid))) == NULL)
{ {
warn_opers(L_CRIT, "BUG: tried to cancel nonexistent connection %lx", lcid); warn_opers(L_CRIT, "provider: tried to cancel nonexistent connection %lx", lcid);
return; exit(EX_PROVIDER_ERROR);
} }
cancel_providers(auth); cancel_providers(auth);
@ -372,7 +374,7 @@ provider_timeout_event(void *notused __unused)
const time_t timeout = auth->timeout[provider->id]; const time_t timeout = auth->timeout[provider->id];
if(is_provider_on(auth, provider->id) && provider->timeout != NULL && if(is_provider_on(auth, provider->id) && provider->timeout != NULL &&
timeout && timeout < curtime) timeout > 0 && timeout < curtime)
{ {
provider->timeout(auth); provider->timeout(auth);
} }