New indent parameters, many spurious changes

MAINT_6_0
Stephane Bortzmeyer 17 years ago
parent 3754822e91
commit b60d7eb6d2

@ -19,96 +19,93 @@
#include "common.h"
void
domquery_usage (char *msg)
domquery_usage(char *msg)
{
fprintf (stderr, "%s\n", msg);
poptPrintUsage (poptcon, stderr, 0);
err_quit(" domain");
fprintf(stderr, "%s\n", msg);
poptPrintUsage(poptcon, stderr, 0);
err_quit(" domain");
}
char *
init (int argc, char **argv)
char *
init(int argc, char **argv)
{
int value;
xmlrpc_value *result;
xmlrpc_bool free, read_contacts;
xmlrpc_int32 reason;
char *msg, *hostname;
struct poptOption options[] = {
{"read-contacts", 'c', POPT_ARG_NONE, &read_contacts, 0,
"Read also the contacts of the domain [NOT IMPLEMENTED]",
""},
POPT_AUTOHELP POPT_TABLEEND
};
poptcon = poptGetContext (NULL, argc,
argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt (poptcon)) > 0)
{
if (value < -1)
{
sprintf (msg, "%s: %s",
poptBadOption (poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (value));
domquery_usage (msg);
}
}
hostname = (char *) poptGetArg (poptcon); /* Not used */
domain = (char *) poptGetArg (poptcon);
if (domain == NULL || !strcmp(domain, ""))
domquery_usage ("Mandatory request missing");
return NULL;
int value;
xmlrpc_value *result;
xmlrpc_bool free, read_contacts;
xmlrpc_int32 reason;
char *msg, *hostname;
struct poptOption options[] = {
{"read-contacts", 'c', POPT_ARG_NONE, &read_contacts, 0,
"Read also the contacts of the domain [NOT IMPLEMENTED]",
""},
POPT_AUTOHELP POPT_TABLEEND
};
poptcon = poptGetContext(NULL, argc, argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt(poptcon)) > 0) {
if (value < -1) {
sprintf(msg, "%s: %s",
poptBadOption(poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(value));
domquery_usage(msg);
}
}
hostname = (char *) poptGetArg(poptcon); /* Not used */
domain = (char *) poptGetArg(poptcon);
if (domain == NULL || !strcmp(domain, ""))
domquery_usage("Mandatory request missing");
return NULL;
}
void
start_raw() {
start_raw()
{
/* Start up our XML-RPC client library. */
xmlrpc_client_init (XMLRPC_CLIENT_NO_FLAGS, CLIENT_NAME, CLIENT_VERSION);
/* Start up our XML-RPC client library. */
xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, CLIENT_NAME, CLIENT_VERSION);
/* Initialize our error-handling environment. */
xmlrpc_env_init (&env);
/* Initialize our error-handling environment. */
xmlrpc_env_init(&env);
printf ("env initialized\n");
printf("env initialized\n");
}
int
execute ()
execute()
{
xmlrpc_value *result;
xmlrpc_value *domain_h;
xmlrpc_int32 found;
xmlrpc_value *error;
/* char *dst;
dst = HTAnchor_findAddress(ENDPOINT); */
printf ("Ready to call\n");
/* Call the server */
result = xmlrpc_client_call (&env, ENDPOINT, "domquery", "(s)", domain);
die_if_fault_occurred (&env);
printf ("Call done, now parsing\n");
xmlrpc_parse_value (&env, result, "{s:i,*}", "found", &found);
die_if_fault_occurred (&env);
if (found)
{
printf ("%s is there\n", domain);
xmlrpc_parse_value (&env, result, "{s:S,i,s:A,*}", "domain", &domain_h, "found", &found, "error", &error);
die_if_fault_occurred (&env);
}
/* Dispose of our result value. */
xmlrpc_DECREF (result);
return 0;
xmlrpc_value *result;
xmlrpc_value *domain_h;
xmlrpc_int32 found;
xmlrpc_value *error;
/* char *dst; dst = HTAnchor_findAddress(ENDPOINT); */
printf("Ready to call\n");
/* Call the server */
result = xmlrpc_client_call(&env, ENDPOINT, "domquery", "(s)", domain);
die_if_fault_occurred(&env);
printf("Call done, now parsing\n");
xmlrpc_parse_value(&env, result, "{s:i,*}", "found", &found);
die_if_fault_occurred(&env);
if (found) {
printf("%s is there\n", domain);
xmlrpc_parse_value(&env, result, "{s:S,i,s:A,*}", "domain",
&domain_h, "found", &found, "error", &error);
die_if_fault_occurred(&env);
}
/* Dispose of our result value. */
xmlrpc_DECREF(result);
return 0;
}
void
terminate ()
terminate()
{
/* Clean up our error-handling environment. */
xmlrpc_env_clean (&env);
/* Clean up our error-handling environment. */
xmlrpc_env_clean(&env);
/* Shutdown our XML-RPC client library. */
xmlrpc_client_cleanup ();
/* Shutdown our XML-RPC client library. */
xmlrpc_client_cleanup();
}
}

@ -14,72 +14,67 @@
#define ENDPOINT "http://www.adamsnames.tc/api/xmlrpc"
void
die_if_fault_occurred (xmlrpc_env * env)
die_if_fault_occurred(xmlrpc_env * env)
{
if (env->fault_occurred)
{
fprintf (stderr, "XML-RPC Fault: %s (%d)\n",
env->fault_string, env->fault_code);
exit (1);
}
if (env->fault_occurred) {
fprintf(stderr, "XML-RPC Fault: %s (%d)\n",
env->fault_string, env->fault_code);
exit(1);
}
}
int
main (int argc, char **argv)
main(int argc, char **argv)
{
int value;
xmlrpc_value *result;
xmlrpc_bool free, read_contacts;
xmlrpc_int32 reason;
xmlrpc_value *domain_h;
xmlrpc_int32 found;
xmlrpc_value *error;
xmlrpc_env env;
char *domain;
char *date, *holder;
int value;
xmlrpc_value *result;
xmlrpc_bool free, read_contacts;
xmlrpc_int32 reason;
xmlrpc_value *domain_h;
xmlrpc_int32 found;
xmlrpc_value *error;
xmlrpc_env env;
char *domain;
char *date, *holder;
if (argc != 2)
{
fprintf (stderr, "Usage: %s domain\n", argv[0]);
exit (1);
}
if (argc != 2) {
fprintf(stderr, "Usage: %s domain\n", argv[0]);
exit(1);
}
domain = argv[1];
domain = argv[1];
/* Start up our XML-RPC client library. */
xmlrpc_client_init (XMLRPC_CLIENT_NO_FLAGS, CLIENT_NAME, CLIENT_VERSION);
/* Start up our XML-RPC client library. */
xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, CLIENT_NAME, CLIENT_VERSION);
/* Initialize our error-handling environment. */
xmlrpc_env_init (&env);
/* Initialize our error-handling environment. */
xmlrpc_env_init(&env);
/* Call the server */
result = xmlrpc_client_call (&env, ENDPOINT, "domquery", "(s)", domain);
die_if_fault_occurred (&env);
/* Call the server */
result = xmlrpc_client_call(&env, ENDPOINT, "domquery", "(s)", domain);
die_if_fault_occurred(&env);
xmlrpc_parse_value (&env, result, "{s:i,*}", "found", &found);
die_if_fault_occurred (&env);
if (found)
{
printf ("%s is there\n", domain);
xmlrpc_parse_value (&env, result, "{s:S,s:i,s:A,*}", "domain",
&domain_h, "found", &found, "error", &error);
die_if_fault_occurred (&env);
/* printf ("Type of domain: %d\n", xmlrpc_value_type(domain_h)); */
xmlrpc_parse_value (&env, domain_h, "{s:s,s:s,*}", "registered", &date,
"org", &holder);
die_if_fault_occurred (&env);
printf ("Registered on %s by %s\n", date, holder);
}
else
{
printf ("Unknown domain %s\n", domain);
}
/* Dispose of our result value. */
xmlrpc_DECREF (result);
/* Clean up our error-handling environment. */
xmlrpc_env_clean (&env);
xmlrpc_parse_value(&env, result, "{s:i,*}", "found", &found);
die_if_fault_occurred(&env);
if (found) {
printf("%s is there\n", domain);
xmlrpc_parse_value(&env, result, "{s:S,s:i,s:A,*}", "domain",
&domain_h, "found", &found, "error", &error);
die_if_fault_occurred(&env);
/* printf ("Type of domain: %d\n", xmlrpc_value_type(domain_h)); */
xmlrpc_parse_value(&env, domain_h, "{s:s,s:s,*}", "registered",
&date, "org", &holder);
die_if_fault_occurred(&env);
printf("Registered on %s by %s\n", date, holder);
} else {
printf("Unknown domain %s\n", domain);
}
/* Dispose of our result value. */
xmlrpc_DECREF(result);
/* Clean up our error-handling environment. */
xmlrpc_env_clean(&env);
/* Shutdown our XML-RPC client library. */
xmlrpc_client_cleanup ();
/* Shutdown our XML-RPC client library. */
xmlrpc_client_cleanup();
}

@ -4,12 +4,10 @@
#include <xmlrpc_client.h>
void
die_if_fault_occurred (xmlrpc_env * env)
die_if_fault_occurred(xmlrpc_env * env)
{
if (env->fault_occurred)
{
err_quit("XML-RPC Fault: %s (%d)\n",
env->fault_string, env->fault_code);
}
if (env->fault_occurred) {
err_quit("XML-RPC Fault: %s (%d)\n",
env->fault_string, env->fault_code);
}
}

@ -8,47 +8,48 @@
#include "../../echoping.h"
struct addrinfo daytime_server;
int sockfd;
int sockfd;
echoping_options options;
char *
init (const int argc, const char **argv, echoping_options global_options)
char *
init(const int argc, const char **argv, echoping_options global_options)
{
if (global_options.udp)
err_quit ("Sorry, UDP is not yet compatible with this daytime plugin");
options = global_options;
return "daytime";
if (global_options.udp)
err_quit
("Sorry, UDP is not yet compatible with this daytime plugin");
options = global_options;
return "daytime";
}
void
start (struct addrinfo *res)
start(struct addrinfo *res)
{
daytime_server = *res;
daytime_server = *res;
}
int
execute ()
execute()
{
int nr;
FILE *file;
int nr;
FILE *file;
#define MAX 256
char recvline[MAX];
if ((sockfd =
socket (daytime_server.ai_family, daytime_server.ai_socktype,
daytime_server.ai_protocol)) < 0)
err_sys ("Can't open socket");
if (connect (sockfd, daytime_server.ai_addr, daytime_server.ai_addrlen) < 0)
err_sys ("Can't connect to server");
if ((file = fdopen (sockfd, "r")) == NULL)
err_sys ("Cannot fdopen");
nr = readline (file, recvline, MAX, 1);
if (options.verbose)
printf ("%s", recvline);
close (sockfd);
return 1;
char recvline[MAX];
if ((sockfd =
socket(daytime_server.ai_family, daytime_server.ai_socktype,
daytime_server.ai_protocol)) < 0)
err_sys("Can't open socket");
if (connect(sockfd, daytime_server.ai_addr, daytime_server.ai_addrlen) < 0)
err_sys("Can't connect to server");
if ((file = fdopen(sockfd, "r")) == NULL)
err_sys("Cannot fdopen");
nr = readline(file, recvline, MAX, 1);
if (options.verbose)
printf("%s", recvline);
close(sockfd);
return 1;
}
void
terminate ()
terminate()
{
}

