| version 1.1.1.3, 2016/11/01 09:56:12 | version 1.1.1.4, 2021/03/17 00:39:23 | 
| Line 43 | Line 43 | 
 |  |  | 
 | static void AuthTimeout(void *arg); | static void AuthTimeout(void *arg); | 
 | static int | static int | 
| AuthGetExternalPassword(char *extcmd, char *authname, | AuthGetExternalPassword(const char *extcmd, char *authname, | 
 | char *password, size_t passlen); | char *password, size_t passlen); | 
 | static void AuthAsync(void *arg); | static void AuthAsync(void *arg); | 
 | static void AuthAsyncFinish(void *arg, int was_canceled); | static void AuthAsyncFinish(void *arg, int was_canceled); | 
| Line 72  static void AuthOpie(AuthData auth); | Line 72  static void AuthOpie(AuthData auth); | 
 |  |  | 
 | #endif | #endif | 
 | static const char *AuthCode(int proto, u_char code, char *buf, size_t len); | static const char *AuthCode(int proto, u_char code, char *buf, size_t len); | 
| static int AuthSetCommand(Context ctx, int ac, char *av[], void *arg); | static int AuthSetCommand(Context ctx, int ac, const char *const av[], const void *arg); | 
 |  |  | 
 | /* Set menu options */ | /* Set menu options */ | 
 | enum { | enum { | 
| Line 128  const struct cmdtab AuthSetCmds[] = { | Line 128  const struct cmdtab AuthSetCmds[] = { | 
 | AuthSetCommand, NULL, 2, (void *)SET_YES}, | AuthSetCommand, NULL, 2, (void *)SET_YES}, | 
 | {"no [opt ...]", "Disable and deny option", | {"no [opt ...]", "Disable and deny option", | 
 | AuthSetCommand, NULL, 2, (void *)SET_NO}, | AuthSetCommand, NULL, 2, (void *)SET_NO}, | 
| {NULL}, | {NULL, NULL, NULL, NULL, 0, NULL}, | 
 | }; | }; | 
 |  |  | 
 | const u_char gMsoftZeros[32]; | const u_char gMsoftZeros[32]; | 
| int        gMaxLogins = 0;                 /* max number of concurrent logins per | static unsigned        gMaxLogins = 0;                 /* max number of concurrent logins per | 
 | * user */ | * user */ | 
| int        gMaxLoginsCI = 0; | static unsigned        gMaxLoginsCI = 0; | 
 |  |  | 
 | /* | /* | 
 | * INTERNAL VARIABLES | * INTERNAL VARIABLES | 
 | */ | */ | 
 |  |  | 
