confutil.h
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:5k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* Copyright (c) 1995,1996,1997 NEC Corporation.  All rights reserved.       */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6. /*
  7.  * $Id: confutil.h,v 1.16.4.1 1998/07/19 22:33:22 wlu Exp $
  8.  */
  9. #ifndef CONFUTIL_H
  10. #define CONFUTIL_H
  11. #ifdef HAVE_SYS_SOCKIO_H
  12. #include <sys/sockio.h>
  13. #endif
  14. #ifdef __alpha__                /* avoid some warnings                       */
  15. #ifdef HAVE_SYS_MBUF_H
  16. #include <sys/mbuf.h>
  17. #endif
  18. #ifdef HAVE_NET_ROUTE_H
  19. #include <net/route.h>
  20. #endif
  21. #endif
  22. #include <net/if.h>
  23. #define ifssi(x) ((ssi *)&(x.ifr_addr))
  24. #define SKIPSPACE(x)     while(*(x) != 'n' &&  isspace((int)(*(x)))) (x)++
  25. #define SKIPNONSPACE(x)  while(*(x) != '' && !isspace((int)(*(x)))) (x)++
  26. #define SKIPNSPNCOMMA(x) while(*(x) != '' && !isspace((int)(*(x))) && *(x) != ',') (x)++
  27. #define SKIPNSPNCOLNCOM(x) while(*(x) != '' && !isspace((int)(*(x))) && *(x) != ',' && *(x) != ':') (x)++
  28.     
  29. #define S5_HOSTALIASES_NUM 16
  30. #define S5_HOSTIP_NUM    16
  31. #define NET_STAT 0
  32. #define NET_ADDR 1
  33. #define NET_MASK 2
  34. #define NET_TYPE 3
  35. #define IN_ADDR 0 /* is the type for address                    */
  36. #define IN_PORT 0 /* is the type d_port (is it a port range?)   */
  37. #define NAME    1 /* is the type for name                       */
  38. /* a struct telling us how the address is stored...(for matching). It can be  */
  39. /* stred as an ip address and mask (type = IN_ADDR) or as a string/substring  */
  40. /* (type = NAME).                                                             */
  41. struct host {
  42.     char type;
  43.     char resolve;
  44.     struct in_addr ip;
  45.     struct in_addr mask;
  46.     char name[S5_HOSTNAME_SIZE];
  47.     int length;
  48.     char aliases[S5_HOSTALIASES_NUM][S5_HOSTNAME_SIZE];
  49.     int aliascnt;
  50.     struct in_addr back[S5_HOSTIP_NUM];
  51.     int ipcnt;
  52. };
  53. /* a struct telling us how the service is stored...(for matching). It can be  */
  54. /* stred as an ip port range (type = IN_PORT) or as a string & fallback port  */
  55. /* (type = NAME).                                                             */
  56. struct port {
  57.     u_short lport;
  58.     u_short hport; 
  59. };
  60. /* a structure contains the interface's IP address and mask                   */
  61. struct intaddr {
  62.     struct in_addr ip;
  63.     struct in_addr net;
  64. };
  65. /* a structure contains interfaces' information                               */
  66. struct intfc {
  67.     char name[16];
  68.     int type;
  69.     int up;
  70.     int addrcnt;
  71.     struct intaddr *addrlist;
  72. };
  73. /* macros for using struct port...they hide the union-ness of it all....      */
  74. #define checkport(x, y) (((x) >= (y).lport) && ((x) <= (y).hport))
  75. /* macros for using struct intaddr...      */
  76. #define checkifc(x, y) (((x).net.s_addr != 0) && (((x).ip.s_addr & (x).net.s_addr) == ((y).s_addr & (x).net.s_addr)))
  77. /* A generic structure for linked lists...Pretty straight forward...only thng */
  78. /* slightly unusual is the ptrmalloced field which tells us to free it or not */
  79. struct lls {
  80.   union data {
  81.     void *ptr;
  82.     int n;
  83.   } data;
  84.   int ptrmalloced;
  85.   struct lls *next;
  86. };
  87. typedef struct lls list;
  88. #define dataptr data.ptr
  89. #define dataint data.n
  90. struct confid { 
  91.     char *string, *abbrev;  /* the string/abbreviation for these lines   */
  92.     void (*handler)(void **, int, int, char *); /* the function for ""        */
  93.     void **array;  /* ptr to the array the data is stored in.   */
  94.     int *number;  /* ptr to the total number of things in ""   */
  95.     int *cnum;  /* ptr to the current index in array...      */
  96.     int size;  /* sizeof an array element (if owner)        */
  97. };
  98. typedef struct confid confid;
  99. /* Some convenient routines for linked list manipulation...                   */
  100. extern void lsDeleteLinkedList P((list **));
  101. extern int  lsLinkedListInsertUnaligned P((list **l, size_t s));
  102. extern int  lsLinkedListInsertAligned   P((list **l, size_t s));
  103. extern int  lsGetHostAddress        P((char **, S5NetAddr *));
  104. extern int  lsGetHostPort           P((char **, S5NetAddr *));
  105. extern int  lsGetHostAddressAndPort P((char **, S5NetAddr *));
  106. extern int  lsGetHostAndMask   P((char **, struct host *));
  107. extern int  lsGetPortOrService P((char **, struct port *));
  108. extern int  lsGetPermCommand   P((char **, list **));
  109. extern int  lsGetAuthMethods   P((char **, list **));
  110. extern int  lsGetPermUsers     P((char **, list **));
  111. extern int  lsCheckHost  P((struct host *,  const S5NetAddr *, const char *));
  112. extern int  lsCheckPort  P((struct port *, const S5NetAddr *, const char *, char *));
  113. extern int  lsCheckByte  P((list *, u_char, const char *));
  114. extern int  lsCheckUser  P((list *, const char *));
  115. extern void lsSetupIntfcs P((struct intfc **, int *));
  116. extern int  lsLookupIntfc P((S5IOHandle, int, struct ifreq *ifr));
  117. extern void lsReadConfig P((const char *, struct confid *, int));
  118. extern int lsLineNo;
  119. #endif