|
Packit Service |
b29381 |
%option noyywrap
|
|
Packit Service |
b29381 |
%{
|
|
Packit Service |
b29381 |
/* Copyright 1999,2000 Red Hat, Inc.
|
|
Packit Service |
b29381 |
* This software may be used under the terms of the GNU General Public
|
|
Packit Service |
b29381 |
* License, available in the file COPYING accompanying this file
|
|
Packit Service |
b29381 |
*/
|
|
Packit Service |
b29381 |
/* get around an apparant bug in bison; YYSTYPE not copied into config.tab.h */
|
|
Packit Service |
b29381 |
#define YYSTYPE void *
|
|
Packit Service |
b29381 |
#include "configfile.h"
|
|
Packit Service |
b29381 |
#include "configfile.tab.h"
|
|
Packit Service |
b29381 |
#include <stdio.h>
|
|
Packit Service |
b29381 |
#include <string.h>
|
|
Packit Service |
b29381 |
#include <syslog.h>
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
#include "pam_console.h"
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
static int lineno;
|
|
Packit Service |
b29381 |
static const char *filename;
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
STATIC char *
|
|
Packit Service |
b29381 |
strip_slash(const char *);
|
|
Packit Service |
b29381 |
%}
|
|
Packit Service |
b29381 |
%%
|
|
Packit Service |
b29381 |
\n { lineno++; return EOL; }
|
|
Packit Service |
b29381 |
\\\n { lineno++; }
|
|
Packit Service |
b29381 |
/* do not return EOL, eat up escaped newline */
|
|
Packit Service |
b29381 |
[ \t]+ /* ignore whitespace */
|
|
Packit Service |
b29381 |
\< { return OBRACKET; }
|
|
Packit Service |
b29381 |
\>= { return CBEQUALS; }
|
|
Packit Service |
b29381 |
\> { return CBRACKET; }
|
|
Packit Service |
b29381 |
([^\t\n #\<\>]|(\\#|\\\<|\\\>))+ { _pc_yylval=strip_slash(yytext); return STRING; }
|
|
Packit Service |
b29381 |
#.*\n { lineno++; return EOL; } /* ignore comments */
|
|
Packit Service |
b29381 |
%%
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
static void
|
|
Packit Service |
b29381 |
lex_file (FILE *in) {
|
|
Packit Service |
b29381 |
/* yy_flex_debug = 1; */
|
|
Packit Service |
b29381 |
yyin = in;
|
|
Packit Service |
b29381 |
lineno = 1;
|
|
Packit Service |
b29381 |
}
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
static void
|
|
Packit Service |
b29381 |
lex_set_filename(const char *name) {
|
|
Packit Service |
b29381 |
filename = name;
|
|
Packit Service |
b29381 |
}
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
static int
|
|
Packit Service |
b29381 |
_pc_yyerror (const char *s) {
|
|
Packit Service |
b29381 |
_pam_log(NULL, LOG_ERR, 0, "%s line %d: %s: at `%s'\n",
|
|
Packit Service |
b29381 |
filename, lineno, s, (char *)_pc_yylval);
|
|
Packit Service |
b29381 |
return 0;
|
|
Packit Service |
b29381 |
}
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
STATIC char *
|
|
Packit Service |
b29381 |
strip_slash(const char *s) {
|
|
Packit Service |
b29381 |
char *r, *t;
|
|
Packit Service |
b29381 |
|
|
Packit Service |
b29381 |
t = r = strdup(s);
|
|
Packit Service |
b29381 |
while ((t = strchr(t, '\\')) != NULL) {
|
|
Packit Service |
b29381 |
if (t[1] == '#' || t[1] == '<' || t[1] == '>') {
|
|
Packit Service |
b29381 |
memmove(t, t+1, strlen(t));
|
|
Packit Service |
b29381 |
}
|
|
Packit Service |
b29381 |
t++;
|
|
Packit Service |
b29381 |
}
|
|
Packit Service |
b29381 |
return r;
|
|
Packit Service |
b29381 |
}
|