home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / security / ipacl / ipacl.l < prev    next >
Encoding:
Text File  |  1992-06-24  |  1.3 KB  |  87 lines

  1.  
  2. /* Copyright (C) Gerhard Fuernkranz 1992 */
  3.  
  4. N3        ([0-9]+)
  5. H2        (0[xX][0-9a-fA-F]+)
  6. NUM3        ({N3}|{H2})
  7. END3        ([.]{NUM3})
  8. DOTTED        ({NUM3}{END3}+)
  9. NUMBER        ([0-9]+|0[xX][0-9a-fA-F]+)
  10. NAME        ([A-Za-z_][0-9A-Za-z_]*)
  11. WS        ([ \t]*)
  12.  
  13. %{
  14. static char lex_string[256];
  15. %}
  16.  
  17. %%
  18.  
  19. [#].*\n        ;
  20. "//".*\n    ;
  21. {WS}        ;
  22.  
  23. ["][^"\n]*["]    {
  24.             int len = strlen(yytext);
  25.             strncpy(lex_string,yytext+1,len-2);
  26.             lex_string[len-2] = 0;
  27.             yylval.str = lex_string;
  28.             return STRING;
  29.         }
  30.  
  31. net        { return NET; }
  32. host        { return HOST; }
  33. port        { return PORT; }
  34.  
  35. mask        { return MASK; }
  36. netmask        { return MASK; }
  37.  
  38. src        { return SRC; }
  39. dst        { return DST; }
  40.  
  41. in        { return IN; }
  42. accept        { return ACCEPT; }
  43. deny        { return DENY; }
  44. goto        { return GOTO; }
  45.  
  46. tcp        { yylval.intval = 6; return PROTOCOL; }
  47. udp        { yylval.intval = 17; return PROTOCOL; }
  48. icmp        { yylval.intval = 1; return PROTOCOL; }
  49.  
  50. {DOTTED}    {
  51.             yylval.str = strcpy(lex_string,yytext);
  52.             return DOTTED;
  53.         }
  54.  
  55. {NUMBER}    {
  56.             yylval.intval = strtoul(yytext,NULL,0);
  57.             return NUMBER;
  58.         }
  59.  
  60. {NAME}        {
  61.             yylval.sym = lookup(yytext);
  62.             switch (yylval.sym->token) {
  63.             case PORT_NAME:
  64.             case PORT_SET_NAME:
  65.             case ADDR_NAME:
  66.             case ADDR_SET_NAME:
  67.                 return yylval.sym->token;
  68.             }
  69.             return NAME;
  70.         }
  71.  
  72. {NAME}/{WS}:    {
  73.             yylval.sym = lookup(yytext);
  74.             return LABEL;
  75.         }
  76.  
  77. \n        ;
  78. .        { return yytext[0]; }
  79.  
  80. %%
  81.  
  82. yywrap()
  83. {
  84.     return 1;
  85. }
  86.  
  87.