186d7f5d3SJohn Marino /* 286d7f5d3SJohn Marino * Copyright 1999 Internet Business Solutions Ltd., Switzerland 386d7f5d3SJohn Marino * All rights reserved. 486d7f5d3SJohn Marino * 586d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 686d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 786d7f5d3SJohn Marino * are met: 886d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 986d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 1086d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 1186d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 1286d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 1386d7f5d3SJohn Marino * 1486d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1586d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1686d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1786d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1886d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1986d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2086d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2186d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2286d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2386d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2486d7f5d3SJohn Marino * SUCH DAMAGE. 2586d7f5d3SJohn Marino * 2686d7f5d3SJohn Marino * $FreeBSD: src/usr.sbin/ppp/radius.h,v 1.3.2.4 2002/09/01 02:12:32 brian Exp $ 2786d7f5d3SJohn Marino * $DragonFly: src/usr.sbin/ppp/radius.h,v 1.2 2003/06/17 04:30:01 dillon Exp $ 2886d7f5d3SJohn Marino */ 2986d7f5d3SJohn Marino 3086d7f5d3SJohn Marino #define MPPE_POLICY_ALLOWED 1 3186d7f5d3SJohn Marino #define MPPE_POLICY_REQUIRED 2 3286d7f5d3SJohn Marino 3386d7f5d3SJohn Marino #define MPPE_TYPE_40BIT 2 3486d7f5d3SJohn Marino #define MPPE_TYPE_128BIT 4 3586d7f5d3SJohn Marino 3686d7f5d3SJohn Marino struct radius { 3786d7f5d3SJohn Marino struct fdescriptor desc; /* We're a sort of (selectable) fdescriptor */ 3886d7f5d3SJohn Marino struct { 3986d7f5d3SJohn Marino int fd; /* We're selecting on this */ 4086d7f5d3SJohn Marino struct rad_handle *rad; /* Using this to talk to our lib */ 4186d7f5d3SJohn Marino struct pppTimer timer; /* for this long */ 4286d7f5d3SJohn Marino struct authinfo *auth; /* Tell this about success/failure */ 4386d7f5d3SJohn Marino } cx; 4486d7f5d3SJohn Marino unsigned valid : 1; /* Is this structure valid ? */ 4586d7f5d3SJohn Marino unsigned vj : 1; /* FRAMED Compression */ 4686d7f5d3SJohn Marino struct in_addr ip; /* FRAMED IP */ 4786d7f5d3SJohn Marino struct in_addr mask; /* FRAMED Netmask */ 4886d7f5d3SJohn Marino unsigned long mtu; /* FRAMED MTU */ 4986d7f5d3SJohn Marino unsigned long sessiontime; /* Session-Timeout */ 5086d7f5d3SJohn Marino char *filterid; /* FRAMED Filter Id */ 5186d7f5d3SJohn Marino struct sticky_route *routes; /* FRAMED Routes */ 5286d7f5d3SJohn Marino char *msrepstr; /* MS-CHAP2-Response */ 5386d7f5d3SJohn Marino char *repstr; /* Reply-Message */ 5486d7f5d3SJohn Marino char *errstr; /* Error-Message */ 5586d7f5d3SJohn Marino struct { 5686d7f5d3SJohn Marino int policy; /* MPPE_POLICY_* */ 5786d7f5d3SJohn Marino int types; /* MPPE_TYPE_*BIT bitmask */ 5886d7f5d3SJohn Marino char *recvkey; 5986d7f5d3SJohn Marino size_t recvkeylen; 6086d7f5d3SJohn Marino char *sendkey; 6186d7f5d3SJohn Marino size_t sendkeylen; 6286d7f5d3SJohn Marino } mppe; 6386d7f5d3SJohn Marino struct { 6486d7f5d3SJohn Marino char file[PATH_MAX]; /* Radius config file */ 6586d7f5d3SJohn Marino } cfg; 6686d7f5d3SJohn Marino }; 6786d7f5d3SJohn Marino 6886d7f5d3SJohn Marino struct radacct { 6986d7f5d3SJohn Marino struct radius *rad_parent; /* "Parent" struct radius stored in bundle */ 7086d7f5d3SJohn Marino char user_name[AUTHLEN]; /* Session User-Name */ 7186d7f5d3SJohn Marino char session_id[256]; /* Unique session ID */ 7286d7f5d3SJohn Marino char multi_session_id[51]; /* Unique MP session ID */ 7386d7f5d3SJohn Marino int authentic; /* How the session has been authenticated */ 7486d7f5d3SJohn Marino struct in_addr ip; 7586d7f5d3SJohn Marino struct in_addr mask; 7686d7f5d3SJohn Marino }; 7786d7f5d3SJohn Marino 7886d7f5d3SJohn Marino #define descriptor2radius(d) \ 7986d7f5d3SJohn Marino ((d)->type == RADIUS_DESCRIPTOR ? (struct radius *)(d) : NULL) 8086d7f5d3SJohn Marino 8186d7f5d3SJohn Marino struct bundle; 8286d7f5d3SJohn Marino 8386d7f5d3SJohn Marino extern void radius_Init(struct radius *); 8486d7f5d3SJohn Marino extern void radius_Destroy(struct radius *); 8586d7f5d3SJohn Marino 8686d7f5d3SJohn Marino extern void radius_Show(struct radius *, struct prompt *); 8786d7f5d3SJohn Marino extern int radius_Authenticate(struct radius *, struct authinfo *, 8886d7f5d3SJohn Marino const char *, const char *, int, 8986d7f5d3SJohn Marino const char *, int); 9086d7f5d3SJohn Marino extern void radius_Account(struct radius *, struct radacct *, 9186d7f5d3SJohn Marino struct datalink *, int, struct in_addr *, 9286d7f5d3SJohn Marino struct in_addr *, struct pppThroughput *); 9386d7f5d3SJohn Marino 9486d7f5d3SJohn Marino /* An (int) parameter to radius_Account, from radlib.h */ 9586d7f5d3SJohn Marino #if !defined(RAD_START) 9686d7f5d3SJohn Marino #define RAD_START 1 9786d7f5d3SJohn Marino #define RAD_STOP 2 9886d7f5d3SJohn Marino #endif 9986d7f5d3SJohn Marino 10086d7f5d3SJohn Marino /* Get address from NAS pool */ 10186d7f5d3SJohn Marino #define RADIUS_INADDR_POOL htonl(0xfffffffe) /* 255.255.255.254 */ 102