Annotation of embedaddon/mpd/src/auth.h, revision 1.1

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: 
        !            31:   #define AUTH_RETRIES         5
        !            32: 
        !            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:   };  
        !            86: 
        !            87: #if defined(USE_NG_BPF) || defined(USE_IPFW)
        !            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: #endif
        !            96: 
        !            97:   struct authparams {
        !            98:     char               authname[AUTH_MAX_AUTHNAME];
        !            99:     char               password[AUTH_MAX_PASSWORD];
        !           100: 
        !           101:     struct papparams   pap;
        !           102:     struct chapparams  chap;
        !           103: 
        !           104:     struct u_range     range;          /* IP range allowed to user */
        !           105:     u_char             range_valid;    /* range is valid */
        !           106:     u_char             netmask;        /* IP Netmask */
        !           107:     u_char             vjc_enable;     /* VJC requested by AAA */
        !           108: 
        !           109:     u_char             ippool_used;
        !           110:     char               ippool[LINK_MAX_NAME];
        !           111: 
        !           112:     struct in_addr     peer_dns[2];    /* DNS servers for peer to use */
        !           113:     struct in_addr     peer_nbns[2];   /* NBNS servers for peer to use */
        !           114: 
        !           115:     char               *eapmsg;        /* EAP Msg for forwarding to RADIUS server */
        !           116:     int                        eapmsg_len;
        !           117:     u_char             *state;         /* copy of the state attribute, needed for accounting */
        !           118:     int                        state_len;
        !           119:     u_char             *class;         /* copy of the class attribute, needed for accounting */
        !           120:     int                        class_len;
        !           121: 
        !           122:     char               action[8 + LINK_MAX_NAME];
        !           123: 
        !           124: #ifdef USE_IPFW
        !           125:     struct acl         *acl_rule;      /* ipfw rules */
        !           126:     struct acl         *acl_pipe;      /* ipfw pipes */
        !           127:     struct acl         *acl_queue;     /* ipfw queues */
        !           128:     struct acl         *acl_table;     /* ipfw tables */
        !           129: #endif
        !           130: 
        !           131: #ifdef USE_NG_BPF
        !           132:     struct acl         *acl_filters[ACL_FILTERS]; /* mpd's internal bpf filters */
        !           133:     struct acl         *acl_limits[ACL_DIRS];  /* traffic limits based on mpd's filters */
        !           134: 
        !           135:     char               std_acct[ACL_DIRS][ACL_NAME_LEN]; /* Names of ACL rerurned in standard accounting */
        !           136: #endif
        !           137:     
        !           138:     u_int              session_timeout;        /* Session-Timeout */
        !           139:     u_int              idle_timeout;           /* Idle-Timeout */
        !           140:     u_int              acct_update;            /* interval for accouting updates */
        !           141:     u_int              acct_update_lim_recv;
        !           142:     u_int              acct_update_lim_xmit;
        !           143:     char               *msdomain;              /* Microsoft domain */
        !           144:     SLIST_HEAD(, ifaceroute) routes;
        !           145:     u_short            mtu;                    /* MTU */
        !           146: 
        !           147:     u_char             authentic;      /* wich backend was used */
        !           148: 
        !           149:     char               callingnum[128];/* hr representation of the calling number */
        !           150:     char               callednum[128]; /* hr representation of the called number */
        !           151:     char               selfname[64];   /* hr representation of the self name */
        !           152:     char               peername[64];   /* hr representation of the peer name */
        !           153:     char               selfaddr[64];   /* hr representation of the self address */
        !           154:     char               peeraddr[64];   /* hr representation of the peer address */
        !           155:     char               peerport[6];    /* hr representation of the peer port */
        !           156:     char               peermacaddr[32];        /* hr representation of the peer MAC address */
        !           157:     char               peeriface[IFNAMSIZ];    /* hr representation of the peer interface */
        !           158: 
        !           159:     /* Iface stuff */
        !           160:     char               ifname[IFNAMSIZ];       /* Interface name */
        !           161: #ifdef SIOCSIFDESCR
        !           162:     char               *ifdescr;               /* Interface description */
        !           163: #endif
        !           164: #ifdef SIOCAIFGROUP
        !           165:     char               ifgroup[IFNAMSIZ];      /* Interface group */
        !           166: #endif
        !           167: 
        !           168:     struct {
        !           169:       int      policy;                 /* MPPE_POLICY_* */
        !           170:       int      types;                  /* MPPE_TYPE_*BIT bitmask */
        !           171:       u_char   lm_hash[16];            /* LM-Hash */
        !           172:       u_char   nt_hash[16];            /* NT-Hash */
        !           173:       u_char   nt_hash_hash[16];       /* NT-Hash-Hash */
        !           174:       u_char   has_lm_hash;
        !           175:       u_char   has_nt_hash;
        !           176:       u_char   has_keys;
        !           177: 
        !           178:       u_char   chap_alg;               /* Callers's CHAP algorithm */
        !           179: 
        !           180:       u_char   msChal[CHAP_MSOFTv2_CHAL_LEN]; /* MSOFT challng */
        !           181:       u_char   ntResp[CHAP_MSOFTv2_RESP_LEN]; /* MSOFT response */
        !           182: 
        !           183: #ifdef CCP_MPPC
        !           184:       /* Keys when using MS-CHAPv2 or EAP */
        !           185:       u_char   xmit_key[MPPE_KEY_LEN]; /* xmit start key */
        !           186:       u_char   recv_key[MPPE_KEY_LEN]; /* recv start key */
        !           187: #endif
        !           188:     } msoft;
        !           189:   };
        !           190: 
        !           191:   struct authconf {
        !           192:     struct radiusconf  radius;         /* RADIUS configuration */
        !           193:     char               authname[AUTH_MAX_AUTHNAME];    /* Configured username */
        !           194:     char               password[AUTH_MAX_PASSWORD];    /* Configured password */
        !           195:     u_int              acct_update;
        !           196:     u_int              acct_update_lim_recv;
        !           197:     u_int              acct_update_lim_xmit;
        !           198:     int                        timeout;        /* Authorization timeout in seconds */
        !           199:     struct optinfo     options;        /* Configured options */
        !           200:     char               *extauth_script;/*  External auth script */
        !           201:     char               *extacct_script;/*  External acct script */
        !           202:     char               ippool[LINK_MAX_NAME];
        !           203:   };
        !           204:   typedef struct authconf      *AuthConf;
        !           205: 
        !           206:   /* State of authorization process during authorization phase,
        !           207:    * contains params set by the auth-backend */
        !           208:   struct auth {
        !           209:     u_short            peer_to_self;   /* What I need from peer */
        !           210:     u_short            self_to_peer;   /* What peer needs from me */
        !           211:     u_char             peer_to_self_alg;       /* What alg I need from peer */
        !           212:     u_char             self_to_peer_alg;       /* What alg peer needs from me */
        !           213:     struct pppTimer    timer;          /* Max time to spend doing auth */
        !           214:     struct pppTimer    acct_timer;     /* Timer for accounting updates */
        !           215:     struct papinfo     pap;            /* PAP state */
        !           216:     struct chapinfo    chap;           /* CHAP state */
        !           217:     struct eapinfo     eap;            /* EAP state */
        !           218:     struct paction     *thread;        /* async auth thread */
        !           219:     struct paction     *acct_thread;   /* async accounting auth thread */
        !           220:     struct authconf    conf;           /* Auth backends, RADIUS, etc. */
        !           221:     struct authparams  params;         /* params to pass to from auth backend */
        !           222:     struct ng_ppp_link_stat64  prev_stats;     /* Previous link statistics */
        !           223:   };
        !           224:   typedef struct auth  *Auth;
        !           225: 
        !           226:   struct radiusconf    radius;                 /* RADIUS configuration */
        !           227:   /* Interface between the auth-backend (secret file, RADIUS, etc.)
        !           228:    * and Mpd's internal structs.
        !           229:    */
        !           230:   struct authdata {
        !           231:     struct authconf    conf;           /* a copy of bundle's authconf */
        !           232:     u_short            proto;          /* wich proto are we using, PAP, CHAP, ... */
        !           233:     u_char             alg;            /* proto specific algoruthm */
        !           234:     u_int              id;             /* Actual, packet id */    
        !           235:     u_int              code;           /* Proto specific code */
        !           236:     u_char             acct_type;      /* Accounting type, Start, Stop, Update */
        !           237:     u_char             eap_radius;
        !           238:     u_char             status;
        !           239:     u_char             why_fail;
        !           240:     char               *reply_message; /* Text wich may displayed to the user */
        !           241:     char               *mschap_error;  /* MSCHAP Error Message */
        !           242:     char               *mschapv2resp;  /* Response String for MSCHAPv2 */
        !           243:     void               (*finish)(Link l, struct authdata *auth); /* Finish handler */
        !           244:     int                        drop_user;      /* RAD_MPD_DROP_USER value sent by RADIUS server */
        !           245:     struct {
        !           246:       struct rad_handle        *handle;        /* the RADIUS handle */
        !           247:     } radius;
        !           248: #ifdef USE_OPIE
        !           249:     struct {
        !           250:       struct opie      data;
        !           251:     } opie;
        !           252: #endif
        !           253:     struct {           /* informational (read-only) data needed for e.g. accouting */
        !           254:       char             msession_id[AUTH_MAX_SESSIONID]; /* multi-session-id */
        !           255:       char             session_id[AUTH_MAX_SESSIONID]; /* session-id */
        !           256:       char             ifname[IFNAMSIZ];       /* interface name */
        !           257:       uint             ifindex;                /* System interface index */
        !           258:       char             bundname[LINK_MAX_NAME];/* name of the bundle */
        !           259:       char             lnkname[LINK_MAX_NAME]; /* name of the link */
        !           260:       struct ng_ppp_link_stat64        stats;          /* Current link statistics */
        !           261: #ifdef USE_NG_BPF
        !           262:       struct svcstat   ss;
        !           263: #endif
        !           264:       char             *downReason;    /* Reason for link going down */
        !           265:       time_t           last_up;        /* Time this link last got up */
        !           266:       PhysType         phys_type;      /* Device type descriptor */
        !           267:       int              linkID;         /* Absolute link number */
        !           268:       char             peer_ident[64]; /* LCP ident received from peer */
        !           269:       struct in_addr   peer_addr;      /* currently assigned IP-Address of the client */
        !           270:       short            n_links;        /* number of links in the bundle */
        !           271:       u_char           originate;      /* Who originated the connection */
        !           272:     } info;
        !           273:     struct authparams  params;         /* params to pass to from auth backend */
        !           274:   };
        !           275:   typedef struct authdata      *AuthData;
        !           276:   
        !           277:   extern const struct cmdtab AuthSetCmds[];
        !           278: 
        !           279: /*
        !           280:  * GLOBAL VARIABLES
        !           281:  */
        !           282:   extern const u_char  gMsoftZeros[32];
        !           283:   extern int           gMaxLogins;     /* max number of concurrent logins per user */
        !           284:   extern int           gMaxLoginsCI;
        !           285: 
        !           286: /*
        !           287:  * FUNCTIONS
        !           288:  */
        !           289: 
        !           290:   extern void          AuthInit(Link l);
        !           291:   extern void          AuthInst(Auth auth, Auth autht);
        !           292:   extern void          AuthShutdown(Link l);
        !           293:   extern void          AuthStart(Link l);
        !           294:   extern void          AuthStop(Link l);
        !           295:   extern void          AuthInput(Link l, int proto, Mbuf bp);
        !           296:   extern void          AuthOutput(Link l, int proto, u_int code, u_int id,
        !           297:                          const u_char *ptr, int len, int add_len, 
        !           298:                          u_char eap_type);
        !           299:   extern void          AuthFinish(Link l, int which, int ok);
        !           300:   extern void          AuthCleanup(Link l);
        !           301:   extern int           AuthStat(Context ctx, int ac, char *av[], void *arg);
        !           302:   extern void          AuthAccountStart(Link l, int type);
        !           303:   extern void          AuthAccountTimeout(void *arg);
        !           304:   extern AuthData      AuthDataNew(Link l);
        !           305:   extern void          AuthDataDestroy(AuthData auth);
        !           306:   extern int           AuthGetData(char *authname, char *password, size_t passlen, 
        !           307:                            struct u_range *range, u_char *range_valid);
        !           308:   extern void          AuthAsyncStart(Link l, AuthData auth);
        !           309:   extern const char    *AuthFailMsg(AuthData auth, char *buf, size_t len);
        !           310:   extern const char    *AuthStatusText(int status);
        !           311:   extern const char    *AuthMPPEPolicyname(int policy);
        !           312:   extern const char    *AuthMPPETypesname(int types, char *buf, size_t len);
        !           313: 
        !           314: #if defined(USE_NG_BPF) || defined(USE_IPFW)
        !           315:   extern void          ACLCopy(struct acl *src, struct acl **dst);
        !           316:   extern void          ACLDestroy(struct acl *acl);
        !           317: #endif
        !           318:   extern void          authparamsInit(struct authparams *ap);
        !           319:   extern void          authparamsCopy(struct authparams *src, struct authparams *dst);
        !           320:   extern void          authparamsMove(struct authparams *src, struct authparams *dst);
        !           321:   extern void          authparamsDestroy(struct authparams *ap);
        !           322: 
        !           323: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>