iptsec 1.12.11devel
Loading...
Searching...
No Matches
auth_module.h
Go to the documentation of this file.
1/*
2 * This file is part of the Sofia-SIP package
3 *
4 * Copyright (C) 2005 Nokia Corporation.
5 *
6 * Contact: Pekka Pessi <pekka.pessi@nokia-email.address.hidden>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 *
23 */
24
25#ifndef AUTH_MODULE_H
27#define AUTH_MODULE_H
28
37#ifndef SU_TAG_H
38#include <sofia-sip/su_tag.h>
39#endif
40#ifndef SU_WAIT_H
41#include <sofia-sip/su_wait.h>
42#endif
43#ifndef MSG_TYPES_H
44#include <sofia-sip/msg_types.h>
45#endif
46#ifndef URL_H
47#include <sofia-sip/url.h>
48#endif
49#ifndef URL_TAG_H
50#include <sofia-sip/url_tag.h>
51#endif
52
53SOFIA_BEGIN_DECLS
54
55typedef struct auth_mod_t auth_mod_t;
58
59#ifdef AUTH_MAGIC_T
60typedef AUTH_MAGIC_T auth_magic_t;
61#else
62typedef void auth_magic_t;
63#endif
64
66typedef struct auth_scheme const auth_scheme_t;
67
74
76typedef void auth_callback_t(auth_magic_t *, auth_status_t *);
77
97{
101 char const *as_phrase;
102 char const *as_user;
103 char const *as_display;
105 url_t const *as_user_uri; /* Return user's identity [in/out] */
106 char const *as_ident;
107 unsigned as_profile;
111 char const *as_realm;
112 char const *as_domain;
113 char const *as_uri;
114 char const *as_pdomain;
115 char const *as_method;
117 void const *as_body;
118 isize_t as_bodylen;
121 unsigned as_blacklist;
122 unsigned as_anonymous:1;
123 unsigned as_stale:1;
124 unsigned as_allow:1;
125 unsigned as_nextnonce:1;
126 unsigned :0;
127
134 auth_magic_t *as_magic;
140};
141
156
157SOFIAPUBVAR char const auth_internal_server_error[];
158
159#define AUTH_STATUS_INIT \
160 {{ SU_HOME_INIT(auth_status_t) }, 500, auth_internal_server_error, NULL }
161
162#define AUTH_STATUS_DEINIT(as) \
163 su_home_deinit(as->as_home)
164
165#define AUTH_RESPONSE_INIT(as) AUTH_STATUS_INIT
166#define AUTH_RESPONSE_DEINIT(as) AUTH_STATUS_DEINIT(as)
167
169
171 tag_type_t, tag_value_t, ...);
173
176
177SOFIAPUBFUN char const *auth_mod_name(auth_mod_t *am);
178
179SOFIAPUBFUN auth_status_t *auth_status_init(void *, isize_t size);
180SOFIAPUBFUN auth_status_t *auth_status_init_with(void *, isize_t size,
181 int status,
182 char const *phrase);
183
184SOFIAPUBFUN auth_status_t *auth_status_new(su_home_t *);
185
186SOFIAPUBFUN auth_status_t *auth_status_ref(auth_status_t *as);
187
188SOFIAPUBFUN void auth_status_unref(auth_status_t *as);
189
191 auth_status_t *as,
192 msg_auth_t *credentials,
193 auth_challenger_t const *ach);
194
196 auth_status_t *as,
197 auth_challenger_t const *ach);
198
199SOFIAPUBFUN void auth_mod_authorize(auth_mod_t *am,
200 auth_status_t *as,
201 auth_challenger_t const *ach);
202
204
205/* ====================================================================== */
206/* Deprecated functions */
207
208typedef enum {
209 auth_server,
210 auth_proxy,
211 auth_proxy_consume,
212 auth_consume
213} auth_kind_t;
214
215SOFIAPUBFUN void auth_mod_method(auth_mod_t *am,
216 auth_status_t *as,
217 msg_auth_t *credentials,
218 auth_challenger_t const *ach);
219
220SOFIAPUBFUN void auth_mod_check_client(auth_mod_t *am,
221 auth_status_t *as,
222 msg_auth_t *credentials,
223 auth_challenger_t const *ach);
224
225SOFIAPUBFUN void auth_mod_challenge_client(auth_mod_t *am,
226 auth_status_t *as,
227 auth_challenger_t const *ach);
228
229#ifdef SIP_H
230SOFIAPUBFUN void auth_mod_check(auth_mod_t *am,
231 auth_status_t *as,
232 sip_t const *sip,
233 auth_kind_t proxy);
234#endif
235
236#ifdef HTTP_H
237SOFIAPUBFUN const char *auth_mod_check_http(auth_mod_t *am,
238 auth_status_t *as,
239 http_t const *http,
240 auth_kind_t proxy);
241#endif
242
243/* ====================================================================== */
244/* Tags */
245
246#define AUTHTAG_ANY() authtag_any, ((tag_value_t)0)
247SOFIAPUBVAR tag_typedef_t authtag_any;
248
250#define AUTHTAG_MODULE(x) authtag_module, authtag_module_v((x))
251SOFIAPUBVAR tag_typedef_t authtag_module;
252
253#define AUTHTAG_MODULE_REF(x) authtag_module_ref, authtag_module_vr((&x))
254SOFIAPUBVAR tag_typedef_t authtag_module_ref;
255
256#if SU_INLINE_TAG_CAST
257su_inline tag_value_t authtag_module_v(auth_mod_t *v) {
258 return (tag_value_t)v;
259}
260su_inline tag_value_t authtag_module_vr(auth_mod_t **vp) {
261 return (tag_value_t)vp;
262}
263#else
264#define authtag_module_v(v) ((tag_value_t)(v))
265#define authtag_module_vr(v) ((tag_value_t)(v))
266#endif
267
269#define AUTHTAG_METHOD(x) authtag_method, tag_str_v((x))
270SOFIAPUBVAR tag_typedef_t authtag_method;
271
272#define AUTHTAG_METHOD_REF(x) authtag_method_ref, tag_str_vr((&x))
273SOFIAPUBVAR tag_typedef_t authtag_method_ref;
274
276#define AUTHTAG_REALM(x) authtag_realm, tag_str_v((x))
277SOFIAPUBVAR tag_typedef_t authtag_realm;
278
279#define AUTHTAG_REALM_REF(x) authtag_realm_ref, tag_str_vr((&x))
280SOFIAPUBVAR tag_typedef_t authtag_realm_ref;
281
283#define AUTHTAG_OPAQUE(x) authtag_opaque, tag_str_v((x))
284SOFIAPUBVAR tag_typedef_t authtag_opaque;
285
286#define AUTHTAG_OPAQUE_REF(x) authtag_opaque_ref, tag_str_vr((&x))
287SOFIAPUBVAR tag_typedef_t authtag_opaque_ref;
288
290#define AUTHTAG_DB(x) authtag_db, tag_str_v((x))
291SOFIAPUBVAR tag_typedef_t authtag_db;
292
293#define AUTHTAG_DB_REF(x) authtag_db_ref, tag_str_vr((&x))
294SOFIAPUBVAR tag_typedef_t authtag_db_ref;
295
297#define AUTHTAG_QOP(x) authtag_qop, tag_str_v((x))
298SOFIAPUBVAR tag_typedef_t authtag_qop;
299
300#define AUTHTAG_QOP_REF(x) authtag_qop_ref, tag_str_vr((&x))
301SOFIAPUBVAR tag_typedef_t authtag_qop_ref;
302
304#define AUTHTAG_ALGORITHM(x) authtag_algorithm, tag_str_v((x))
305SOFIAPUBVAR tag_typedef_t authtag_algorithm;
306
307#define AUTHTAG_ALGORITHM_REF(x) authtag_algorithm_ref, tag_str_vr((&x))
308SOFIAPUBVAR tag_typedef_t authtag_algorithm_ref;
309
311#define AUTHTAG_EXPIRES(x) authtag_expires, tag_uint_v((x))
312SOFIAPUBVAR tag_typedef_t authtag_expires;
313
314#define AUTHTAG_EXPIRES_REF(x) authtag_expires_ref, tag_uint_vr((&x))
315SOFIAPUBVAR tag_typedef_t authtag_expires_ref;
316
318#define AUTHTAG_NEXT_EXPIRES(x) authtag_next_expires, tag_uint_v((x))
319SOFIAPUBVAR tag_typedef_t authtag_next_expires;
320
321#define AUTHTAG_NEXT_EXPIRES_REF(x) \
322 authtag_next_expires_ref, tag_uint_vr((&x))
323SOFIAPUBVAR tag_typedef_t authtag_next_expires_ref;
324
326#define AUTHTAG_MAX_NCOUNT(x) authtag_max_ncount, tag_uint_v((x))
327SOFIAPUBVAR tag_typedef_t authtag_max_ncount;
328
329#define AUTHTAG_MAX_NCOUNT_REF(x) authtag_max_ncount_ref, tag_uint_vr((&x))
330SOFIAPUBVAR tag_typedef_t authtag_max_ncount_ref;
331
333#define AUTHTAG_BLACKLIST(x) authtag_blacklist, tag_uint_v((x))
334SOFIAPUBVAR tag_typedef_t authtag_blacklist;
335
336#define AUTHTAG_BLACKLIST_REF(x) authtag_blacklist_ref, tag_uint_vr((&x))
337SOFIAPUBVAR tag_typedef_t authtag_blacklist_ref;
338
340#define AUTHTAG_FORBIDDEN(x) authtag_forbidden, tag_bool_v((x))
341SOFIAPUBVAR tag_typedef_t authtag_forbidden;
342
343#define AUTHTAG_FORBIDDEN_REF(x) authtag_forbidden_ref, tag_bool_vr((&x))
344SOFIAPUBVAR tag_typedef_t authtag_forbidden_ref;
345
347#define AUTHTAG_ANONYMOUS(x) authtag_anonymous, tag_bool_v((x))
348SOFIAPUBVAR tag_typedef_t authtag_anonymous;
349
350#define AUTHTAG_ANONYMOUS_REF(x) authtag_anonymous_ref, tag_bool_vr((&x))
351SOFIAPUBVAR tag_typedef_t authtag_anonymous_ref;
352
354#define AUTHTAG_HSS(x) authtag_hss, tag_ptr_v((x))
355SOFIAPUBVAR tag_typedef_t authtag_hss;
356
357#define AUTHTAG_HSS_REF(x) authtag_hss_ref, tag_ptr_vr((&x), (x))
358SOFIAPUBVAR tag_typedef_t authtag_hss_ref;
359
361#define AUTHTAG_REMOTE(x) authtag_remote, urltag_url_v((x))
362SOFIAPUBVAR tag_typedef_t authtag_remote;
363
364#define AUTHTAG_REMOTE_REF(x) authtag_remote_ref, urltag_url_vr((&x))
365SOFIAPUBVAR tag_typedef_t authtag_remote_ref;
366
368#define AUTHTAG_ALLOW(x) authtag_allow, tag_str_v((x))
369SOFIAPUBVAR tag_typedef_t authtag_allow;
370
371#define AUTHTAG_ALLOW_REF(x) authtag_allow_ref, tag_str_vr((&x))
372SOFIAPUBVAR tag_typedef_t authtag_allow_ref;
373
375#define AUTHTAG_FAKE(x) authtag_fake, tag_bool_v((x))
376SOFIAPUBVAR tag_typedef_t authtag_fake;
377
378#define AUTHTAG_FAKE_REF(x) authtag_fake_ref, tag_bool_vr((&x))
379SOFIAPUBVAR tag_typedef_t authtag_fake_ref;
380
382#define AUTHTAG_MASTER_KEY(x) authtag_master_key, tag_str_v((x))
383SOFIAPUBVAR tag_typedef_t authtag_master_key;
384
385#define AUTHTAG_MASTER_KEY_REF(x) authtag_master_key_ref, tag_str_vr((&x))
386SOFIAPUBVAR tag_typedef_t authtag_master_key_ref;
387
389#define AUTHTAG_CACHE_USERS(x) authtag_cache_users, tag_uint_v((x))
390SOFIAPUBVAR tag_typedef_t authtag_cache_users;
391
392#define AUTHTAG_CACHE_USERS_REF(x) authtag_cache_users_ref, tag_uint_vr((&x))
393SOFIAPUBVAR tag_typedef_t authtag_cache_users_ref;
394
396#define AUTHTAG_CACHE_ERRORS(x) authtag_cache_errors, tag_uint_v((x))
397SOFIAPUBVAR tag_typedef_t authtag_cache_errors;
398
399#define AUTHTAG_CACHE_ERRORS_REF(x) authtag_cache_errors_ref, tag_uint_vr((&x))
400SOFIAPUBVAR tag_typedef_t authtag_cache_errors_ref;
401
402SOFIA_END_DECLS
403
404#endif
int auth_mod_register_plugin(auth_scheme_t *asch)
Register an authentication plugin.
Definition auth_plugin.c:78
struct auth_challenger auth_challenger_t
Authentication challenge.
void auth_mod_unref(auth_mod_t *am)
Destroy a reference to an authentication module.
Definition auth_module.c:280
void auth_mod_destroy(auth_mod_t *)
Destroy (a reference to) an authentication module.
Definition auth_module.c:252
void auth_mod_verify(auth_mod_t *am, auth_status_t *as, msg_auth_t *credentials, auth_challenger_t const *ach)
Authenticate user.
Definition auth_module.c:397
void auth_mod_cancel(auth_mod_t *am, auth_status_t *as)
Cancel asynchronous authentication.
Definition auth_module.c:464
struct auth_plugin_t auth_plugin_t
Opaque data used by authentication plugin module.
Definition auth_module.h:69
char const * auth_mod_name(auth_mod_t *am)
Get authenticatin module name.
Definition auth_module.c:286
struct auth_uplugin_t auth_uplugin_t
Opaque authentication operation data used by plugin module.
Definition auth_module.h:73
void auth_callback_t(auth_magic_t *, auth_status_t *)
Callback from completeted asynchronous authentication operation.
Definition auth_module.h:76
void auth_mod_challenge(auth_mod_t *am, auth_status_t *as, auth_challenger_t const *ach)
Make a challenge header.
Definition auth_module.c:449
auth_mod_t * auth_mod_create(su_root_t *root, tag_type_t, tag_value_t,...)
Create an authentication plugin module.
Definition auth_plugin.c:106
auth_mod_t * auth_mod_ref(auth_mod_t *am)
Create a new reference to authentication module.
Definition auth_module.c:274
struct auth_splugin_t auth_splugin_t
Opaque user data used by plugin module.
Definition auth_module.h:71
struct auth_scheme const auth_scheme_t
Virtual table for authentication plugin.
Definition auth_module.h:66
auth_callback_t * as_callback
Completion callback [in].
Definition auth_module.h:135
auth_magic_t * as_magic
Application data [in].
Definition auth_module.h:134
unsigned long msg_time_t
struct msg_hclass_s const msg_hclass_t
MSG_HDR_T msg_header_t
Authentication challenge.
Definition auth_module.h:150
char const * ach_phrase
Response phrase for challenge response.
Definition auth_module.h:152
int ach_status
Response status for challenge response.
Definition auth_module.h:151
msg_hclass_t * ach_header
Header class for challenge header.
Definition auth_module.h:153
Common data for authentication module.
Definition auth_plugin.h:125
Authentication scheme.
Definition auth_plugin.h:66
Authentication operation result.
Definition auth_module.h:97
unsigned as_anonymous
Return true if user is anonymous [out].
Definition auth_module.h:122
su_home_t as_home[1]
Memory home for authentication.
Definition auth_module.h:98
auth_splugin_t * as_plugin
Pointer to extended state, used exclusively by plugin modules.
Definition auth_module.h:139
char const * as_domain
Hostname [in].
Definition auth_module.h:112
char const * as_display
Return user's real name [in/out].
Definition auth_module.h:103
msg_time_t as_nonce_issued
Nonce issue time [out].
Definition auth_module.h:120
unsigned as_blacklist
Blacklist time [out].
Definition auth_module.h:121
char const * as_ident
Identities [out].
Definition auth_module.h:106
msg_header_t * as_match
Used authentication header [out].
Definition auth_module.h:130
unsigned as_profile
User profile (group) [out].
Definition auth_module.h:107
isize_t as_bodylen
Length of message body [in].
Definition auth_module.h:118
char const * as_method
Method name to authenticate [in].
Definition auth_module.h:115
char const * as_uri
Request-URI [in].
Definition auth_module.h:113
char const * as_realm
Authentication realm [in].
Definition auth_module.h:111
char const * as_phrase
Return response phrase [out].
Definition auth_module.h:101
void const * as_body
Message body to protect [in].
Definition auth_module.h:117
int as_status
Return authorization status [out].
Definition auth_module.h:100
char const * as_pdomain
Domain parameter [in] (ignored).
Definition auth_module.h:114
msg_header_t * as_info
Authentication-Info [out].
Definition auth_module.h:129
su_addrinfo_t * as_source
Source address [in].
Definition auth_module.h:109
unsigned as_allow
Method cannot be challenged [out].
Definition auth_module.h:124
unsigned as_nextnonce
Client used nextnonce [out].
Definition auth_module.h:125
char const * as_user
Authenticated username [in/out].
Definition auth_module.h:102
unsigned as_stale
Credentials were stale [out].
Definition auth_module.h:123
msg_header_t * as_response
Authentication challenge [out].
Definition auth_module.h:128
struct addrinfo su_addrinfo_t
SU_HOME_T su_home_t
#define SOFIAPUBFUN
#define SOFIAPUBVAR
#define su_inline
struct tag_type_s const tag_typedef_t[1]
intptr_t tag_value_t
struct tag_type_s const * tag_type_t
struct su_root_t su_root_t

Sofia-SIP 1.12.11devel - Copyright (C) 2006 Nokia Corporation. All rights reserved. Licensed under the terms of the GNU Lesser General Public License.