home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.lbl.gov / 2014.05.ftp.ee.lbl.gov.tar / ftp.ee.lbl.gov / acld-1.11.tar.gz / acld-1.11.tar / acld-1.11 / acl.h < prev    next >
C/C++ Source or Header  |  2011-09-27  |  6KB  |  196 lines

  1. /* @(#) $Id: acl.h 776 2011-09-27 06:26:02Z leres $ (LBL) */
  2. #ifndef acld_acl_h
  3. #define acld_acl_h
  4.  
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7.  
  8. #include "io.h"
  9.  
  10. /* Address (network order) */
  11. struct addr {
  12.     u_int family;
  13.     union {
  14.         struct in_addr _addr4;
  15.         struct in6_addr _addr6;
  16.     } addr;
  17.     union {
  18.         struct in_addr _mask4;
  19.         struct in6_addr _mask6;
  20.     } mask;
  21. };
  22. #define addr4 addr._addr4.s_addr
  23. #define mask4 mask._mask4.s_addr
  24. #define addr6 addr._addr6.s6_addr
  25. #define mask6 mask._mask6.s6_addr
  26.  
  27. /*
  28.  * The normal case when blocking hosts or nets is "source"
  29.  * The normal case when blocking ports is "dest"
  30.  * If we're doing something else, we specify
  31.  */
  32. enum acltype {
  33.     ATYPE_UNKNOWN = 0,
  34.     ATYPE_PERMITANY,        /* allow everything */
  35.     ATYPE_BLOCKANY,            /* block everything */
  36.  
  37.     ATYPE_PERMITHOST,        /* permit a src-host */
  38.     ATYPE_BLOCKHOST,        /* block a src-host */
  39.  
  40.     ATYPE_PERMITHOSTHOST,        /* permit a host to host */
  41.     ATYPE_BLOCKHOSTHOST,        /* block a host to host */
  42.  
  43.     ATYPE_PERMITNET,        /* permit a src-network */
  44.     ATYPE_BLOCKNET,            /* block a src-network */
  45.  
  46.     ATYPE_PERMITNETHOST,        /* permit a src-network-host */
  47.     ATYPE_BLOCKNETHOST,        /* block a src-network-host */
  48.  
  49.     ATYPE_PERMITUDPPORT,        /* permit a dst-udp port */
  50.     ATYPE_BLOCKUDPPORT,        /* block a dst-udp port */
  51.     ATYPE_PERMITTCPPORT,        /* permit a dst-tcp port */
  52.     ATYPE_BLOCKTCPPORT,        /* block a dst-tcp port */
  53.  
  54.     ATYPE_PERMITUDPDSTHOST,        /* permit a dst-udp-host */
  55.     ATYPE_BLOCKUDPDSTHOST,        /* block a dst-udp-host */
  56.     ATYPE_PERMITTCPDSTHOST,        /* permit a dst-tcp-host */
  57.     ATYPE_BLOCKTCPDSTHOST,        /* block a dst-tcp-host */
  58.  
  59.     ATYPE_PERMITDSTHOST,        /* permit a dst-host */
  60.     ATYPE_BLOCKDSTHOST,        /* block a dst-host */
  61.     ATYPE_PERMITICMPDSTHOST,    /* permit a dst-icmp-host */
  62.     ATYPE_BLOCKICMPDSTHOST,        /* block a dst-icmp-host */
  63.  
  64.     ATYPE_PERMITDSTNET,        /* permit a dst-net */
  65.     ATYPE_BLOCKDSTNET,        /* block a dst-net */
  66.     ATYPE_PERMITICMPDSTNET,        /* permit a dst-icmp-net */
  67.     ATYPE_BLOCKICMPDSTNET,        /* block a dst-icmp-net */
  68.  
  69.     ATYPE_PERMITUDPHOSTPORT,    /* permit a src-host/dst-udp port */
  70.     ATYPE_BLOCKUDPHOSTPORT,        /* block a src-host/dst-udp port */
  71.     ATYPE_PERMITTCPHOSTPORT,    /* permit a src-host/dst-tcp port */
  72.     ATYPE_BLOCKTCPHOSTPORT,        /* block a src-host/dst-tcp port */
  73.  
  74.     ATYPE_PERMITUDPDSTHOSTPORT,    /* permit a dst-host/dst-udp port */
  75.     ATYPE_BLOCKUDPDSTHOSTPORT,    /* block a dst-host/dst-udp port */
  76.     ATYPE_PERMITTCPDSTHOSTPORT,    /* permit a dst-host/dst-tcp port */
  77.     ATYPE_BLOCKTCPDSTHOSTPORT,    /* block a dst-host/dst-tcp port */
  78.  
  79.     ATYPE_PERMITUDPNETPORT,        /* permit a src-network/dst-udp port */
  80.     ATYPE_BLOCKUDPNETPORT,        /* block a src-network/dst-udp port */
  81.     ATYPE_PERMITTCPNETPORT,        /* permit a src-network/dst-tcp port */
  82.     ATYPE_BLOCKTCPNETPORT,        /* block a src-network/dst-tcp port */
  83.  
  84.     ATYPE_PERMITUDPHOSTSRCPORT,    /* permit a src-host/src-udp port */
  85.     ATYPE_BLOCKUDPHOSTSRCPORT,    /* block a src-host/src-udp port */
  86.     ATYPE_PERMITTCPHOSTSRCPORT,    /* permit a src-host/src-tcp port */
  87.     ATYPE_BLOCKTCPHOSTSRCPORT,    /* block a src-host/src-tcp port */
  88.  
  89.     ATYPE_PERMITUDPHOSTPAIRDSTPORT,    /* permit a host pair/dst-udp port */
  90.     ATYPE_BLOCKUDPHOSTPAIRDSTPORT,    /* block a host pair/dst-udp port */
  91.     ATYPE_PERMITTCPHOSTPAIRDSTPORT,    /* permit a host pair/dst-tcp port */
  92.     ATYPE_BLOCKTCPHOSTPAIRDSTPORT,    /* block a host pair/dst-tcp port */
  93.  
  94.     ATYPE_PERMITUDPDSTNET,        /* permit a udp-dst-net */
  95.     ATYPE_BLOCKUDPDSTNET,        /* block a udp-dst-net */
  96.     ATYPE_PERMITTCPDSTNET,        /* permit a tcp-dst-net */
  97.     ATYPE_BLOCKTCPDSTNET,        /* block a tcp-dst-net */
  98.  
  99.     ATYPE_PERMITUDPDSTNETPORT,    /* permit a udp-dst-net port */
  100.     ATYPE_BLOCKUDPDSTNETPORT,    /* block a udp-dst-net port */
  101.     ATYPE_PERMITTCPDSTNETPORT,    /* permit a tcp-dst-net port */
  102.     ATYPE_BLOCKTCPDSTNETPORT,    /* block a tcp-dst-net port */
  103.  
  104.     ATYPE_PERMITUDPNETHOSTPORT,    /* permit a udp-net-host-port */
  105.     ATYPE_BLOCKUDPNETHOSTPORT,    /* block a udp-net-host-port */
  106.     ATYPE_PERMITTCPNETHOSTPORT,    /* permit a tcp-net-host-port */
  107.     ATYPE_BLOCKTCPNETHOSTPORT,    /* block a tcp-net-host-port */
  108. };
  109.  
  110. /* ACL */
  111. struct acl {
  112.     enum acltype type;
  113.     int seq;            /* sequence number */
  114.     unsigned long long count;
  115.     struct addr addr1;
  116.     struct addr addr2;
  117.     char *port1;
  118.     char *port2;
  119.     char *raw;            /* text as returned from the router */
  120. };
  121.  
  122. #define ISHOST(a) \
  123.     (((a)->family == AF_INET && (a)->mask4 == 0xffffffff) || \
  124.     ((a)->family == AF_INET6 && maskwidth(a) == 128))
  125.  
  126. #define ADDREQ(a1, a2) (memcmp(a1, a2, sizeof(*(a1))) == 0)
  127. #define ADDRZERO(a) memset(a, 0, sizeof(*a));
  128.  
  129. #include "stats.h"
  130.  
  131. /* ACL list */
  132. struct acllist {
  133.     char *name;
  134.     int sentlistacl;
  135.     struct acl *acl;
  136.     size_t acllen;
  137.     size_t aclsize;
  138.     struct acllimit *limitp;
  139.     int lastseq;
  140.     int lastportseq;
  141.     int lastpermithostportseq;
  142.     int compactseq;
  143.     int compactportseq;
  144.     int compactpermithostportseq;
  145.     struct client *compactclient;
  146.     struct req *compactreq;
  147.     struct addr *addr;            /* used to choose acl list */
  148.     size_t addrlen;
  149.     size_t addrsize;
  150.     struct intlist *intlist;
  151.     struct stats stats;
  152. };
  153.  
  154. struct acllimit {
  155.     int a_len;
  156.     int a_maxseq;
  157.     int a_nacls;
  158.     char **a_acls;
  159. };
  160.  
  161. struct attrlist {
  162.     char *a_acl;
  163.     int a_attr;
  164.     int a_sentattr;
  165. };
  166. #define ATTR_IPV6    0x1
  167.  
  168. struct intlist {
  169.     char *i_acl;
  170.     char *i_name;
  171. };
  172.  
  173. #include "util.h"
  174. struct cf;
  175. struct state;
  176.  
  177. extern struct s2v str2acl[];
  178.  
  179. void acladdacl(struct acllist *, struct acl *);
  180. void acladdacllist(struct cf *, const char *);
  181. int acldeleteacl(struct acllist *, struct acl *);
  182. void aclcopy(struct acl *, const struct acl *);
  183. struct acl *aclfindacl(struct acllist *, struct acl *, int);
  184. struct acllist *aclfindlistbyaddr(struct cf *, struct addr *);
  185. struct acllist *aclfindlistbyname(struct cf *, const char *);
  186. struct acllist *aclfindlistdefault(struct cf *, struct addr *);
  187. const char *aclformat(struct acl *);
  188. void aclfree(struct acllist *);
  189. void acllistsfree(struct state *);
  190. int aclquery(struct acllist *, struct addr *, struct iobuf *);
  191. void aclsortacls(struct cf *);
  192. int aclstraddacl(struct cf *, struct acllist *, const char *);
  193. void attrclear(struct state *);
  194. const char *attrfmt(struct attrlist *);
  195. #endif
  196.