Blame modules/amd_tok.l

Packit 8480eb
/* ----------------------------------------------------------------------- *
Packit 8480eb
 *
Packit 8480eb
 *  Copyright 2013 Ian Kent <raven@themaw.net>
Packit 8480eb
 *  Copyright 2013 Red Hat, Inc.
Packit 8480eb
 *  All rights reserved.
Packit 8480eb
 *
Packit 8480eb
 *  This program is free software; you can redistribute it and/or modify
Packit 8480eb
 *  it under the terms of the GNU General Public License as published by
Packit 8480eb
 *  the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
Packit 8480eb
 *  USA; either version 2 of the License, or (at your option) any later
Packit 8480eb
 *  version.
Packit 8480eb
 *
Packit 8480eb
 *  This program is distributed in the hope that it will be useful,
Packit 8480eb
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 8480eb
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 8480eb
 *  GNU General Public License for more details.
Packit 8480eb
 *
Packit 8480eb
 * ----------------------------------------------------------------------- */
Packit 8480eb
Packit 8480eb
%s START MAPOPTVAL FSOPTVAL MNTOPTVAL SELOPTVAL SELARGVAL
Packit 8480eb
Packit 8480eb
%{
Packit 8480eb
Packit 8480eb
static int reset_start_state = 0;
Packit 8480eb
Packit 8480eb
#ifdef ECHO
Packit 8480eb
# undef ECHO
Packit 8480eb
#endif
Packit 8480eb
static void amd_echo(void);	/* forward definition */
Packit 8480eb
static void amd_copy_buffer(void);
Packit 8480eb
#define ECHO amd_echo()
Packit 8480eb
int amd_wrap(void);
Packit 8480eb
Packit 8480eb
#include <stdio.h>
Packit 8480eb
#include <stdlib.h>
Packit 8480eb
#include <string.h>
Packit 8480eb
#include <ctype.h>
Packit 8480eb
#include "amd_parse.tab.h"
Packit 8480eb
Packit 8480eb
int amd_lex(void);
Packit 8480eb
int mad_wrap(void);
Packit 8480eb
Packit 8480eb
#define YY_SKIP_YYWRAP
Packit 8480eb
Packit 8480eb
#ifndef YY_STACK_USED
Packit 8480eb
#define YY_STACK_USED 0
Packit 8480eb
#endif
Packit 8480eb
#ifndef YY_ALWAYS_INTERACTIVE
Packit 8480eb
#define YY_ALWAYS_INTERACTIVE 0
Packit 8480eb
#endif
Packit 8480eb
#ifndef YY_NEVER_INTERACTIVE
Packit 8480eb
#define YY_NEVER_INTERACTIVE 0
Packit 8480eb
#endif
Packit 8480eb
#ifndef YY_MAIN
Packit 8480eb
#define YY_MAIN 0
Packit 8480eb
#endif
Packit 8480eb
Packit 8480eb
void amd_set_scan_buffer(const char *);
Packit 8480eb
static const char *line = NULL;
Packit 8480eb
Packit 8480eb
#ifdef FLEX_SCANNER
Packit 8480eb
static const char *line_pos = NULL;
Packit 8480eb
static const char *line_lim = NULL;
Packit 8480eb
int amd_yyinput(char *, int);
Packit 8480eb
Packit 8480eb
#undef YY_INPUT
Packit 8480eb
#define YY_INPUT(b, r, ms) (r = amd_yyinput(b, ms))
Packit 8480eb
#else
Packit 8480eb
#undef input
Packit 8480eb
#undef unput
Packit 8480eb
#define input()  (*(char *) line++)
Packit 8480eb
#define unput(c) (*(char *) --line = c)
Packit 8480eb
#endif
Packit 8480eb
Packit 8480eb
%}
Packit 8480eb
Packit 8480eb
%option nounput
Packit 8480eb
Packit 8480eb
NL		\r?\n
Packit 8480eb
OPTWS		[[:blank:]]*
Packit 8480eb
OTHR		[^!;:=/|\- \t\r\n#]*
Packit 8480eb
Packit 8480eb
V4NUM		([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])
Packit 8480eb
Packit 8480eb
MACRO		(\$\{([[:alpha:]_/]([[:alnum:]_\-])([[:alnum:]_\-/])*)\})
Packit 8480eb
QSTR		(\"([^"\\]|\\.)*\")
Packit 8480eb
OSTR		([[:alpha:]]([[:alnum:]_\-])+)
Packit 8480eb
FSTR		([[:alnum:]_/\.]([[:alnum:]_\-/\+\.]|(\\.))*)
Packit 8480eb
VSTR		(([[:alnum:]_\-\:/\.])+)
Packit 8480eb
SSTR		([[:alpha:]]([[:alnum:]\-\.])+)
Packit 8480eb
IP4ADDR		({V4NUM}\.((({V4NUM}\.){0,2}){V4NUM}?))
Packit 8480eb
V4MASK		({IP4ADDR}|([1-2][0-9]|3[0-2]|[1-9]))
Packit 8480eb
IP6ADDR		((([A-Fa-f0-9]{1,4}\:\:?){1,7}[A-Fa-f0-9]{1,4})|(\:\:1))
Packit 8480eb
V6MASK		(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[1-9])
Packit 8480eb
Packit 8480eb
FOPT		(({QSTR}|{FSTR}|{MACRO})+)
Packit 8480eb
OPTS		({OSTR}(=({VSTR}|{MACRO})+)?)
Packit Bot 4a4fdc
SOPT		({SSTR}|{QSTR}|{MACRO}(\.|{SSTR}|{QSTR}|{MACRO})+)
Packit 8480eb
NOPT		({SSTR}|(({IP4ADDR}(\/{V4MASK})?)|({IP6ADDR}(\/{V6MASK})?)))
Packit 8480eb
Packit 8480eb
MAPOPT		(fs|type|maptype|pref|sublink|cache)
Packit 8480eb
MNTOPT		(opts|addopts|remopts)
Packit 8480eb
FSOPTS		(rhost|rfs|dev|cachedir|mount|unmount|umount|delay)
Packit 8480eb
CHEOPT		((mapdefault|none|inc|re|regexp|all)(,sync)?)
Packit 8480eb
MAPTYPE		(file|nis|nisplus|ldap|hesiod|exec|ndbm|passwd|union)
Packit 8480eb
FSTYPE_LOCAL	(link|linkx|lofs|ufs|ext2|ext3|ext4|xfs|jfs|cdfs|cachefs)
Packit 8480eb
FSTYPE_NET	(nfs|nfsx|nfsl|host)
Packit 8480eb
FSTYPE		(auto|program|direct|lustre|{FSTYPE_LOCAL}|{FSTYPE_NET})
Packit 8480eb
Packit 8480eb
OSSEL		(arch|karch|os|osver|full_os|vendor)
Packit 8480eb
HSTSEL		(host|hostd|domain|byte|cluster)
Packit 8480eb
NETSEL		(netnumber|network|wire|in_network)
Packit 8480eb
USRSEL		(uid|gid)
Packit 8480eb
MAPSEL		(key|map|path)
Packit 8480eb
OTRSEL		(autodir|dollar)
Packit 8480eb
BOLSEL		(true|false)
Packit 8480eb
Packit 8480eb
SELOPT		({OSSEL}|{HSTSEL}|{USRSEL}|{MAPSEL}|{OTRSEL})
Packit 8480eb
SEL1ARG		(xhost|exists|{NETSEL}|{BOLSEL})
Packit 8480eb
SEL2ARG		(netgrp|netgrpd)
Packit 8480eb
Packit 8480eb
CUTSEP		(\|\||\/)
Packit 8480eb
Packit 8480eb
%%
Packit 8480eb
Packit 8480eb
%{
Packit 8480eb
	if (reset_start_state) {
Packit 8480eb
		BEGIN START;
Packit 8480eb
		reset_start_state = 0;
Packit 8480eb
	}
Packit 8480eb
%}
Packit 8480eb
Packit 8480eb
<START>{
Packit 8480eb
	{NL} |
Packit 8480eb
	\x00 { }
Packit 8480eb
Packit 8480eb
	{MAPOPT} {
Packit 8480eb
		BEGIN(MAPOPTVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return MAP_OPTION;
Packit 8480eb
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{FSOPTS} {
Packit 8480eb
		BEGIN(FSOPTVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return FS_OPTION;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{MNTOPT} {
Packit 8480eb
		BEGIN(MNTOPTVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return MNT_OPTION;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{SELOPT} {
Packit 8480eb
		BEGIN(SELOPTVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SELECTOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	"!"/({SEL1ARG}|{SEL2ARG}) { return NOT; }
Packit 8480eb
Packit 8480eb
	{SEL1ARG} {
Packit 8480eb
		BEGIN(SELARGVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SELECTOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{SEL2ARG} {
Packit 8480eb
		BEGIN(SELARGVAL);
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SELECTOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{CUTSEP} { return CUT; }
Packit 8480eb
Packit 8480eb
	"-" { return HYPHEN; }
Packit 8480eb
Packit 8480eb
	{OPTWS} { return SPACE; }
Packit 8480eb
Packit 8480eb
	#.*  { return COMMENT; }
Packit 8480eb
Packit 8480eb
	{OTHR} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return OTHER;
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
<MAPOPTVAL>{
Packit 8480eb
	{NL} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	\x00 {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	";" {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{OPTWS} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SPACE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	":=" { return OPTION_ASSIGN; }
Packit 8480eb
Packit 8480eb
	{FSTYPE} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return FS_TYPE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{MAPTYPE} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return MAP_TYPE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{CHEOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return CACHE_OPTION;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{FOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return FS_OPT_VALUE;
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
<FSOPTVAL>{
Packit 8480eb
	{NL} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	\x00 {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	";" {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{OPTWS} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SPACE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	":=" { return OPTION_ASSIGN; }
Packit 8480eb
Packit 8480eb
	{FOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return FS_OPT_VALUE;
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
<MNTOPTVAL>{
Packit 8480eb
	{NL} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	\x00 {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	";" {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{OPTWS} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SPACE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	(:=)(,+)? { return OPTION_ASSIGN; }
Packit 8480eb
Packit 8480eb
	,+ { return COMMA; }
Packit 8480eb
Packit 8480eb
	"\"" { return QUOTE; }
Packit 8480eb
Packit 8480eb
	{OPTS} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return OPTION;
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
<SELOPTVAL>{
Packit 8480eb
	{NL} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	\x00 {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	";" {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{OPTWS} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SPACE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	"==" { return IS_EQUAL; }
Packit 8480eb
Packit 8480eb
	"!=" { return NOT_EQUAL; }
Packit 8480eb
Packit 8480eb
	{SOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SELECTOR_VALUE;
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
<SELARGVAL>{
Packit 8480eb
	{NL} {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	\x00 {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
		yyless(1);
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	";" {
Packit 8480eb
		BEGIN(START);
Packit 8480eb
		return SEPERATOR;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	"(" { return LBRACKET; }
Packit 8480eb
Packit 8480eb
	{NOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SEL_ARG_VALUE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{SOPT}/"," {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SEL_ARG_VALUE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	"," { return COMMA; }
Packit 8480eb
Packit 8480eb
	{SOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SEL_ARG_VALUE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	{FOPT} {
Packit 8480eb
		amd_copy_buffer();
Packit 8480eb
		return SEL_ARG_VALUE;
Packit 8480eb
	}
Packit 8480eb
Packit 8480eb
	")" { return RBRACKET; }
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
%%
Packit 8480eb
Packit 8480eb
#include "automount.h"
Packit 8480eb
Packit 8480eb
int amd_wrap(void)
Packit 8480eb
{
Packit 8480eb
	return 1;
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
static void amd_copy_buffer(void)
Packit 8480eb
{
Packit 8480eb
	if (amd_leng < 2048)
Packit 8480eb
		strcpy(amd_lval.strtype, amd_text);
Packit 8480eb
	else {
Packit 8480eb
		strncpy(amd_lval.strtype, amd_text, 2047);
Packit 8480eb
		amd_lval.strtype[2047] = '\0';
Packit 8480eb
		logmsg("warning: truncated option near %s\n",
Packit 8480eb
			&amd_lval.strtype[2030]);
Packit 8480eb
	}
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
static void amd_echo(void)
Packit 8480eb
{
Packit 8480eb
	logmsg("%s\n", amd_text);
Packit 8480eb
	return;
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
#ifdef FLEX_SCANNER
Packit 8480eb
Packit 8480eb
void amd_set_scan_buffer(const char *buffer)
Packit 8480eb
{
Packit 8480eb
	YY_FLUSH_BUFFER;
Packit 8480eb
	reset_start_state = 1;
Packit 8480eb
Packit 8480eb
	line = buffer;
Packit 8480eb
	line_pos = &line[0];
Packit 8480eb
	/*
Packit 8480eb
	 * Ensure buffer is 1 greater than string and is zeroed before
Packit 8480eb
	 * the parse so we can fit the extra NULL which allows us to
Packit 8480eb
	 * explicitly match an end of line within the buffer (ie. the
Packit 8480eb
	 * need for 2 NULLS when parsing in memeory buffers).
Packit 8480eb
	 */
Packit 8480eb
	line_lim = line + strlen(buffer) + 1;
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
#define amd_min(a,b) (((a) < (b)) ? (a) : (b))
Packit 8480eb
Packit 8480eb
int amd_yyinput(char *buffer, int max_size)
Packit 8480eb
{
Packit 8480eb
	int n = amd_min(max_size, line_lim - line_pos);
Packit 8480eb
Packit 8480eb
	if (n > 0) {
Packit 8480eb
		memcpy(buffer, line_pos, n);
Packit 8480eb
		line_pos += n;
Packit 8480eb
	}
Packit 8480eb
	return n;
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
#else
Packit 8480eb
Packit 8480eb
void amd_set_scan_buffer(const char *buffer)
Packit 8480eb
{
Packit 8480eb
	line = buffer;
Packit 8480eb
}
Packit 8480eb
Packit 8480eb
#endif