Blame src/conf_yacc.y

Packit 762fc5
%{ 
Packit 762fc5
Packit 762fc5
/*	
Packit 762fc5
 * Copyright (C) 1999-2006,2010-2013,2015,2016 Rami Lehti, Pablo Virolainen,
Packit 762fc5
 * Richard van den Berg, Hannes von Haugwitz
Packit 762fc5
 * $Header$
Packit 762fc5
 * This program is free software; you can redistribute it and/or
Packit 762fc5
 * modify it under the terms of the GNU General Public License as
Packit 762fc5
 * published by the Free Software Foundation; either version 2 of the
Packit 762fc5
 * License, or (at your option) any later version.
Packit 762fc5
 *
Packit 762fc5
 * This program is distributed in the hope that it will be useful, but
Packit 762fc5
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 762fc5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit 762fc5
 * General Public License for more details.
Packit 762fc5
 *
Packit 762fc5
 * You should have received a copy of the GNU General Public License
Packit 762fc5
 * along with this program; if not, write to the Free Software
Packit 762fc5
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 762fc5
 */
Packit 762fc5
Packit 762fc5
#include "aide.h"
Packit 762fc5
#include <stdio.h>
Packit 762fc5
#include <stdlib.h>
Packit 762fc5
#include <ctype.h>
Packit 762fc5
#include <errno.h>
Packit 762fc5
#include <string.h>
Packit 762fc5
#include "list.h"
Packit 762fc5
#include "gen_list.h"
Packit 762fc5
#include "db.h"
Packit 762fc5
#include "db_config.h"
Packit 762fc5
#include "symboltable.h"
Packit 762fc5
#include "util.h"
Packit 762fc5
#include "commandconf.h"
Packit 762fc5
Packit 762fc5
DB_ATTR_TYPE retval=0;
Packit 762fc5
extern int conflex();
Packit 762fc5
void conferror(const char*);
Packit 762fc5
Packit 762fc5
extern char *conftext;
Packit 762fc5
extern long conf_lineno;
Packit 762fc5
Packit 762fc5
Packit 762fc5
%}
Packit 762fc5
%union {
Packit 762fc5
  char* s;
Packit 762fc5
  DB_ATTR_TYPE i;
Packit 762fc5
  RESTRICTION_TYPE r;
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
Packit 762fc5
%start lines
Packit 762fc5
Packit 762fc5
Packit 762fc5
%token TDEFINE
Packit 762fc5
%token TUNDEF
Packit 762fc5
%token TIFDEF
Packit 762fc5
%token TIFNDEF
Packit 762fc5
%token TIFNHOST
Packit 762fc5
%token TIFHOST
Packit 762fc5
%token TELSE
Packit 762fc5
%token TENDIF
Packit 762fc5
%token TINCLUDE
Packit 762fc5
%token TBEGIN_CONFIG
Packit 762fc5
%token TEND_CONFIG
Packit 762fc5
%token TBEGIN_DB
Packit 762fc5
%token TEND_DB
Packit 762fc5
%token TEND_DBNOMD
Packit 762fc5
%token TID
Packit 762fc5
%token <s> TSTRING
Packit 762fc5
%token '='
Packit 762fc5
Packit 762fc5
%token TACLNOSYMLINKFOLLOW
Packit 762fc5
%token TWARNDEADSYMLINKS
Packit 762fc5
%token TGROUPED
Packit 762fc5
%token TSUMMARIZECHANGES
Packit 762fc5
%token TNEWLINE
Packit 762fc5
%token TVERBOSE
Packit 762fc5
%token TDATABASEADDMETADATA
Packit 762fc5
%token TREPORTDETAILEDINIT
Packit 762fc5
%token TREPORTBASE16
Packit 762fc5
%token TREPORTQUIET
Packit 762fc5
%token TREPORTIGNOREE2FSATTRS
Packit 762fc5
%token TCONFIG_FILE
Packit 762fc5
%token TDATABASE
Packit 762fc5
%token TDATABASE_OUT
Packit 762fc5
%token TDATABASE_NEW
Packit 762fc5
%token TDATABASE_ATTRS
Packit 762fc5
%token TREPORT_URL
Packit 762fc5
%token TGZIPDBOUT
Packit 762fc5
%token TROOT_PREFIX
Packit Service b99ba9
%token SYSLOG_FORMAT
Packit 762fc5
%token TUMASK
Packit 762fc5
%token TTRUE
Packit 762fc5
%token TFALSE
Packit 762fc5
Packit 762fc5
%token TRECSTOP
Packit 762fc5
%token TCONFIG_VERSION
Packit 762fc5
Packit 762fc5
/* File rule */
Packit 762fc5
Packit 762fc5
%token <s> TSELRXRULE
Packit 762fc5
%token <s> TEQURXRULE
Packit 762fc5
%token <s> TNEGRXRULE
Packit 762fc5
Packit 762fc5
/* expr alkiot */
Packit 762fc5
Packit 762fc5
%token  TRIGHTS
Packit 762fc5
%token  TUSER
Packit 762fc5
%token  TGROUP
Packit 762fc5
%token  TINODE
Packit 762fc5
%token  TLINKCOUNT
Packit 762fc5
%token  TFTYPE
Packit 762fc5
%token  TSIZE
Packit 762fc5
%token  TGROWINGSIZE
Packit 762fc5
%token  TATIME
Packit 762fc5
%token  TCTIME
Packit 762fc5
%token  TMTIME
Packit 762fc5
%token  TACL
Packit 762fc5
%token  TXATTRS
Packit 762fc5
%token  TSELINUX
Packit 762fc5
%token  TE2FSATTRS
Packit 762fc5
Packit 762fc5
/* hash funktions */
Packit 762fc5
Packit 762fc5
%token  TTIGER
Packit 762fc5
%token  TSHA1
Packit 762fc5
%token  TRMD160
Packit 762fc5
%token  TMD2
Packit 762fc5
%token  TMD4
Packit 762fc5
%token  TMD5
Packit 762fc5
%token  TSHA256
Packit 762fc5
%token  TSHA512
Packit 762fc5
%token  TWHIRLPOOL
Packit 762fc5
Packit 762fc5
/* predefs */
Packit 762fc5
Packit 762fc5
%token  TL
Packit 762fc5
%token  TR
Packit 762fc5
Packit 762fc5
/* For db_lex */
Packit 762fc5
%token TGZIPHEADER
Packit 762fc5
%token TDBSPEC
Packit 762fc5
%token TUNKNOWN
Packit 762fc5
%token TNAME
Packit 762fc5
%token TERROR
Packit 762fc5
%token TEOF
Packit 762fc5
Packit 762fc5
%type  <r> restriction
Packit 762fc5
%type   expr
Packit 762fc5
%type   hash
Packit 762fc5
%type   primary other
Packit 762fc5
Packit 762fc5
%left '+' '-'
Packit 762fc5
Packit 762fc5
%%
Packit 762fc5
Packit 762fc5
lines : lines line | ;
Packit 762fc5
Packit 762fc5
line : rule | equrule | negrule | definestmt | undefstmt
Packit 762fc5
       | ifdefstmt | ifndefstmt | ifhoststmt | ifnhoststmt
Packit 762fc5
       | groupdef | db_in | db_out | db_new | db_attrs | verbose | report_detailed_init | config_version
Packit 762fc5
       | database_add_metadata | report | gzipdbout | root_prefix | report_base16 | report_quiet
Packit Service b99ba9
       | report_ignore_e2fsattrs | syslogformat | recursion_stopper | warn_dead_symlinks | grouped
Packit 762fc5
       | summarize_changes | acl_no_symlink_follow | beginconfigstmt | endconfigstmt
Packit 762fc5
       | TEOF {
Packit 762fc5
            newlinelastinconfig=1;
Packit 762fc5
	    YYACCEPT;
Packit 762fc5
          }
Packit 762fc5
       | TNEWLINE 
Packit 762fc5
       | TDBSPEC {
Packit 762fc5
          error(220,"Got @@dbspec.Stopping\n");
Packit 762fc5
	  YYACCEPT;
Packit 762fc5
          }
Packit 762fc5
       | TBEGIN_DB {
Packit 762fc5
	  error(220,"Got @@begin_db. Stopping\n");
Packit 762fc5
	  YYACCEPT;
Packit 762fc5
          }
Packit 762fc5
       | TEND_DB {
Packit 762fc5
	  conferror("Error while reading configuration");
Packit 762fc5
          }
Packit 762fc5
       | error {
Packit 762fc5
	  conferror("Error while reading configuration");
Packit 762fc5
	  YYABORT;
Packit 762fc5
          } ;
Packit 762fc5
Packit 762fc5
rule : TSELRXRULE expr newlineoreof
Packit 762fc5
{ decode_string($1); conf->selrxlst=append_rxlist($1,$2,conf->selrxlst, RESTRICTION_NULL); } ;
Packit 762fc5
Packit 762fc5
equrule : TEQURXRULE expr newlineoreof
Packit 762fc5
{ decode_string($1); conf->equrxlst=append_rxlist($1,$2,conf->equrxlst, RESTRICTION_NULL); } ;
Packit 762fc5
Packit 762fc5
negrule : TNEGRXRULE newlineoreof
Packit 762fc5
{ decode_string($1); conf->negrxlst=append_rxlist($1,0,conf->negrxlst, RESTRICTION_NULL); };
Packit 762fc5
Packit 762fc5
rule : TSELRXRULE restriction expr newlineoreof
Packit 762fc5
{ decode_string($1); conf->selrxlst=append_rxlist($1,$3,conf->selrxlst, $2); } ;
Packit 762fc5
Packit 762fc5
equrule : TEQURXRULE restriction expr newlineoreof
Packit 762fc5
{ decode_string($1); conf->equrxlst=append_rxlist($1,$3,conf->equrxlst, $2); } ;
Packit 762fc5
Packit 762fc5
negrule : TNEGRXRULE restriction newlineoreof
Packit 762fc5
{ decode_string($1); conf->negrxlst=append_rxlist($1,0,conf->negrxlst, $2); };
Packit 762fc5
Packit 762fc5
newlineoreof : TNEWLINE |
Packit 762fc5
          TEOF {
Packit 762fc5
            newlinelastinconfig=0;
Packit 762fc5
	    YYACCEPT;
Packit 762fc5
          } ;
Packit 762fc5
Packit 762fc5
restriction : restriction ',' restriction { $$ =$1  | $3 ; }
Packit 762fc5
    | TSTRING {
Packit 762fc5
       if((retval=get_restrictionval($1)) != RESTRICTION_NULL) {
Packit 762fc5
            $$=retval;
Packit 762fc5
       } else {
Packit 762fc5
            conf_lineno++;
Packit 762fc5
            conferror("Error in restriction");
Packit 762fc5
            YYABORT;
Packit 762fc5
       }
Packit 762fc5
    };
Packit 762fc5
Packit 762fc5
expr :  expr '+' expr { $$ =$1  | $3 ; } |
Packit 762fc5
        expr '-' expr { $$ =$1  & (~$3 ); } |
Packit 762fc5
	primary { $$ =$1 ;} ;
Packit 762fc5
Packit 762fc5
primary : hash { $$ =$1 ; } |
Packit 762fc5
	  other { $$ =$1 ; } |
Packit 762fc5
	  TSTRING { if((retval=get_groupval($1)) != DB_ATTR_UNDEF) {
Packit 762fc5
	    $$=retval;
Packit 762fc5
	  }
Packit 762fc5
	  else {
Packit 762fc5
		  conf_lineno++; // Hack
Packit 762fc5
	    conferror("Error in expression");
Packit 762fc5
	    YYABORT;
Packit 762fc5
	  }
Packit 762fc5
	  } ;
Packit 762fc5
Packit 762fc5
other : TRIGHTS { $$ =$1 ;} | TUSER {$$ =$1 ;} 
Packit 762fc5
        | TGROUP {$$ =$1 ;} | TINODE {$$ =$1 ;}
Packit 762fc5
        | TLINKCOUNT {$$ =$1 ;} | TFTYPE {$$ =$1 ;} | TSIZE {$$ =$1 ;}
Packit 762fc5
	| TGROWINGSIZE {$$ =$1 ;} | TATIME {$$ =$1 ;} 
Packit 762fc5
        | TCTIME {$$ =$1 ;} | TMTIME {$$ =$1 ;} | TL {$$ = $1;}
Packit 762fc5
        | TR {$$ = $1;} | TACL {$$ =$1 ;} | TXATTRS {$$ =$1 ;}
Packit 762fc5
        | TSELINUX {$$ =$1 ;} | TE2FSATTRS {$$ =$1 ;};
Packit 762fc5
Packit 762fc5
hash : TTIGER { $$ =$1 ;} | TSHA1 { $$ =$1 ;} | TRMD160 { $$ =$1 ;}
Packit 762fc5
	| TMD5 {$$ =$1 ;} | TSHA256 { $$ =$1 ;} | TSHA512 { $$ =$1 ;}
Packit 762fc5
        | TWHIRLPOOL { $$ =$1 ;};
Packit 762fc5
Packit 762fc5
definestmt : TDEFINE TSTRING TSTRING { do_define($2,$3); };
Packit 762fc5
Packit 762fc5
undefstmt : TUNDEF TSTRING { do_undefine($2); } ;
Packit 762fc5
Packit 762fc5
ifdefstmt : TIFDEF TSTRING { 
Packit 762fc5
  if(do_ifxdef(1,$2)==-1){
Packit 762fc5
    error(0,"ifdef error\n");
Packit 762fc5
    YYABORT; 
Packit 762fc5
  };
Packit 762fc5
 } ifstmtlist ;
Packit 762fc5
Packit 762fc5
ifndefstmt : TIFNDEF TSTRING { 
Packit 762fc5
  if(do_ifxdef(0,$2)==-1){
Packit 762fc5
    error(0,"ifndef error\n");
Packit 762fc5
    YYABORT; 
Packit 762fc5
  };
Packit 762fc5
 } ifstmtlist { error(220,"Ifndef statement ended\n");}  ;
Packit 762fc5
Packit 762fc5
ifhoststmt : TIFHOST TSTRING { 
Packit 762fc5
  if(do_ifxhost(1,$2)==-1){
Packit 762fc5
    error(0,"ifhost error\n");
Packit 762fc5
    YYABORT;
Packit 762fc5
  };
Packit 762fc5
 } ifstmtlist ;
Packit 762fc5
Packit 762fc5
ifnhoststmt : TIFNHOST TSTRING { 
Packit 762fc5
  if(do_ifxhost(0,$2)==-1){
Packit 762fc5
    error(0,"ifnhost error\n");
Packit 762fc5
    YYABORT; 
Packit 762fc5
  };
Packit 762fc5
 } ifstmtlist ;
Packit 762fc5
Packit 762fc5
ifstmtlist : lines TENDIF { error(220,"Endif stmt matched\n");} |
Packit 762fc5
             lines TELSE lines TENDIF {error(220,"Endifelse stmt matched\n");} ;
Packit 762fc5
Packit 762fc5
groupdef : TSTRING '=' expr { do_groupdef($1,$3); } ;
Packit 762fc5
Packit 762fc5
db_in : TDATABASE TSTRING { do_dbdef(DB_OLD,$2); };
Packit 762fc5
Packit 762fc5
db_out : TDATABASE_OUT TSTRING { do_dbdef(DB_WRITE,$2); };
Packit 762fc5
Packit 762fc5
db_new : TDATABASE_NEW TSTRING { do_dbdef(DB_NEW,$2); };
Packit 762fc5
Packit 762fc5
verbose : TVERBOSE TSTRING { do_verbdef($2); };
Packit 762fc5
Packit 762fc5
report : TREPORT_URL TSTRING { do_repurldef($2); } ;
Packit 762fc5
Packit 762fc5
db_attrs : TDATABASE_ATTRS expr {
Packit 762fc5
  DB_ATTR_TYPE attr;
Packit 762fc5
  if((attr = $2&(~DB_HASHES))){
Packit 762fc5
    error(0, "%li: invalid attribute(s) in database_attrs: %llx\n", conf_lineno-1, attr);
Packit 762fc5
    YYABORT;
Packit 762fc5
  }
Packit 762fc5
  conf->db_attrs=$2;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
beginconfigstmt : TBEGIN_CONFIG TSTRING {
Packit 762fc5
#ifdef WITH_MHASH
Packit 762fc5
  conf->do_configmd=1;
Packit 762fc5
  conf->old_confmdstr=strdup($2);
Packit 762fc5
#endif
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
endconfigstmt : TEND_CONFIG {
Packit 762fc5
  YYACCEPT;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
acl_no_symlink_follow : TACLNOSYMLINKFOLLOW TTRUE { 
Packit 762fc5
#ifdef WITH_ACL
Packit 762fc5
  conf->no_acl_on_symlinks=1;
Packit 762fc5
#else
Packit 762fc5
  error(0,"ACL-support not compiled in.\n");
Packit 762fc5
#endif
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
acl_no_symlink_follow : TACLNOSYMLINKFOLLOW TFALSE { 
Packit 762fc5
#ifdef WITH_ACL
Packit 762fc5
  conf->no_acl_on_symlinks=0;
Packit 762fc5
#else
Packit 762fc5
  error(0,"ACL-support not compiled in.\n");
Packit 762fc5
#endif
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
warn_dead_symlinks : TWARNDEADSYMLINKS TTRUE {
Packit 762fc5
  conf->warn_dead_symlinks=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
warn_dead_symlinks : TWARNDEADSYMLINKS TFALSE {
Packit 762fc5
  conf->warn_dead_symlinks=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
database_add_metadata : TDATABASEADDMETADATA TTRUE {
Packit 762fc5
  conf->database_add_metadata=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
database_add_metadata : TDATABASEADDMETADATA TFALSE {
Packit 762fc5
  conf->database_add_metadata=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_detailed_init : TREPORTDETAILEDINIT TTRUE {
Packit 762fc5
  conf->report_detailed_init=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_detailed_init : TREPORTDETAILEDINIT TFALSE {
Packit 762fc5
  conf->report_detailed_init=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_ignore_e2fsattrs : TREPORTIGNOREE2FSATTRS TSTRING {
Packit 762fc5
#ifdef WITH_E2FSATTRS
Packit 762fc5
  do_report_ignore_e2fsattrs($2);
Packit 762fc5
#else
Packit 762fc5
  error(0,"e2fsattrs-support not compiled in.\n");
Packit 762fc5
#endif
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_base16 : TREPORTBASE16 TTRUE {
Packit 762fc5
  conf->report_base16=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_base16 : TREPORTBASE16 TFALSE {
Packit 762fc5
  conf->report_base16=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_quiet : TREPORTQUIET TTRUE {
Packit 762fc5
  conf->report_quiet=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
report_quiet : TREPORTQUIET TFALSE {
Packit 762fc5
  conf->report_quiet=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
grouped : TGROUPED TTRUE {
Packit 762fc5
  conf->grouped=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
root_prefix : TROOT_PREFIX TSTRING { do_rootprefix($2); };
Packit 762fc5
Packit 762fc5
grouped : TGROUPED TFALSE {
Packit 762fc5
  conf->grouped=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
summarize_changes : TSUMMARIZECHANGES TTRUE {
Packit 762fc5
  conf->summarize_changes=1;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
summarize_changes : TSUMMARIZECHANGES TFALSE {
Packit 762fc5
  conf->summarize_changes=0;
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
gzipdbout : TGZIPDBOUT TTRUE { 
Packit 762fc5
#ifdef WITH_ZLIB
Packit 762fc5
conf->gzip_dbout=1; 
Packit 762fc5
#else 
Packit 762fc5
 error(0,"Gzip-support not compiled in.\n");
Packit 762fc5
#endif
Packit 762fc5
} |
Packit 762fc5
            TGZIPDBOUT TFALSE { 
Packit 762fc5
#ifdef WITH_ZLIB
Packit 762fc5
conf->gzip_dbout=0; 
Packit 762fc5
#endif
Packit 762fc5
} ;
Packit 762fc5
Packit Service b99ba9
syslogformat : SYSLOG_FORMAT TTRUE {
Packit Service b99ba9
conf->syslog_format=1;
Packit Service b99ba9
} |
Packit Service b99ba9
               SYSLOG_FORMAT TFALSE {
Packit Service b99ba9
conf->syslog_format=0;
Packit Service b99ba9
} ;
Packit Service b99ba9
Packit Service b99ba9
Packit Service b99ba9
Packit 762fc5
recursion_stopper : TRECSTOP TSTRING {
Packit 762fc5
  /* FIXME implement me */  
Packit 762fc5
  
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
config_version : TCONFIG_VERSION TSTRING {
Packit 762fc5
  conf->config_version=strdup($2);
Packit 762fc5
} ;
Packit 762fc5
Packit 762fc5
%%
Packit 762fc5
Packit 762fc5
Packit 762fc5
void conferror(const char *msg){
Packit 762fc5
  error(0,"%li:%s:%s\n",conf_lineno-1,msg,conftext);
Packit 762fc5
Packit 762fc5
}
Packit 762fc5
Packit 762fc5
const char* aide_key_1=CONFHMACKEY_01;
Packit 762fc5
const char* db_key_1=DBHMACKEY_01;
Packit 762fc5