Annotation of embedaddon/mpd/src/auth.h, revision 1.1.1.2
1.1 misho 1:
2: /*
3: * auth.h
4: *
5: * Written by Archie Cobbs <archie@freebsd.org>
6: * Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
7: * See ``COPYRIGHT.whistle''
8: */
9:
10: #ifndef _AUTH_H_
11: #define _AUTH_H_
12:
13: #include "timer.h"
14: #include "ppp.h"
15: #include "pap.h"
16: #include "chap.h"
17: #include "eap.h"
18: #include "radius.h"
19:
20: #ifdef USE_SYSTEM
21: #include <pwd.h>
22: #endif
23: #ifdef USE_OPIE
24: #include <opie.h>
25: #endif
26:
27: /*
28: * DEFINITIONS
29: */
30:
1.1.1.2 ! misho 31: #define AUTH_RETRIES 5
1.1 misho 32:
1.1.1.2 ! misho 33: #define AUTH_MSG_WELCOME "Welcome"
! 34: #define AUTH_MSG_INVALID "Login incorrect"
! 35: #define AUTH_MSG_BAD_PACKET "Incorrectly formatted packet"
! 36: #define AUTH_MSG_NOT_ALLOWED "Login not allowed for this account"
! 37: #define AUTH_MSG_NOT_EXPECTED "Unexpected packet"
! 38: #define AUTH_MSG_ACCT_DISAB "Account disabled"
! 39: #define AUTH_MSG_RESTR_HOURS "Login hours restricted"
! 40:
! 41: #define AUTH_PEER_TO_SELF 0
! 42: #define AUTH_SELF_TO_PEER 1
! 43:
! 44: #define AUTH_FAIL_INVALID_LOGIN 0
! 45: #define AUTH_FAIL_ACCT_DISABLED 1
! 46: #define AUTH_FAIL_NO_PERMISSION 2
! 47: #define AUTH_FAIL_RESTRICTED_HOURS 3
! 48: #define AUTH_FAIL_INVALID_PACKET 4
! 49: #define AUTH_FAIL_NOT_EXPECTED 5
! 50:
! 51: #define AUTH_STATUS_UNDEF 0
! 52: #define AUTH_STATUS_FAIL 1
! 53: #define AUTH_STATUS_SUCCESS 2
! 54: #define AUTH_STATUS_BUSY 3
! 55:
! 56: #define AUTH_PW_HASH_NONE 0
! 57: #define AUTH_PW_HASH_NT 1
! 58:
! 59: #define AUTH_ACCT_START 1
! 60: #define AUTH_ACCT_STOP 2
! 61: #define AUTH_ACCT_UPDATE 3
! 62:
! 63: #define MPPE_POLICY_NONE 0
! 64: #define MPPE_POLICY_ALLOWED 1
! 65: #define MPPE_POLICY_REQUIRED 2
! 66:
! 67: #define MPPE_TYPE_0BIT 0 /* No encryption required */
! 68: #define MPPE_TYPE_40BIT 2
! 69: #define MPPE_TYPE_128BIT 4
! 70: #define MPPE_TYPE_56BIT 8
! 71:
! 72: /* Configuration options */
! 73: enum {
! 74: AUTH_CONF_RADIUS_AUTH = 1,
! 75: AUTH_CONF_RADIUS_ACCT,
! 76: AUTH_CONF_INTERNAL,
! 77: AUTH_CONF_EXT_AUTH,
! 78: AUTH_CONF_EXT_ACCT,
! 79: AUTH_CONF_SYSTEM_AUTH,
! 80: AUTH_CONF_SYSTEM_ACCT,
! 81: AUTH_CONF_PAM_AUTH,
! 82: AUTH_CONF_PAM_ACCT,
! 83: AUTH_CONF_OPIE,
! 84: AUTH_CONF_ACCT_MANDATORY
! 85: };
1.1 misho 86:
87: #if defined(USE_NG_BPF) || defined(USE_IPFW)
1.1.1.2 ! misho 88: struct acl { /* List of ACLs received from auth */
! 89: u_short number; /* ACL number given by auth server */
! 90: u_short real_number; /* ACL number allocated my mpd */
! 91: struct acl *next;
! 92: char name[ACL_NAME_LEN]; /* Name of ACL */
! 93: char rule[1]; /* Text of ACL (Dynamically sized!) */
! 94: };
! 95:
1.1 misho 96: #endif
97:
1.1.1.2 ! misho 98: struct authparams {
! 99: char authname[AUTH_MAX_AUTHNAME];
! 100: char password[AUTH_MAX_PASSWORD];
! 101:
! 102: struct papparams pap;
! 103: struct chapparams chap;
! 104:
! 105: struct u_range range; /* IP range allowed to user */
! 106: u_char range_valid; /* range is valid */
! 107: u_char netmask; /* IP Netmask */
! 108: u_char vjc_enable; /* VJC requested by AAA */
! 109:
! 110: u_char ippool_used;
! 111: char ippool[LINK_MAX_NAME];
! 112:
! 113: struct in_addr peer_dns[2]; /* DNS servers for peer to use */
! 114: struct in_addr peer_nbns[2]; /* NBNS servers for peer to use */
! 115:
! 116: char *eapmsg; /* EAP Msg for forwarding to RADIUS
! 117: * server */
! 118: int eapmsg_len;
! 119: u_char *state; /* copy of the state attribute, needed
! 120: * for accounting */
! 121: int state_len;
! 122: u_char *class; /* copy of the class attribute, needed
! 123: * for accounting */
! 124: int class_len;
! 125:
! 126: char *filter_id; /* RADIUS Framed-Filter-Id attribute */
1.1 misho 127:
1.1.1.2 ! misho 128: char action[8 + LINK_MAX_NAME];
1.1 misho 129:
130: #ifdef USE_IPFW
1.1.1.2 ! misho 131: struct acl *acl_rule; /* ipfw rules */
! 132: struct acl *acl_pipe; /* ipfw pipes */
! 133: struct acl *acl_queue; /* ipfw queues */
! 134: struct acl *acl_table; /* ipfw tables */
1.1 misho 135: #endif
136:
137: #ifdef USE_NG_BPF
1.1.1.2 ! misho 138: struct acl *acl_filters[ACL_FILTERS]; /* mpd's internal bpf filters */
! 139: struct acl *acl_limits[ACL_DIRS]; /* traffic limits based on
! 140: * mpd's filters */
! 141:
! 142: char std_acct[ACL_DIRS][ACL_NAME_LEN]; /* Names of ACL rerurned
! 143: * in standard
! 144: * accounting */
1.1 misho 145: #endif
146:
1.1.1.2 ! misho 147: u_int session_timeout; /* Session-Timeout */
! 148: u_int idle_timeout; /* Idle-Timeout */
! 149: u_int acct_update; /* interval for accouting updates */
! 150: u_int acct_update_lim_recv;
! 151: u_int acct_update_lim_xmit;
! 152: char *msdomain; /* Microsoft domain */
! 153: SLIST_HEAD (, ifaceroute) routes;
! 154: u_short mtu; /* MTU */
! 155:
! 156: u_char authentic; /* wich backend was used */
! 157:
! 158: char callingnum[128]; /* hr representation of the calling
! 159: * number */
! 160: char callednum[128]; /* hr representation of the called
! 161: * number */
! 162: char selfname[64]; /* hr representation of the self name */
! 163: char peername[64]; /* hr representation of the peer name */
! 164: char selfaddr[64]; /* hr representation of the self
! 165: * address */
! 166: char peeraddr[64]; /* hr representation of the peer
! 167: * address */
! 168: char peerport[6]; /* hr representation of the peer port */
! 169: char peermacaddr[32]; /* hr representation of the peer MAC
! 170: * address */
! 171: char peeriface[IFNAMSIZ]; /* hr representation of the peer
! 172: * interface */
! 173:
! 174: /* Iface stuff */
! 175: char ifname[IFNAMSIZ]; /* Interface name */
1.1 misho 176: #ifdef SIOCSIFDESCR
1.1.1.2 ! misho 177: char *ifdescr; /* Interface description */
1.1 misho 178: #endif
179: #ifdef SIOCAIFGROUP
1.1.1.2 ! misho 180: char ifgroup[IFNAMSIZ]; /* Interface group */
1.1 misho 181: #endif
182:
1.1.1.2 ! misho 183: struct {
! 184: int policy; /* MPPE_POLICY_* */
! 185: int types; /* MPPE_TYPE_*BIT bitmask */
! 186: u_char lm_hash[16]; /* LM-Hash */
! 187: u_char nt_hash[16]; /* NT-Hash */
! 188: u_char nt_hash_hash[16]; /* NT-Hash-Hash */
! 189: u_char has_lm_hash;
! 190: u_char has_nt_hash;
! 191: u_char has_keys;
1.1 misho 192:
1.1.1.2 ! misho 193: u_char chap_alg; /* Callers's CHAP algorithm */
1.1 misho 194:
1.1.1.2 ! misho 195: u_char msChal[CHAP_MSOFTv2_CHAL_LEN]; /* MSOFT challng */
! 196: u_char ntResp[CHAP_MSOFTv2_RESP_LEN]; /* MSOFT response */
1.1 misho 197:
198: #ifdef CCP_MPPC
1.1.1.2 ! misho 199: /* Keys when using MS-CHAPv2 or EAP */
! 200: u_char xmit_key[MPPE_KEY_LEN]; /* xmit start key */
! 201: u_char recv_key[MPPE_KEY_LEN]; /* recv start key */
1.1 misho 202: #endif
1.1.1.2 ! misho 203: } msoft;
! 204: };
1.1 misho 205:
1.1.1.2 ! misho 206: struct authconf {
! 207: struct radiusconf radius; /* RADIUS configuration */
! 208: char authname[AUTH_MAX_AUTHNAME]; /* Configured username */
! 209: char password[AUTH_MAX_PASSWORD]; /* Configured password */
! 210: u_int acct_update;
! 211: u_int acct_update_lim_recv;
! 212: u_int acct_update_lim_xmit;
! 213: int timeout; /* Authorization timeout in seconds */
! 214: struct optinfo options; /* Configured options */
! 215: char *extauth_script; /* External auth script */
! 216: char *extacct_script; /* External acct script */
! 217: char ippool[LINK_MAX_NAME];
! 218: };
! 219: typedef struct authconf *AuthConf;
! 220:
! 221: /*
! 222: * State of authorization process during authorization phase, contains
! 223: * params set by the auth-backend
! 224: */
! 225: struct auth {
! 226: u_short peer_to_self; /* What I need from peer */
! 227: u_short self_to_peer; /* What peer needs from me */
! 228: u_char peer_to_self_alg; /* What alg I need from peer */
! 229: u_char self_to_peer_alg; /* What alg peer needs from me */
! 230: struct pppTimer timer; /* Max time to spend doing auth */
! 231: struct pppTimer acct_timer; /* Timer for accounting updates */
! 232: struct papinfo pap; /* PAP state */
! 233: struct chapinfo chap; /* CHAP state */
! 234: struct eapinfo eap; /* EAP state */
! 235: struct paction *thread; /* async auth thread */
! 236: struct paction *acct_thread; /* async accounting auth thread */
! 237: struct authconf conf; /* Auth backends, RADIUS, etc. */
! 238: struct authparams params; /* params to pass to from auth backend */
! 239: struct ng_ppp_link_stat64 prev_stats; /* Previous link statistics */
! 240: };
! 241: typedef struct auth *Auth;
! 242:
! 243: struct radiusconf radius; /* RADIUS configuration */
! 244:
! 245: /*
! 246: * Interface between the auth-backend (secret file, RADIUS, etc.) and Mpd's
! 247: * internal structs.
! 248: */
! 249: struct authdata {
! 250: struct authconf conf; /* a copy of bundle's authconf */
! 251: u_short proto; /* wich proto are we using, PAP, CHAP,
! 252: * ... */
! 253: u_char alg; /* proto specific algoruthm */
! 254: u_int id; /* Actual, packet id */
! 255: u_int code; /* Proto specific code */
! 256: u_char acct_type; /* Accounting type, Start, Stop,
! 257: * Update */
! 258: u_char eap_radius;
! 259: u_char status;
! 260: u_char why_fail;
! 261: char *reply_message; /* Text wich may displayed to the user */
! 262: char *mschap_error; /* MSCHAP Error Message */
! 263: char *mschapv2resp; /* Response String for MSCHAPv2 */
! 264: void (*finish) (Link l, struct authdata *auth); /* Finish handler */
! 265: int drop_user; /* RAD_MPD_DROP_USER value sent by
! 266: * RADIUS server */
! 267: struct {
! 268: struct rad_handle *handle; /* the RADIUS handle */
! 269: } radius;
1.1 misho 270: #ifdef USE_OPIE
1.1.1.2 ! misho 271: struct {
! 272: struct opie data;
! 273: } opie;
1.1 misho 274: #endif
1.1.1.2 ! misho 275: struct { /* informational (read-only) data
! 276: * needed for e.g. accouting */
! 277: char msession_id[AUTH_MAX_SESSIONID]; /* multi-session-id */
! 278: char session_id[AUTH_MAX_SESSIONID]; /* session-id */
! 279: char ifname[IFNAMSIZ]; /* interface name */
! 280: uint ifindex; /* System interface index */
! 281: char bundname[LINK_MAX_NAME]; /* name of the bundle */
! 282: char lnkname[LINK_MAX_NAME]; /* name of the link */
! 283: struct ng_ppp_link_stat64 stats; /* Current link
! 284: * statistics */
1.1 misho 285: #ifdef USE_NG_BPF
1.1.1.2 ! misho 286: struct svcstat ss;
1.1 misho 287: #endif
1.1.1.2 ! misho 288: char *downReason; /* Reason for link going down */
! 289: time_t last_up; /* Time this link last got up */
! 290: PhysType phys_type; /* Device type descriptor */
! 291: int linkID; /* Absolute link number */
! 292: char peer_ident[64]; /* LCP ident received from peer */
! 293: struct in_addr peer_addr; /* currently assigned
! 294: * IP-Address of the client */
! 295: struct in6_addr peer_addr6; /* currently assigned
! 296: * IPv6-Address of the client */
! 297: short n_links; /* number of links in the bundle */
! 298: u_char originate; /* Who originated the connection */
! 299: } info;
! 300: struct authparams params; /* params to pass to from auth backend */
! 301: };
! 302: typedef struct authdata *AuthData;
! 303:
! 304: extern const struct cmdtab AuthSetCmds[];
1.1 misho 305:
306: /*
307: * GLOBAL VARIABLES
308: */
1.1.1.2 ! misho 309: extern const u_char gMsoftZeros[32];
! 310: extern int gMaxLogins; /* max number of concurrent logins per
! 311: * user */
! 312: extern int gMaxLoginsCI;
1.1 misho 313:
314: /*
315: * FUNCTIONS
316: */
317:
1.1.1.2 ! misho 318: extern void AuthInit(Link l);
! 319: extern void AuthInst(Auth auth, Auth autht);
! 320: extern void AuthShutdown(Link l);
! 321: extern void AuthStart(Link l);
! 322: extern void AuthStop(Link l);
! 323: extern void AuthInput(Link l, int proto, Mbuf bp);
! 324: extern void
! 325: AuthOutput(Link l, int proto, u_int code, u_int id,
! 326: const u_char *ptr, int len, int add_len,
! 327: u_char eap_type);
! 328: extern void AuthFinish(Link l, int which, int ok);
! 329: extern void AuthCleanup(Link l);
! 330: extern int AuthStat(Context ctx, int ac, char *av[], void *arg);
! 331: extern void AuthAccountStart(Link l, int type);
! 332: extern void AuthAccountTimeout(void *arg);
! 333: extern AuthData AuthDataNew(Link l);
! 334: extern void AuthDataDestroy(AuthData auth);
! 335: extern int
! 336: AuthGetData(char *authname, char *password, size_t passlen,
! 337: struct u_range *range, u_char *range_valid);
! 338: extern void AuthAsyncStart(Link l, AuthData auth);
! 339: extern const char *AuthFailMsg(AuthData auth, char *buf, size_t len);
! 340: extern const char *AuthStatusText(int status);
! 341: extern const char *AuthMPPEPolicyname(int policy);
! 342: extern const char *AuthMPPETypesname(int types, char *buf, size_t len);
1.1 misho 343:
344: #if defined(USE_NG_BPF) || defined(USE_IPFW)
1.1.1.2 ! misho 345: extern void ACLCopy(struct acl *src, struct acl **dst);
! 346: extern void ACLDestroy(struct acl *acl);
! 347:
1.1 misho 348: #endif
1.1.1.2 ! misho 349: extern void authparamsInit(struct authparams *ap);
! 350: extern void authparamsCopy(struct authparams *src, struct authparams *dst);
! 351: extern void authparamsMove(struct authparams *src, struct authparams *dst);
! 352: extern void authparamsDestroy(struct authparams *ap);
1.1 misho 353:
354: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>