2 * acct.c Accounting routines.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * Copyright 2000 The FreeRADIUS server project
21 * Copyright 2000 Miquel van Smoorenburg <miquels@cistron.nl>
22 * Copyright 2000 Alan DeKok <aland@ox.org>
23 * Copyright 2000 Alan Curry <pacman@world.std.com>
26 static const char rcsid[] = "$Id$";
29 #include "libradius.h"
39 * rad_accounting: call modules.
41 * The return value of this function isn't actually used right now, so
42 * it's not entirely clear if it is returning the right things. --Pac.
44 int rad_accounting(REQUEST *request)
46 int reply = RLM_MODULE_OK;
48 if (!request->proxy) { /* Only need to do this once, before proxying */
49 reply = module_preacct(request);
50 if (reply != RLM_MODULE_NOOP &&
51 reply != RLM_MODULE_OK &&
52 reply != RLM_MODULE_UPDATED)
56 * Do accounting, ONLY the first time through.
57 * This is to ensure that we log the packet
58 * immediately, even if the proxy never does.
60 reply = module_accounting(request);
63 * Maybe one of the preacct modules has decided
64 * that a proxy should be used. If so, get out of
65 * here and send the proxied packet, but ONLY if
66 * there isn't one already...
68 if (pairfind(request->config_items, PW_PROXY_TO_REALM)) {
74 * We get here IF we're not proxying, OR if we've
75 * received the accounting reply from the end server,
76 * THEN we can reply to the NAS.
78 if (reply == RLM_MODULE_NOOP ||
79 reply == RLM_MODULE_OK ||
80 reply == RLM_MODULE_UPDATED) {
82 * Now send back an ACK to the NAS.
84 request->reply->code = PW_ACCOUNTING_RESPONSE;