Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jun 2001 11:54:24 -0500
From:      Pete McKenna <pmckenna@qwest.net>
To:        freebsd-isp@FreeBSD.ORG
Cc:        pmckenna@oss.uswest.net
Subject:   troblue with libradius genrating acct start
Message-ID:  <20010629115423.B49160@otto.oss.qwest.net>

next in thread | raw e-mail | index | archive | help
Is anyone out there using libradius to send accounting records?
If so I'd love some pointers. I can do the auth part just fine,
but when I build and send an accounting start record the radius
server crabs about it being non rfc compliant.

get_radrequest: non-RFC packet from 204.147.85.81[2747] - acct-req (type 4), len = 116
Hex dump at 0x0x80b2900/0 for 116 bytes
0x0x80b2900: 0x0000| 04490074 2B4C47B5 2F7D0611 75B860C5| |.I.t+LG./}..u.`.|
0x0x80b2910: 0x0010| 6DE4CC81 0406CC93 55510506 00000004| |m.......UQ......|
0x0x80b2920: 0x0020| 3D060000 00001E0C 36313233 33313536| |=.......61233156|
0x0x80b2930: 0x0030| 38361F09 36343433 30313528 06000000| |86..6443015(....|
0x0x80b2940: 0x0040| 012D0600 00000106 06000000 02060600| |.-..............|
0x0x80b2950: 0x0050| 00000A07 06000000 01290600 00000020| |.........)..... |
0x0x80b2960: 0x0060| 156F7474 6F2E6F73 732E7573 77657374| |.otto.oss.uswest|
0x0x80b2970: 0x0070| 2E6E6574 ........ ........ ........| |.net|||||||||||||

The main difference I see between this packet and a valid packet is 
the length of the first value, the NAS_IP_ADDRESS is 6 on good packets
and much longer in the libradius generated one.

I'm running Merit radius 3.6B on a 4.3 FreeBSD box for the server.
The Client with libradius is also 4.3

The main question is, am I formating the NAS_IP_ADDRESS correctly ?
I think I'm not. Any working examples would be greatly appreciated.

Pete 

#include <stdio.h>
#include <err.h>
#include <radlib.h>
#include <unistd.h>

static void
usage()
{
   fprintf(stderr, "%s\n",
      "usage: radtest -u username -p password");
      exit(1);
}

int
main(argc, argv)
char **argv;
{
   struct rad_handle *radh = rad_auth_open();
   struct rad_handle *rada = rad_acct_open();
   char hostname[512];
   char *username,*password;  /* set these */
   int code;
   int acct;
   int c;
   in_addr_t nas_ip_addr;
   struct in_addr s_nas_ip;

   nas_ip_addr = inet_addr("204.147.85.81");
   s_nas_ip.s_addr = nas_ip_addr;
        printf("ipaddr: %lu\n%lu\n ", nas_ip_addr,  s_nas_ip );


   while( (c=getopt(argc, argv, "u:p:")) != -1)
      switch(c) {
         case 'u':
                 username = optarg;
           break;
         case 'p':
                 password = optarg;
           break;
         default:
                 usage() ;
      }


   if (! radh)
        err(1, "rad_auth_open");

   if (gethostname(hostname,512) < 0)
        err(1, "gethostname");

   if (rad_config(radh,NULL) < 0)
        err(1, "rad_config");

   if (rad_create_request(radh, RAD_ACCESS_REQUEST) < 0)
        err(1, "rad_create_request");

   rad_put_string(radh,RAD_USER_NAME,username);
   rad_put_string(radh,RAD_USER_PASSWORD,password);
   rad_put_string(radh,RAD_NAS_IDENTIFIER,hostname);
   rad_put_int(radh,RAD_SERVICE_TYPE,RAD_LOGIN);

  switch(code = rad_send_request(radh)) {
        case RAD_ACCESS_ACCEPT:
                puts("accepted\n"); break;
        case RAD_ACCESS_REJECT:
                puts("rejected\n"); break;
        case RAD_ACCESS_CHALLENGE:
                puts("challenged\n"); break;
        case RAD_ACCOUNTING_RESPONSE:
                puts("acct accepted ?\n"); break;
        default:
                printf("unknown: %d\n", code);
   }
/* rad_close(radh); */


/* acct stuff */

   if (! rada)
        err(1, "rad_acct_open");

   if (gethostname(hostname,512) < 0)
        err(1, "gethostname");

   if (rad_config(rada,NULL) < 0)
        err(1, "rad_config");

   if (rad_create_request(rada, RAD_ACCOUNTING_REQUEST) < 0)
        err(1, "rad_create_request");

/* JLG */
/* rad_put_addr(rada,RAD_NAS_IP_ADDRESS,81.85.147.204); */
   rad_put_addr(rada,RAD_NAS_IP_ADDRESS, s_nas_ip);
   rad_put_int(rada,RAD_NAS_PORT,4);
   rad_put_int(rada,RAD_NAS_PORT_TYPE,0);
   printf("port type put: \n");
   /* rad_put_string(rada,RAD_USER_NAME,username);*/
   printf("username put: \n");
   rad_put_string(rada,RAD_CALLED_STATION_ID,"6123315686");
   rad_put_string(rada,RAD_CALLING_STATION_ID,"6443015");
   rad_put_int(rada,RAD_ACCT_STATUS_TYPE,1);
   rad_put_int(rada,RAD_ACCT_AUTHENTIC,1);
   rad_put_int(rada,RAD_SERVICE_TYPE,2);
   rad_put_int(rada,RAD_SERVICE_TYPE,00000012);
   rad_put_int(rada,RAD_FRAMED_PROTOCOL,1);
   rad_put_int(rada,RAD_ACCT_DELAY_TIME,0);
   rad_put_string(rada,RAD_NAS_IDENTIFIER,hostname);

   switch(code = rad_send_request(rada)) {
        case RAD_ACCOUNTING_RESPONSE:
                puts("acct accepted \n"); break;
  }

/* end acct stuff */

   return 0;

}




-- 
Peter McKenna                                 Qwest Internet Solutions
pmckenna@qwest.net                                   Main 612-664-4000 
                                                      FAX 612-664-4770

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-isp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010629115423.B49160>