annotate extensions/radius_gw/rg_common.h @ 406:3a8e91184d4d

Added code to handle RADIUS client deconnection
author Sebastien Decugis <sdecugis@nict.go.jp>
date Wed, 10 Jun 2009 15:33:26 +0900
parents 1a4902b216f8
children 9cb1799c40d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
348
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3 * Author: Sebastien Decugis <sdecugis@nict.go.jp> *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
371
e86dba02630a Updated copyright information
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 365
diff changeset
5 * Copyright (c) 2009, WIDE Project and NICT *
348
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
35
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
36 /* This file contains definitions for both radius_gw extension and subextensions. */
355
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
37
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
38 #ifndef _RG_COMMON_H
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
39 #define _RG_COMMON_H
360
2206c7f2945a Added md5 code to check authenticator
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 358
diff changeset
40
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
41 /* Some headers that are useful in many files */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
42 #include <pthread.h>
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
43 #include <string.h>
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
44 #include <stdlib.h>
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
45 #include <errno.h>
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
46 #include <stdint.h>
385
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
47 #include <dlfcn.h>
388
1a4902b216f8 Improved initial handling of RADIUS messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 385
diff changeset
48 #include <sys/socket.h>
1a4902b216f8 Improved initial handling of RADIUS messages
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 385
diff changeset
49 #include <netdb.h>
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
50
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
51 /* This should be overwritten before including this file */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
52 #ifndef DEFINE_DEBUG_MACRO
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
53 # define DEFINE_DEBUG_MACRO rg_common
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
54 # ifndef RG_COMMON_VERBO
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
55 # define RG_COMMON_VERBO 0
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
56 # endif /* RG_COMMON_VERBO */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
57 static int rg_common_verbosity = RG_COMMON_VERBO;
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
58 #endif /* DEFINE_DEBUG_MACRO */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
59
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
60 /* Include the waaad API definition */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
61 #define IN_EXTENSION
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
62 #include <waaad/waaad.h>
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
63
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
64 /* Include host-specific defines */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
65 #include "rg_host.h"
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
66
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
67 /* Include hostap files for RADIUS processings */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
68 #include "hostap_compat.h"
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
69 #include "md5.h"
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
70 #include "radius.h"
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
71
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
72 /* Include the radius_gw API definition */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
73 #include "rg_api.h"
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
74
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
75 /* Type of message / server */
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
76 #define RGW_EXT_TYPE_AUTH 1
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
77 #define RGW_EXT_TYPE_ACCT 2
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
78
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
79
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
80
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
81 /**************************************************************/
356
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
82 /* Functions exported by the common library extension */
350
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
83 /**************************************************************/
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
84
c47a045fd4d6 Commit before the golden week
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 348
diff changeset
85 /* List management */
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
86 struct rg_list {
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
87 struct rg_list *next;
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
88 struct rg_list *prev;
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
89 struct rg_list *head;
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
90 };
356
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
91 void rg_list_init(struct rg_list * plist);
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
92 int rg_list_is_empty(struct rg_list * plist);
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
93 void rg_list_insert_after(struct rg_list * ref, struct rg_list * item);
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
94 void rg_list_insert_before(struct rg_list * ref, struct rg_list * item);
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
95 void rg_list_unlink(struct rg_list * plist);
353
6ca21598562a Unified TRACE_DEBUG handling between daemon and extensions + some progress on radius gateway
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 352
diff changeset
96
363
9d330bd07134 Progress on the radius_gw gateway
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 361
diff changeset
97 /* Others */
9d330bd07134 Progress on the radius_gw gateway
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 361
diff changeset
98 int rg_thread_term(pthread_t * th);
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
99 void rg_cleanup_mutex(void * mtx);
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
100
385
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
101 int rg_pointers_init(void ** hdl);
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
102 void rg_pointers_fini(void **hdl);
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
103 #define rg_pointers_resolve( ptr, hdl, fct, ret ) { \
406
3a8e91184d4d Added code to handle RADIUS client deconnection
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 388
diff changeset
104 ptr = dlsym(hdl, fct); \
385
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
105 if (!ptr) { \
406
3a8e91184d4d Added code to handle RADIUS client deconnection
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 388
diff changeset
106 TRACE_DEBUG(INFO, "Error in dlsym(" fct "): %s", dlerror()); \
385
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
107 return ret; \
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
108 } \
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
109 }
03b512313cc1 Added code to handle sessions
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 371
diff changeset
110
363
9d330bd07134 Progress on the radius_gw gateway
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 361
diff changeset
111
355
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
112 /****************************************/
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
113 /* Debug and related stuff */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
114 /****************************************/
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
115
356
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
116 #include <assert.h>
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
117 #ifndef ASSERT
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
118 #define ASSERT(x) assert(x)
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
119 #endif /* ASSERT */
555dc5a58aef Added server code for radius extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 355
diff changeset
120
348
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
121
355
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
122 /* CHECK_* macro from the daemon */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
123 /* Helper for tracing the CHECK_* macros bellow */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
124 #define TRACE_DEBUG_ALL( str ) \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
125 TRACE_DEBUG(CALL, str );
348
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
126
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
127
355
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
128 /* Macros to check a return value and branch out in case of error.
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
129 * These macro are to be used only when errors are highly improbable, not for expected errors.
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
130 */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
131
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
132 /* Check the return value of a system function and execute fallback in case of error */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
133 #define CHECK_SYS_DO( __call__, __fallback__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
134 int __ret__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
135 TRACE_DEBUG_ALL( "Check SYS: " #__call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
136 __ret__ = (__call__); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
137 if (__ret__ < 0) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
138 int __err__ = errno; /* We may handle EINTR here */ \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
139 log_error("An unexpected error occured (%s), turn on debug for detail\n",\
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
140 strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
141 TRACE_DEBUG(INFO, "Error in '" #__call__ "': %s", strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
142 __fallback__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
143 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
144 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
145 /* Check the return value of a system function, return error code on error */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
146 #define CHECK_SYS( __call__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
147 int __ret__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
148 TRACE_DEBUG_ALL( "Check SYS: " #__call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
149 __ret__ = (__call__); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
150 if (__ret__ < 0) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
151 int __err__ = errno; /* We may handle EINTR here */ \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
152 log_error("An unexpected error occured (%s), turn on debug for detail\n",\
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
153 strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
154 TRACE_DEBUG(INFO, "Error in '" #__call__ "': %s", strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
155 return __err__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
156 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
157 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
158
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
159 /* Check the return value of a POSIX function and execute fallback in case of error or special value */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
160 #define CHECK_POSIX_DO2( __call__, __val__, __fallback1__, __fallback2__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
161 int __ret__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
162 TRACE_DEBUG_ALL( "Check POSIX: " #__call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
163 __ret__ = (__call__); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
164 if (__ret__ != 0) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
165 if (__ret__ == (__val__)) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
166 __fallback1__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
167 } else { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
168 log_error("An unexpected error, see log for detail\n"); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
169 TRACE_DEBUG(INFO, "Error in '" #__call__ "': %s", strerror(__ret__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
170 __fallback2__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
171 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
172 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
173 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
174
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
175 /* Check the return value of a POSIX function and execute fallback in case of error */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
176 #define CHECK_POSIX_DO( __call__, __fallback__ ) \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
177 CHECK_POSIX_DO2( (__call__), 0, , __fallback__ );
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
178
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
179 /* Check the return value of a POSIX function and return it if error */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
180 #define CHECK_POSIX( __call__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
181 int __v__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
182 CHECK_POSIX_DO( __v__ = (__call__), return __v__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
183 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
184
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
185 /* Check that a memory allocator did not return NULL, otherwise log an error and execute fallback */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
186 #define CHECK_MALLOC_DO( __call__, __fallback__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
187 void * __ret__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
188 TRACE_DEBUG_ALL( "Check MALLOC: " #__call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
189 __ret__ = (void *)( __call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
190 if (__ret__ == NULL) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
191 int __err__ = errno; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
192 log_error("Memory allocation failed: %s\n", strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
193 TRACE_DEBUG(INFO, "Error in '" #__call__ "': %s", strerror(__err__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
194 __fallback__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
195 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
196 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
197
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
198 /* Check that a memory allocator did not return NULL, otherwise return ENOMEM */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
199 #define CHECK_MALLOC( __call__ ) \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
200 CHECK_MALLOC_DO( __call__, return ENOMEM );
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
201
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
202
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
203 /* The next functions can be used also for expected errors */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
204
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
205 /* Check parameters at function entry, execute fallback on error */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
206 #define CHECK_PARAMS_DO( __bool__, __fallback__ ) \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
207 TRACE_DEBUG_ALL( "Check PARAMS: " #__bool__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
208 if ( ! (__bool__) ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
209 TRACE_DEBUG(INFO, "Invalid parameter received in " #__bool__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
210 __fallback__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
211 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
212 /* Check parameters at function entry, return EINVAL if the boolean is false (similar to assert) */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
213 #define CHECK_PARAMS( __bool__ ) \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
214 CHECK_PARAMS_DO( __bool__, return EINVAL );
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
215
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
216 /* Check the return value of an internal function, log and propagate */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
217 #define CHECK_FCT_DO( __call__, __fallback__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
218 int __ret__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
219 TRACE_DEBUG_ALL( "Check FCT: " #__call__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
220 __ret__ = (__call__); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
221 if (__ret__ != 0) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
222 TRACE_DEBUG(INFO, "Error in '" #__call__ "': %s", strerror(__ret__)); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
223 __fallback__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
224 } \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
225 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
226 /* Check the return value of a function call, return any error code */
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
227 #define CHECK_FCT( __call__ ) { \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
228 int __v__; \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
229 CHECK_FCT_DO( __v__ = (__call__), return __v__ ); \
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
230 }
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
231
b811859f9963 Added extensions management in radius_gw
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 354
diff changeset
232
365
0146c60af026 Moved to the hostap implementation of RADIUS processing (copied radius.* and md5.* files)
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 363
diff changeset
233 #endif /* _RG_COMMON_H */
348
7907e7cc0aef Some stub files for the gateway extension
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
234
"Welcome to our mercurial repository"