squirrelmail-webmail  1.4.22
About: SquirrelMail is a standards-based webmail package with strong MIME support, address books, and folder manipulation (written in PHP4).
  Fossies Dox: squirrelmail-webmail-1.4.22.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

bulkquery.c
Go to the documentation of this file.
1 
2 #include <arpa/nameser.h>
3 #include <lwres/lwres.h>
4 #include <strings.h>
5 #include <stdio.h>
6 #include <pthread.h>
7 
8 
9 #define BUFLEN 1024
10 #define MAXSTR 80
11 #define MAXTHREADS 50
12 #define MAXRBLS 40
13 #define DEFTTL 600
14 
15 extern int errno;
16 extern int h_errno;
17 
18 
19 struct ipnode;
20 typedef struct ipnode *iplist;
21 struct ipnode {
22  char *IP;
24 };
25 
27 
28 pthread_mutex_t *mutexp;
29 pthread_mutex_t *mutexoutput;
30 
33 
34 void do_queries () {
35  iplist tIP;
36  lwres_context_t *ctx = NULL;
37  lwres_grbnresponse_t *response = NULL;
38  int n, i;
39 
40 
41  pthread_mutex_lock(mutexp);
42  tIP = IPs;
43  if (IPs != NULL) {
44  IPs = tIP->next;
45  }
46  pthread_mutex_unlock(mutexp);
47 
48  while (tIP != NULL) {
49 //fprintf (stderr, "making query %s\n", tIP->IP); fflush(stderr);
50  if (lwres_context_create(&ctx, NULL, NULL, NULL, 0) != 0) {
51  fprintf (stderr, "Couldn't create context\n");
52  return;
53  } else {
54  lwres_conf_parse(ctx, lwres_resolv_conf);
55  //pthread_mutex_lock(mutexoutput);
56  n = lwres_getrdatabyname(ctx, tIP->IP, ns_c_in, ns_t_a, 0, &response);
57  //pthread_mutex_unlock(mutexoutput);
58  if (n == LWRES_R_SUCCESS) {
59  printf ("%s,%d.%d.%d.%d,%d\n", tIP->IP,
60  response->rdatas[0][0], response->rdatas[0][1],
61  response->rdatas[0][2], response->rdatas[0][3],
62  response->ttl);
63  //fprintf (stderr, "freeing response\n"); fflush(stderr);
64  lwres_grbnresponse_free(ctx, &response);
65  } else {
66  //fprintf (stderr, "Nothing found\n");
67  printf ("%s, %s, %d\n", tIP->IP, tIP->IP, defttl);
68  }
69  //fprintf (stderr, "freeing context\n"); fflush(stderr);
70  lwres_context_destroy(&ctx);
71  //fprintf (stderr, "done freeing\n"); fflush(stderr);
72  }
73 
74  pthread_mutex_lock(mutexp);
75  tIP = IPs;
76  if (IPs != NULL) {
77  IPs = tIP->next;
78  }
79  pthread_mutex_unlock(mutexp);
80  }
81 }
82 
83 void GetRBLs() {
84  char instr[MAXSTR];
85  numrbls = 0;
86  while ((fgets(instr, MAXSTR, stdin) != NULL) && (numrbls < MAXRBLS)) {
87  instr[strlen(instr)-1] = 0; // strip off newline
88  if (strncmp(instr, "----------", 10) == 0) {
89  return;
90  }
91  dnsrbls[numrbls] = (char *) malloc(strlen(instr)+1);
92  if (dnsrbls[numrbls] == NULL) {
93  fprintf (stderr, "Couldn't allocate memory for %d DNS RBLs\n", numrbls);
94  exit (10);
95  } else {
96  strcpy (dnsrbls[numrbls], instr);
97  numrbls++;
98  }
99  }
100 }
101 
102 
103 main () {
104  pthread_t threads[MAXTHREADS];
105  char instr[MAXSTR];
106  iplist tIP;
107  int loop1;
108 
109  if (fgets(instr, MAXSTR, stdin) != NULL) {
110  defttl = atoi(instr);
111  }
112  if (defttl < 0)
113  defttl = DEFTTL;
114 
115  GetRBLs();
116 
117 // for (loop1=0; loop1<numrbls; loop1++)
118 // fprintf (stderr, "%s\n", dnsrbls[loop1]);
119 // fprintf (stderr, "----------\n");
120 
121  numqueries = 0;
122  IPs = NULL;
123  while (fgets(instr, MAXSTR, stdin) != NULL) {
124  instr[strlen(instr)-1] = 0;
125  for (loop1 = 0; loop1 < numrbls; loop1++) {
126  tIP = (iplist)malloc(sizeof(struct ipnode));
127  tIP->IP = (char *)malloc(strlen(instr)+strlen(dnsrbls[loop1])+2);
128  strcpy (tIP->IP, instr);
129  strcat (tIP->IP, dnsrbls[loop1]);
130  tIP->next = IPs;
131  IPs = tIP;
132  numqueries++;
133  }
134  }
135 
136 // fprintf (stderr, "%d queries to make\n", numqueries);
137 // tIP = IPs;
138 // while (tIP != NULL) {
139 // fprintf (stderr, "%s\n", tIP->IP);
140 // tIP = tIP->next;
141 // }
142 // fprintf (stderr, "done\n");
143 // exit (0);
144 
145  mutexp=(pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
146  pthread_mutex_init(mutexp, NULL);
147  mutexoutput=(pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
148  pthread_mutex_init(mutexoutput, NULL);
149 
150  numthreads = 0; // number of threads created successfully
151  for (loop1 = 0; ((loop1<MAXTHREADS) && (loop1<numqueries)); loop1++) {
152  if (pthread_create(&threads[loop1], NULL,
153  (void *) do_queries, NULL) != 0) {
154  fprintf (stderr, "Couldn't make more than %d threads\n", numthreads);
155  break;
156  } else {
157  numthreads++;
158  }
159  }
160 
161  for (loop1 = 0; loop1 < numthreads ; loop1++) {
162  pthread_join(threads[loop1], NULL);
163  }
164 
165 //do_queries();
166 
167  exit (0);
168 }
169 
main
main()
Definition: bulkquery.c:103
mutexoutput
pthread_mutex_t * mutexoutput
Definition: bulkquery.c:29
DEFTTL
#define DEFTTL
Definition: bulkquery.c:13
IPs
iplist IPs
Definition: bulkquery.c:26
ipnode::IP
char * IP
Definition: bulkquery.c:22
mutexp
pthread_mutex_t * mutexp
Definition: bulkquery.c:28
dnsrbls
char * dnsrbls[40]
Definition: bulkquery.c:31
ipnode::next
iplist next
Definition: bulkquery.c:23
defttl
int defttl
Definition: bulkquery.c:32
errno
int errno
MAXTHREADS
#define MAXTHREADS
Definition: bulkquery.c:11
do_queries
void do_queries()
Definition: bulkquery.c:34
GetRBLs
void GetRBLs()
Definition: bulkquery.c:83
h_errno
int h_errno
numrbls
int numrbls
Definition: bulkquery.c:32
exit
exit
Definition: help.php:128
iplist
struct ipnode * iplist
Definition: bulkquery.c:20
numqueries
int numqueries
Definition: bulkquery.c:32
response
print< tr >< td bgcolor=\"". $color[4]."\"><b> Server Capability response
Definition: options.php:75
numthreads
int numthreads
Definition: bulkquery.c:32
MAXRBLS
#define MAXRBLS
Definition: bulkquery.c:12
MAXSTR
#define MAXSTR
Definition: bulkquery.c:10
NULL
if(!defined('PAGE_NAME')) define('PAGE_NAME' NULL
Definition: validate.php:16
ipnode
Definition: bulkquery.c:21
n
print< br >< center >< b > IMAP server information</b ></center >< br > n
Definition: options.php:72