6
#include <sys/socket.h>
8
#include <netinet/in.h>
19
void loglist_walk(struct rl_instance *inst, struct loglist *l, int c) {
22
for(i = 0; i < c; i++)
23
loglist_build(inst, l + i);
26
void string_populate(struct argvtab *a) {
29
for(len = 0, i = 0; i < a->argc; i++)
30
len += a->ents[i].len;
31
a->str = malloc(len + 1);
33
rl_fatal(EX_SOFTWARE, "ABORT - Can't allocate memory");
36
void string_build(struct rl_instance *inst, struct argvtab *a) {
42
for(i = 0; i < a->argc; i++) {
43
loglist_build(inst, a->ents + i);
44
strncat(a->str, a->ents[i].arg, a->ents[i].len);
48
void argv_populate(struct argvtab *a) {
51
a->argv = (char **)calloc(a->argc + 1, sizeof(char *));
53
rl_fatal(EX_SOFTWARE, "ABORT - Can't allocate memory");
54
for(i = 0; i < a->argc; i++)
55
a->argv[i] = a->ents[i].arg;
59
char **argv_build(struct rl_instance *i, struct argvtab *a) {
62
loglist_walk(i, a->ents, a->argc);
66
void iov_populate(struct argvtab *a) {
69
a->iov = (struct iovec *)calloc(a->argc, sizeof(struct iovec));
71
rl_fatal(EX_SOFTWARE, "ABORT - Can't allocate memory");
72
for(i = 0; i < a->argc; i++)
73
a->iov[i].iov_base = a->ents[i].arg;
76
struct iovec *iov_build(struct rl_instance *inst, struct argvtab *a) {
81
for(i = 0; i < a->argc; i++) {
82
loglist_build(inst, a->ents + i);
83
a->iov[i].iov_len = a->ents[i].len;
88
void loglist_build(struct rl_instance *inst, struct loglist *l) {
96
strcpy(l->arg, "<unknown>");
97
l->len = strlen(l->arg);
100
#ifdef HAVE_INET_NTOP
101
if(((struct sockaddr_in *)inst->sin)->sin_family == PF_INET)
102
inet_ntop(PF_INET, &((struct sockaddr_in *)inst->sin)->sin_addr,
104
#ifdef HAVE_SOCKADDR_IN6
106
inet_ntop(PF_INET6, &((struct sockaddr_in6 *)inst->sin)->sin6_addr,
110
strncpy(l->arg, inet_ntoa(((struct sockaddr_in *)inst->sin)->sin_addr), 80);
112
l->len = strlen(l->arg);
114
case LOG_SOURCE_PORT:
116
strcpy(l->arg, "<unknown>");
117
l->len = strlen(l->arg);
120
l->len = snprintf(l->arg, 6, "%d", ntohs(((struct sockaddr_in *)inst->sin)->sin_port));
124
snprintf(l->arg, 10, "%ld",
125
inst->rusage.ru_utime.tv_sec +
126
inst->rusage.ru_stime.tv_sec);
130
snprintf(l->arg, 10, "%ld",
131
inst->rusage.ru_utime.tv_sec);
135
snprintf(l->arg, 10, "%ld",
136
inst->rusage.ru_stime.tv_sec);
140
snprintf(l->arg, 10, "%ld",
141
inst->rusage.ru_maxrss);
145
snprintf(l->arg, 10, "%ld",
146
inst->rusage.ru_ixrss);
150
snprintf(l->arg, 10, "%ld",
151
inst->rusage.ru_idrss);
155
snprintf(l->arg, 10, "%ld",
156
inst->rusage.ru_isrss);
160
snprintf(l->arg, 10, "%ld",
161
inst->rusage.ru_minflt);
165
snprintf(l->arg, 10, "%ld",
166
inst->rusage.ru_majflt);
170
snprintf(l->arg, 10, "%ld",
171
inst->rusage.ru_nswap);
175
snprintf(l->arg, 10, "%ld",
176
inst->rusage.ru_inblock);
180
snprintf(l->arg, 10, "%ld",
181
inst->rusage.ru_oublock);
185
snprintf(l->arg, 10, "%ld",
186
inst->rusage.ru_msgsnd);
190
snprintf(l->arg, 10, "%ld",
191
inst->rusage.ru_msgrcv);
195
snprintf(l->arg, 10, "%ld",
196
inst->rusage.ru_nsignals);
200
snprintf(l->arg, 10, "%ld",
201
inst->rusage.ru_nvcsw);
205
snprintf(l->arg, 10, "%ld",
206
inst->rusage.ru_nivcsw);
209
if(WIFEXITED(inst->status)) {
211
snprintf(l->arg, 6, "%d",
212
WEXITSTATUS(inst->status));
215
if(WIFSIGNALED(inst->status)) {
217
snprintf(l->arg, 6, "SIG%d",
218
WTERMSIG(inst->status));
221
return; /* just in case */
224
snprintf(l->arg, 10, "%ld:%02ld:%02ld",
225
(inst->stop - inst->start) / 3600,
226
(inst->stop - inst->start) % 3600 / 60,
227
(inst->stop - inst->start) % 60);
230
tt = htonl(time(NULL) + 2208988800UL);
233
memcpy(l->arg, &tt, sizeof(tt)); /* ugh */
238
snprintf(l->arg, 34, "%s", ctime(&tt));
241
rl_fatal(EX_SOFTWARE, "Unknown log request");