1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/* $Id: authsasl.c,v 1.3 2004/10/21 00:10:49 mrsam Exp $ */
/*
** Copyright 1998 - 2000 Double Precision, Inc. See COPYING for
** distribution information.
*/
#include "courier_auth_config.h"
#include "courierauthsasl.h"
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <errno.h>
/* Use the SASL_LIST macro to build authsasl_list */
#define SASL(a,b,c) int b(const char *, const char *, \
char *(*)(const char *, void *), \
void *, \
char **, \
char **);
SASL_LIST
#undef SASL
#define SASL(a,b,c) {a, b},
struct authsasl_info authsasl_list[] = {
SASL_LIST
{ 0, 0}};
int auth_sasl(const char *method,
const char *initreply,
char *(*callback_func)(const char *, void *),
void *callback_arg,
char **authtype_ptr, /* Returned - AUTHTYPE */
char **authdata_ptr)
{
int i;
char *p, *q;
if ((p=malloc(strlen(method)+1)) == 0)
return (0);
strcpy(p, method);
for (q=p; *q; q++)
*q=toupper((int)(unsigned char)*q);
for (i=0; authsasl_list[i].sasl_method; i++)
{
if (strcmp(p, authsasl_list[i].sasl_method) == 0)
{
free(p);
return ( (*authsasl_list[i].sasl_func)
(method,
initreply, callback_func,
callback_arg,
authtype_ptr, authdata_ptr));
}
}
free(p);
errno=ENOENT;
return (AUTHSASL_ERROR);
}
|