66 |
|
|
67 |
static void copy_mail(Mail_T, Mail_T); |
static void copy_mail(Mail_T, Mail_T); |
68 |
static void replace_bare_linefeed(Mail_T *); |
static void replace_bare_linefeed(Mail_T *); |
69 |
static void substitute(Mail_T*, char *, const char *, const char *); |
static void substitute(Mail_T *, Event_T); |
70 |
|
|
71 |
|
|
72 |
/* ------------------------------------------------------------------ Public */ |
/* ------------------------------------------------------------------ Public */ |
75 |
/** |
/** |
76 |
* Notify registred users about the event |
* Notify registred users about the event |
77 |
* @param E An Event object |
* @param E An Event object |
78 |
|
* @return If failed, return HANDLER_ALERT flag or inverse flag if passed |
79 |
*/ |
*/ |
80 |
void handle_alert(Event_T E) { |
int handle_alert(Event_T E) { |
81 |
|
|
82 |
Service_T s; |
Service_T s; |
83 |
|
int rv = HANDLER_PASSED; |
84 |
|
|
85 |
ASSERT(E); |
ASSERT(E); |
86 |
|
|
87 |
s= Event_get_source(E); |
s= Event_get_source(E); |
88 |
|
if(!s) { |
89 |
|
log("Aborting alert\n"); |
90 |
|
return rv; |
91 |
|
} |
92 |
|
|
93 |
if(s->maillist || Run.maillist) { |
if(s->maillist || Run.maillist) { |
94 |
Mail_T m; |
Mail_T m; |
95 |
Mail_T n; |
Mail_T n; |
129 |
tmp->opt_message= xstrdup(Event_get_message(E)); |
tmp->opt_message= xstrdup(Event_get_message(E)); |
130 |
} |
} |
131 |
|
|
132 |
substitute(&tmp, s->name, EVENT_DESCRIPTION(E), |
substitute(&tmp, E); |
|
Event_get_action_description(E)); |
|
133 |
|
|
134 |
replace_bare_linefeed(&tmp); |
replace_bare_linefeed(&tmp); |
135 |
|
|
136 |
tmp->next= list; |
tmp->next= list; |
137 |
list= tmp; |
list= tmp; |
138 |
|
|
139 |
DEBUG("%s notification is sent to %s\n", EVENT_DESCRIPTION(E), m->to); |
DEBUG("%s notification is sent to %s\n", Event_get_description(E), m->to); |
140 |
|
|
141 |
} |
} |
142 |
|
|
186 |
if(Event_get_message(E)) |
if(Event_get_message(E)) |
187 |
tmp->opt_message= xstrdup(Event_get_message(E)); |
tmp->opt_message= xstrdup(Event_get_message(E)); |
188 |
|
|
189 |
substitute(&tmp, s->name, EVENT_DESCRIPTION(E), |
substitute(&tmp, E); |
|
Event_get_action_description(E)); |
|
190 |
|
|
191 |
replace_bare_linefeed(&tmp); |
replace_bare_linefeed(&tmp); |
192 |
|
|
193 |
tmp->next= list; |
tmp->next= list; |
194 |
list= tmp; |
list= tmp; |
195 |
|
|
196 |
DEBUG("%s notification is sent to %s\n", EVENT_DESCRIPTION(E), m->to); |
DEBUG("%s notification is sent to %s\n", Event_get_description(E), m->to); |
197 |
|
|
198 |
} |
} |
199 |
|
|
201 |
|
|
202 |
if(list) { |
if(list) { |
203 |
|
|
204 |
sendmail(list); |
if(!sendmail(list)) { |
205 |
|
rv = HANDLER_ALERT; |
206 |
|
} |
207 |
gc_mail_list(&list); |
gc_mail_list(&list); |
208 |
|
|
209 |
} |
} |
212 |
|
|
213 |
} |
} |
214 |
|
|
215 |
|
return rv; |
216 |
|
|
217 |
} |
} |
218 |
|
|
219 |
|
|
220 |
static void substitute(Mail_T *m, char *name, const char *event, |
static void substitute(Mail_T *m, Event_T e) { |
|
const char *action) { |
|
221 |
|
|
222 |
char host[STRLEN]; |
char host[STRLEN]; |
223 |
char now[STRLEN]; |
char timestamp[STRLEN]; |
224 |
|
|
225 |
ASSERT(m && name && event && action); |
ASSERT(m && e); |
226 |
|
|
|
Util_getRFC822Date(NULL, now, STRLEN); |
|
227 |
if(gethostname(host, sizeof(host)) < 0) { |
if(gethostname(host, sizeof(host)) < 0) { |
228 |
snprintf(host, STRLEN, "%s", LOCALHOST); |
snprintf(host, STRLEN, "%s", LOCALHOST); |
229 |
} |
} |
230 |
|
|
231 |
|
Util_getRFC822Date(&e->collected, timestamp, STRLEN); |
232 |
|
|
233 |
Util_replaceString(&(*m)->from, "$HOST", host); |
Util_replaceString(&(*m)->from, "$HOST", host); |
234 |
Util_replaceString(&(*m)->subject, "$DATE", now); |
Util_replaceString(&(*m)->subject, "$DATE", timestamp); |
235 |
Util_replaceString(&(*m)->message, "$DATE", now); |
Util_replaceString(&(*m)->message, "$DATE", timestamp); |
236 |
Util_replaceString(&(*m)->subject, "$HOST", host); |
Util_replaceString(&(*m)->subject, "$HOST", host); |
237 |
Util_replaceString(&(*m)->message, "$HOST", host); |
Util_replaceString(&(*m)->message, "$HOST", host); |
238 |
Util_replaceString(&(*m)->subject, "$PROGRAM", name); |
Util_replaceString(&(*m)->subject, "$PROGRAM", Event_get_source_name(e)); |
239 |
Util_replaceString(&(*m)->message, "$PROGRAM", name); |
Util_replaceString(&(*m)->message, "$PROGRAM", Event_get_source_name(e)); |
240 |
Util_replaceString(&(*m)->subject, "$SERVICE", name); |
Util_replaceString(&(*m)->subject, "$SERVICE", Event_get_source_name(e)); |
241 |
Util_replaceString(&(*m)->message, "$SERVICE", name); |
Util_replaceString(&(*m)->message, "$SERVICE", Event_get_source_name(e)); |
242 |
Util_replaceString(&(*m)->subject, "$EVENT", event); |
Util_replaceString(&(*m)->subject, "$EVENT", Event_get_description(e)); |
243 |
Util_replaceString(&(*m)->message, "$EVENT", event); |
Util_replaceString(&(*m)->message, "$EVENT", Event_get_description(e)); |
244 |
Util_replaceString(&(*m)->subject, "$ACTION", action); |
Util_replaceString(&(*m)->subject, "$ACTION", Event_get_action_description(e)); |
245 |
Util_replaceString(&(*m)->message, "$ACTION", action); |
Util_replaceString(&(*m)->message, "$ACTION", Event_get_action_description(e)); |
246 |
} |
} |
247 |
|
|
248 |
|
|