aboutsummaryrefslogtreecommitdiff
path: root/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h')
-rw-r--r--contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h b/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h
new file mode 100644
index 0000000..545d11e
--- /dev/null
+++ b/contrib/notmuch-deliver/maildrop/maildir/maildirmisc.h
@@ -0,0 +1,202 @@
+#ifndef maildirmisc_h
+#define maildirmisc_h
+
+/*
+** Copyright 2000-2003 Double Precision, Inc.
+** See COPYING for distribution information.
+*/
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const char maildirmisc_h_rcsid[]="$Id: maildirmisc.h,v 1.18 2006/07/22 02:48:15 mrsam Exp $";
+
+/*
+**
+** Miscellaneous maildir-related code
+**
+*/
+
+/* Some special folders */
+
+#define INBOX "INBOX"
+#define DRAFTS "Drafts"
+#define SENT "Sent"
+#define TRASH "Trash"
+#define SHARED "shared"
+
+#define SHAREDSUBDIR "shared-folders"
+
+#define NEWSHAREDSP "#shared"
+#define NEWSHARED "#shared."
+
+#define PUBLIC "public" /* SMAP */
+
+int maildir_make(const char *maildir, int perm, int subdirperm,
+ int folder);
+
+int maildir_del(const char *maildir);
+
+int maildir_del_content(const char *maildir);
+
+char *maildir_name2dir(const char *maildir, /* DIR location */
+ const char *foldername); /* INBOX.name */
+
+char *maildir_location(const char *homedir,
+ const char *maildir);
+/*
+** Homedir is the account's home directory, "maildir" is where the account's
+** default Maildir is configured to be (usually "./Maildir"). Combine the
+** two to produce an absolute pathname.
+*/
+
+
+char *maildir_folderdir(const char *, /* maildir */
+ const char *); /* folder name */
+ /* Returns the directory corresponding to foldername (foldername is
+ ** checked to make sure that it's a valid name, else we set errno
+ ** to EINVAL, and return (0).
+ */
+
+char *maildir_filename(const char *, /* maildir */
+ const char *, /* folder */
+ const char *); /* filename */
+ /*
+ ** Builds the filename to this message, suitable for opening.
+ ** If the file doesn't appear to be there, search the maildir to
+ ** see if someone changed the flags, and return the current filename.
+ */
+
+int maildir_safeopen(const char *, /* filename */
+ int, /* mode */
+ int); /* perm */
+
+/*
+** Same arguments as open(). When we're accessing a shared maildir,
+** prevent someone from playing cute and dumping a bunch of symlinks
+** in there. This function will open the indicate file only if the
+** last component is not a symlink.
+** This is implemented by opening the file with O_NONBLOCK (to prevent
+** a DOS attack of someone pointing the symlink to a pipe, causing
+** the open to hang), clearing O_NONBLOCK, then stat-int the file
+** descriptor, lstating the filename, and making sure that dev/ino
+** match.
+*/
+
+int maildir_semisafeopen(const char *, /* filename */
+ int, /* mode */
+ int); /* perm */
+
+/*
+** Same thing, except that we allow ONE level of soft link indirection,
+** because we're reading from our own maildir, which points to the
+** message in the sharable maildir.
+*/
+
+int maildir_safeopen_stat(const char *path, int mode, int perm,
+ struct stat *stat1);
+ /* Sane as maildir_safeopen(), except that we also initialize a
+ ** struct stat, saving an extra syscall to the caller.
+ */
+
+int maildir_mkdir(const char *); /* directory */
+/*
+** Create maildir including all subdirectories in the path (like mkdir -p)
+*/
+
+void maildir_purgetmp(const char *); /* maildir */
+ /* purges old stuff out of tmp */
+
+void maildir_purge(const char *, /* directory */
+ unsigned); /* time_t to purge */
+
+void maildir_getnew(const char *, /* maildir */
+ const char *, /* folder */
+ void (*)(const char *, void *), /* Callback function for
+ ** every moved msg.
+ */
+ void *arg); /* Passthrough callback arg */
+
+ /* move messages from new to cur */
+
+int maildir_deletefolder(const char *, /* maildir */
+ const char *); /* folder */
+ /* deletes a folder */
+
+void maildir_list(const char *maildir,
+ void (*func)(const char *, void *),
+ void *voidp);
+
+void maildir_list_sharable(const char *, /* maildir */
+ void (*)(const char *, void *), /* callback function */
+ void *); /* 2nd arg to callback func */
+ /* list sharable folders */
+
+int maildir_shared_subscribe(const char *, /* maildir */
+ const char *); /* folder */
+ /* subscribe to a shared folder */
+
+void maildir_list_shared(const char *, /* maildir */
+ void (*)(const char *, void *), /* callback function */
+ void *); /* 2nd arg to the callback func */
+ /* list subscribed folders */
+
+int maildir_shared_unsubscribe(const char *, /* maildir */
+ const char *); /* folder */
+ /* unsubscribe from a shared folder */
+
+char *maildir_shareddir(const char *, /* maildir */
+ const char *); /* folder */
+ /*
+ ** Validate and return a path to a shared folder. folderdir must be
+ ** a name of a valid shared folder.
+ */
+
+void maildir_shared_sync(const char *); /* maildir */
+ /* "sync" the shared folder */
+
+int maildir_sharedisro(const char *); /* maildir */
+ /* maildir is a shared read-only folder */
+
+int maildir_unlinksharedmsg(const char *); /* filename */
+ /* Remove a message from a shared folder */
+
+/* Internal function that reads a symlink */
+
+char *maildir_getlink(const char *);
+
+ /* Determine whether the maildir filename has a certain flag */
+
+int maildir_hasflag(const char *filename, char);
+
+#define MAILDIR_DELETED(f) maildir_hasflag((f), 'T')
+
+ /*
+ ** Hierarchical maildir rename.
+ */
+
+#define MAILDIR_RENAME_FOLDER 1
+#define MAILDIR_RENAME_SUBFOLDERS 2
+
+int maildir_rename(const char *maildir, /* Path to the maildir */
+ const char *oldname, /* .foldername */
+ const char *newname, /* .foldername */
+ int flags, /* See above */
+ void (*callback_func)(const char *old_path,
+ const char *new_path)
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif