summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/check_ping.c204
1 files changed, 96 insertions, 108 deletions
diff --git a/plugins/check_ping.c b/plugins/check_ping.c
index 835d9c1..56c9557 100644
--- a/plugins/check_ping.c
+++ b/plugins/check_ping.c
@@ -85,6 +85,7 @@ main (int argc, char **argv)
85 85
86 if (process_arguments (argc, argv) == ERROR) 86 if (process_arguments (argc, argv) == ERROR)
87 usage ("Could not parse arguments"); 87 usage ("Could not parse arguments");
88 exit;
88 89
89 /* does the host address of number of packets argument come first? */ 90 /* does the host address of number of packets argument come first? */
90#ifdef PING_PACKETS_FIRST 91#ifdef PING_PACKETS_FIRST
@@ -150,7 +151,20 @@ main (int argc, char **argv)
150int 151int
151process_arguments (int argc, char **argv) 152process_arguments (int argc, char **argv)
152{ 153{
153 int c; 154 int c, i = 1;
155
156#ifdef HAVE_GETOPT_H
157 int option_index = 0;
158 static struct option long_options[] = {
159 STD_LONG_OPTS,
160 {"packets", required_argument, 0, 'p'},
161 {"nohtml", no_argument, 0, 'n'},
162 {"link", no_argument, 0, 'L'},
163 {0, 0, 0, 0}
164 };
165#endif
166
167#define OPTCHARS "Vvht:c:w:H:p:nL"
154 168
155 if (argc < 2) 169 if (argc < 2)
156 return ERROR; 170 return ERROR;
@@ -162,138 +176,45 @@ process_arguments (int argc, char **argv)
162 strcpy (argv[c], "-n"); 176 strcpy (argv[c], "-n");
163 } 177 }
164 178
165 c = 0;
166 while ((c += call_getopt (argc - c, &argv[c])) < argc) {
167
168 if (is_option (argv[c]))
169 continue;
170
171 if (server_address == NULL) {
172 if (is_host (argv[c]) == FALSE) {
173 printf ("Invalid host name/address: %s\n\n", argv[c]);
174 return ERROR;
175 }
176 server_address = argv[c];
177 }
178 else if (wpl == UNKNOWN_PACKET_LOSS) {
179 if (is_intpercent (argv[c]) == FALSE) {
180 printf ("<wpl> (%s) must be an integer percentage\n", argv[c]);
181 return ERROR;
182 }
183 wpl = atoi (argv[c]);
184 }
185 else if (cpl == UNKNOWN_PACKET_LOSS) {
186 if (is_intpercent (argv[c]) == FALSE) {
187 printf ("<cpl> (%s) must be an integer percentage\n", argv[c]);
188 return ERROR;
189 }
190 cpl = atoi (argv[c]);
191 }
192 else if (wrta == UNKNOWN_TRIP_TIME) {
193 if (is_negative (argv[c])) {
194 printf ("<wrta> (%s) must be a non-negative number\n", argv[c]);
195 return ERROR;
196 }
197 wrta = atof (argv[c]);
198 }
199 else if (crta == UNKNOWN_TRIP_TIME) {
200 if (is_negative (argv[c])) {
201 printf ("<crta> (%s) must be a non-negative number\n", argv[c]);
202 return ERROR;
203 }
204 crta = atof (argv[c]);
205 }
206 else if (max_packets == -1) {
207 if (is_intnonneg (argv[c])) {
208 max_packets = atoi (argv[c]);
209 }
210 else {
211 printf ("<max_packets> (%s) must be a non-negative number\n",
212 argv[c]);
213 return ERROR;
214 }
215 }
216
217 }
218
219 return validate_arguments ();
220}
221
222int
223call_getopt (int argc, char **argv)
224{
225 int c, i = 0;
226
227#ifdef HAVE_GETOPT_H
228 int option_index = 0;
229 static struct option long_options[] = {
230 {"help", no_argument, 0, 'h'},
231 {"version", no_argument, 0, 'V'},
232 {"verbose", no_argument, 0, 'v'},
233 {"nohtml", no_argument, 0, 'n'},
234 {"link", no_argument, 0, 'L'},
235 {"timeout", required_argument, 0, 't'},
236 {"critical", required_argument, 0, 'c'},
237 {"warning", required_argument, 0, 'w'},
238 {"hostname", required_argument, 0, 'H'},
239 {"packets", required_argument, 0, 'p'},
240 {0, 0, 0, 0}
241 };
242#endif
243
244 while (1) { 179 while (1) {
245#ifdef HAVE_GETOPT_H 180#ifdef HAVE_GETOPT_H
246 c = 181 c = getopt_long (argc, argv, OPTCHARS, long_options, &option_index);
247 getopt_long (argc, argv, "+hVvt:c:w:H:p:nL", long_options,
248 &option_index);
249#else 182#else
250 c = getopt (argc, argv, "+hVvt:c:w:H:p:nL"); 183 c = getopt (argc, argv, OPTCHARS);
251#endif 184#endif
252 185 if (c == -1 || c == EOF)
253 i++;
254
255 if (c == -1 || c == EOF || c == 1)
256 break; 186 break;
257 187
258 switch (c) { 188 switch (c) {
259 case 't': 189 case '?': /* usage */
260 case 'c':
261 case 'w':
262 case 'H':
263 case 'p':
264 i++;
265 }
266
267 switch (c) {
268 case '?': /* print short usage statement if args not parsable */
269 usage2 ("Unknown argument", optarg); 190 usage2 ("Unknown argument", optarg);
270 case 'h': /* help */ 191 case 'h': /* help */
271 print_help (); 192 print_help ();
272 exit (STATE_OK); 193 exit (STATE_OK);
273 case 'V': /* version */ 194 case 'V': /* version */
274 print_revision (PROGNAME, REVISION); 195 print_revision (PROGNAME, REVISION);
275 exit (STATE_OK); 196 exit (STATE_OK);
276 case 't': /* timeout period */ 197 case 't': /* timeout period */
277 timeout_interval = atoi (optarg); 198 timeout_interval = atoi (optarg);
278 break; 199 break;
279 case 'v': /* verbose mode */ 200 case 'v': /* verbose mode */
280 verbose = TRUE; 201 verbose = TRUE;
281 break; 202 break;
282 case 'H': /* hostname */ 203 case 'H': /* hostname */
283 if (is_host (optarg) == FALSE) 204 if (is_host (optarg) == FALSE)
284 usage2 ("Invalid host name/address", optarg); 205 usage2 ("Invalid host name/address", optarg);
285 server_address = optarg; 206 server_address = optarg;
286 break; 207 break;
287 case 'p': /* number of packets to send */ 208 case 'p': /* number of packets to send */
288 if (is_intnonneg (optarg)) 209 if (is_intnonneg (optarg))
289 max_packets = atoi (optarg); 210 max_packets = atoi (optarg);
290 else 211 else
291 usage2 ("<max_packets> (%s) must be a non-negative number\n", optarg); 212 usage2 ("<max_packets> (%s) must be a non-negative number\n", optarg);
292 break; 213 break;
293 case 'n': /* no HTML */ 214 case 'n': /* no HTML */
294 display_html = FALSE; 215 display_html = FALSE;
295 break; 216 break;
296 case 'L': /* show HTML */ 217 case 'L': /* show HTML */
297 display_html = TRUE; 218 display_html = TRUE;
298 break; 219 break;
299 case 'c': 220 case 'c':
@@ -305,7 +226,75 @@ call_getopt (int argc, char **argv)
305 } 226 }
306 } 227 }
307 228
308 return i; 229 c = optind;
230 if (c == argc)
231 return validate_arguments ();
232
233 if (server_address == NULL) {
234 if (is_host (argv[c]) == FALSE) {
235 printf ("Invalid host name/address: %s\n\n", argv[c]);
236 return ERROR;
237 } else {
238 server_address = argv[c++];
239 if (c == argc)
240 return validate_arguments ();
241 }
242 }
243
244 if (wpl == UNKNOWN_PACKET_LOSS) {
245 if (is_intpercent (argv[c]) == FALSE) {
246 printf ("<wpl> (%s) must be an integer percentage\n", argv[c]);
247 return ERROR;
248 } else {
249 wpl = atoi (argv[c++]);
250 if (c == argc)
251 return validate_arguments ();
252 }
253 }
254
255 if (cpl == UNKNOWN_PACKET_LOSS) {
256 if (is_intpercent (argv[c]) == FALSE) {
257 printf ("<cpl> (%s) must be an integer percentage\n", argv[c]);
258 return ERROR;
259 } else {
260 cpl = atoi (argv[c++]);
261 if (c == argc)
262 return validate_arguments ();
263 }
264 }
265
266 if (wrta == UNKNOWN_TRIP_TIME) {
267 if (is_negative (argv[c])) {
268 printf ("<wrta> (%s) must be a non-negative number\n", argv[c]);
269 return ERROR;
270 } else {
271 wrta = atof (argv[c++]);
272 if (c == argc)
273 return validate_arguments ();
274 }
275 }
276
277 if (crta == UNKNOWN_TRIP_TIME) {
278 if (is_negative (argv[c])) {
279 printf ("<crta> (%s) must be a non-negative number\n", argv[c]);
280 return ERROR;
281 } else {
282 crta = atof (argv[c++]);
283 if (c == argc)
284 return validate_arguments ();
285 }
286 }
287
288 if (max_packets == -1) {
289 if (is_intnonneg (argv[c])) {
290 max_packets = atoi (argv[c++]);
291 } else {
292 printf ("<max_packets> (%s) must be a non-negative number\n", argv[c]);
293 return ERROR;
294 }
295 }
296
297 return validate_arguments ();
309} 298}
310 299
311int 300int
@@ -319,7 +308,6 @@ get_threshold (char *arg, float *trta, int *tpl)
319 return OK; 308 return OK;
320 else 309 else
321 usage2 ("%s: Warning threshold must be integer or percentage!\n\n", arg); 310 usage2 ("%s: Warning threshold must be integer or percentage!\n\n", arg);
322
323} 311}
324 312
325int 313int