Mercurial > hg > waaad
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 |
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 |