How to obtain username and User-Password in a module
Juan Luis Perez Perez
jperez at telecomsolutions.es
Wed Oct 18 17:09:18 CEST 2006
Hi,
I'm coding a basic authorization module for FreeRadius, and i have a
problem. When FreeRadius tries to authenticate says that:
rlm_digest: Configuration item "User-Password" is required for
authentication.
Here is the function that do athorization in the module:
static int xml_rpc_auth(void *instance, REQUEST *request)
{
int result;
VALUE_PAIR **input_pairs, **output_pairs;
VALUE_PAIR *answer, *check_pairs;
rlm_xml_rpc_t *inst = (rlm_xml_rpc_t *) instance;
int accept;
const char username[1000], password[1000], realm[1000];
char cadena[1000];
char usrn[1000], pw[1000], rm[1000];
VALUE_PAIR *vpr, *vpd;
DICT_ATTR *dict_attr;
result = vp_prints(cadena, 1000, request->config_items);
if ( result ) radlog(L_ERR, "En vp_prints config_items: %s", cadena);
if ( request->config_items->next != NULL )
result = vp_prints(cadena, 1000, request->config_items->next);
if ( result ) radlog(L_ERR, "En vp_prints config_items->next: %s",
cadena);
radlog(L_ERR, "En vp_prints_value request->packet->code: %d",
request->packet->code);
strcpy(username, request->username->strvalue);
radlog(L_ERR, "En vp_prints_value username: %s", username);
if ( request->password ){
strcpy(password, request->password->strvalue);
radlog(L_ERR, "En vp_prints_value password: %s", password);
//result = vp_prints_value(password, 1000, request->password, 254);
}
radlog(L_ERR, "Atribute del password: %s", request->password->name);
/*
* We require access to the plain-text password.
*/
if( request->packet->vps ){
vpr = pairfind(request->packet->vps, PW_DIGEST_REALM);
if (!vpr) {
radlog(L_AUTH, "rlm_xml_rpc: Configuration item\"Realm\" is required
for"
"authentication.");
}
}
if ( vpr ){
strcpy(realm, vpr->strvalue);
radlog(L_ERR, "rlm_xml_rpc: XML-RPC %d %p %p %p\n",accept, username,
password, realm);
result = xml_rpc_call(inst, request, &accept, username, password,
realm, usrn, pw, rm);
radlog(L_ERR, "rlm_xml_rpc: XML-RPC %d %s %s %s\n",accept, username,
password, realm);
radlog(L_ERR, "PW segun xml_rpc_call es %s\n", pw);
vpr = rad_malloc(sizeof(VALUE_PAIR));
dict_attr = rad_malloc(sizeof(DICT_ATTR));
if(vpr && dict_attr){
dict_attr = dict_attrbyname("User-Password");
strcpy(vpr->name, "User-Password");
vpr->attribute = dict_attr->attr;
vpr->type = dict_attr->type;
vpr->length = strlen(pw);
strcpy(vpr->strvalue, pw);
vpr->flags = dict_attr->flags;
vpr->operator = T_OP_EQ;
radlog(L_ERR, "rlm_xml_rpc: creando el VALUE_PAIR con el password para
meterlo en request->config"
"y requerido para la authenticacion"
"vpr->name = %s\n"
"vpr->attribute = %d\n"
"vpr->type = %d\n"
"vpr->length = %d\n"
"vpr->strvalue = %s\n",
vpr->name, vpr->attribute, vpr->type, vpr->length, vpr->strvalue);
}
radlog(L_ERR, "rlm_xml_rpc: qué hay? %s %s %s", username, password,
realm);
if ( accept )
request->config_items = vpr;
return RLM_MODULE_OK;
}
}
More information about the Freeradius-Devel
mailing list