- }
- }
- free_pool_memory(mcmd);
- break;
- case MD_MAIL:
- case MD_MAIL_ON_ERROR:
- Dmsg1(800, "MAIL for following msg: %s", msg);
- if (!d->fd) {
- POOLMEM *name = get_pool_memory(PM_MESSAGE);
- make_unique_mail_filename(jcr, name, d);
- d->fd = fopen(name, "w+");
- if (!d->fd) {
- d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", name, strerror(errno));
- d->fd = NULL;
- free_pool_memory(name);
- break;
- }
- d->mail_filename = name;
- }
- len = strlen(msg);
- if (len > d->max_len) {
- d->max_len = len; /* keep max line length */
- }
- fputs(msg, d->fd);
- break;
- case MD_FILE:
- Dmsg1(800, "FILE for following msg: %s", msg);
- if (!d->fd) {
- d->fd = fopen(d->where, "w+");
- if (!d->fd) {
- d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
- d->fd = NULL;
- break;
- }
- }
- fputs(msg, d->fd);
- break;
- case MD_APPEND:
- Dmsg1(800, "APPEND for following msg: %s", msg);
- if (!d->fd) {
- d->fd = fopen(d->where, "a");
- if (!d->fd) {
- d->fd = stdout;
- Jmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
- d->fd = NULL;
- break;
- }
- }
- fputs(msg, d->fd);
- break;
- case MD_DIRECTOR:
- Dmsg1(800, "DIRECTOR for following msg: %s", msg);
- if (jcr && jcr->dir_bsock && !jcr->dir_bsock->errors) {
- bnet_fsend(jcr->dir_bsock, "Jmsg Job=%s type=%d level=%d %s",
- jcr->Job, type, level, msg);
- }
- break;
- case MD_STDOUT:
- Dmsg1(800, "STDOUT for following msg: %s", msg);
- if (type != M_ABORT && type != M_ERROR_TERM) { /* already printed */
- fputs(msg, stdout);
- }
- break;
- case MD_STDERR:
- Dmsg1(800, "STDERR for following msg: %s", msg);
- fputs(msg, stderr);
- break;
- default:
- break;
- }
+ }
+ }
+ free_pool_memory(mcmd);
+ break;
+ case MD_MAIL:
+ case MD_MAIL_ON_ERROR:
+ Dmsg1(850, "MAIL for following msg: %s", msg);
+ if (!d->fd) {
+ POOLMEM *name = get_pool_memory(PM_MESSAGE);
+ make_unique_mail_filename(jcr, name, d);
+ d->fd = fopen(name, "w+b");
+ if (!d->fd) {
+ berrno be;
+ d->fd = stdout;
+ Qmsg2(jcr, M_ERROR, 0, _("fopen %s failed: ERR=%s\n"), name,
+ be.strerror());
+ d->fd = NULL;
+ free_pool_memory(name);
+ break;
+ }
+ d->mail_filename = name;
+ }
+ fputs(dt, d->fd);
+ len = strlen(msg) + dtlen;;
+ if (len > d->max_len) {
+ d->max_len = len; /* keep max line length */
+ }
+ fputs(msg, d->fd);
+ break;
+ case MD_APPEND:
+ Dmsg1(850, "APPEND for following msg: %s", msg);
+ mode = "ab";
+ goto send_to_file;
+ case MD_FILE:
+ Dmsg1(850, "FILE for following msg: %s", msg);
+ mode = "w+b";
+send_to_file:
+ if (!d->fd && !open_dest_file(jcr, d, mode)) {
+ break;
+ }
+ fputs(dt, d->fd);
+ fputs(msg, d->fd);
+ /* On error, we close and reopen to handle log rotation */
+ if (ferror(d->fd)) {
+ fclose(d->fd);
+ if (open_dest_file(jcr, d, mode)) {
+ fputs(dt, d->fd);
+ fputs(msg, d->fd);
+ }
+ }
+ break;
+ case MD_DIRECTOR:
+ Dmsg1(850, "DIRECTOR for following msg: %s", msg);
+ if (jcr && jcr->dir_bsock && !jcr->dir_bsock->errors) {
+ bnet_fsend(jcr->dir_bsock, "Jmsg Job=%s type=%d level=%d %s",
+ jcr->Job, type, mtime, msg);
+ }
+ break;
+ case MD_STDOUT:
+ Dmsg1(850, "STDOUT for following msg: %s", msg);
+ if (type != M_ABORT && type != M_ERROR_TERM) { /* already printed */
+ fputs(dt, stdout);
+ fputs(msg, stdout);
+ }
+ break;
+ case MD_STDERR:
+ Dmsg1(850, "STDERR for following msg: %s", msg);
+ fputs(dt, stderr);
+ fputs(msg, stderr);
+ break;
+ default:
+ break;
+ }