| static struct confinfo gConfList[] = { | static const struct confinfo gConfList[] = { | 
 | {0, AUTH_CONF_RADIUS_AUTH, "radius-auth"}, | {0, AUTH_CONF_RADIUS_AUTH, "radius-auth"}, | 
 | {0, AUTH_CONF_RADIUS_ACCT, "radius-acct"}, | {0, AUTH_CONF_RADIUS_ACCT, "radius-acct"}, | 
 | {0, AUTH_CONF_INTERNAL, "internal"}, | {0, AUTH_CONF_INTERNAL, "internal"}, | 
| Line 455  void | Line 455  void | 
 | AuthInput(Link l, int proto, Mbuf bp) | AuthInput(Link l, int proto, Mbuf bp) | 
 | { | { | 
 | AuthData auth; | AuthData auth; | 
 | int len; |  | 
 | struct fsmheader fsmh; | struct fsmheader fsmh; | 
 | u_char *pkt; | u_char *pkt; | 
 | char buf[16]; | char buf[16]; | 
 |  | u_short len; | 
 |  | uint16_t fsmh_len; | 
 |  |  | 
 | /* Sanity check */ | /* Sanity check */ | 
 | if (l->lcp.phase != PHASE_AUTHENTICATE && l->lcp.phase != PHASE_NETWORK) { | if (l->lcp.phase != PHASE_AUTHENTICATE && l->lcp.phase != PHASE_NETWORK) { | 
| Line 470  AuthInput(Link l, int proto, Mbuf bp) | Line 471  AuthInput(Link l, int proto, Mbuf bp) | 
 |  |  | 
 | /* Sanity check length */ | /* Sanity check length */ | 
 | if (len < sizeof(fsmh)) { | if (len < sizeof(fsmh)) { | 
| Log(LG_ERR | LG_AUTH, ("[%s] AUTH: rec'd runt packet: %d bytes", | Log(LG_ERR | LG_AUTH, ("[%s] AUTH: rec'd runt packet: %hu bytes", | 
 | l->name, len)); | l->name, len)); | 
 | mbfree(bp); | mbfree(bp); | 
 | return; | return; | 
 | } | } | 
 | auth = AuthDataNew(l); |  | 
 | auth->proto = proto; |  | 
 |  |  | 
 | bp = mbread(bp, &fsmh, sizeof(fsmh)); | bp = mbread(bp, &fsmh, sizeof(fsmh)); | 
 | if (len > ntohs(fsmh.length)) |  | 
 | len = ntohs(fsmh.length); |  | 
 | len -= sizeof(fsmh); |  | 
 |  |  | 
 |  | fsmh_len = ntohs(fsmh.length); | 
 |  | if (len > fsmh_len) { | 
 |  | /* Sanity check length */ | 
 |  | if (fsmh_len < sizeof(fsmh)) { | 
 |  | Log(LG_ERR | LG_AUTH, ("[%s] AUTH: bad length: says %hu, rec'd %hu", | 
 |  | l->name, fsmh_len, len)); | 
 |  | mbfree(bp); | 
 |  | return; | 
 |  | } | 
 |  | len = fsmh_len; | 
 |  | } | 
 |  |  | 
 |  | len -= sizeof(fsmh); | 
 | pkt = MBDATA(bp); | pkt = MBDATA(bp); | 
 |  |  | 
 | if (proto == PROTO_EAP && bp) { | if (proto == PROTO_EAP && bp) { | 
| Log(LG_AUTH, ("[%s] %s: rec'd %s #%d len: %d, type: %s", l->name, | Log(LG_AUTH, ("[%s] %s: rec'd %s #%d len: %hu, type: %s", l->name, | 
 | ProtoName(proto), AuthCode(proto, fsmh.code, buf, sizeof(buf)), fsmh.id, | ProtoName(proto), AuthCode(proto, fsmh.code, buf, sizeof(buf)), fsmh.id, | 
| ntohs(fsmh.length), EapType(pkt[0]))); | fsmh_len, EapType(pkt[0]))); | 
 | } else { | } else { | 
| Log(LG_AUTH, ("[%s] %s: rec'd %s #%d len: %d", l->name, | Log(LG_AUTH, ("[%s] %s: rec'd %s #%d len: %hu", l->name, | 
 | ProtoName(proto), AuthCode(proto, fsmh.code, buf, sizeof(buf)), fsmh.id, | ProtoName(proto), AuthCode(proto, fsmh.code, buf, sizeof(buf)), fsmh.id, | 
| ntohs(fsmh.length))); | fsmh_len)); | 
 | } | } | 
 |  |  | 
 |  | auth = AuthDataNew(l); | 
 |  | auth->proto = proto; | 
 | auth->id = fsmh.id; | auth->id = fsmh.id; | 
 | auth->code = fsmh.code; | auth->code = fsmh.code; | 
 | /* Status defaults to undefined */ | /* Status defaults to undefined */ | 
| Line 718  AuthStop(Link l) | Line 729  AuthStop(Link l) | 
 | */ | */ | 
 |  |  | 
 | int | int | 
| AuthStat(Context ctx, int ac, char *av[], void *arg) | AuthStat(Context ctx, int ac, const char *const av[], const void *arg) | 
 | { | { | 
 | Auth const au = &ctx->lnk->lcp.auth; | Auth const au = &ctx->lnk->lcp.auth; | 
 | AuthConf const conf = &au->conf; | AuthConf const conf = &au->conf; | 
| Line 735  AuthStat(Context ctx, int ac, char *av[], void *arg) | Line 746  AuthStat(Context ctx, int ac, char *av[], void *arg) | 
 |  |  | 
 | #endif | #endif | 
 |  |  | 
 |  | (void)ac; | 
 |  | (void)av; | 
 |  | (void)arg; | 
 |  |  | 
 | Printf("Configuration:\r\n"); | Printf("Configuration:\r\n"); | 
 | Printf("\tMy authname     : %s\r\n", conf->authname); | Printf("\tMy authname     : %s\r\n", conf->authname); | 
| Printf("\tMax-Logins      : %d%s\r\n", gMaxLogins, (gMaxLoginsCI ? " CI" : "")); | Printf("\tMax-Logins      : %u%s\r\n", gMaxLogins, (gMaxLoginsCI ? " CI" : "")); | 
 | Printf("\tAcct Update     : %d\r\n", conf->acct_update); | Printf("\tAcct Update     : %d\r\n", conf->acct_update); | 
 | Printf("\t   Limit In     : %d\r\n", conf->acct_update_lim_recv); | Printf("\t   Limit In     : %d\r\n", conf->acct_update_lim_recv); | 
 | Printf("\t   Limit Out    : %d\r\n", conf->acct_update_lim_xmit); | Printf("\t   Limit Out    : %d\r\n", conf->acct_update_lim_xmit); | 
| Line 1868  const char * | Line 1883  const char * | 
 | AuthMPPETypesname(int types, char *buf, size_t len) | AuthMPPETypesname(int types, char *buf, size_t len) | 
 | { | { | 
 | if (types == 0) { | if (types == 0) { | 
| sprintf(buf, "no encryption required"); | strlcpy(buf, "no encryption required", len); | 
 | return (buf); | return (buf); | 
 | } | } | 
 | buf[0] = 0; | buf[0] = 0; | 
 | if (types & MPPE_TYPE_40BIT) | if (types & MPPE_TYPE_40BIT) | 
| sprintf(buf, "40 "); | strlcpy(buf, "40 ", len); | 
 | if (types & MPPE_TYPE_56BIT) | if (types & MPPE_TYPE_56BIT) | 
| sprintf(&buf[strlen(buf)], "56 "); | strlcat(buf, "56 ", len); | 
 | if (types & MPPE_TYPE_128BIT) | if (types & MPPE_TYPE_128BIT) | 
| sprintf(&buf[strlen(buf)], "128 "); | strlcat(buf, "128 ", len); | 
 |  |  | 
 | if (strlen(buf) == 0) { | if (strlen(buf) == 0) { | 
| sprintf(buf, "unknown types"); | strlcpy(buf, "unknown types", len); | 
 | } else { | } else { | 
| sprintf(&buf[strlen(buf)], "bit"); | strlcat(buf, "bit", len); | 
 | } | } | 
 |  |  | 
 | return (buf); | return (buf); | 
| Line 1896  AuthMPPETypesname(int types, char *buf, size_t len) | Line 1911  AuthMPPETypesname(int types, char *buf, size_t len) | 
 | * -1 on error (can't fork, no data read, whatever) | * -1 on error (can't fork, no data read, whatever) | 
 | */ | */ | 
 | static int | static int | 
| AuthGetExternalPassword(char *extcmd, char *authname, char *password, size_t passlen) | AuthGetExternalPassword(const char *extcmd, char *authname, char *password, size_t passlen) | 
 | { | { | 
 | char cmd[AUTH_MAX_PASSWORD + 5 + AUTH_MAX_AUTHNAME]; | char cmd[AUTH_MAX_PASSWORD + 5 + AUTH_MAX_AUTHNAME]; | 
 | int ok = 0; | int ok = 0; | 
| Line 1954  AuthCode(int proto, u_char code, char *buf, size_t len | Line 1969  AuthCode(int proto, u_char code, char *buf, size_t len | 
 | */ | */ | 
 |  |  | 
 | static int | static int | 
| AuthSetCommand(Context ctx, int ac, char *av[], void *arg) | AuthSetCommand(Context ctx, int ac, const char *const av[], const void *arg) | 
 | { | { | 
 | AuthConf const autc = &ctx->lnk->lcp.auth.conf; | AuthConf const autc = &ctx->lnk->lcp.auth.conf; | 
 | int val; | int val; | 
| Line 1983  AuthSetCommand(Context ctx, int ac, char *av[], void * | Line 1998  AuthSetCommand(Context ctx, int ac, char *av[], void * | 
 | break; | break; | 
 |  |  | 
 | case SET_MAX_LOGINS: | case SET_MAX_LOGINS: | 
| gMaxLogins = atoi(av[0]); | gMaxLogins = (unsigned)atoi(av[0]); | 
 | if (ac >= 2 && strcasecmp(av[1], "ci") == 0) { | if (ac >= 2 && strcasecmp(av[1], "ci") == 0) { | 
 | gMaxLoginsCI = 1; | gMaxLoginsCI = 1; | 
 | } else { | } else { |