auth_client.c File Reference


Detailed Description

Authenticators for SIP client.

Author:
Pekka Pessi <Pekka.Pessi@nokia-email.address.hidden>
Date:
Created: Wed Feb 14 18:32:58 2001 ppessi

#include "config.h"
#include <sofia-sip/su.h>
#include <sofia-sip/su_md5.h>
#include "sofia-sip/auth_client.h"
#include "sofia-sip/auth_client_plugin.h"
#include <sofia-sip/msg_header.h>
#include <sofia-sip/auth_digest.h>
#include <sofia-sip/base64.h>
#include <sofia-sip/su_uniqueid.h>
#include <sofia-sip/string0.h>
#include <sofia-sip/su_debug.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

Include dependency graph for auth_client.c:


Functions

int auc_challenge (auth_client_t **auc_list, su_home_t *home, msg_auth_t const *ch, msg_hclass_t *crcl)
 Initialize authenticators.
int auc_credentials (auth_client_t **auc_list, su_home_t *home, char const *data)
 Feed authentication data to the authenticator.
int auc_all_credentials (auth_client_t **auc_list, char const *scheme, char const *realm, char const *user, char const *pass)
 Feed authentication data to the authenticator.
int auc_copy_credentials (auth_client_t **dst, auth_client_t const *src)
 Copy authentication data from src to dst.
int auc_clear_credentials (auth_client_t **auc_list, char const *scheme, char const *realm)
 Clear authentication data from the authenticator.
int auc_authorization (auth_client_t **auc_list, msg_t *msg, msg_pub_t *pub, char const *method, url_t const *url, msg_payload_t const *body)
 Authorize a request.
int auc_authorization_headers (auth_client_t **auc_list, su_home_t *home, char const *method, url_t const *url, msg_payload_t const *body, msg_header_t **return_headers)
 Generate headers authorizing a request.
int auc_register_plugin (auth_client_plugin_t const *plugin)
 Register an authentication client plugin.

Function Documentation

int auc_all_credentials ( auth_client_t **  auc_list,
char const *  scheme,
char const *  realm,
char const *  user,
char const *  pass 
)

Feed authentication data to the authenticator.

The function auc_credentials() is used to provide the authenticators in with authentication tuple (scheme, realm, user name, secret).

scheme:"realm":user:pass

Todo:
The authentication data format sucks.
Parameters:
auc_list [in/out] list of authenticators
scheme [in] scheme to use (NULL, if any)
realm [in] realm to use (NULL, if any)
user [in] username
pass [in] password
Return values:
number of matching clients
0 when no matching client was found
-1 upon an error

int auc_authorization ( auth_client_t **  auc_list,
msg_t msg,
msg_pub_t pub,
char const *  method,
url_t const *  url,
msg_payload_t const *  body 
)

Authorize a request.

The function auc_authorization() is used to add correct authentication headers to a request. The authentication headers will contain the credentials generated by the list of authenticators.

Parameters:
auc_list [in/out] list of authenticators
msg [out] message to be authenticated
pub [out] headers of the message
method [in] request method
url [in] request URI
body [in] message body (NULL if empty)
Return values:
1 when successful
0 when there is not enough credentials
-1 upon an error

int auc_authorization_headers ( auth_client_t **  auc_list,
su_home_t home,
char const *  method,
url_t const *  url,
msg_payload_t const *  body,
msg_header_t **  return_headers 
)

Generate headers authorizing a request.

The function auc_authorization_headers() is used to generate authentication headers for a request. The list of authentication headers will contain the credentials generated by the list of authenticators.

Parameters:
auc_list [in/out] list of authenticators
home [in] memory home used to allocate headers
method [in] request method
url [in] request URI
body [in] message body (NULL if empty)
return_headers [out] authorization headers
Return values:
1 when successful
0 when there is not enough credentials
-1 upon an error

int auc_challenge ( auth_client_t **  auc_list,
su_home_t home,
msg_auth_t const *  ch,
msg_hclass_t crcl 
)

Initialize authenticators.

The function auc_challenge() merges the challenge ch to the list of authenticators auc_list.

Parameters:
auc_list [in/out] list of authenticators to be updated
home [in/out] memory home used for allocating authenticators
ch [in] challenge to be processed
crcl [in] credential class
Return values:
1 when challenge was updated
0 when there was no new challenges
-1 upon an error

int auc_clear_credentials ( auth_client_t **  auc_list,
char const *  scheme,
char const *  realm 
)

Clear authentication data from the authenticator.

The function auc_clear_credentials() is used to remove the credentials from the authenticators.

Parameters:
auc_list [in/out] list of authenticators
scheme [in] scheme (if non-null, remove only matching credentials)
realm [in] realm (if non-null, remove only matching credentials)
Return values:
0 when successful
-1 upon an error

int auc_copy_credentials ( auth_client_t **  dst,
auth_client_t const *  src 
)

Copy authentication data from src to dst.

Return values:
>0 if credentials were copied
0 if there was no credentials to copy
<0 if an error occurred.

int auc_credentials ( auth_client_t **  auc_list,
su_home_t home,
char const *  data 
)

Feed authentication data to the authenticator.

The function auc_credentials() is used to provide the authenticators in with authentication data (user name, secret). The authentication data has format as follows:

scheme:"realm":user:pass

For instance, Basic:"nokia-proxy":ppessi:verysecret

Todo:
The authentication data format sucks.
Parameters:
auc_list [in/out] list of authenticators
home [in/out] memory home used for allocations
data [in] colon-separated authentication data
Return values:
0 when successful
-1 upon an error


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