rad_assert(input != NULL);
if (buffer) *buffer = '\0';
-
+
switch (*input) {
case '\0':
*token = POLICY_LEX_EOL;
return NULL; /* nothing more to do */
-
+
case ' ':
case '\t':
case '\r':
while ((*input == ' ') || (*input == '\t') ||
(*input == '\r') || (*input == '\n')) input++;
return input; /* point to next non-whitespace character */
-
+
case '#': /* ignore everything to the end of the line */
*token = POLICY_LEX_EOL;
return NULL;
case '(':
*token = POLICY_LEX_L_BRACKET;
return input + 1;
-
+
case ')':
*token = POLICY_LEX_R_BRACKET;
return input + 1;
-
+
case '{':
*token = POLICY_LEX_LC_BRACKET;
return input + 1;
-
+
case '}':
*token = POLICY_LEX_RC_BRACKET;
return input + 1;
-
+
case ',':
*token = POLICY_LEX_COMMA;
return input + 1;
*token = POLICY_LEX_AND;
}
return input + 1;
-
+
case '|':
switch (input[1]) {
case '|':
*token = POLICY_LEX_OR;
}
return input + 1;
-
+
case '!':
switch (input[1]) {
case '=':
*token = POLICY_LEX_L_NOT;
}
return input + 1;
-
+
case '=':
switch (input[1]) {
case '=':
*token = POLICY_LEX_ASSIGN;
}
return input + 1;
-
+
case '<':
if (input[1] == '=') {
input++;
*token = POLICY_LEX_LT;
}
return input + 1;
-
+
case '>':
if (input[1] == '=') {
input++;
*token = POLICY_LEX_BAD;
return input + 1;
}
-
+
input++;
while (*input != '"') {
/*
*/
*(buffer++) = *(input++);
buflen--;
-
+
/*
* FIXME: Print more warnings?
*/
}
}
*buffer = '\0';
-
+
*token = POLICY_LEX_DOUBLE_QUOTED_STRING;
return input + 1; /* skip trailing '"' */
*token = POLICY_LEX_BAD;
return input + 1;
}
-
+
/*
* Getting one character is stupid.
*/
*token = POLICY_LEX_BAD;
return input + 1;
}
-
+
/*
* Bare words are [-a-zA-Z0-9.]+
*/
}
*(buffer++) = *(input++);
buflen--;
-
+
/*
* FIXME: Print more warnings?
*/
}
}
*buffer = '\0';
-
+
*token = POLICY_LEX_BARE_WORD;
return input;
}
lexer->parse = fgets(lexer->buffer,
sizeof(lexer->buffer),
lexer->fp);
-
+
if (!lexer->parse) {
return POLICY_LEX_EOF;
}
this->rhs = strdup(mystring);
*tail = (policy_item_t *) this;
-
+
return 1;
}
rlm_policy_free_item((policy_item_t *) this);
return 0;
}
-
+
this->compare = POLICY_LEX_L_BRACKET;
this->child_condition = POLICY_LEX_L_BRACKET;
rcode = parse_condition(lexer, &(this->child));
lhs);
rlm_policy_free_item((policy_item_t *) this);
return 0;
-
+
}
-
+
/*
* this->lhs set up below, after "check"
*/
lrad_int2str(rlm_policy_tokens, token, "?"));
return 0;
}
-
+
token = policy_lex_file(lexer, 0, NULL, 0);
if (token != POLICY_LEX_R_BRACKET) {
fprintf(stderr, "%s[%d]: Expected right bracket, got \"%s\"\n",
}
*tail = (policy_item_t *) this;
-
+
return 1;
}
policy_lex_t token;
policy_attributes_t *this;
char buffer[32];
-
+
token = policy_lex_file(lexer, 0, buffer, sizeof(buffer));
switch (token) {
case POLICY_LEX_ASSIGN:
lrad_int2str(rlm_policy_tokens, token, "?"));
return 0; /* unknown */
}
-
+
this = rad_malloc(sizeof(*this));
memset(this, 0, sizeof(*this));
snprintf(buffer, sizeof(buffer), "%s/%s",
radius_dir, filename);
}
-
+
/*
* Include section calling a module.
*/
}
return 0;
break;
-
+
case POLICY_RESERVED_CONTROL:
case POLICY_RESERVED_REQUEST:
case POLICY_RESERVED_REPLY:
return 1;
return 0;
break;
-
+
case POLICY_RESERVED_PRINT:
if (parse_print(lexer, tail)) {
return 1;
}
return 0;
break;
-
+
case POLICY_RESERVED_RETURN:
if (parse_return(lexer, tail)) {
return 1;
}
return 0;
break;
-
+
case POLICY_RESERVED_MODULE:
if (parse_module(lexer, tail)) {
return 1;
{
const DICT_ATTR *dattr;
-
+
/*
* Bare words MUST be dictionary attributes
*/
-
+
dattr = dict_attrbyname(lhs);
if (!dattr) {
fprintf(stderr, "%s[%d]: Expected attribute name, got \"%s\"\n",
lhs);
}
break;
-
+
default:
fprintf(stderr, "%s[%d]: Unexpected reserved word \"%s\"\n",
lexer->filename, lexer->lineno, lhs);
return 0;
} /* switch over reserved words */
break;
-
+
/*
* Return from nested blocks.
*/
if (p) {
strlcpy(p + 1, filename, sizeof(buffer) - 1 - (p - buffer));
-#ifdef HAVE_DIRENT_H
+#ifdef HAVE_DIRENT_H
p = strrchr(p + 1, '/');
if (p && !p[1]) {
DIR *dir;
struct dirent *dp;
-
+
p++;
dir = opendir(buffer);
buffer, strerror(errno));
return 0;
}
-
+
/*
* Read the directory, ignoring "." files.
*/
snprintf(buffer, sizeof(buffer), "%s/%s",
radius_dir, filename);
}
-
+
/*
* Handle one include file.
*/
return 0;
}
break;
-
+
case POLICY_RESERVED_INCLUDE:
if (!parse_include(lexer)) {
return 0;
}
break;
-
+
case POLICY_RESERVED_DEBUG:
if (!parse_debug(lexer)) {
return 0;
}
break;
-
+
default:
fprintf(stderr, "%s[%d]: Unexpected word \"%s\"\n",
lexer->filename, lexer->lineno,