ze-filter  (ze-filter-0.8.0-develop-180218)
ze-logserver.c
Go to the documentation of this file.
1 /*
2  *
3  * ze-filter - Mail Server Filter for sendmail
4  *
5  * Copyright (c) 2001-2018 - Jose-Marcio Martins da Cruz
6  *
7  * Auteur : Jose Marcio Martins da Cruz
8  * jose.marcio.mc@gmail.org
9  *
10  * Historique :
11  * Creation : janvier 2006
12  *
13  * This program is free software, but with restricted license :
14  *
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19  *
20  * More details about ze-filter license can be found at ze-filter
21  * web site : http://foss.jose-marcio.org
22  */
23 
24 #include <ze-sys.h>
25 #include <ze-libjc.h>
26 
27 /* ****************************************************************************
28  * *
29  * *
30  **************************************************************************** */
31 
32 #define OPTSTR "hp:i:"
33 
34 static void usage(char *name);
35 
36 typedef struct
37 {
38  union
39  {
40  struct sockaddr_in6 sock6;
41  struct sockaddr_in sock4;
42  } sock;
43 } sock_in_T;
44 
45 int
46 main(int argc, char **argv)
47 {
48  int sockfd = -1;
49  sock_in_T cliaddr;
50 
51  char *ip = "0.0.0.0";
52  char *port = "10001";
53 
54  server_T server;
55 
56  char spec[1024];
57 
58  memset(&server, 0, sizeof (server));
59  {
60  int c;
61 
62  while ((c = getopt(argc, argv, OPTSTR)) >= 0)
63  {
64  switch (c)
65  {
66  case 'h':
67  usage(argv[0]);
68  exit(0);
69  break;
70  case 'i':
71  ip = optarg;
72  break;
73  case 'p':
74  port = optarg;
75  break;
76  default:
77  printf("Error ... \n");
78  exit(0);
79  }
80  }
81  }
82 
83  snprintf(spec, sizeof (spec), "udp:%s@%s", port, ip);
84  sockfd = server_listen(spec, &server);
85  if (sockfd < 0)
86  {
87  exit(EX_SOFTWARE);
88  }
89 
90  for (;;)
91  {
92  char mesg[1024];
93  socklen_t sz;
94  int n;
95 
96  memset(mesg, 0, sizeof (mesg));
97  memset(&cliaddr, 0, sizeof (cliaddr));
98  sz = sizeof (cliaddr);
99  n =
100  recvfrom(sockfd, mesg, sizeof (mesg), 0, (struct sockaddr *) &cliaddr, &sz);
101  if (n < 0)
102  break;
103 
104  printf("%s", mesg);
105  }
106 
107  exit (0);
108 }
109 
110 /* ****************************************************************************
111  * *
112  * *
113  **************************************************************************** */
114 static void
115 usage(name)
116  char *name;
117 {
118  char *p = basename(name);
119 
120  printf("Usage : %s options\n"
121  " -h : This screen\n"
122  " -i : IP address to bind (default is all addresses)\n"
123  " -p : port to listen\n"
124  "\n"
125  " " COPYRIGHT "\n"
126  " Compiled on %s %s\n\n", p, __DATE__, __TIME__);
127 }
int socklen_t
Definition: ze-sys.h:534
#define COPYRIGHT
Definition: version.h:31
int main(int argc, char **argv)
Definition: ze-logserver.c:46
void usage(char *arg)
#define OPTSTR
Definition: ze-logserver.c:32
int server_listen(char *spec, server_T *server)
Definition: ze-server.c:334