@ -88,7 +88,7 @@ main(argc, argv)
boolean fill_requested = FALSE;
unsigned int i = 0;
char *plugin_name = NULL;
char *complete_plugin_name = NULL;
char *complete_plugin_name = NULL;
char *ext;
void *plugin = NULL;
int plugin_result;
@ -134,7 +134,7 @@ main(argc, argv)
gnutls_session session;
gnutls_certificate_credentials xcred;
int tls_result;
const int cert_type_priority[3] = {GNUTLS_CRT_X509,
const int cert_type_priority[3] = { GNUTLS_CRT_X509,
GNUTLS_CRT_OPENPGP, 0
};
#endif
@ -150,25 +150,28 @@ main(argc, argv)
const struct poptOption options[] = {
{"verbose", 'v', POPT_ARG_NONE, &verbose, 'v'},
{"dump-configuration", 'V', POPT_ARG_NONE, &dump_config, 'V',
"Displays echoping compiled-in configuration"},
"Displays echoping compiled-in configuration"},
{"help", '?', POPT_ARG_NONE, NULL, '?'},
{"size", 's', POPT_ARG_INT, &size, 's'},
{"number", 'n', POPT_ARG_INT, &number, 'n', "Number of iterations"},
#ifdef HAVE_USLEEP
{"wait", 'w', POPT_ARG_FLOAT, &wait, 'w', "Delay between iterations"},
{"wait", 'w', POPT_ARG_FLOAT, &wait, 'w',
"Delay between iterations"},
#else
{"wait", 'w', POPT_ARG_INT, &wait, 'w', "Delay between iterations"},
#endif
{"discard", 'd', POPT_ARG_NONE, &discard, 'd'},
{"chargen", 'c', POPT_ARG_NONE, &chargen, 'c'},
{"http", 'h', POPT_ARG_STRING, &url, 'h'},
{"accept-http-redirects", 'R', POPT_ARG_NONE, &accept_http_redirects, 'R',
"Accept HTTP return codes 3xx (redirections)"},
{"hostname", 'H', POPT_ARG_STRING, &http_hostname, 'H', "Hostname to use in HTTP Host: header"},
{"accept-http-redirects", 'R', POPT_ARG_NONE, &accept_http_redirects,
'R',
"Accept HTTP return codes 3xx (redirections)"},
{"hostname", 'H', POPT_ARG_STRING, &http_hostname, 'H',
"Hostname to use in HTTP Host: header"},
{"icp", 'i', POPT_ARG_STRING, &url, 'i',
"ICP protocol, for Web proxies/caches"},
"ICP protocol, for Web proxies/caches"},
{"ttcp", 'r', POPT_ARG_NONE, &ttcp, 'r',
"Use the T/TCP protocol (Transaction TCP)"},
"Use the T/TCP protocol (Transaction TCP)"},
{"udp", 'u', POPT_ARG_NONE, &udp, 'u'},
{"timeout", 't', POPT_ARG_INT, &timeout, 't'},
{"fill", 'f', POPT_ARG_STRING, &fill_s, 'f'},
@ -177,13 +180,13 @@ main(argc, argv)
{"priority", 'p', POPT_ARG_INT, &priority, 'p'},
{"type-of-service", 'P', POPT_ARG_INT, &tos, 'P'},
{"check-original", 'a', POPT_ARG_NONE, NULL, 'a',
"For HTTP through a proxy/cache"},
"For HTTP through a proxy/cache"},
{"ignore-cache", 'A', POPT_ARG_NONE, NULL, 'A',
"For HTTP through a proxy/cache"},
"For HTTP through a proxy/cache"},
{"ipv4", '4', POPT_ARG_NONE, NULL, '4'},
{"ipv6", '6', POPT_ARG_NONE, NULL, '6'},
{"module", 'm', POPT_ARG_STRING, &plugin_name, 'm',
"Loads the given plugin"},
"Loads the given plugin"},
POPT_TABLEEND
};
poptContext poptcon;
@ -213,12 +216,12 @@ main(argc, argv)
progname = (char *) argv[0];
poptcon =
poptGetContext(NULL, argc, argv, options, POPT_CONTEXT_POSIXMEHARDER);
poptGetContext(NULL, argc, argv, options, POPT_CONTEXT_POSIXMEHARDER);
while ((result = poptGetNextOpt(poptcon)) != -1) {
if (result < -1) {
fprintf(stderr, "%s: %s\n",
poptBadOption(poptcon, POPT_BADOPTION_NOALIAS),
poptBadOption(poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(result));
usage(poptcon);
}
@ -279,7 +282,8 @@ main(argc, argv)
case 'f':
remaining--;
if (strlen(fill_s) > 1)
err_quit("Argument --fill should be a one-character string");
err_quit
("Argument --fill should be a one-character string");
fill = fill_s[0];
fill_requested = 1;
break;
@ -299,12 +303,13 @@ main(argc, argv)
remaining--;
if (size > MAX_LINE) {
(void) fprintf(stderr,
"%s: packet size too large, max is %d.\n",
"%s: packet size too large, max is %d.\n",
progname, MAX_LINE);
exit(1);
}
if (size <= 0) {
(void) fprintf(stderr, "%s: illegal packet size.\n", progname);
(void) fprintf(stderr, "%s: illegal packet size.\n",
progname);
exit(1);
}
size_requested = 1;
@ -313,7 +318,8 @@ main(argc, argv)
remaining--;
timeout_requested = 1;
if (size <= 0) {
(void) fprintf(stderr, "%s: illegal timeout.\n", progname);
(void) fprintf(stderr, "%s: illegal timeout.\n",
progname);
exit(1);
}
break;
@ -327,7 +333,7 @@ main(argc, argv)
}
if (number <= 0) {
(void) fprintf(stderr,
"%s: illegal number of iterations.\n",
"%s: illegal number of iterations.\n",
progname);
exit(1);
}
@ -342,7 +348,8 @@ main(argc, argv)
*/
{
(void) fprintf(stderr,
"%s: illegal waiting time.\n", progname);
"%s: illegal waiting time.\n",
progname);
exit(1);
}
break;
@ -357,73 +364,74 @@ main(argc, argv)
module_find = TRUE;
break;
default:
printf("Unknown character option %d (%c)", result, (char) result);
printf("Unknown character option %d (%c)", result,
(char) result);
usage(poptcon);
}
}
if (udp && ((port_to_use == USE_CHARGEN) ||
(port_to_use == USE_HTTP) || (port_to_use == USE_SMTP))) {
(port_to_use == USE_HTTP) || (port_to_use == USE_SMTP))) {
(void) fprintf(stderr,
"%s: I don't know how to use this port with UDP.\n",
"%s: I don't know how to use this port with UDP.\n",
progname);
exit(1);
}
if ((http || smtp) && (fill_requested)) {
(void) fprintf(stderr,
"%s: Filling incompatible with HTTP connections.\n",
"%s: Filling incompatible with HTTP connections.\n",
progname);
exit(1);
}
#ifndef USE_TTCP
if (ttcp) {
(void) fprintf(stderr,
"%s: not compiled with T/TCP support.\n", progname);
"%s: not compiled with T/TCP support.\n", progname);
exit(1);
}
#endif
#if ! (defined(OPENSSL) || defined(GNUTLS))
if (ssl) {
(void) fprintf(stderr,
"%s: not compiled with SSL/TLS support.\n", progname);
"%s: not compiled with SSL/TLS support.\n", progname);
exit(1);
}
#endif
#ifndef HTTP
if (http) {
(void) fprintf(stderr,
"%s: Not compiled with HTTP support.\n", progname);
(void) fprintf(stderr, "%s: Not compiled with HTTP support.\n",
progname);
exit(1);
}
#endif
#ifndef SMTP
if (smtp) {
(void) fprintf(stderr,
"%s: Not compiled with SMTP support.\n", progname);
(void) fprintf(stderr, "%s: Not compiled with SMTP support.\n",
progname);
exit(1);
}
#endif
#ifndef ICP
if (icp) {
(void) fprintf(stderr,
"%s: Not compiled with ICP support.\n", progname);
(void) fprintf(stderr, "%s: Not compiled with ICP support.\n",
progname);
exit(1);
}
#endif
if ((http || smtp) && size_requested) {
(void) fprintf(stderr,
"%s: %s and message size specification are incompatible.\n",
"%s: %s and message size specification are incompatible.\n",
progname, http ? "HTTP" : "SMTP");
exit(1);
}
if (ssl && !http) {
(void) fprintf(stderr,
"%s: SSL is only supported for HTTP requests.\n",
"%s: SSL is only supported for HTTP requests.\n",
progname);
exit(1);
}
if (udp && ttcp) {
(void) fprintf(stderr,
"%s: UDP and T/TCP are incompatible.\n", progname);
(void) fprintf(stderr, "%s: UDP and T/TCP are incompatible.\n",
progname);
exit(1);
}
if (ssl && http) {
@ -438,7 +446,7 @@ main(argc, argv)
#ifndef USE_TOS
if (tos_requested) {
(void) fprintf(stderr,
"%s: Not compiled with Type Of Service support.\n",
"%s: Not compiled with Type Of Service support.\n",
progname);
exit(1);
}
@ -446,7 +454,7 @@ main(argc, argv)
#ifndef USE_PRIORITY
if (priority_requested) {
(void) fprintf(stderr,
"%s: Not compiled with socket priority support.\n",
"%s: Not compiled with socket priority support.\n",
progname);
exit(1);
}
@ -461,23 +469,26 @@ main(argc, argv)
if (!plugin) {
/* Retries with the absolute name */
complete_plugin_name = (char *) malloc(MAX_LINE);
sprintf(complete_plugin_name, "%s/%s", PLUGINS_DIR, plugin_name);
sprintf(complete_plugin_name, "%s/%s", PLUGINS_DIR,
plugin_name);
plugin = dlopen(complete_plugin_name, RTLD_NOW);
}
if (!plugin) {
#if DEBIAN
/* A bit of help for the poor user */
fprintf(stderr, "You may have to load the recommended packages "
fprintf(stderr,
"You may have to load the recommended packages "
"to run this plugin.\n"
"'dpkg -s echoping | grep Recommends' to know them.\n\n");
#endif
err_sys
("Cannot load \"%s\" (I tried the short name, then the complete name in \"%s\"): %s",
plugin_name, PLUGINS_DIR, dlerror());
("Cannot load \"%s\" (I tried the short name, then the complete name in \"%s\"): %s",
plugin_name, PLUGINS_DIR, dlerror());
}
plugin_init = dlsym(plugin, "init");
if (!plugin_init) {
err_sys("Cannot find init in %s: %s", plugin_name, dlerror());
err_sys("Cannot find init in %s: %s", plugin_name,
dlerror());
}
global_options.udp = udp;
global_options.ttcp = ttcp;
@ -491,7 +502,7 @@ main(argc, argv)
else
global_options.only_ipv6 = 0;
plugin_port_name =
plugin_init(remaining, (const char **) leftover, global_options);
plugin_init(remaining, (const char **) leftover, global_options);
if (plugin_port_name != NULL) {
strcpy(port_name, plugin_port_name);
plugin_raw = FALSE;
@ -505,13 +516,14 @@ main(argc, argv)
plugin_raw = TRUE;
plugin_raw_start = dlsym(plugin, "start_raw");
if (!plugin_raw_start) {
err_sys("Cannot find start_raw in %s: %s", plugin_name,
dlerror());
err_sys("Cannot find start_raw in %s: %s",
plugin_name, dlerror());
}
}
plugin_execute = dlsym(plugin, "execute");
if (!plugin_execute) {
err_sys("Cannot find execute in %s: %s", plugin_name, dlerror());
err_sys("Cannot find execute in %s: %s", plugin_name,
dlerror());
}
plugin_terminate = dlsym(plugin, "terminate");
if (!plugin_terminate) {
@ -589,8 +601,10 @@ main(argc, argv)
if (*p == ':') {
*p = 0;
text_port = p + 1;
if (strcmp(text_port, "")) /* See bug #850672 */
strncpy(port_name, text_port, NI_MAXSERV);
if (strcmp(text_port, "")) /* See bug *
* #850672 */
strncpy(port_name, text_port,
NI_MAXSERV);
}
}
}
@ -598,11 +612,18 @@ main(argc, argv)
error = getaddrinfo(server, port_name, &hints, &res);
if (error) {
if (error == EAI_SERVICE) {
if (strcmp(port_name, DEFAULT_HTTP_TCP_PORT) == 0) {
if (strcmp(port_name, DEFAULT_HTTP_TCP_PORT)
== 0) {
strcpy(port_name, "80");
} else if (strcmp(port_name, DEFAULT_HTTPS_TCP_PORT) == 0) {
} else
if (strcmp
(port_name, DEFAULT_HTTPS_TCP_PORT)
== 0) {
strcpy(port_name, "443");
} else if (strcmp(port_name, DEFAULT_ICP_UDP_PORT) == 0) {
} else
if (strcmp
(port_name, DEFAULT_ICP_UDP_PORT)
== 0) {
strcpy(port_name, "3130");
}
}
@ -623,12 +644,15 @@ main(argc, argv)
if (error && error == EAI_NONAME) { /* A name, not an address */
if ((result =
idna_to_ascii_8z(utf8_server, &ace_server,
IDNA_USE_STD3_ASCII_RULES)) != IDNA_SUCCESS) {
IDNA_USE_STD3_ASCII_RULES)) != IDNA_SUCCESS) {
if (result == IDNA_CONTAINS_LDH)
err_quit("Illegal name for host: %s", server); /* foo@bar or similar
err_quit("Illegal name for host: %s", server); /* foo@bar
* or
* similar
* errors */
else
err_quit("IDN error for host: %s %d", server, result);
err_quit("IDN error for host: %s %d", server,
result);
}
if (strcmp(utf8_server, ace_server)) {
if (verbose)
@ -651,7 +675,8 @@ main(argc, argv)
}
if (plugin) {
if (verbose) {
printf("Running start() for the plugin %s...\n", plugin_name);
printf("Running start() for the plugin %s...\n",
plugin_name);
}
if (plugin_raw)
plugin_raw_start();
@ -667,16 +692,16 @@ main(argc, argv)
#endif
#ifdef SMTP
if (smtp) {
sendline = "QUIT\r\n"; /* Surprises some SMTP servers which
* log a frightening NOQUEUE. Anyone
* knows better? */
sendline = "QUIT\r\n"; /* Surprises some SMTP servers which log a
* frightening NOQUEUE. Anyone knows better?
*/
} else
#endif
#ifdef ICP
if (icp) {
if (res->ai_family == AF_INET) {
sendline =
make_icp_sendline(url, &(res->ai_addr), opcode, &length);
make_icp_sendline(url, &(res->ai_addr), opcode, &length);
} else {
/*
@ -685,13 +710,13 @@ main(argc, argv)
* http://devel.squid-cache.org/projects.html#ipv6,
* for instance the following code.
*/
sendline = make_icp_sendline(url, (void *) NULL, opcode, &length);
sendline =
make_icp_sendline(url, (void *) NULL, opcode, &length);
/*
- headerp->shostid = theOutICPAddr.s_addr;
+ ** FIXME ** we should get more unique data from IPv6 address
+xmemcpy (&headerp->shostid, &theOutICPAddr,
sizeof (headerp->shostid));
*/
* - headerp->shostid = theOutICPAddr.s_addr; + ** FIXME ** we
* should get more unique data from IPv6 address +xmemcpy
* (&headerp->shostid, &theOutICPAddr, sizeof
* (headerp->shostid)); */
}
} else
#endif
@ -728,7 +753,8 @@ main(argc, argv)
#ifdef USE_SIGACTION
mysigaction.sa_handler = SIG_IGN;
sigemptyset(&mysigaction.sa_mask);
if ((sigaction(SIGPIPE, &mysigaction, NULL)) < 0); /* Ignore it */
if ((sigaction(SIGPIPE, &mysigaction, NULL)) < 0); /* Ignore it
*/
#else
signal(SIGPIPE, SIG_IGN);
#endif
@ -751,10 +777,12 @@ main(argc, argv)
alarm(timeout);
if (i > 1) {
#ifdef HAVE_USLEEP
/* SUSv3 states that the argument to usleep() shall
be less * than 1000000, so split into two calls
if necessary. Bug #1473872, fix by Jeff Rizzo
- riz@sourceforge */
/*
* SUSv3 states that the argument to usleep() shall
* be less * than 1000000, so split into two calls if
* necessary. Bug #1473872, fix by Jeff Rizzo -
* riz@sourceforge
*/
if (wait >= 1) {
sleep((unsigned int) wait);
}
@ -778,8 +806,8 @@ main(argc, argv)
err_sys("Cannot initialize SSL context");
#endif
/*
* Open a socket.
*/
* Open a socket.
*/
if (!plugin) {
if ((sockfd =
socket(res->ai_family, res->ai_socktype,
@ -796,21 +824,23 @@ main(argc, argv)
if (error) {
err_sys("getaddrinfo error");
}
if (bind(sockfd, res2->ai_addr, res2->ai_addrlen) < 0) {
if (bind(sockfd, res2->ai_addr, res2->ai_addrlen) <
0) {
err_sys("bind error");
}
}
#ifdef USE_PRIORITY
if (priority_requested) {
if (verbose) {
printf("Setting socket priority to %d (0x%02x)\n",
priority, (unsigned int) priority);
printf
("Setting socket priority to %d (0x%02x)\n",
priority, (unsigned int) priority);
}
if (setsockopt(sockfd,
SOL_SOCKET,
SO_PRIORITY,
(void *) &priority,
(socklen_t) sizeof(priority))) {
(socklen_t) sizeof(priority))) {
err_sys("Failed setting socket priority");
}
}
@ -818,14 +848,16 @@ main(argc, argv)
#if USE_TOS
if (tos_requested) {
if (verbose) {
printf("Setting IP type of service octet to %d (0x%02x)\n",
tos, (unsigned int) tos);
printf
("Setting IP type of service octet to %d (0x%02x)\n",
tos, (unsigned int) tos);
}
if (setsockopt(sockfd,
SOL_IP,
IP_TOS, (void *) &tos,
(socklen_t) sizeof(tos))) {
err_sys("Failed setting IP type of service octet");
err_sys
("Failed setting IP type of service octet");
}
}
#endif
@ -834,28 +866,29 @@ main(argc, argv)
if (!plugin) {
if (tcp) {
printf
("Trying to connect to internet address %s %s to transmit %u bytes...\n",
hbuf, pbuf, n);
("Trying to connect to internet address %s %s to transmit %u bytes...\n",
hbuf, pbuf, n);
}
#ifdef ICP
if (icp) {
printf
("Trying to send an ICP packet of %u bytes to the internet address %s...\n",
length, hbuf);
("Trying to send an ICP packet of %u bytes to the internet address %s...\n",
length, hbuf);
}
#endif
else {
printf
("Trying to send %u bytes to internet address %s...\n",
size, hbuf);
("Trying to send %u bytes to internet address %s...\n",
size, hbuf);
}
} else {
if (plugin_raw)
printf("Trying to call plugin %s...\n", plugin_name);
printf("Trying to call plugin %s...\n",
plugin_name);
else
printf
("Trying to call plugin %s for internet address %s %s...\n",
plugin_name, hbuf, pbuf);
("Trying to call plugin %s for internet address %s %s...\n",
plugin_name, hbuf, pbuf);
}
}
#ifdef FLUSH_OUTPUT
@ -863,10 +896,11 @@ main(argc, argv)
err_sys("I cannot flush");
}
#endif
if ((tcp || plugin) && timeout_requested) { /* echoping's timeout
* has a different
* semantic in TCP and
* UDP */
if ((tcp || plugin) && timeout_requested) { /* echoping's
* timeout has a
* different
* semantic in TCP
* and UDP */
#ifdef USE_SIGACTION
mysigaction.sa_handler = to_alarm;
sigemptyset(&mysigaction.sa_mask);
@ -892,10 +926,12 @@ main(argc, argv)
} else {
if (!ttcp && !icp) {
/*
* Connect to the server.
*/
(void) gettimeofday(&conntv, (struct timezone *) NULL);
if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) {
* Connect to the server.
*/
(void) gettimeofday(&conntv,
(struct timezone *) NULL);
if (connect(sockfd, res->ai_addr, res->ai_addrlen) <
0) {
if ((errno == EINTR) && (timeout_flag)) {
printf("Timeout while connecting\n");
close(sockfd);
@ -910,13 +946,17 @@ main(argc, argv)
} else {
if (tcp) {
(void) gettimeofday(&connectedtv,
(struct timezone *) NULL);
(struct timezone
*)
NULL);
temp = connectedtv;
tvsub(&temp, &conntv);
if (verbose) {
printf("Connected...\n");
printf("TCP Latency: %d.%06d seconds\n",
(int) temp.tv_sec, (int) temp.tv_usec);
printf
("TCP Latency: %d.%06d seconds\n",
(int) temp.tv_sec,
(int) temp.tv_usec);
}
}
}
@ -934,8 +974,10 @@ main(argc, argv)
if (ssl) {
SSL_set_fd(sslh, sockfd);
if (SSL_connect(sslh) == -1)
if ((errno == EINTR) && (timeout_flag)) {
printf("Timeout while starting SSL\n");
if ((errno == EINTR)
&& (timeout_flag)) {
printf
("Timeout while starting SSL\n");
close(sockfd);
continue;
}
@ -950,31 +992,40 @@ main(argc, argv)
#endif
#ifdef GNUTLS
if (ssl) {
tls_result = gnutls_init(&session, GNUTLS_CLIENT);
tls_result =
gnutls_init(&session, GNUTLS_CLIENT);
if (tls_result != 0)
err_sys("Cannot create a new TLS session");
err_sys
("Cannot create a new TLS session");
gnutls_set_default_priority(session);
gnutls_certificate_type_set_priority(session,
cert_type_priority);
gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
cert_type_priority);
gnutls_credentials_set(session,
GNUTLS_CRD_CERTIFICATE,
xcred);
gnutls_transport_set_ptr(session,
(gnutls_transport_ptr) sockfd);
(gnutls_transport_ptr)
sockfd);
tls_result = gnutls_handshake(session);
if (tls_result < 0) {
if ((errno == EINTR) && (timeout_flag)) {
printf("Timeout while starting TLS\n");
if ((errno == EINTR)
&& (timeout_flag)) {
printf
("Timeout while starting TLS\n");
close(sockfd);
continue;
} else {
err_sys("Cannot start the TLS session: %s",
gnutls_strerror(tls_result));
err_sys
("Cannot start the TLS session: %s",
gnutls_strerror
(tls_result));
}
}
if (verbose)
printf("TLS connection using \"%s\"\n",
gnutls_cipher_get_name(gnutls_cipher_get
(session)));
printf
("TLS connection using \"%s\"\n",
gnutls_cipher_get_name
(gnutls_cipher_get(session)));
/*
* We could check the server's
* certificate or other funny things.
@ -990,13 +1041,14 @@ main(argc, argv)
else {
/* No initial connection */
}
if ((port_to_use == USE_ECHO) || (port_to_use == USE_DISCARD) ||
(port_to_use == USE_HTTP) || (port_to_use == USE_ICP) ||
(port_to_use == USE_SMTP)) {
if ((port_to_use == USE_ECHO) || (port_to_use == USE_DISCARD)
|| (port_to_use == USE_HTTP) || (port_to_use == USE_ICP)
|| (port_to_use == USE_SMTP)) {
#ifdef USE_TTCP
if (ttcp) {
if (sendto(sockfd, sendline, n, MSG_EOF,
res->ai_addr, res->ai_addrlen) != n)
res->ai_addr,
res->ai_addrlen) != n)
err_sys("sendto error on socket");
if (verbose) {
printf("T/TCP connection done\n");
@ -1010,29 +1062,41 @@ main(argc, argv)
* server
*/
if (writen(sockfd, sendline, n) != n) {
if ((nr < 0 || nr != n) && timeout_flag) {
if ((nr < 0 || nr != n)
&& timeout_flag) {
printf
("Timeout while writing (%d byte(s) written so far)\n",
(nr == -1) ? 0 : nr);
("Timeout while writing (%d byte(s) written so far)\n",
(nr ==
-1) ? 0 : nr);
nr = n;
close(sockfd);
continue;
} else
err_sys("writen error on TCP socket %d", sockfd);
err_sys
("writen error on TCP socket %d",
sockfd);
}
}
#ifdef OPENSSL
else {
if ((rc = SSL_write(sslh, sendline, n)) != n) {
if ((nr < 0 || nr != n) && timeout_flag) {
if ((rc =
SSL_write(sslh, sendline,
n)) != n) {
if ((nr < 0 || nr != n)
&& timeout_flag) {
nr = n;
printf("Timeout while writing\n");
printf
("Timeout while writing\n");
close(sockfd);
continue;
} else {
sslcode = ERR_get_error();
err_sys("SSL_write error on socket: %s",
ERR_error_string(sslcode, NULL));
sslcode =
ERR_get_error();
err_sys
("SSL_write error on socket: %s",
ERR_error_string
(sslcode,
NULL));
}
}
}
@ -1041,17 +1105,24 @@ main(argc, argv)
else
{
if ((rc =
gnutls_record_send(session, sendline,
strlen(sendline))) != n) {
if ((nr < 0 || nr != n) && timeout_flag) {
gnutls_record_send(session,
sendline,
strlen
(sendline)))
!= n) {
if ((nr < 0 || nr != n)
&& timeout_flag) {
nr = n;
printf("Timeout while writing\n");
printf
("Timeout while writing\n");
close(sockfd);
continue;
} else {
err_sys
("gnutls_record_send error %d on socket: %s",
rc, gnutls_strerror(rc));
("gnutls_record_send error %d on socket: %s",
rc,
gnutls_strerror
(rc));
}
}
}
@ -1059,24 +1130,30 @@ main(argc, argv)
} else {
#ifdef ICP
if (icp) {
if (sendto(sockfd, sendline, length, 0,
res->ai_addr, res->ai_addrlen) != length)
err_sys("sendto error on socket");
if (sendto
(sockfd, sendline, length, 0,
res->ai_addr,
res->ai_addrlen) != length)
err_sys
("sendto error on socket");
} else
#endif
/*
* if (sendto(sockfd, sendline, n, 0,
* &serv_addr, sizeof(serv_addr)) != n)
* err_sys("sendto error on socket");
*/
* if (sendto(sockfd, sendline, n, 0,
* &serv_addr, sizeof(serv_addr)) != n)
* err_sys("sendto error on socket");
*/
if (send(sockfd, sendline, n, 0) != n)
err_sys("send error on socket");
}
if (verbose) {
(void) gettimeofday(&sendtv, (struct timezone *) NULL);
(void) gettimeofday(&sendtv,
(struct timezone *)
NULL);
#ifdef ICP
if (icp)
printf("Sent (%d bytes)...\n", length);
printf("Sent (%d bytes)...\n",
length);
else
#endif
printf("Sent (%d bytes)...\n", n);
@ -1109,21 +1186,26 @@ main(argc, argv)
#endif
FD_SET(n, &mask);
if (select(n + 1, &mask, 0, 0, NULL) > 0) {
(void) gettimeofday(&recvtv, (struct timezone *) NULL);
(void) gettimeofday(&recvtv,
(struct timezone *)
NULL);
temp = recvtv;
tvsub(&temp, &sendtv);
if (verbose)
printf("Application Latency: %d.%06d seconds\n",
(int) temp.tv_sec, (int) temp.tv_usec);
printf
("Application Latency: %d.%06d seconds\n",
(int) temp.tv_sec,
(int) temp.tv_usec);
}
}
if ((port_to_use == USE_ECHO) || (port_to_use == USE_CHARGEN) ||
(port_to_use == USE_HTTP) || (port_to_use == USE_ICP) ||
(port_to_use == USE_SMTP)) {
if ((port_to_use == USE_ECHO) || (port_to_use == USE_CHARGEN)
|| (port_to_use == USE_HTTP) || (port_to_use == USE_ICP)
|| (port_to_use == USE_SMTP)) {
if (!udp) {
if (!http && !smtp && !discard) {
/* Read from the server */
nr = readline(files, recvline, n, stop_at_newlines);
nr = readline(files, recvline, n,
stop_at_newlines);
} else if (discard) {
/* No reply, no read */
}
@ -1139,14 +1221,14 @@ main(argc, argv)
else
channel.tls = session;
#endif
nr =
read_from_server(channel, ssl,
accept_http_redirects);
nr = read_from_server(channel, ssl,
accept_http_redirects);
}
#endif
#ifdef SMTP
else if (smtp) {
nr = smtp_read_response_from_server(files);
nr = smtp_read_response_from_server
(files);
}
#endif
@ -1159,15 +1241,18 @@ main(argc, argv)
#else
mysigaction.sa_flags = (int) 0;
#endif
if ((sigaction(SIGALRM, &mysigaction, NULL)) < 0)
if ((sigaction(SIGALRM, &mysigaction, NULL))
< 0)
err_sys("Cannot set signal handler");
#else
signal(SIGALRM, to_alarm);
#endif
timeout_flag = 0; /* for signal handler */
timeout_flag = 0; /* for signal
* handler */
#ifdef ICP
if (icp) {
nr = recv_icp(sockfd, recvline, retcode);
nr = recv_icp(sockfd, recvline,
retcode);
if (verbose) {
printf("%s\n", retcode);
}
@ -1175,21 +1260,24 @@ main(argc, argv)
#endif
nr = recv(sockfd, recvline, n, 0);
/*
* nr = recvfrom(sockfd, recvline, n, 0,
* (struct sockaddr *) 0, (int *) 0);
* recvfrom fails on SunOS on connected
* sockets.
*/
* nr = recvfrom(sockfd, recvline, n, 0,
* (struct sockaddr *) 0, (int *) 0);
* recvfrom fails on SunOS on connected
* sockets.
*/
/*
* Todo: in UDP, we should loop to read: we
* can have several reads necessary.
*/
if ((nr < 0) && (errno == EINTR) && (timeout_flag)) {
* Todo: in UDP, we should loop to read: we
* can have several reads necessary.
*/
if ((nr < 0) && (errno == EINTR)
&& (timeout_flag)) {
nr = n;
printf("Timeout\n");
#ifdef FLUSH_OUTPUT
if (fflush((FILE *) NULL) != 0) {
err_sys("I cannot flush");
if (fflush((FILE *) NULL) !=
0) {
err_sys
("I cannot flush");
}
#endif
}
@ -1205,8 +1293,9 @@ main(argc, argv)
* timeout_flag)
*/
{
printf("Timeout while reading (%d byte(s) read)\n",
(nr == -1) ? 0 : nr);
printf
("Timeout while reading (%d byte(s) read)\n",
(nr == -1) ? 0 : nr);
nr = n;
#ifdef FLUSH_OUTPUT
if (fflush((FILE *) NULL) != 0) {
@ -1218,8 +1307,8 @@ main(argc, argv)
}
if (nr < 0 || nr != n)
err_sys
("readline error: %d bytes read, %d bytes requested",
nr, n);
("readline error: %d bytes read, %d bytes requested",
nr, n);
} else
/* This is probably HTTP */
{
@ -1230,8 +1319,8 @@ main(argc, argv)
*/
if ((errno == EINTR) && timeout_flag) {
printf
("Timeout while reading (%d byte(s) read so far)\n",
(nr == -1) ? 0 : nr);
("Timeout while reading (%d byte(s) read so far)\n",
(nr == -1) ? 0 : nr);
#ifdef FLUSH_OUTPUT
if (fflush((FILE *) NULL) != 0) {
err_sys("I cannot flush");
@ -1275,7 +1364,8 @@ main(argc, argv)
if (port_to_use == USE_ECHO) {
if (strcmp(sendline, recvline) != 0) {
printf(" I wrote:\n%s\n", sendline);
printf(" and I got back:\n%s\n", recvline);
printf(" and I got back:\n%s\n",
recvline);
err_quit("Strange server");
}
if (verbose) {
@ -1296,8 +1386,11 @@ main(argc, argv)
* the size is lower than the
* length of CHARGENERATED
*/
printf(" I got back:\n%s\n", recvline);
printf(" instead of the most common:\n%s\n", sendline);
printf(" I got back:\n%s\n",
recvline);
printf
(" instead of the most common:\n%s\n",
sendline);
err_ret("Strange server");
}
if (verbose) {
@ -1368,7 +1461,8 @@ printstats()
if (successes > 1) {
printf("---\n");
if (successes < attempts)
printf("Warning: %d message(s) lost (%d %%)\n", attempts - successes,
printf("Warning: %d message(s) lost (%d %%)\n",
attempts - successes,
((attempts - successes) * 100) / attempts);
printf("Minimum time: %d.%06d seconds (%.0f bytes per sec.)\n",
(int) min.tv_sec, (int) min.tv_usec,
@ -1394,24 +1488,25 @@ printstats()
good_results[j++] = results[i].timevalue;
}
if (successes != j) /* Todo: bug! */
err_quit("successes (%d) is different from j (%d)", successes, j);
err_quit("successes (%d) is different from j (%d)",
successes, j);
qsort(good_results, successes, sizeof(struct timeval), tvcmp);
/*
* for (i = 1; i <= number; i++) { printf("---\nTime %d th:
* %d.%06d seconds\n", i, results[i-1].tv_sec,
* results[i-1].tv_usec); }
*/
* for (i = 1; i <= number; i++) { printf("---\nTime %d th:
* %d.%06d seconds\n", i, results[i-1].tv_sec,
* results[i-1].tv_usec); }
*/
if ((successes % 2) == 1) {
/*
* printf("Searching good_results[%d]\n", (successes
* + 1) / 2 - 1);
*/
* printf("Searching good_results[%d]\n", (successes
* + 1) / 2 - 1);
*/
median = good_results[((successes + 1) / 2 - 1)];
} else {
/*
* printf("Searching good_results[%d] and [%d]\n",
* (successes / 2) - 1, successes / 2);
*/
* printf("Searching good_results[%d] and [%d]\n",
* (successes / 2) - 1, successes / 2);
*/
tvadd(&median, &good_results[(successes / 2) - 1]);
tvadd(&median, &good_results[successes / 2]);
tvavg(&median, 2);

@ -5,9 +5,9 @@
/* Most of error-handling routines stolen from Stevens' books */
void
my_perror ()
my_perror()
{
fprintf (stderr, " %s\n", sys_err_str ());
fprintf(stderr, " %s\n", sys_err_str());
}
/*
@ -20,20 +20,20 @@ my_perror ()
/* VARARGS1 */
void
err_ret (char *str, ...)
err_ret(char *str, ...)
{
va_list args;
va_list args;
va_start (args, str);
vfprintf (stderr, str, args);
va_end (args);
va_start(args, str);
vfprintf(stderr, str, args);
va_end(args);
my_perror ();
my_perror();
fflush (stdout);
fflush (stderr);
fflush(stdout);
fflush(stderr);
return;
return;
}
/*
@ -47,16 +47,16 @@ err_ret (char *str, ...)
/* VARARGS1 */
void
err_quit (char *str, ...)
err_quit(char *str, ...)
{
va_list args;
va_list args;
va_start (args, str);
vfprintf (stderr, str, args);
fputc ('\n', stderr);
va_end (args);
va_start(args, str);
vfprintf(stderr, str, args);
fputc('\n', stderr);
va_end(args);
exit (1);
exit(1);
}
/*
@ -71,25 +71,25 @@ err_quit (char *str, ...)
/* VARARGS1 */
void
err_sys (char *str, ...)
err_sys(char *str, ...)
{
va_list args;
va_list args;
va_start (args, str);
vfprintf (stderr, str, args);
va_end (args);
va_start(args, str);
vfprintf(stderr, str, args);
va_end(args);
my_perror ();
my_perror();
exit (1);
exit(1);
}
void
usage (poptContext context)
usage(poptContext context)
{
poptPrintUsage (context, stderr, 0);
fprintf (stderr, " hostname [plugin-options...]\n");
exit (1);
poptPrintUsage(context, stderr, 0);
fprintf(stderr, " hostname [plugin-options...]\n");
exit(1);
}
/*
@ -102,18 +102,15 @@ usage (poptContext context)
* decimal value of errno to the other system.
*/
char *
sys_err_str ()
char *
sys_err_str()
{
static char msgstr[200];
if (errno != 0)
{
sprintf (msgstr, "(%s)", strerror (errno));
}
else
{
msgstr[0] = '\0';
}
return (msgstr);
static char msgstr[200];
if (errno != 0) {
sprintf(msgstr, "(%s)", strerror(errno));
} else {
msgstr[0] = '\0';
}
return (msgstr);
}

@ -18,21 +18,30 @@ make_http_sendline(char *url, char *host, int port, int nocache)
char *cache_directive = "";
#ifdef HTTP10
if (nocache)
cache_directive = "Pragma: no-cache\r\n"; /* RFC 1945, "Hypertext
* Transfer Protocol --
* HTTP/1.0" */
cache_directive = "Pragma: no-cache\r\n"; /* RFC 1945,
* "Hypertext
* Transfer Protocol
* -- HTTP/1.0" */
sprintf(sendline,
"GET %s HTTP/1.0\r\nUser-Agent: Echoping/%s\r\n%s\r\n",
url, VERSION, cache_directive);
#else
if (nocache) {
if (nocache == 1)
cache_directive = "Cache-control: max-age=0\r\n"; /* Simply force a
* recheck with the
* server */
cache_directive = "Cache-control: max-age=0\r\n"; /* Simply
* force
* a
* recheck
* with
* the
* server
*/
else
cache_directive = "Cache-control: no-cache\r\n"; /* RFC 2616 "Hypertext
* Transfer Protocol --
cache_directive = "Cache-control: no-cache\r\n"; /* RFC
* 2616
* "Hypertext
* Transfer
* Protocol --
* HTTP/1.1" */
}
strcpy(hostname, HTParse(url, "", PARSE_HOST));
@ -75,7 +84,8 @@ read_from_server(CHANNEL fs, short ssl, boolean accept_redirects)
{
nr = TLS_readline(fs.tls, big_recvline, MAXTOREAD, TRUE);
if (nr == -1) {
err_ret("TLS_readline error: %s", gnutls_strerror(nr));
err_ret("TLS_readline error: %s",
gnutls_strerror(nr));
}
}
#endif
@ -100,7 +110,8 @@ read_from_server(CHANNEL fs, short ssl, boolean accept_redirects)
if (first_line) {
reply_code = big_recvline[9]; /* 9 because "HTTP/1.x
* 200..." */
if (reply_code != '2' && !(reply_code == '3' && accept_redirects))
if (reply_code != '2'
&& !(reply_code == '3' && accept_redirects))
/*
* Status codes beginning with 3 are not
* errors See bug #850674 and RFC 2616,
@ -128,7 +139,7 @@ read_from_server(CHANNEL fs, short ssl, boolean accept_redirects)
*/
if ((nr < 2) && (timeout_flag)) /* Probably a timeout */
return -1;
if (nr < 2) /* Hmm, if the body is empty, we'll get a
if (nr < 2) /* Hmm, if the body is empty, we'll get a *
* meaningless error message */
err_sys("Error reading HTTP body");
total = total + nr;

@ -11,97 +11,96 @@
#ifdef ICP
void *
make_icp_sendline (url, shost, opcode, length)
const char *url;
u_num32 *shost;
icp_opcode opcode;
int *length;
void *
make_icp_sendline(url, shost, opcode, length)
const char *url;
u_num32 *shost;
icp_opcode opcode;
int *length;
{
icp_common_t *headerp = NULL;
char *buf = NULL;
char *urloffset = NULL;
u_num32 flags = ICP_FLAG_SRC_RTT;
u_num32 pad = 0;
u_num32 reqnum = 4711;
unsigned short buf_len;
icp_common_t *headerp = NULL;
char *buf = NULL;
char *urloffset = NULL;
u_num32 flags = ICP_FLAG_SRC_RTT;
u_num32 pad = 0;
u_num32 reqnum = 4711;
unsigned short buf_len;
buf_len = sizeof (icp_common_t) + strlen (url) + 1;
if (opcode == ICP_OP_QUERY)
buf_len += sizeof (u_num32);
buf = calloc (buf_len, 1);
headerp = (icp_common_t *) buf;
headerp->opcode = opcode;
headerp->version = ICP_VERSION_CURRENT;
headerp->length = htons (buf_len);
headerp->reqnum = htonl (reqnum);
headerp->flags = htonl (flags);
headerp->pad = pad;
if (shost)
headerp->shostid = htonl (*shost);
/* urloffset = (char *) ((int) buf + sizeof(icp_common_t)); */
urloffset = (char *) (buf + sizeof (icp_common_t));
if (opcode == ICP_OP_QUERY)
urloffset += sizeof (u_num32);
memcpy (urloffset, url, strlen (url));
*length = buf_len;
return buf;
buf_len = sizeof(icp_common_t) + strlen(url) + 1;
if (opcode == ICP_OP_QUERY)
buf_len += sizeof(u_num32);
buf = calloc(buf_len, 1);
headerp = (icp_common_t *) buf;
headerp->opcode = opcode;
headerp->version = ICP_VERSION_CURRENT;
headerp->length = htons(buf_len);
headerp->reqnum = htonl(reqnum);
headerp->flags = htonl(flags);
headerp->pad = pad;
if (shost)
headerp->shostid = htonl(*shost);
/* urloffset = (char *) ((int) buf + sizeof(icp_common_t)); */
urloffset = (char *) (buf + sizeof(icp_common_t));
if (opcode == ICP_OP_QUERY)
urloffset += sizeof(u_num32);
memcpy(urloffset, url, strlen(url));
*length = buf_len;
return buf;
}
int
recv_icp (sockfd, buf, retcode)
int sockfd;
char *buf;
char *retcode;
recv_icp(sockfd, buf, retcode)
int sockfd;
char *buf;
char *retcode;
{ /*
* based on draft-wessels-icp-v2-02.txt
*/
icp_common_t *headerp = (icp_common_t *) buf;
int nr, length;
unsigned char opcode;
static char *icp_op_code[] = {
/* 0 */ "ICP_OP_INVALID",
/* 1 */ "ICP_OP_QUERY",
/* 2 */ "ICP_OP_HIT",
/* 3 */ "ICP_OP_MISS",
/* 4 */ "ICP_OP_ERR",
/* 5 */ "",
/* 6 */ "",
/* 7 */ "",
/* 8 */ "",
/* 9 */ "",
/* 10 */ "ICP_OP_SECHO",
/* 11 */ "ICP_OP_DECHO",
/* 12 */ "",
/* 13 */ "",
/* 14 */ "",
/* 15 */ "",
/* 16 */ "",
/* 17 */ "",
/* 18 */ "",
/* 19 */ "",
/* 20 */ "",
/* 21 */ "ICP_OP_MISS_NOFETCH",
/* 22 */ "ICP_OP_DENIED",
/* 23 */ "ICP_OP_HIT_OBJ"
};
icp_common_t *headerp = (icp_common_t *) buf;
int nr, length;
unsigned char opcode;
static char *icp_op_code[] = {
/* 0 */ "ICP_OP_INVALID",
/* 1 */ "ICP_OP_QUERY",
/* 2 */ "ICP_OP_HIT",
/* 3 */ "ICP_OP_MISS",
/* 4 */ "ICP_OP_ERR",
/* 5 */ "",
/* 6 */ "",
/* 7 */ "",
/* 8 */ "",
/* 9 */ "",
/* 10 */ "ICP_OP_SECHO",
/* 11 */ "ICP_OP_DECHO",
/* 12 */ "",
/* 13 */ "",
/* 14 */ "",
/* 15 */ "",
/* 16 */ "",
/* 17 */ "",
/* 18 */ "",
/* 19 */ "",
/* 20 */ "",
/* 21 */ "ICP_OP_MISS_NOFETCH",
/* 22 */ "ICP_OP_DENIED",
/* 23 */ "ICP_OP_HIT_OBJ"
};
nr = recvfrom (sockfd, buf, DEFLINE, 0, (struct sockaddr *) 0, (int *) 0);
if (nr < 0)
{
if (timeout_flag)
err_quit ("Timeout while reading");
else
err_sys ("No reply from ICP proxy server");
}
opcode = headerp->opcode;
length = ntohs (headerp->length);
sprintf (retcode, "ICP reply: \42%s\42", icp_op_code[opcode]);
return length;
nr = recvfrom(sockfd, buf, DEFLINE, 0, (struct sockaddr *) 0, (int *) 0);
if (nr < 0) {
if (timeout_flag)
err_quit("Timeout while reading");
else
err_sys("No reply from ICP proxy server");
}
opcode = headerp->opcode;
length = ntohs(headerp->length);
sprintf(retcode, "ICP reply: \42%s\42", icp_op_code[opcode]);
return length;
}
#endif /* ICP */
#endif /* ICP */

@ -12,12 +12,12 @@
#include <resolv.h>
struct addrinfo name_server;
poptContext dns_poptcon;
char *request;
int type;
char *type_name = NULL;
boolean use_tcp = FALSE;
boolean no_recurse = FALSE;
poptContext dns_poptcon;
char *request;
int type;
char *type_name = NULL;
boolean use_tcp = FALSE;
boolean no_recurse = FALSE;
/* nsError stolen from Liu & Albitz check_soa (in their book "DNS and BIND") */
@ -34,30 +34,29 @@ boolean no_recurse = FALSE;
* strings. *
****************************************************************/
int
nsError (error, domain)
int error;
char *domain;
nsError(error, domain)
int error;
char *domain;
{
switch (error)
{
case HOST_NOT_FOUND:
err_ret ("Unknown domain: %s\n", domain);
return -1;
case NO_DATA:
err_ret ("No records of type %s for %s in the Answer section\n",
to_upper (type_name), domain);
return -1;
case TRY_AGAIN:
err_ret ("No response for query\n");
return -2;
default:
err_ret ("Unexpected error\n");
return -1;
}
switch (error) {
case HOST_NOT_FOUND:
err_ret("Unknown domain: %s\n", domain);
return -1;
case NO_DATA:
err_ret("No records of type %s for %s in the Answer section\n",
to_upper(type_name), domain);
return -1;
case TRY_AGAIN:
err_ret("No response for query\n");
return -2;
default:
err_ret("Unexpected error\n");
return -1;
}
}
void
dns_usage (const char *msg)
dns_usage(const char *msg)
{
if (msg) {
fprintf(stderr, "Error: %s\n", msg);
@ -67,166 +66,152 @@ dns_usage (const char *msg)
exit(1);
}
char *
init (const int argc, const char **argv)
char *
init(const int argc, const char **argv)
{
int value;
char *hostname;
char *msg = malloc (256);
char *upper_type_name = NULL;
/* popt variables */
struct poptOption options[] = {
{"type", 't', POPT_ARG_STRING, &type_name, 0,
"Type of resources queried (A, MX, SOA, etc)",
"type"},
{"tcp", NULL, POPT_ARG_NONE, &use_tcp, 0,
"Use TCP for the request (virtual circuit)",
"tcp"},
{"no-recurse", NULL, POPT_ARG_NONE, &no_recurse, 0,
"Do not ask recursion",
"no-recurse"},
POPT_AUTOHELP POPT_TABLEEND
};
dns_poptcon = poptGetContext (NULL, argc,
argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt (dns_poptcon)) > 0)
{
}
if (value < -1)
{
sprintf (msg, "%s: %s",
poptBadOption (dns_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (value));
dns_usage (msg);
}
hostname = (char *) poptGetArg (dns_poptcon); /* Not used */
request = (char *) poptGetArg (dns_poptcon);
if (request == NULL)
dns_usage ("Mandatory request missing");
if ((type_name == NULL) || !strcmp (type_name, ""))
{
type = T_A;
type_name = "A";
}
else
{
upper_type_name = (char *) to_upper (type_name);
/*
* TODO: a better algorithm. Use dns_rdatatype_fromtext in
* BIND ?
*/
if (!strcmp (upper_type_name, "A"))
type = T_A;
else if (!strcmp (upper_type_name, "AAAA"))
type = T_AAAA;
else if (!strcmp (upper_type_name, "NS"))
type = T_NS;
else if (!strcmp (upper_type_name, "SOA"))
type = T_SOA;
else if (!strcmp (upper_type_name, "MX"))
type = T_MX;
else if (!strcmp (upper_type_name, "SRV"))
type = T_SRV;
else if (!strcmp (upper_type_name, "CNAME"))
type = T_CNAME;
else if (!strcmp (upper_type_name, "PTR"))
type = T_PTR;
else if (!strcmp (upper_type_name, "TXT"))
type = T_TXT;
else if (!strcmp (upper_type_name, "ANY"))
type = T_ANY;
else
dns_usage ("Unknown type");
}
return "domain";
int value;
char *hostname;
char *msg = malloc(256);
char *upper_type_name = NULL;
/* popt variables */
struct poptOption options[] = {
{"type", 't', POPT_ARG_STRING, &type_name, 0,
"Type of resources queried (A, MX, SOA, etc)",
"type"},
{"tcp", NULL, POPT_ARG_NONE, &use_tcp, 0,
"Use TCP for the request (virtual circuit)",
"tcp"},
{"no-recurse", NULL, POPT_ARG_NONE, &no_recurse, 0,
"Do not ask recursion",
"no-recurse"},
POPT_AUTOHELP POPT_TABLEEND
};
dns_poptcon = poptGetContext(NULL, argc,
argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt(dns_poptcon)) > 0) {
}
if (value < -1) {
sprintf(msg, "%s: %s",
poptBadOption(dns_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(value));
dns_usage(msg);
}
hostname = (char *) poptGetArg(dns_poptcon); /* Not used */
request = (char *) poptGetArg(dns_poptcon);
if (request == NULL)
dns_usage("Mandatory request missing");
if ((type_name == NULL) || !strcmp(type_name, "")) {
type = T_A;
type_name = "A";
} else {
upper_type_name = (char *) to_upper(type_name);
/*
* TODO: a better algorithm. Use dns_rdatatype_fromtext in
* BIND ?
*/
if (!strcmp(upper_type_name, "A"))
type = T_A;
else if (!strcmp(upper_type_name, "AAAA"))
type = T_AAAA;
else if (!strcmp(upper_type_name, "NS"))
type = T_NS;
else if (!strcmp(upper_type_name, "SOA"))
type = T_SOA;
else if (!strcmp(upper_type_name, "MX"))
type = T_MX;
else if (!strcmp(upper_type_name, "SRV"))
type = T_SRV;
else if (!strcmp(upper_type_name, "CNAME"))
type = T_CNAME;
else if (!strcmp(upper_type_name, "PTR"))
type = T_PTR;
else if (!strcmp(upper_type_name, "TXT"))
type = T_TXT;
else if (!strcmp(upper_type_name, "ANY"))
type = T_ANY;
else
dns_usage("Unknown type");
}
return "domain";
}
void
start (struct addrinfo *res)
start(struct addrinfo *res)
{
struct sockaddr name_server_sockaddr;
struct sockaddr_in name_server_sockaddr_in;
struct sockaddr_in6 name_server_sockaddr_in6;
name_server = *res;
name_server_sockaddr = *name_server.ai_addr;
if (name_server_sockaddr.sa_family == AF_INET)
{
/* Converts a generic sockaddr to an IPv4 sockaddr_in */
(void) memcpy ((void *) &name_server_sockaddr_in, &name_server_sockaddr,
sizeof (struct sockaddr));
}
else if (name_server_sockaddr.sa_family == AF_INET6)
{
/* TODO: the code for IPv6 servers is hopelessly broken. Start again */
fprintf (stderr, "WARNING: IPv6 nameservers not really supported yet (experts may apply). Falling back to IPv4 and the default server. You may use -4, too\n");
struct sockaddr name_server_sockaddr;
struct sockaddr_in name_server_sockaddr_in;
struct sockaddr_in6 name_server_sockaddr_in6;
name_server = *res;
name_server_sockaddr = *name_server.ai_addr;
if (name_server_sockaddr.sa_family == AF_INET) {
/* Converts a generic sockaddr to an IPv4 sockaddr_in */
(void) memcpy((void *) &name_server_sockaddr_in,
&name_server_sockaddr, sizeof(struct sockaddr));
} else if (name_server_sockaddr.sa_family == AF_INET6) {
/* TODO: the code for IPv6 servers is hopelessly broken. Start again
*/
fprintf(stderr,
"WARNING: IPv6 nameservers not really supported yet (experts may apply). Falling back to IPv4 and the default server. You may use -4, too\n");
#ifdef HAVE_RES_EXT
/* Converts a generic sockaddr to an IPv6 sockaddr_in6 */
(void) memcpy ((void *) &name_server_sockaddr_in6,
&name_server_sockaddr, sizeof (struct sockaddr));
/* Converts a generic sockaddr to an IPv6 sockaddr_in6 */
(void) memcpy((void *) &name_server_sockaddr_in6,
&name_server_sockaddr, sizeof(struct sockaddr));
#else
err_quit
("IPv6 name servers not supported on this platform, may be you should use the -4 option");
err_quit
("IPv6 name servers not supported on this platform, may be you should use the -4 option");
#endif
}
else
{
err_quit ("Unknown family for address of the server");
}
if (res_init () < 0)
err_sys ("res_init");
if (name_server_sockaddr.sa_family == AF_INET)
{
_res.nsaddr_list[0] = name_server_sockaddr_in;
}
else if (name_server_sockaddr.sa_family == AF_INET6)
{
} else {
err_quit("Unknown family for address of the server");
}
if (res_init() < 0)
err_sys("res_init");
if (name_server_sockaddr.sa_family == AF_INET) {
_res.nsaddr_list[0] = name_server_sockaddr_in;
} else if (name_server_sockaddr.sa_family == AF_INET6) {
#ifdef HAVE_RES_EXT
/* TODO: completely broken, dioes not work. Check in Stevens */
(void)memcpy(_res_ext.nsaddr_list, &name_server_sockaddr_in6, sizeof(struct sockaddr_in6));
(void) memcpy(_res_ext.nsaddr_list, &name_server_sockaddr_in6,
sizeof(struct sockaddr_in6));
#endif
}
_res.nscount = 1;
_res.options &= ~(RES_DNSRCH | RES_DEFNAMES | RES_NOALIASES);
if (use_tcp)
{
_res.options |= RES_USEVC;
}
if (no_recurse)
{
_res.options &= ~RES_RECURSE;
}
}
_res.nscount = 1;
_res.options &= ~(RES_DNSRCH | RES_DEFNAMES | RES_NOALIASES);
if (use_tcp) {
_res.options |= RES_USEVC;
}
if (no_recurse) {
_res.options &= ~RES_RECURSE;
}
}
int
execute ()
execute()
{
union
{
HEADER hdr; /* defined in resolv.h */
u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */
} response; /* response buffers */
int response_length; /* buffer length */
if ((response_length = res_query (request, /* the domain we care
* about */
C_IN, /* Internet class records */
type, (u_char *) & response, /* response buffer */
sizeof (response))) /* buffer size */
< 0)
{ /* If negative */
nsError (h_errno, request); /* report the error */
if (h_errno == TRY_AGAIN)
return -1; /* More luck next time? */
else
return -2; /* Give in */
}
/*
* TODO: better analysis of the replies. For instance, replies can be
* in the authority section (delegation info)
*/
return 0;
union {
HEADER hdr; /* defined in resolv.h */
u_char buf[PACKETSZ]; /* defined in arpa/nameser.h */
} response; /* response buffers */
int response_length; /* buffer length */
if ((response_length = res_query(request, /* the domain we care about */
C_IN, /* Internet class records */
type, (u_char *) & response, /* response
* buffer */
sizeof(response))) /* buffer size */
<0) { /* If negative */
nsError(h_errno, request); /* report the error */
if (h_errno == TRY_AGAIN)
return -1; /* More luck next time? */
else
return -2; /* Give in */
}
/*
* TODO: better analysis of the replies. For instance, replies can be
* in the authority section (delegation info)
*/
return 0;
}
void
terminate ()
terminate()
{
}

@ -11,153 +11,149 @@
#endif
#include <ldap.h>
const char *request = NULL;
const char *base = NULL;
int scope = LDAP_SCOPE_BASE;
const char *hostname;
int port = 0;
LDAP *session;
poptContext ldap_poptcon;
const char *request = NULL;
const char *base = NULL;
int scope = LDAP_SCOPE_BASE;
const char *hostname;
int port = 0;
LDAP *session;
poptContext ldap_poptcon;
echoping_options global_options;
void
ldap_usage (const char *msg)
ldap_usage(const char *msg)
{
if (msg)
{
printf ("LDAP plugin error: %s\n", msg);
}
poptPrintUsage (ldap_poptcon, stdout, 0);
exit (1);
if (msg) {
printf("LDAP plugin error: %s\n", msg);
}
poptPrintUsage(ldap_poptcon, stdout, 0);
exit(1);
}
char *
init (const int argc, const char **argv,
const echoping_options global_external_options)
char *
init(const int argc, const char **argv,
const echoping_options global_external_options)
{
int value;
char *msg = malloc (MAX_LINE);
char *rest, *port_text;
char *scope_string = NULL;
/* popt variables */
struct poptOption options[] = {
{"request", 'r', POPT_ARG_STRING, &request, 0,
"Request (filter) to send to the LDAP server", "r"},
{"base", 'b', POPT_ARG_STRING, &base, 0,
"Base of the LDAP tree", "b"},
{"scope", 's', POPT_ARG_STRING, &scope_string, 0,
"Scope of the search in the LDAP tree (sub, one or base)", "s"},
{"port", 'p', POPT_ARG_INT, &port, 0,
"TCP port to connect to the LDAP server", "p"},
POPT_AUTOHELP POPT_TABLEEND
};
global_options = global_external_options;
if (global_options.udp)
err_quit ("UDP makes no sense for a LDAP connection");
ldap_poptcon = poptGetContext (NULL, argc,
argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt (ldap_poptcon)) > 0)
{
}
if (value < -1)
{
sprintf (msg, "%s: %s",
poptBadOption (ldap_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (value));
ldap_usage (msg);
}
if (port == 0)
port = LDAP_PORT;
hostname = poptGetArg (ldap_poptcon);
rest = poptGetArg (ldap_poptcon);
if (rest != NULL)
{
fprintf (stderr, "%s: ", rest);
ldap_usage ("Additional arguments");
}
if (base == NULL)
base = "";
if (request == NULL || !strcmp (request, ""))
request = "(objectclass=*)";
if (scope_string != NULL)
{
scope_string = to_upper (scope_string);
if (!strcmp (scope_string, "BASE"))
scope = LDAP_SCOPE_BASE;
else if (!strcmp (scope_string, "SUB"))
scope = LDAP_SCOPE_SUBTREE;
else if (!strcmp (scope_string, "ONE"))
scope = LDAP_SCOPE_ONELEVEL;
else
err_quit ("Invalid scope \"%s\"", scope_string);
}
if (port == LDAP_PORT)
{
return "ldap";
}
else
{
port_text = malloc (99);
sprintf (port_text, "%d", port);
return port_text;
}
int value;
char *msg = malloc(MAX_LINE);
char *rest, *port_text;
char *scope_string = NULL;
/* popt variables */
struct poptOption options[] = {
{"request", 'r', POPT_ARG_STRING, &request, 0,
"Request (filter) to send to the LDAP server", "r"},
{"base", 'b', POPT_ARG_STRING, &base, 0,
"Base of the LDAP tree", "b"},
{"scope", 's', POPT_ARG_STRING, &scope_string, 0,
"Scope of the search in the LDAP tree (sub, one or base)", "s"},
{"port", 'p', POPT_ARG_INT, &port, 0,
"TCP port to connect to the LDAP server", "p"},
POPT_AUTOHELP POPT_TABLEEND
};
global_options = global_external_options;
if (global_options.udp)
err_quit("UDP makes no sense for a LDAP connection");
ldap_poptcon = poptGetContext(NULL, argc,
argv, options, POPT_CONTEXT_KEEP_FIRST);
while ((value = poptGetNextOpt(ldap_poptcon)) > 0) {
}
if (value < -1) {
sprintf(msg, "%s: %s",
poptBadOption(ldap_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(value));
ldap_usage(msg);
}
if (port == 0)
port = LDAP_PORT;
hostname = poptGetArg(ldap_poptcon);
rest = poptGetArg(ldap_poptcon);
if (rest != NULL) {
fprintf(stderr, "%s: ", rest);
ldap_usage("Additional arguments");
}
if (base == NULL)
base = "";
if (request == NULL || !strcmp(request, ""))
request = "(objectclass=*)";
if (scope_string != NULL) {
scope_string = to_upper(scope_string);
if (!strcmp(scope_string, "BASE"))
scope = LDAP_SCOPE_BASE;
else if (!strcmp(scope_string, "SUB"))
scope = LDAP_SCOPE_SUBTREE;
else if (!strcmp(scope_string, "ONE"))
scope = LDAP_SCOPE_ONELEVEL;
else
err_quit("Invalid scope \"%s\"", scope_string);
}
if (port == LDAP_PORT) {
return "ldap";
} else {
port_text = malloc(99);
sprintf(port_text, "%d", port);
return port_text;
}
}
void
start ()
start()
{
int result;
LDAPMessage *response;
int result;
LDAPMessage *response;
session = ldap_init (hostname, port);
if (session == NULL)
err_sys ("Cannot initialize LDAP");
/* TODO: allow non-anonymous connections, with ldap_bind_simple_s */
/*
* Unfortunately, ldap_init does not connect to the LDAP server. So
* connection errors (e.g. firewall), will not be detected here and
* loop will go on.
*
* To quote the man page: ldap_init() acts just like ldap_open(), but
* does not open a connection to the LDAP server. The actual
* connection open will occur when the first operation is attempted.
* At this time, ldap_init() is preferred. ldap_open() will be
* depreciated in a later release.
*
* So, we perform a dummy search immediately.
*/
result = ldap_search_s (session, base, LDAP_SCOPE_ONELEVEL, "(objectclass=*)", NULL, /* Return all attributes */
1, &response);
if (result != 0)
{
err_quit
("Cannot connect to %s (no LDAP server or wrong base, probably): %s",
hostname, ldap_err2string (result));
}
session = ldap_init(hostname, port);
if (session == NULL)
err_sys("Cannot initialize LDAP");
/* TODO: allow non-anonymous connections, with ldap_bind_simple_s */
/*
* Unfortunately, ldap_init does not connect to the LDAP server. So
* connection errors (e.g. firewall), will not be detected here and
* loop will go on.
*
* To quote the man page: ldap_init() acts just like ldap_open(), but
* does not open a connection to the LDAP server. The actual
* connection open will occur when the first operation is attempted.
* At this time, ldap_init() is preferred. ldap_open() will be
* depreciated in a later release.
*
* So, we perform a dummy search immediately.
*/
result = ldap_search_s(session, base, LDAP_SCOPE_ONELEVEL, "(objectclass=*)", NULL, /* Return
* all
* attributes
*/
1, &response);
if (result != 0) {
err_quit
("Cannot connect to %s (no LDAP server or wrong base, probably): %s",
hostname, ldap_err2string(result));
}
}
int
execute ()
execute()
{
int result;
LDAPMessage *response;
result = ldap_search_s (session, base, scope, request, NULL, /* Return all attributes */
0, /* Return attribute types *and*
* values */
&response);
if (result != 0)
{
err_ret ("Cannot search \"%s\": %s", request, ldap_err2string (result));
return -1;
}
if (global_options.verbose)
printf ("Retrieved: %d entries\n",
ldap_count_entries (session, response));
return 0;
int result;
LDAPMessage *response;
result = ldap_search_s(session, base, scope, request, NULL, /* Return
* all
* attributes
*/
0, /* Return attribute types *and* values */
&response);
if (result != 0) {
err_ret("Cannot search \"%s\": %s", request,
ldap_err2string(result));
return -1;
}
if (global_options.verbose)
printf("Retrieved: %d entries\n",
ldap_count_entries(session, response));
return 0;
}
void
terminate ()
terminate()
{
ldap_unbind_s (session);
ldap_unbind_s(session);
}

@ -16,145 +16,132 @@
#include <libpq-fe.h>
#endif
const char *request = NULL;
int readall = FALSE;
int connect_each_time = FALSE;
poptContext postgresql_poptcon;
PGconn *conn;
PGresult *res;
char *conninfo;
const char *request = NULL;
int readall = FALSE;
int connect_each_time = FALSE;
poptContext postgresql_poptcon;
PGconn *conn;
PGresult *res;
char *conninfo;
echoping_options global_options;
void
postgresql_usage (const char *msg)
postgresql_usage(const char *msg)
{
if (msg)
{
printf ("PostgreSQL plugin error: %s\n", msg);
}
poptPrintUsage (postgresql_poptcon, stdout, 0);
fprintf (stderr, " [SQL-request]\n");
exit (1);
if (msg) {
printf("PostgreSQL plugin error: %s\n", msg);
}
poptPrintUsage(postgresql_poptcon, stdout, 0);
fprintf(stderr, " [SQL-request]\n");
exit(1);
}
char *
init (const int argc, const char **argv,
const echoping_options global_external_options)
char *
init(const int argc, const char **argv,
const echoping_options global_external_options)
{
int value;
char *msg = malloc (256);
char *rest;
/* popt variables */
struct poptOption options[] = {
{"conninfo", 'c', POPT_ARG_STRING, &conninfo, 0,
"Connection information for the Postgresql server. Something like 'host=foo dbname=bar''",
""},
{"readall", 'a', POPT_ARG_NONE, &readall, 0,
"Read all the data sent by the Postgresql server",
""},
{"connect-each-time", 'e', POPT_ARG_NONE, &connect_each_time, 0,
"(Re)Connect to the Postgresql server at each iteration",
""},
POPT_AUTOHELP POPT_TABLEEND
};
global_options = global_external_options;
if (global_options.udp)
err_quit ("UDP makes no sense for a PostgreSQL connection");
postgresql_poptcon = poptGetContext (NULL, argc,
argv, options,
POPT_CONTEXT_POSIXMEHARDER);
while ((value = poptGetNextOpt (postgresql_poptcon)) > 0)
{
}
if (value < -1)
{
sprintf (msg, "%s: %s",
poptBadOption (postgresql_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (value));
postgresql_usage (msg);
}
request = poptGetArg (postgresql_poptcon);
if (request == NULL)
request = "SELECT now()";
rest = poptGetArg (postgresql_poptcon);
if (rest != NULL)
postgresql_usage ("Erroneous additional arguments");
if (conninfo == NULL)
conninfo = "";
return NULL; /* We only use the conninfo, echoping does not see our hostname or port */
int value;
char *msg = malloc(256);
char *rest;
/* popt variables */
struct poptOption options[] = {
{"conninfo", 'c', POPT_ARG_STRING, &conninfo, 0,
"Connection information for the Postgresql server. Something like 'host=foo dbname=bar''",
""},
{"readall", 'a', POPT_ARG_NONE, &readall, 0,
"Read all the data sent by the Postgresql server",
""},
{"connect-each-time", 'e', POPT_ARG_NONE, &connect_each_time, 0,
"(Re)Connect to the Postgresql server at each iteration",
""},
POPT_AUTOHELP POPT_TABLEEND
};
global_options = global_external_options;
if (global_options.udp)
err_quit("UDP makes no sense for a PostgreSQL connection");
postgresql_poptcon = poptGetContext(NULL, argc,
argv, options,
POPT_CONTEXT_POSIXMEHARDER);
while ((value = poptGetNextOpt(postgresql_poptcon)) > 0) {
}
if (value < -1) {
sprintf(msg, "%s: %s",
poptBadOption(postgresql_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(value));
postgresql_usage(msg);
}
request = poptGetArg(postgresql_poptcon);
if (request == NULL)
request = "SELECT now()";
rest = poptGetArg(postgresql_poptcon);
if (rest != NULL)
postgresql_usage("Erroneous additional arguments");
if (conninfo == NULL)
conninfo = "";
return NULL; /* We only use the conninfo, echoping does not see
* our hostname or port */
}
void
start_raw ()
start_raw()
{
if (!connect_each_time)
{
conn = PQconnectdb (conninfo);
if (conn == NULL)
{
err_quit ("Cannot create connection\n");
}
if (PQstatus (conn) == CONNECTION_BAD)
{
err_quit ("Connection failed: %s\n", PQerrorMessage (conn));
if (!connect_each_time) {
conn = PQconnectdb(conninfo);
if (conn == NULL) {
err_quit("Cannot create connection\n");
}
if (PQstatus(conn) == CONNECTION_BAD) {
err_quit("Connection failed: %s\n", PQerrorMessage(conn));
}
}
}
}
int
execute ()
execute()
{
unsigned int row, column;
char *result;
if (connect_each_time)
{
conn = PQconnectdb (conninfo);
if (conn == NULL)
{
err_ret ("Cannot create connection\n");
return -1;
unsigned int row, column;
char *result;
if (connect_each_time) {
conn = PQconnectdb(conninfo);
if (conn == NULL) {
err_ret("Cannot create connection\n");
return -1;
}
if (PQstatus(conn) == CONNECTION_BAD) {
err_ret("Connection failed: %s\n", PQerrorMessage(conn));
return -1;
}
}
if (PQstatus (conn) == CONNECTION_BAD)
{
err_ret ("Connection failed: %s\n", PQerrorMessage (conn));
return -1;
res = PQexec(conn, request);
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
err_ret("Cannot run \"%s\": %s\n", request,
PQresultErrorMessage(res));
return -1;
}
}
res = PQexec (conn, request);
if (PQresultStatus (res) != PGRES_TUPLES_OK)
{
err_ret ("Cannot run \"%s\": %s\n", request,
PQresultErrorMessage (res));
return -1;
}
if (global_options.verbose)
printf ("%d tuples returned\n", PQntuples (res));
if (readall)
{
for (row = 0; row < PQntuples (res); row++)
{
for (column = 0; column < PQnfields (res); column++)
{
result = PQgetvalue (res, row, column);
if (result == NULL)
{
err_ret ("Cannot retrieve value [%d,%d]\n", row, column);
return -1;
if (global_options.verbose)
printf("%d tuples returned\n", PQntuples(res));
if (readall) {
for (row = 0; row < PQntuples(res); row++) {
for (column = 0; column < PQnfields(res); column++) {
result = PQgetvalue(res, row, column);
if (result == NULL) {
err_ret("Cannot retrieve value [%d,%d]\n",
row, column);
return -1;
}
/* else { printf ("DEBUG: [%d,%d] %s\n", row,
* column, result); } */
}
}
/* else {
printf ("DEBUG: [%d,%d] %s\n", row, column, result);
} */
}
}
}
if (connect_each_time)
PQfinish (conn);
return 0;
if (connect_each_time)
PQfinish(conn);
return 0;
}
void
terminate ()
terminate()
{
if (!connect_each_time)
PQfinish (conn);
if (!connect_each_time)
PQfinish(conn);
}

@ -9,24 +9,29 @@
#include <time.h>
#include <unistd.h>
char *
init (const int argc, const char *argv[])
char *
init(const int argc, const char *argv[])
{
struct timeval tv;
(void) gettimeofday (&tv, (struct timezone *) NULL);
srand (tv.tv_usec);
return "7"; /* Not used, just to say we use the cooked interface */
struct timeval tv;
(void) gettimeofday(&tv, (struct timezone *) NULL);
srand(tv.tv_usec);
return "7"; /* Not used, just to say we use the cooked interface
*/
}
void start ()
void
start()
{
}
int
execute ()
execute()
{
usleep (rand () % 1000000);
return 1;
usleep(rand() % 1000000);
return 1;
}
void terminate() {}
void
terminate()
{
}

@ -14,106 +14,103 @@
#define MAX_REQUEST 256
struct addrinfo whois_server;
char *hostname;
const char *request = NULL;
int dump = FALSE;
int n;
int sockfd;
FILE *files = NULL;
poptContext whois_poptcon;
char *hostname;
const char *request = NULL;
int dump = FALSE;
int n;
int sockfd;
FILE *files = NULL;
poptContext whois_poptcon;
void
whois_usage (const char *msg)
whois_usage(const char *msg)
{
if (msg)
{
printf ("Error: %s\n", msg);
}
poptPrintUsage (whois_poptcon, stdout, 0);
fprintf (stderr, " request\n");
exit (1);
if (msg) {
printf("Error: %s\n", msg);
}
poptPrintUsage(whois_poptcon, stdout, 0);
fprintf(stderr, " request\n");
exit(1);
}
char *
init (const int argc, const char **argv, echoping_options global_options)
char *
init(const int argc, const char **argv, echoping_options global_options)
{
int value;
char *msg = malloc (256);
char *rest;
/* popt variables */
struct poptOption options[] = {
{"dump", 'd', POPT_ARG_NONE, &dump, 'd',
"Dumps the reply from the whois server",
""},
POPT_AUTOHELP POPT_TABLEEND
};
if (global_options.udp)
err_quit ("UDP is incompatible with this whois plugin");
/* Will probably be catched before because /etc/services have no entry for UDP port 43 */
whois_poptcon = poptGetContext (NULL, argc,
argv, options, POPT_CONTEXT_POSIXMEHARDER);
while ((value = poptGetNextOpt (whois_poptcon)) > 0)
{
switch ((char) value)
{
case 'd':
break;
default:
sprintf (msg, "Wrong option %d (%c)", value, (char) value);
whois_usage (msg);
int value;
char *msg = malloc(256);
char *rest;
/* popt variables */
struct poptOption options[] = {
{"dump", 'd', POPT_ARG_NONE, &dump, 'd',
"Dumps the reply from the whois server",
""},
POPT_AUTOHELP POPT_TABLEEND
};
if (global_options.udp)
err_quit("UDP is incompatible with this whois plugin");
/* Will probably be catched before because /etc/services have no entry for
* UDP port 43 */
whois_poptcon = poptGetContext(NULL, argc,
argv, options, POPT_CONTEXT_POSIXMEHARDER);
while ((value = poptGetNextOpt(whois_poptcon)) > 0) {
switch ((char) value) {
case 'd':
break;
default:
sprintf(msg, "Wrong option %d (%c)", value, (char) value);
whois_usage(msg);
}
}
if (value < -1) {
sprintf(msg, "%s: %s",
poptBadOption(whois_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror(value));
whois_usage(msg);
}
}
if (value < -1)
{
sprintf (msg, "%s: %s",
poptBadOption (whois_poptcon, POPT_BADOPTION_NOALIAS),
poptStrerror (value));
whois_usage (msg);
}
request = (char *) poptGetArg (whois_poptcon);
if (request == NULL)
whois_usage ("Mandatory request missing");
rest = (char *) poptGetArg (whois_poptcon);
if (rest != NULL && strcmp (rest, ""))
whois_usage ("Extraneous arguments ignored");
return "nicname";
request = (char *) poptGetArg(whois_poptcon);
if (request == NULL)
whois_usage("Mandatory request missing");
rest = (char *) poptGetArg(whois_poptcon);
if (rest != NULL && strcmp(rest, ""))
whois_usage("Extraneous arguments ignored");
return "nicname";
}
void
start (struct addrinfo *res)
start(struct addrinfo *res)
{
whois_server = *res;
whois_server = *res;
}
int
execute ()
execute()
{
int nr = 0;
char recvline[MAX_LINE + 1];
char complete_request[MAX_REQUEST];
if ((sockfd =
socket (whois_server.ai_family, whois_server.ai_socktype,
whois_server.ai_protocol)) < 0)
err_sys ("Can't open socket");
if (connect (sockfd, whois_server.ai_addr, whois_server.ai_addrlen) < 0)
err_sys ("Can't connect to server");
if ((files = fdopen (sockfd, "r")) == NULL)
err_sys ("Cannot fdopen");
sprintf (complete_request, "%s\r\n", request);
n = strlen (complete_request);
if (writen (sockfd, complete_request, n) != n)
err_sys ("writen error on socket");
/* Read from the server */
while ((nr = readline (files, recvline, MAX_LINE, 0)) > 0)
if (dump)
printf ("%s", recvline);
if (dump)
printf ("\n");
close (sockfd);
return 1;
int nr = 0;
char recvline[MAX_LINE + 1];
char complete_request[MAX_REQUEST];
if ((sockfd =
socket(whois_server.ai_family, whois_server.ai_socktype,
whois_server.ai_protocol)) < 0)
err_sys("Can't open socket");
if (connect(sockfd, whois_server.ai_addr, whois_server.ai_addrlen) < 0)
err_sys("Can't connect to server");
if ((files = fdopen(sockfd, "r")) == NULL)
err_sys("Cannot fdopen");
sprintf(complete_request, "%s\r\n", request);
n = strlen(complete_request);
if (writen(sockfd, complete_request, n) != n)
err_sys("writen error on socket");
/* Read from the server */
while ((nr = readline(files, recvline, MAX_LINE, 0)) > 0)
if (dump)
printf("%s", recvline);
if (dump)
printf("\n");
close(sockfd);
return 1;
}
void
terminate ()
terminate()
{
}

@ -8,219 +8,189 @@
#include "echoping.h"
int
readline (fs, ptr, maxlen, ln)
FILE *fs;
char *ptr;
int maxlen;
unsigned short ln;
readline(fs, ptr, maxlen, ln)
FILE *fs;
char *ptr;
int maxlen;
unsigned short ln;
{
int n = 1;
char *rc;
int r;
int n = 1;
char *rc;
int r;
/* Reading with fgets or fread instead of read
one-character-at-a-time is more than ten times faster, on a local
server. */
if (ln)
{
rc = fgets (ptr, maxlen + 1, fs);
if (rc == NULL)
{
if (timeout_flag)
return n;
return (-1);
}
n = strlen (rc);
return n;
}
else
{
while (n < maxlen)
{
r = fread (ptr, 1, maxlen, fs);
if (timeout_flag)
return r;
if (r == 0)
{
if (n == 1)
return (0); /* EOF, no data read */
else
break; /* EOF, some data was read */
}
n = n + r;
/* Reading with fgets or fread instead of read one-character-at-a-time is
* more than ten times faster, on a local server. */
if (ln) {
rc = fgets(ptr, maxlen + 1, fs);
if (rc == NULL) {
if (timeout_flag)
return n;
return (-1);
}
n = strlen(rc);
return n;
} else {
while (n < maxlen) {
r = fread(ptr, 1, maxlen, fs);
if (timeout_flag)
return r;
if (r == 0) {
if (n == 1)
return (0); /* EOF, no data read */
else
break; /* EOF, some data was read */
}
n = n + r;
}
}
}
return (n);
return (n);
}
#ifdef OPENSSL
char SSL_buffer[MAXTOREAD];
int buf_ptr;
int buf_end;
char SSL_buffer[MAXTOREAD];
int buf_ptr;
int buf_end;
int
SSL_readline (sslh, ptr, maxlen, ln)
SSL *sslh;
char *ptr;
int maxlen;
unsigned short ln;
SSL_readline(sslh, ptr, maxlen, ln)
SSL *sslh;
char *ptr;
int maxlen;
unsigned short ln;
{
int rc = 0;
int n = 0;
int i, oi;
if (ln)
{
/* Empty buffer */
if (buf_end == 0)
{
rc = SSL_read (sslh, SSL_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
buf_ptr = 0;
}
/* No more data in the buffer */
else if (buf_ptr == buf_end)
{
buf_ptr = 0;
rc = SSL_read (sslh, SSL_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
}
else if (SSL_buffer[buf_end] != '\n')
{
/* We have a probleme here is the first SSL_read sent back
a text not finished by a \n. See www.SSL.de for an
example. We get more data. See bug #230384 */
rc = SSL_read (sslh, SSL_buffer + buf_end, maxlen);
if (rc == -1)
return rc;
buf_end = buf_end + rc;
}
for (oi = buf_ptr, i = buf_ptr;
i <= buf_end && SSL_buffer[i] != '\n'; i++)
{
*ptr++ = SSL_buffer[i];
buf_ptr++;
}
if (SSL_buffer[i] == '\n')
buf_ptr++;
*ptr = '\0';
/* if (ln)
printf ("SSL_readline returns %d (%s)\n", i - oi, SSL_buffer); */
return (i - oi);
}
else
{
/* OpenSSL reads at most 4096 characters */
rc = 1; /* Just to avoid exiting too soon */
while (n < maxlen && rc != 0)
{
if ((buf_end == 0) || (buf_ptr > buf_end))
{
rc = SSL_read (sslh, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
}
else
{
for (i = buf_ptr; i < maxlen && i <= buf_end; i++)
{
*ptr++ = SSL_buffer[i];
rc++;
int rc = 0;
int n = 0;
int i, oi;
if (ln) {
/* Empty buffer */
if (buf_end == 0) {
rc = SSL_read(sslh, SSL_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
buf_ptr = 0;
}
/* No more data in the buffer */
else if (buf_ptr == buf_end) {
buf_ptr = 0;
rc = SSL_read(sslh, SSL_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
} else if (SSL_buffer[buf_end] != '\n') {
/* We have a probleme here is the first SSL_read sent back a
* text not finished by a \n. See www.SSL.de for an example.
* We get more data. See bug #230384 */
rc = SSL_read(sslh, SSL_buffer + buf_end, maxlen);
if (rc == -1)
return rc;
buf_end = buf_end + rc;
}
for (oi = buf_ptr, i = buf_ptr;
i <= buf_end && SSL_buffer[i] != '\n'; i++) {
*ptr++ = SSL_buffer[i];
buf_ptr++;
}
buf_ptr = i;
}
n = n + rc;
if (SSL_buffer[i] == '\n')
buf_ptr++;
*ptr = '\0';
/* if (ln) printf ("SSL_readline returns %d (%s)\n", i - oi,
* SSL_buffer); */
return (i - oi);
} else {
/* OpenSSL reads at most 4096 characters */
rc = 1; /* Just to avoid exiting too soon */
while (n < maxlen && rc != 0) {
if ((buf_end == 0) || (buf_ptr > buf_end)) {
rc = SSL_read(sslh, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
} else {
for (i = buf_ptr; i < maxlen && i <= buf_end; i++) {
*ptr++ = SSL_buffer[i];
rc++;
}
buf_ptr = i;
}
n = n + rc;
}
return n;
}
return n;
}
}
#endif
#ifdef GNUTLS
char TLS_buffer[MAXTOREAD];
int buf_ptr;
int buf_end;
char TLS_buffer[MAXTOREAD];
int buf_ptr;
int buf_end;
int
TLS_readline (session, ptr, maxlen, ln)
gnutls_session session;
char *ptr;
int maxlen;
unsigned short ln;
TLS_readline(session, ptr, maxlen, ln)
gnutls_session session;
char *ptr;
int maxlen;
unsigned short ln;
{
int rc = 0;
int n = 0;
int i, oi;
if (ln)
{
/* Empty buffer */
if (buf_end == 0)
{
rc = gnutls_record_recv (session, TLS_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
buf_ptr = 0;
}
/* No more data in the buffer */
else if (buf_ptr == buf_end)
{
buf_ptr = 0;
rc = gnutls_record_recv (session, TLS_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
}
else if (TLS_buffer[buf_end] != '\n')
{
rc = gnutls_record_recv (session, TLS_buffer + buf_end, maxlen);
if (rc == -1)
return rc;
buf_end = buf_end + rc;
}
for (oi = buf_ptr, i = buf_ptr;
i <= buf_end && TLS_buffer[i] != '\n'; i++)
{
*ptr++ = TLS_buffer[i];
buf_ptr++;
}
if (TLS_buffer[i] == '\n')
buf_ptr++;
*ptr = '\0';
/* printf ("DEBUG: TLS_readline returns %d (%s)\n", i - oi, TLS_buffer); */
return (i - oi);
}
else
{
rc = 1; /* Just to avoid exiting too soon */
while (n < maxlen && rc > 0)
{
if ((buf_end == 0) || (buf_ptr > buf_end))
{
rc = gnutls_record_recv (session, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
}
else
{
for (i = buf_ptr; i < maxlen && i <= buf_end; i++)
{
*ptr++ = TLS_buffer[i];
rc++;
/* printf ("DEBUG: Now %d chars read\n", rc); */
int rc = 0;
int n = 0;
int i, oi;
if (ln) {
/* Empty buffer */
if (buf_end == 0) {
rc = gnutls_record_recv(session, TLS_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
buf_ptr = 0;
}
/* No more data in the buffer */
else if (buf_ptr == buf_end) {
buf_ptr = 0;
rc = gnutls_record_recv(session, TLS_buffer, maxlen);
if (rc == -1)
return rc;
buf_end = rc;
} else if (TLS_buffer[buf_end] != '\n') {
rc = gnutls_record_recv(session, TLS_buffer + buf_end,
maxlen);
if (rc == -1)
return rc;
buf_end = buf_end + rc;
}
for (oi = buf_ptr, i = buf_ptr;
i <= buf_end && TLS_buffer[i] != '\n'; i++) {
*ptr++ = TLS_buffer[i];
buf_ptr++;
}
if (TLS_buffer[i] == '\n')
buf_ptr++;
*ptr = '\0';
/* printf ("DEBUG: TLS_readline returns %d (%s)\n", i - oi,
* TLS_buffer); */
return (i - oi);
} else {
rc = 1; /* Just to avoid exiting too soon */
while (n < maxlen && rc > 0) {
if ((buf_end == 0) || (buf_ptr > buf_end)) {
rc = gnutls_record_recv(session, ptr, maxlen);
buf_end = 0;
buf_ptr = 0;
} else {
for (i = buf_ptr; i < maxlen && i <= buf_end; i++) {
*ptr++ = TLS_buffer[i];
rc++;
/* printf ("DEBUG: Now %d chars read\n",
* rc); */
}
buf_ptr = i;
}
if (rc > 0)
n = n + rc;
/* printf ("DEBUG: Now %d chars to send\n", n); */
}
buf_ptr = i;
}
if (rc > 0)
n = n + rc;
/* printf ("DEBUG: Now %d chars to send\n", n); */
return n;
}
return n;
}
}
#endif

@ -8,31 +8,27 @@
#ifdef SMTP
char big_recvline[MAXTOREAD];
char big_recvline[MAXTOREAD];
int
smtp_read_response_from_server (FILE *fs)
smtp_read_response_from_server(FILE * fs)
{
int nr;
int i;
int nr;
int i;
for (i = 0; i < MAXSMTPLINES; i++)
{
nr = readline (fs, big_recvline, MAXTOREAD, TRUE);
if (nr <= 4)
{
return -1;
for (i = 0; i < MAXSMTPLINES; i++) {
nr = readline(fs, big_recvline, MAXTOREAD, TRUE);
if (nr <= 4) {
return -1;
}
if (big_recvline[3] == ' ') {
return nr;
}
if (big_recvline[3] != '-') {
return -1;
}
}
if (big_recvline[3] == ' ')
{
return nr;
}
if (big_recvline[3] != '-')
{
return -1;
}
}
return -1;
return -1;
}
#endif /* SMTP */
#endif /* SMTP */

@ -9,44 +9,43 @@
#include <time.h>
#include <ctype.h>
char *
random_string (unsigned length)
char *
random_string(unsigned length)
{
char *state = (char *) malloc (sizeof (char) * STATES);
char *result = (char *) malloc (length + 1);
int i, number;
unsigned seed = (unsigned) time ((time_t *) NULL);
char *state = (char *) malloc(sizeof(char) * STATES);
char *result = (char *) malloc(length + 1);
int i, number;
unsigned seed = (unsigned) time((time_t *) NULL);
/* printf ("Seed is %u\n", seed); */
/* printf ("Seed is %u\n", seed); */
/* Initialize random generator */
(void) initstate (seed, state, STATES);
/* Initialize random generator */
(void) initstate(seed, state, STATES);
for (i = 0; i < length; i++)
{
number = (random () % 94) + 33;
/* printf ("Number for %d is %d\n", i, number); */
result[i] = (char) number;
}
result[length] = '\0';
for (i = 0; i < length; i++) {
number = (random() % 94) + 33;
/* printf ("Number for %d is %d\n", i, number); */
result[i] = (char) number;
}
result[length] = '\0';
/* printf ("Result is %s\n", result); */
/* printf ("Result is %s\n", result); */
return result;
return result;
}
char *
to_upper (char *input)
char *
to_upper(char *input)
{
int c;
char *result;
result = (char *) malloc (strlen (input));
for (c = 0; c < strlen (input); c++)
result[c] = toupper (input[c]);
result[strlen (input)] = '\0';
return result;
int c;
char *result;
result = (char *) malloc(strlen(input));
for (c = 0; c < strlen(input); c++)
result[c] = toupper(input[c]);
result[strlen(input)] = '\0';
return result;
}
/*
@ -54,155 +53,142 @@ to_upper (char *input)
* >= in. Comes from the bing program.
*/
void
tvsub (out, in)
struct timeval *out, *in;
tvsub(out, in)
struct timeval *out, *in;
{
if ((out->tv_usec -= in->tv_usec) < 0)
{
--out->tv_sec;
out->tv_usec += 1000000;
}
out->tv_sec -= in->tv_sec;
if ((out->tv_usec -= in->tv_usec) < 0) {
--out->tv_sec;
out->tv_usec += 1000000;
}
out->tv_sec -= in->tv_sec;
}
/* tvadd -- Adds 2 timeval structs: out = out + in. */
void
tvadd (out, in)
struct timeval *out, *in;
tvadd(out, in)
struct timeval *out, *in;
{
if ((out->tv_usec += in->tv_usec) >= 1000000)
{
++out->tv_sec;
out->tv_usec -= 1000000;
}
out->tv_sec += in->tv_sec;
if ((out->tv_usec += in->tv_usec) >= 1000000) {
++out->tv_sec;
out->tv_usec -= 1000000;
}
out->tv_sec += in->tv_sec;
}
/* tvavg -- Averages a timeval struct */
void
tvavg (out, number)
struct timeval *out;
int number;
tvavg(out, number)
struct timeval *out;
int number;
{
double result;
/*
* out->tv_sec = out->tv_sec/number; out->tv_usec =
* out->tv_usec/number;
*/
result = (1000000 * out->tv_sec + out->tv_usec) / number;
/* printf ("Result of average is %f\n", result) */ ;
out->tv_sec = (long) (result / 1000000);
out->tv_usec = (long) (result - (out->tv_sec * 1000000));
double result;
/*
* out->tv_sec = out->tv_sec/number; out->tv_usec =
* out->tv_usec/number;
*/
result = (1000000 * out->tv_sec + out->tv_usec) / number;
/* printf ("Result of average is %f\n", result) */ ;
out->tv_sec = (long) (result / 1000000);
out->tv_usec = (long) (result - (out->tv_sec * 1000000));
}
/* tvstddev -- Computes the standard deviation of a set of results */
void
tvstddev (out, number, average, results)
struct timeval *out;
int number;
struct timeval average;
struct result *results;
tvstddev(out, number, average, results)
struct timeval *out;
int number;
struct timeval average;
struct result *results;
{
int i;
struct timeval result, avg, var = null_timeval;
struct timeval square, large, small;
*out = null_timeval;
for (i = 0; i < number; i++)
{
if (results[i].valid == 1)
{
result = results[i].timevalue;
/* printf ("value is %f (average is %f)\n",
tv2double (result), tv2double (average)); */
avg = average;
if (tvcmp (&result, &avg) == -1)
{
small = result;
large = avg;
}
else
{
large = result;
small = avg;
}
tvsub (&large, &small);
/* printf ("abs offset is %f\n", tv2double (large)); */
square = double2tv (pow (tv2double (large), 2));
tvadd (&var, &square);
/* printf ("variance is now %f\n", tv2double (var)); */
int i;
struct timeval result, avg, var = null_timeval;
struct timeval square, large, small;
*out = null_timeval;
for (i = 0; i < number; i++) {
if (results[i].valid == 1) {
result = results[i].timevalue;
/* printf ("value is %f (average is %f)\n", tv2double
* (result), tv2double (average)); */
avg = average;
if (tvcmp(&result, &avg) == -1) {
small = result;
large = avg;
} else {
large = result;
small = avg;
}
tvsub(&large, &small);
/* printf ("abs offset is %f\n", tv2double (large)); */
square = double2tv(pow(tv2double(large), 2));
tvadd(&var, &square);
/* printf ("variance is now %f\n", tv2double (var)); */
}
}
}
result = double2tv (sqrt (tv2double (var) / number));
out->tv_sec = result.tv_sec;
out->tv_usec = result.tv_usec;
result = double2tv(sqrt(tv2double(var) / number));
out->tv_sec = result.tv_sec;
out->tv_usec = result.tv_usec;
}
/* tvcmp -- Compares two timeval structs */
int
tvcmp (left, right)
struct timeval *left, *right;
tvcmp(left, right)
struct timeval *left, *right;
{
if (left->tv_sec < right->tv_sec)
{
return -1;
}
if (left->tv_sec > right->tv_sec)
{
return 1;
}
if (left->tv_usec < right->tv_usec)
{
return -1;
}
if (left->tv_usec > right->tv_usec)
{
return 1;
}
return 0;
if (left->tv_sec < right->tv_sec) {
return -1;
}
if (left->tv_sec > right->tv_sec) {
return 1;
}
if (left->tv_usec < right->tv_usec) {
return -1;
}
if (left->tv_usec > right->tv_usec) {
return 1;
}
return 0;
}
/* tvmin */
void
tvmin (champion, challenger)
struct timeval *champion, *challenger;
tvmin(champion, challenger)
struct timeval *champion, *challenger;
{
if (tvcmp (champion, challenger) == 1)
{
champion->tv_sec = challenger->tv_sec;
champion->tv_usec = challenger->tv_usec;
}
if (tvcmp(champion, challenger) == 1) {
champion->tv_sec = challenger->tv_sec;
champion->tv_usec = challenger->tv_usec;
}
}
/* tvmax */
void
tvmax (champion, challenger)
struct timeval *champion, *challenger;
tvmax(champion, challenger)
struct timeval *champion, *challenger;
{
if (tvcmp (champion, challenger) == -1)
{
champion->tv_sec = challenger->tv_sec;
champion->tv_usec = challenger->tv_usec;
}
if (tvcmp(champion, challenger) == -1) {
champion->tv_sec = challenger->tv_sec;
champion->tv_usec = challenger->tv_usec;
}
}
double
tv2double (tv)
struct timeval tv;
tv2double(tv)
struct timeval tv;
{
double result;
result =
(((((double) tv.tv_sec) * 1000000.0) + (double) tv.tv_usec) / 1000000.0);
/* printf ("Double is %9.3f\n", result); */
return result;
double result;
result =
(((((double) tv.tv_sec) * 1000000.0) + (double) tv.tv_usec) / 1000000.0);
/* printf ("Double is %9.3f\n", result); */
return result;
}
struct timeval
double2tv (x)
double x;
double2tv(x)
double x;
{
struct timeval result;
result.tv_sec = (int) (x);
result.tv_usec = (int) ((x - result.tv_sec) * 1000000);
return result;
struct timeval result;
result.tv_sec = (int) (x);
result.tv_usec = (int) ((x - result.tv_sec) * 1000000);
return result;
}

@ -8,26 +8,25 @@
#include "echoping.h"
int
writen (fd, ptr, nbytes)
register int fd;
register char *ptr;
register int nbytes;
writen(fd, ptr, nbytes)
register int fd;
register char *ptr;
register int nbytes;
{
int nleft, nwritten;
int nleft, nwritten;
nleft = nbytes;
while (nleft > 0)
{
nwritten = write (fd, ptr, nleft);
if (nwritten <= 0)
return (nwritten); /* error */
/* Some systems, such as Digital's OSF1 (Digital Unix) doesn't set the returned
value to -1, even when interrupted by an alarm, whatever says the documentation.
errno is not set. */
if ((nwritten < nleft) && timeout_flag)
return nwritten;
nleft -= nwritten;
ptr += nwritten;
}
return (nbytes - nleft);
nleft = nbytes;
while (nleft > 0) {
nwritten = write(fd, ptr, nleft);
if (nwritten <= 0)
return (nwritten); /* error */
/* Some systems, such as Digital's OSF1 (Digital Unix) doesn't set
* the returned value to -1, even when interrupted by an alarm,
* whatever says the documentation. errno is not set. */
if ((nwritten < nleft) && timeout_flag)
return nwritten;
nleft -= nwritten;
ptr += nwritten;
}
return (nbytes - nleft);
}

Loading…
Cancel
Save