ucspi-tcp6 1.13.02
ucspi-tcp6
Loading...
Searching...
No Matches
tcprulescheck.c
Go to the documentation of this file.
1#include "byte.h"
2#include "buffer.h"
3#include "logmsg.h"
4#include "env.h"
5#include "rules.h"
6#include "stralloc.h"
7#include "ip.h"
8#include "exit.h"
9#include "open.h"
10#include "ip_bit.h"
11#include "str.h"
12
13#define WHO "tcprulescheck"
14
15void found(char *data, unsigned int datalen)
16{
17 unsigned int next0;
18 stralloc ipaddress = {0};
19
20 if (rules_name.s[0] == '^') /* IPv6 CIDR */
21 if (!bitstring_ip6(&ipaddress,&rules_name))
22 stralloc_copys(&rules_name,ipaddress.s);
23
24 if (rules_name.s[0] == '_') /* IPv4 CIDR */
25 if (!bitstring_ip4(&ipaddress,&rules_name))
26 stralloc_copys(&rules_name,ipaddress.s);
27
28 if (rules_name.len) {
29 buffer_puts(buffer_1,"rule ");
30 buffer_put(buffer_1,rules_name.s,rules_name.len);
31 } else
32 buffer_puts(buffer_1,"default");
33 buffer_puts(buffer_1,":\n");
34 while ((next0 = byte_chr(data,datalen,0)) < datalen) {
35 switch(data[0]) {
36 case 'D':
37 buffer_puts(buffer_1,"deny connection\n");
38 buffer_flush(buffer_1);
39 _exit(0);
40 case '+':
41 buffer_puts(buffer_1,"set environment variable ");
42 buffer_puts(buffer_1,data + 1);
43 buffer_puts(buffer_1,"\n");
44 break;
45 }
46 ++next0;
47 data += next0; datalen -= next0;
48 }
49 buffer_puts(buffer_1,"allow connection\n");
50 buffer_flush(buffer_1);
51 _exit(0);
52}
53
54int main(int argc,char * const *argv)
55{
56 char *fnrules;
57 int fd;
58 char *ip = 0;
59 char *info = 0;
60 char *host = 0;
61
62 fnrules = argv[1];
63 if (!fnrules) {
64 logmsg(WHO,100,USAGE,"rules.cdb");
65 }
66
67 ip = env_get("TCPREMOTEIP");
68 if (!ip) ip = "0";
69 info = env_get("TCPREMOTEINFO");
70 host = env_get("TCPREMOTEHOST");
71
72 logmsg(WHO,0,INFO,B("TCPREMOTEIP: ",ip," TCPREMOTEHOST: ",host," TCPREMOTEINFO: ",info));
73
74 fd = open_read(fnrules);
75 if ((fd == -1) || (rules(found,fd,ip,host,info) == -1))
76 logmsg(WHO,111,FATAL,B("unable to read: ",fnrules));
77
78 buffer_putsflush(buffer_1,"default:\nallow connection\n");
79 _exit(0);
80}
stralloc data
Definition: tcprules.c:28
int rules(void(*callback)(char *, unsigned int), int fd, char *ip, char *host, char *info)
Definition: rules.c:135
stralloc rules_name
Definition: rules.c:13
char * fnrules
Definition: tcpserver.c:143
int main()
Definition: addcr.c:4
int bitstring_ip6(stralloc *ip6addr, stralloc *ip6string)
Definition: ip6_bit.c:102
int bitstring_ip4(stralloc *ip4addr, stralloc *ip4string)
Definition: ip4_bit.c:69
void found(char *data, unsigned int datalen)
Definition: tcprulescheck.c:15
#define WHO
Definition: tcprulescheck.c:13