diff options
Diffstat (limited to 'maildir/maildirmisc.h')
| -rw-r--r-- | maildir/maildirmisc.h | 201 | 
1 files changed, 201 insertions, 0 deletions
| diff --git a/maildir/maildirmisc.h b/maildir/maildirmisc.h new file mode 100644 index 0000000..e1e7c19 --- /dev/null +++ b/maildir/maildirmisc.h @@ -0,0 +1,201 @@ +#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 + + +/* +** +** 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 | 
