Esempio n. 1
0
static void is_gstate(struct global_state *gstate)
{
  /* Could use lots more checks on gstate... */
  TYPEIS(gstate, type_vector);
  if (vector_len(gstate) != 8)
    RUNTIME_ERROR(error_bad_type);
}
Esempio n. 2
0
static int
parse_tokens(acmi_config_t *config, int idx, enum miconf_parse_st *st, char *tok)
{
	static char *p;
	arms_line_conf_pppoe_t *pppoeconf;
	arms_line_conf_mobile_t *mobileconf;
	arms_line_conf_static_t *staticconf;
	enum miconf_tokens tokn;

	tokn = tok2num(tok);
	pppoeconf = &config->line_defs[config->num_line].conf.pppoe;
	mobileconf = &config->line_defs[config->num_line].conf.mobile;
	staticconf = &config->line_defs[config->num_line].conf.staticip;

	switch (*st) {
	case ST_INITIAL:
		/*
		 * line configuration storage has no (server) index.
		 *  then, idx > 0 should be ignored.  sigh...
		 */
		switch (tokn) {
		case TOK_APPPOE:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_ANONPPPOE;
				*st = ST_LINE;
			}
			break;
		case TOK_LPPPOE:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_PPPOE;
				*st = ST_LINE;
			}
			break;
		case TOK_LDHCP:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_DHCP;
				*st = ST_LINE;
			}
			break;
		case TOK_AMOBILE:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_ANONMOBILE;
				*st = ST_LINE;
			}
			break;
		case TOK_LMOBILE:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_MOBILE;
				*st = ST_LINE;
			}
			break;
		case TOK_LSTATIC:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_STATIC;
				*st = ST_LINE;
			}
			break;
		case TOK_LRA:
			if (idx == 0) {
				config->line_defs[config->num_line].type = 
					ARMS_LINE_RA;
				*st = ST_LINE;
			}
			break;
		case TOK_RSCERT:
			*st = ST_RSCERT;
			p = config->server_defs[idx].cacert;
			config->server_defs[idx].have_cert = 1;
			break;
		default:
			break;
		}
		break;
	case ST_LINE:
		switch (tokn) {
		case TOK_IFINDEX:
			*st = ST_LINE_IFINDEX;
			break;
		case TOK_ACCOUNT:
			*st = ST_LINE_ACCOUNT;
			break;
		case TOK_PASSWD:
			*st = ST_LINE_PASSWD;
			break;
		case TOK_TELNO:
			*st = ST_LINE_TELNO;
			break;
		case TOK_CID:
			*st = ST_LINE_CID;
			break;
		case TOK_APN:
			*st = ST_LINE_APN;
			break;
		case TOK_PDP:
			*st = ST_LINE_PDP;
			break;
		case TOK_IPADDR:
			*st = ST_LINE_IPADDR;
			break;
		case TOK_OC:
			/* ignore */
			break;
		case TOK_CC:
			*st = ST_INITIAL;
			config->num_line++;
			break;
		default:
			break;
		}
		break;
	case ST_LINE_IFINDEX:
		/* offset 0 of all types: ifindex */
		pppoeconf->ifindex = atoi(tok);
		*st = ST_LINE;
		break;
	case ST_LINE_ACCOUNT:
		if (TYPEIS(PPPOE))
			strlcpy(pppoeconf->id, tok, MAX_PPP_ID);
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->id, tok, MAX_MOBILE_PPP_ID);
		*st = ST_LINE;
		break;
	case ST_LINE_PASSWD:
		if (TYPEIS(PPPOE))
			strlcpy(pppoeconf->pass, tok, MAX_PPP_PASS);
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->pass, tok, MAX_MOBILE_PPP_PASS);
		*st = ST_LINE;
		break;
	case ST_LINE_TELNO:
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->telno, tok, MAX_MOBILE_TEL_LEN);
		*st = ST_LINE;
		break;
	case ST_LINE_CID:
		if (TYPEIS(MOBILE))
			mobileconf->cid = atoi(tok);
		*st = ST_LINE;
		break;
	case ST_LINE_APN:
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->apn, tok, MAX_MOBILE_APN_LEN);
		*st = ST_LINE;
		break;
	case ST_LINE_PDP:
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->pdp, tok, MAX_MOBILE_PDP_LEN);
		*st = ST_LINE;
		break;
	case ST_LINE_IPADDR:
		if (TYPEIS(MOBILE))
			strlcpy(mobileconf->ipaddr, tok, 48);
		if (TYPEIS(STATIC))
			strlcpy(staticconf->ipaddr, tok, 48);
		*st = ST_LINE;
		break;
	case ST_RSCERT:
		switch (tokn) {
		case TOK_BEGIN_CERT:
			p = append_cert(p, "-----BEGIN CERTIFICATE-----");
			/* ignore */
			break;
		case TOK_END_CERT:
			p = append_cert(p, "-----END CERTIFICATE-----");
			/* ignore */
			break;
		case TOK_CERT:
			/* ignore */
			break;
		case TOK_OC:
			break;
		case TOK_CC:
			*st = ST_INITIAL;
			break;
		default:
			p = append_cert(p, tok);
			break;
		}
		break;
	default:
		break;
	}

	return 0;
}