]> git.notmuchmail.org Git - notmuch/blob - contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h
Move files copied from maildrop to a separate hierarchy.
[notmuch] / contrib / notmuch-deliver / maildrop / maildir / maildirmisc.h
1 #ifndef maildirmisc_h
2 #define maildirmisc_h
3
4 /*
5 ** Copyright 2000-2003 Double Precision, Inc.
6 ** See COPYING for distribution information.
7 */
8
9 #if     HAVE_CONFIG_H
10 #include        "config.h"
11 #endif
12
13 #if HAVE_SYS_STAT_H
14 #include        <sys/stat.h>
15 #endif
16
17 #ifdef  __cplusplus
18 extern "C" {
19 #endif
20
21 static const char maildirmisc_h_rcsid[]="$Id: maildirmisc.h,v 1.18 2006/07/22 02:48:15 mrsam Exp $";
22
23 /*
24 **
25 ** Miscellaneous maildir-related code
26 **
27 */
28
29 /* Some special folders */
30
31 #define INBOX   "INBOX"
32 #define DRAFTS  "Drafts"
33 #define SENT    "Sent"
34 #define TRASH   "Trash"
35 #define SHARED  "shared"
36
37 #define SHAREDSUBDIR    "shared-folders"
38
39 #define NEWSHAREDSP "#shared"
40 #define NEWSHARED "#shared."
41
42 #define PUBLIC "public" /* SMAP */
43
44 int maildir_make(const char *maildir, int perm, int subdirperm,
45                 int folder);
46
47 int maildir_del(const char *maildir);
48
49 int maildir_del_content(const char *maildir);
50
51 char *maildir_name2dir(const char *maildir,     /* DIR location */
52                        const char *foldername); /* INBOX.name */
53
54 char *maildir_location(const char *homedir,
55                        const char *maildir);
56 /*
57 ** Homedir is the account's home directory, "maildir" is where the account's
58 ** default Maildir is configured to be (usually "./Maildir").  Combine the
59 ** two to produce an absolute pathname.
60 */
61
62
63 char *maildir_folderdir(const char *,           /* maildir */
64         const char *);                          /* folder name */
65         /* Returns the directory corresponding to foldername (foldername is
66         ** checked to make sure that it's a valid name, else we set errno
67         ** to EINVAL, and return (0).
68         */
69
70 char *maildir_filename(const char *,            /* maildir */
71         const char *,                           /* folder */
72         const char *);                          /* filename */
73         /*
74         ** Builds the filename to this message, suitable for opening.
75         ** If the file doesn't appear to be there, search the maildir to
76         ** see if someone changed the flags, and return the current filename.
77         */
78
79 int maildir_safeopen(const char *,              /* filename */
80         int,                            /* mode */
81         int);                           /* perm */
82
83 /*
84 **      Same arguments as open().  When we're accessing a shared maildir,
85 **      prevent someone from playing cute and dumping a bunch of symlinks
86 **      in there.  This function will open the indicate file only if the
87 **      last component is not a symlink.
88 **      This is implemented by opening the file with O_NONBLOCK (to prevent
89 **      a DOS attack of someone pointing the symlink to a pipe, causing
90 **      the open to hang), clearing O_NONBLOCK, then stat-int the file
91 **      descriptor, lstating the filename, and making sure that dev/ino
92 **      match.
93 */
94
95 int maildir_semisafeopen(const char *,  /* filename */
96         int,                            /* mode */
97         int);                           /* perm */
98
99 /*
100 ** Same thing, except that we allow ONE level of soft link indirection,
101 ** because we're reading from our own maildir, which points to the
102 ** message in the sharable maildir.
103 */
104
105 int maildir_safeopen_stat(const char *path, int mode, int perm,
106                           struct stat *stat1);
107         /* Sane as maildir_safeopen(), except that we also initialize a
108         ** struct stat, saving an extra syscall to the caller.
109         */
110
111 int maildir_mkdir(const char *);        /* directory */
112 /*
113 ** Create maildir including all subdirectories in the path (like mkdir -p)
114 */
115
116 void maildir_purgetmp(const char *);            /* maildir */
117         /* purges old stuff out of tmp */
118
119 void maildir_purge(const char *,                /* directory */
120         unsigned);                              /* time_t to purge */
121
122 void maildir_getnew(const char *,               /* maildir */
123         const char *,                           /* folder */
124         void (*)(const char *, void *),         /* Callback function for
125                                                 ** every moved msg.
126                                                 */
127         void *arg);                             /* Passthrough callback arg */
128
129         /* move messages from new to cur */
130
131 int maildir_deletefolder(const char *,          /* maildir */
132         const char *);                          /* folder */
133         /* deletes a folder */
134
135 void maildir_list(const char *maildir,
136                   void (*func)(const char *, void *),
137                   void *voidp);
138
139 void maildir_list_sharable(const char *,        /* maildir */
140         void (*)(const char *, void *),         /* callback function */
141         void *);                                /* 2nd arg to callback func */
142         /* list sharable folders */
143
144 int maildir_shared_subscribe(const char *,      /* maildir */
145                 const char *);                  /* folder */
146         /* subscribe to a shared folder */
147
148 void maildir_list_shared(const char *,          /* maildir */
149         void (*)(const char *, void *),         /* callback function */
150         void *);                        /* 2nd arg to the callback func */
151         /* list subscribed folders */
152
153 int maildir_shared_unsubscribe(const char *,    /* maildir */
154                 const char *);                  /* folder */
155         /* unsubscribe from a shared folder */
156
157 char *maildir_shareddir(const char *,           /* maildir */
158         const char *);                          /* folder */
159         /*
160         ** Validate and return a path to a shared folder.  folderdir must be
161         ** a name of a valid shared folder.
162         */
163
164 void maildir_shared_sync(const char *);         /* maildir */
165         /* "sync" the shared folder */
166
167 int maildir_sharedisro(const char *);           /* maildir */
168         /* maildir is a shared read-only folder */
169
170 int maildir_unlinksharedmsg(const char *);      /* filename */
171         /* Remove a message from a shared folder */
172
173 /* Internal function that reads a symlink */
174
175 char *maildir_getlink(const char *);
176
177         /* Determine whether the maildir filename has a certain flag */
178
179 int maildir_hasflag(const char *filename, char);
180
181 #define MAILDIR_DELETED(f)      maildir_hasflag((f), 'T')
182
183         /*
184         ** Hierarchical maildir rename.
185         */
186
187 #define MAILDIR_RENAME_FOLDER 1
188 #define MAILDIR_RENAME_SUBFOLDERS 2
189
190 int maildir_rename(const char *maildir, /* Path to the maildir */
191                    const char *oldname, /* .foldername */
192                    const char *newname, /* .foldername */
193                    int flags, /* See above */
194                    void (*callback_func)(const char *old_path,
195                                          const char *new_path)
196                    );
197
198 #ifdef  __cplusplus
199 }
200 #endif
201
202 #endif