18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * $Id: buildreq.c,v 1.1 2004/11/14 07:26:26 paulus Exp $ 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (C) 1995,1997 Lars Fenneberg 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * See the file COPYRIGHT for the respective terms and conditions. 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * If the file is missing contact me at lf@elemental.net 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and I'll send you a copy. 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <includes.h> 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <radiusclient.h> 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectunsigned char rc_get_seqnbr(void); 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_get_nas_id 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: fills in NAS-Identifier or NAS-IP-Address in request 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_get_nas_id(VALUE_PAIR **sendpairs) 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project UINT4 client_id; 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *nasid; 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project nasid = rc_conf_str("nas_identifier"); 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (strlen(nasid)) { 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-Identifier 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_avpair_add(sendpairs, PW_NAS_IDENTIFIER, nasid, 0, 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project VENDOR_NONE) == NULL) 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (OK_RC); 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } else { 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-IP-Address 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((client_id = rc_own_ipaddress()) == 0) 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_avpair_add(sendpairs, PW_NAS_IP_ADDRESS, &client_id, 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 0, VENDOR_NONE) == NULL) 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (OK_RC); 538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_buildreq 578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: builds a skeleton RADIUS request using information from the 598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * config file. 608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid rc_buildreq(SEND_DATA *data, int code, char *server, unsigned short port, 648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout, int retries) 658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->server = server; 678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->svc_port = port; 688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->seq_nbr = rc_get_seqnbr(); 698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->timeout = timeout; 708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->retries = retries; 718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data->code = code; 728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_guess_seqnbr 768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: return a random sequence number 788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic unsigned char rc_guess_seqnbr(void) 828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (unsigned char)(magic() & UCHAR_MAX); 848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_get_seqnbr 888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: generate a sequence number 908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectunsigned char rc_get_seqnbr(void) 948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project FILE *sf; 968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int tries = 1; 978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int seq_nbr, pos; 988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *seqfile = rc_conf_str("seqfile"); 998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((sf = fopen(seqfile, "a+")) == NULL) 1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_get_seqnbr: couldn't open sequence file %s: %s", seqfile, strerror(errno)); 1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* well, so guess a sequence number */ 1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return rc_guess_seqnbr(); 1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project while (do_lock_exclusive(fileno(sf))!= 0) 1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (errno != EWOULDBLOCK) { 1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_get_seqnbr: flock failure: %s: %s", seqfile, strerror(errno)); 1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fclose(sf); 1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return rc_guess_seqnbr(); 1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project tries++; 1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (tries <= 10) 1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_mdelay(500); 1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project else 1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project break; 1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (tries > 10) { 1228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_get_seqnbr: couldn't get lock after %d tries: %s", tries-1, seqfile); 1238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fclose(sf); 1248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return rc_guess_seqnbr(); 1258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project pos = ftell(sf); 1288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rewind(sf); 1298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (fscanf(sf, "%d", &seq_nbr) != 1) { 1308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (pos != ftell(sf)) { 1318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* file was not empty */ 1328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_get_seqnbr: fscanf failure: %s", seqfile); 1338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project seq_nbr = rc_guess_seqnbr(); 1358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rewind(sf); 1388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ftruncate(fileno(sf),0); 1398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fprintf(sf,"%d\n", (seq_nbr+1) & UCHAR_MAX); 1408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fflush(sf); /* fflush because a process may read it between the do_unlock and fclose */ 1428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (do_unlock(fileno(sf)) != 0) 1448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_get_seqnbr: couldn't release lock on %s: %s", seqfile, strerror(errno)); 1458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fclose(sf); 1478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (unsigned char)seq_nbr; 1498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 1508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_auth 1538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an authentication request for port id client_port 1558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * with the value_pairs send and submits it to a server 1568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Returns: received value_pairs in received, messages from the server in msg 1588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and 0 on success, negative on failure as return value 1598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_auth(UINT4 client_port, VALUE_PAIR *send, VALUE_PAIR **received, 1638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *msg, REQUEST_INFO *info) 1648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 1658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SERVER *authserver = rc_conf_srv("authserver"); 1668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (!authserver) { 1688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 1698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 1708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return rc_auth_using_server(authserver, client_port, send, received, 1718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project msg, info); 1728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 1738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 1758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_auth_using_server 1768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an authentication request for port id client_port 1788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * with the value_pairs send and submits it to a server. You 1798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * explicitly supply a server list. 1808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Returns: received value_pairs in received, messages from the server in msg 1828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and 0 on success, negative on failure as return value 1838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_auth_using_server(SERVER *authserver, 1878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project UINT4 client_port, 1888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project VALUE_PAIR *send, 1898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project VALUE_PAIR **received, 1908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *msg, REQUEST_INFO *info) 1918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 1928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SEND_DATA data; 1938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int result; 1948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int i; 1958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout = rc_conf_int("radius_timeout"); 1968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int retries = rc_conf_int("radius_retries"); 1978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.send_pairs = send; 1998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 2008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 2028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-IP-Address or NAS-Identifier 2038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 2048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC) 2068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 2078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 2098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-Port 2108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 2118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL) 2138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 2148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = ERROR_RC; 2168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC) 2178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ; i++) 2188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 2198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (data.receive_pairs != NULL) { 2208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 2218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 2228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 2238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i], 2248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project authserver->port[i], timeout, retries); 2258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = rc_send_server (&data, msg, info); 2278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 2288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *received = data.receive_pairs; 2308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return result; 2328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 2338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 2358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_auth_proxy 2368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an authentication request 2388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * with the value_pairs send and submits it to a server. 2398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Works for a proxy; does not add IP address, and does 2408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * does not rely on config file. 2418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Returns: received value_pairs in received, messages from the server in msg 2438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and 0 on success, negative on failure as return value 2448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 2468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_auth_proxy(VALUE_PAIR *send, VALUE_PAIR **received, char *msg) 2488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 2498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SEND_DATA data; 2508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int result; 2518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int i; 2528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SERVER *authserver = rc_conf_srv("authserver"); 2538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout = rc_conf_int("radius_timeout"); 2548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int retries = rc_conf_int("radius_retries"); 2558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.send_pairs = send; 2578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 2588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = ERROR_RC; 2608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for(i=0; (i<authserver->max) && (result != OK_RC) && (result != BADRESP_RC) 2618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ; i++) 2628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 2638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (data.receive_pairs != NULL) { 2648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 2658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 2668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 2678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_buildreq(&data, PW_ACCESS_REQUEST, authserver->name[i], 2688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project authserver->port[i], timeout, retries); 2698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = rc_send_server (&data, msg, NULL); 2718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 2728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *received = data.receive_pairs; 2748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return result; 2768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 2778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 2808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_acct_using_server 2818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an accounting request for port id client_port 2838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * with the value_pairs send. You explicitly supply server list. 2848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get 2868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * filled in by this function, the rest has to be supplied. 2878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 2888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 2898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_acct_using_server(SERVER *acctserver, 2908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project UINT4 client_port, 2918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project VALUE_PAIR *send) 2928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 2938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SEND_DATA data; 2948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project VALUE_PAIR *adt_vp; 2958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int result; 2968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project time_t start_time, dtime; 2978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char msg[4096]; 2988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int i; 2998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout = rc_conf_int("radius_timeout"); 3008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int retries = rc_conf_int("radius_retries"); 3018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.send_pairs = send; 3038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 3048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 3068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-IP-Address or NAS-Identifier 3078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 3088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC) 3108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 3118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 3138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-Port 3148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 3158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_avpair_add(&(data.send_pairs), PW_NAS_PORT, &client_port, 0, VENDOR_NONE) == NULL) 3178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 3188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 3208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in Acct-Delay-Time 3218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 3228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project dtime = 0; 3248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((adt_vp = rc_avpair_add(&(data.send_pairs), PW_ACCT_DELAY_TIME, &dtime, 0, VENDOR_NONE)) == NULL) 3258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 3268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project start_time = time(NULL); 3288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = ERROR_RC; 3298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC) 3308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ; i++) 3318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 3328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (data.receive_pairs != NULL) { 3338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 3348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 3358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 3368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i], 3378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project acctserver->port[i], timeout, retries); 3388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project dtime = time(NULL) - start_time; 3408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_assign(adt_vp, &dtime, 0); 3418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = rc_send_server (&data, msg, NULL); 3438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 3448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 3468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return result; 3488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 3498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 3518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_acct 3528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an accounting request for port id client_port 3548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * with the value_pairs send 3558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Remarks: NAS-Identifier/NAS-IP-Address, NAS-Port and Acct-Delay-Time get 3578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * filled in by this function, the rest has to be supplied. 3588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 3598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_acct(UINT4 client_port, VALUE_PAIR *send) 3618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 3628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SERVER *acctserver = rc_conf_srv("acctserver"); 3638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (!acctserver) return (ERROR_RC); 3648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return rc_acct_using_server(acctserver, client_port, send); 3668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 3678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 3698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_acct_proxy 3708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Builds an accounting request with the value_pairs send 3728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 3748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_acct_proxy(VALUE_PAIR *send) 3768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 3778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SEND_DATA data; 3788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int result; 3798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char msg[4096]; 3808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int i; 3818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SERVER *acctserver = rc_conf_srv("authserver"); 3828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout = rc_conf_int("radius_timeout"); 3838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int retries = rc_conf_int("radius_retries"); 3848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.send_pairs = send; 3868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 3878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = ERROR_RC; 3898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for(i=0; (i<acctserver->max) && (result != OK_RC) && (result != BADRESP_RC) 3908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project ; i++) 3918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 3928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (data.receive_pairs != NULL) { 3938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 3948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.receive_pairs = NULL; 3958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 3968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_buildreq(&data, PW_ACCOUNTING_REQUEST, acctserver->name[i], 3978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project acctserver->port[i], timeout, retries); 3988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 3998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = rc_send_server (&data, msg, NULL); 4008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 4018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 4038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return result; 4058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 4068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 4088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_check 4098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 4108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: ask the server hostname on the specified port for a 4118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * status message 4128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 4138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 4148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_check(char *host, unsigned short port, char *msg) 4168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 4178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SEND_DATA data; 4188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int result; 4198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project UINT4 service_type; 4208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int timeout = rc_conf_int("radius_timeout"); 4218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int retries = rc_conf_int("radius_retries"); 4228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project data.send_pairs = data.receive_pairs = NULL; 4248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 4268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in NAS-IP-Address or NAS-Identifier, 4278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * although it isn't neccessary 4288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 4298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (rc_get_nas_id(&(data.send_pairs)) == ERROR_RC) 4318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (ERROR_RC); 4328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project /* 4348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Fill in Service-Type 4358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 4368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project service_type = PW_ADMINISTRATIVE; 4388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_add(&(data.send_pairs), PW_SERVICE_TYPE, &service_type, 0, VENDOR_NONE); 4398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_buildreq(&data, PW_STATUS_SERVER, host, port, timeout, retries); 4418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project result = rc_send_server (&data, msg, NULL); 4428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project rc_avpair_free(data.receive_pairs); 4448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 4458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return result; 4468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 447