.DE
The <list> can be one of "request", "reply", "proxy-request",
-"proxy-reply", "coa", "disconnect", or "control". As of Version 3,
-the <list> can be omitted, in which case "request" is assumed.
+"proxy-reply", "coa", "disconnect", "session-state", or "control". As
+of Version 3, the <list> can be omitted, in which case "request" is
+assumed.
The "control" list is the list of attributes maintainted internally by
the server that controls how the server processes the request. Any
Accounting-Request has been finished, and a reply sent to the NAS.
See raddb/sites-available/originate-coa for additional information.
+The "session-state" list is primarily used for EAP. Attributes put
+into the "session-state" list are saved for the next packet in the
+session. They are automatically retreived when the next packet is
+received.
+
The only contents permitted in an "update" section are attributes and
values. The contents of the "update" section are described in the
ATTRIBUTE REFERENCE and ATTRIBUTE ASSIGNMENT sections below.
#endif
VALUE_PAIR *config_items; //!< VALUE_PAIRs used to set per request parameters
//!< for modules and the server core at runtime.
+ VALUE_PAIR *state; //!< VALUE_PAIRs used to set session parameters
+ //!< for multiple packets, e.g. EAP.
VALUE_PAIR *username; //!< Cached username VALUE_PAIR.
VALUE_PAIR *password; //!< Cached password VALUE_PAIR.
PAIR_LIST_REQUEST,
PAIR_LIST_REPLY,
PAIR_LIST_CONTROL,
+ PAIR_LIST_STATE,
#ifdef WITH_PROXY
PAIR_LIST_PROXY_REQUEST,
PAIR_LIST_PROXY_REPLY,
#include <freeradius-devel/radiusd.h>
#include <freeradius-devel/modules.h>
+#include <freeradius-devel/state.h>
#include <freeradius-devel/rad_assert.h>
#include <ctype.h>
case RLM_MODULE_USERLOCK:
default:
request->reply->code = PW_CODE_ACCESS_REJECT;
+ fr_state_discard(request, request->packet);
result = RLM_MODULE_REJECT;
break;
/*
case RLM_MODULE_OK:
case RLM_MODULE_UPDATED:
result = RLM_MODULE_OK;
+
+ if (request->reply->code == PW_CODE_ACCESS_CHALLENGE) {
+ fr_state_put_vps(request, request->packet, request->reply);
+ } else if (request->reply->code == PW_CODE_ACCESS_ACCEPT) {
+ fr_state_discard(request, request->packet);
+ }
break;
}
return result;
request->password = pairfind(request->packet->vps, PW_CHAP_PASSWORD, 0, TAG_ANY);
}
+ /*
+ * Grab the VPS associated with the State attribute.
+ */
+ fr_state_get_vps(request, request->packet);
+
/*
* Get the user's authorization information from the database
*/
#include <freeradius-devel/radiusd.h>
#include <freeradius-devel/modules.h>
+#include <freeradius-devel/state.h>
#include <freeradius-devel/rad_assert.h>
#include <sys/file.h>
*/
fr_strerror();
+ fr_state_init();
+
/*
* Process requests until HUP or exit.
*/
xlat_free(); /* modules may have xlat's */
+ fr_state_delete();
+
/*
* Free the configuration items.
*/
TARGET := radiusd
SOURCES := acct.c auth.c client.c crypt.c files.c \
listen.c mainconfig.c modules.c modcall.c \
- radiusd.c stats.c soh.c connection.c \
+ radiusd.c state.c stats.c soh.c connection.c \
session.c threads.c version.c \
process.c realms.c detail.c
ifneq ($(OPENSSL_LIBS),)
{ "reply", PAIR_LIST_REPLY },
{ "control", PAIR_LIST_CONTROL }, /* New name should have priority */
{ "config", PAIR_LIST_CONTROL },
+ { "session-state", PAIR_LIST_STATE },
#ifdef WITH_PROXY
{ "proxy-request", PAIR_LIST_PROXY_REQUEST },
{ "proxy-reply", PAIR_LIST_PROXY_REPLY },
case PAIR_LIST_CONTROL:
return &request->config_items;
+ case PAIR_LIST_STATE:
+ return &request->state;
+
#ifdef WITH_PROXY
case PAIR_LIST_PROXY_REQUEST:
if (!request->proxy) break;
case PAIR_LIST_CONTROL:
return request;
+ case PAIR_LIST_STATE:
+ return request;
+
#ifdef WITH_PROXY
case PAIR_LIST_PROXY_REQUEST:
return request->proxy;
#include <freeradius-devel/radiusd.h>
#include <freeradius-devel/modules.h>
+#include <freeradius-devel/state.h>
#include <freeradius-devel/rad_assert.h>
#ifdef HAVE_GETOPT_H
goto finish;
}
+ fr_state_init();
+
/* Set the panic action (if required) */
if (main_config.panic_action &&
#ifndef NDEBUG
xlat_free(); /* modules may have xlat's */
+ fr_state_delete();
+
/*
* Free the configuration items.
*/
TARGET := unittest
SOURCES := acct.c auth.c client.c crypt.c files.c \
mainconfig.c modules.c modcall.c \
- unittest.c soh.c connection.c \
+ unittest.c soh.c state.c connection.c \
session.c threads.c version.c \
realms.c