~ubuntu-branches/ubuntu/vivid/postfix/vivid-proposed

« back to all changes in this revision

Viewing changes to src/oqmgr/qmgr_move.c

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones
  • Date: 2005-02-27 09:33:07 UTC
  • Revision ID: james.westby@ubuntu.com-20050227093307-cn789t27ibnlh6tf
Tags: upstream-2.1.5
ImportĀ upstreamĀ versionĀ 2.1.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*++
 
2
/* NAME
 
3
/*      qmgr_move 3
 
4
/* SUMMARY
 
5
/*      move queue entries to another queue
 
6
/* SYNOPSIS
 
7
/*      #include "qmgr.h"
 
8
/*
 
9
/*      void    qmgr_move(from, to, time_stamp)
 
10
/*      const char *from;
 
11
/*      const char *to;
 
12
/*      time_t  time_stamp;
 
13
/* DESCRIPTION
 
14
/*      The \fBqmgr_move\fR routine scans the \fIfrom\fR queue for entries
 
15
/*      with valid queue names and moves them to the \fIto\fR queue.
 
16
/*      If \fItime_stamp\fR is non-zero, the queue file time stamps are
 
17
/*      set to the specified value.
 
18
/*      Entries with invalid names are left alone. No attempt is made to
 
19
/*      look for other badness such as multiple links or weird file types.
 
20
/*      These issues are dealt with when a queue file is actually opened.
 
21
/* LICENSE
 
22
/* .ad
 
23
/* .fi
 
24
/*      The Secure Mailer license must be distributed with this software.
 
25
/* AUTHOR(S)
 
26
/*      Wietse Venema
 
27
/*      IBM T.J. Watson Research
 
28
/*      P.O. Box 704
 
29
/*      Yorktown Heights, NY 10598, USA
 
30
/*--*/
 
31
 
 
32
/* System library. */
 
33
 
 
34
#include <sys_defs.h>
 
35
#include <sys/stat.h>
 
36
#include <string.h>
 
37
#include <utime.h>
 
38
#include <errno.h>
 
39
 
 
40
/* Utility library. */
 
41
 
 
42
#include <msg.h>
 
43
#include <scan_dir.h>
 
44
#include <recipient_list.h>
 
45
 
 
46
/* Global library. */
 
47
 
 
48
#include <mail_queue.h>
 
49
#include <mail_scan_dir.h>
 
50
 
 
51
/* Application-specific. */
 
52
 
 
53
#include "qmgr.h"
 
54
 
 
55
/* qmgr_move - move queue entries to another queue, leave bad files alone */
 
56
 
 
57
void    qmgr_move(const char *src_queue, const char *dst_queue,
 
58
                          time_t time_stamp)
 
59
{
 
60
    char   *myname = "qmgr_move";
 
61
    SCAN_DIR *queue_dir;
 
62
    char   *queue_id;
 
63
    struct utimbuf tbuf;
 
64
    const char *path;
 
65
 
 
66
    if (strcmp(src_queue, dst_queue) == 0)
 
67
        msg_panic("%s: source queue %s is destination", myname, src_queue);
 
68
    if (msg_verbose)
 
69
        msg_info("start move queue %s -> %s", src_queue, dst_queue);
 
70
 
 
71
    queue_dir = scan_dir_open(src_queue);
 
72
    while ((queue_id = mail_scan_dir_next(queue_dir)) != 0) {
 
73
        if (mail_queue_id_ok(queue_id)) {
 
74
            if (time_stamp > 0) {
 
75
                tbuf.actime = tbuf.modtime = time_stamp;
 
76
                path = mail_queue_path((VSTRING *) 0, src_queue, queue_id);
 
77
                if (utime(path, &tbuf) < 0) {
 
78
                    if (errno != ENOENT)
 
79
                        msg_fatal("%s: update %s time stamps: %m", myname, path);
 
80
                    msg_warn("%s: update %s time stamps: %m", myname, path);
 
81
                    continue;
 
82
                }
 
83
            }
 
84
            if (mail_queue_rename(queue_id, src_queue, dst_queue)) {
 
85
                if (errno != ENOENT)
 
86
                    msg_fatal("%s: rename %s from %s to %s: %m",
 
87
                              myname, queue_id, src_queue, dst_queue);
 
88
                msg_warn("%s: rename %s from %s to %s: %m",
 
89
                         myname, queue_id, src_queue, dst_queue);
 
90
                continue;
 
91
            }
 
92
            if (msg_verbose)
 
93
                msg_info("%s: moved %s from %s to %s",
 
94
                         myname, queue_id, src_queue, dst_queue);
 
95
        } else {
 
96
            msg_warn("%s: ignored: queue %s id %s",
 
97
                     myname, src_queue, queue_id);
 
98
        }
 
99
    }
 
100
    scan_dir_close(queue_dir);
 
101
 
 
102
    if (msg_verbose)
 
103
        msg_info("end move queue %s -> %s", src_queue, dst_queue);
 
104
}