#include <errno.h>
#include <signal.h>
#include <ctype.h>
+#include <zlib.h>
#include "talloc-extra.h"
#include "crypto.h"
+#include "repair.h"
-#define unused(x) x __attribute__ ((unused))
+#define unused(x) x ## _unused __attribute__ ((unused))
-#define STRINGIFY(s) STRINGIFY_(s)
+#define STRINGIFY(s) STRINGIFY_ (s)
#define STRINGIFY_(s) #s
typedef struct mime_node mime_node_t;
struct notmuch_show_params;
typedef struct notmuch_show_format {
- struct sprinter *(*new_sprinter) (const void *ctx, FILE *stream);
- notmuch_status_t (*part) (const void *ctx, struct sprinter *sprinter,
- struct mime_node *node, int indent,
- const struct notmuch_show_params *params);
+ struct sprinter *(*new_sprinter)(const void *ctx, FILE *stream);
+ notmuch_status_t (*part)(const void *ctx, struct sprinter *sprinter,
+ struct mime_node *node, int indent,
+ const struct notmuch_show_params *params);
} notmuch_show_format_t;
typedef struct notmuch_show_params {
*
* Note that __location__ comes from talloc.h.
*/
-#define INTERNAL_ERROR(format, ...) \
- do { \
- fprintf(stderr, \
- "Internal error: " format " (%s)\n", \
- ##__VA_ARGS__, __location__); \
- exit (1); \
+#define INTERNAL_ERROR(format, ...) \
+ do { \
+ fprintf (stderr, \
+ "Internal error: " format " (%s)\n", \
+ ##__VA_ARGS__, __location__); \
+ exit (1); \
} while (0)
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
static inline void
chomp_newline (char *str)
{
- if (str && str[strlen(str)-1] == '\n')
- str[strlen(str)-1] = '\0';
+ if (str && str[strlen (str) - 1] == '\n')
+ str[strlen (str) - 1] = '\0';
}
/* Exit status code indicating temporary failure; user is invited to
void
format_headers_sprinter (struct sprinter *sp, GMimeMessage *message,
- bool reply);
+ bool reply, const _notmuch_message_crypto_t *msg_crypto);
typedef enum {
NOTMUCH_SHOW_TEXT_PART_REPLY = 1 << 0,
/* notmuch-config.c */
typedef enum {
- NOTMUCH_CONFIG_OPEN = 1 << 0,
- NOTMUCH_CONFIG_CREATE = 1 << 1,
+ NOTMUCH_CONFIG_OPEN = 1 << 0,
+ NOTMUCH_CONFIG_CREATE = 1 << 1,
} notmuch_config_mode_t;
notmuch_config_t *
notmuch_config_set_database_path (notmuch_config_t *config,
const char *database_path);
-#if (GMIME_MAJOR_VERSION < 3)
-const char *
-notmuch_config_get_crypto_gpg_path (notmuch_config_t *config);
-
-void
-notmuch_config_set_crypto_gpg_path (notmuch_config_t *config,
- const char *gpg_path);
-#endif
-
const char *
notmuch_config_get_user_name (notmuch_config_t *config);
void
notmuch_config_set_search_exclude_tags (notmuch_config_t *config,
- const char *list[],
- size_t length);
+ const char *list[],
+ size_t length);
int
notmuch_run_hook (const char *db_path, const char *hook);
/* The list of signatures for signed or encrypted containers. If
* there are no signatures, this will be NULL. */
- GMimeSignatureList* sig_list;
+ GMimeSignatureList *sig_list;
/* Internal: Context inherited from the root iterator. */
struct mime_node_context *ctx;
/* Internal: For successfully decrypted multipart parts, the
- * decrypted part to substitute for the second child. */
- GMimeObject *decrypted_child;
+ * decrypted part to substitute for the second child; or, for
+ * PKCS#7 parts, the part returned after removing/processing the
+ * PKCS#7 transformation */
+ GMimeObject *unwrapped_child;
/* Internal: The next child for depth-first traversal and the part
* number to assign it (or -1 if unknown). */
/* Construct a new MIME node pointing to the root message part of
* message. If crypto->verify is true, signed child parts will be
- * verified. If crypto->decrypt is true, encrypted child parts will be
- * decrypted. If the crypto contexts (crypto->gpgctx or
- * crypto->pkcs7) are NULL, they will be lazily initialized.
+ * verified. If crypto->decrypt is NOTMUCH_DECRYPT_TRUE, encrypted
+ * child parts will be decrypted using either stored session keys or
+ * asymmetric crypto. If crypto->decrypt is NOTMUCH_DECRYPT_AUTO,
+ * only session keys will be tried. If the crypto contexts
+ * (crypto->gpgctx or crypto->pkcs7) are NULL, they will be lazily
+ * initialized.
*
* Return value:
*
mime_node_child (mime_node_t *parent, int child);
/* Return the nth child of node in a depth-first traversal. If n is
- * 0, returns node itself. Returns NULL if there is no such part. */
+* 0, returns node itself. Returns NULL if there is no such part. */
mime_node_t *
mime_node_seek_dfs (mime_node_t *node, int n);
+const _notmuch_message_crypto_t *
+mime_node_get_message_crypto_status (mime_node_t *node);
+
typedef enum dump_formats {
DUMP_FORMAT_AUTO,
DUMP_FORMAT_BATCH_TAG,
} dump_format_t;
typedef enum dump_includes {
- DUMP_INCLUDE_TAGS = 1,
- DUMP_INCLUDE_CONFIG = 2,
- DUMP_INCLUDE_PROPERTIES = 4
+ DUMP_INCLUDE_TAGS = 1,
+ DUMP_INCLUDE_CONFIG = 2,
+ DUMP_INCLUDE_PROPERTIES = 4
} dump_include_t;
#define DUMP_INCLUDE_DEFAULT (DUMP_INCLUDE_TAGS | DUMP_INCLUDE_CONFIG | DUMP_INCLUDE_PROPERTIES)
dump_include_t include,
bool gzip_output);
-/* If status is non-zero (i.e. error) print appropriate
- messages to stderr.
-*/
+/* If status indicates error print appropriate
+ * messages to stderr.
+ */
notmuch_status_t
print_status_query (const char *loc,
const notmuch_query_t *query,
notmuch_status_t status);
+notmuch_status_t
+print_status_message (const char *loc,
+ const notmuch_message_t *message,
+ notmuch_status_t status);
+
notmuch_status_t
print_status_database (const char *loc,
const notmuch_database_t *database,
int
status_to_exit (notmuch_status_t status);
+notmuch_status_t
+print_status_gzbytes (const char *loc,
+ gzFile file,
+ int bytes);
+
+/* the __location__ macro is defined in talloc.h */
+#define ASSERT_GZBYTES(file, bytes) ((print_status_gzbytes (__location__, file, bytes)) ? exit (1) : 0)
+#define GZPRINTF(file, fmt, ...) ASSERT_GZBYTES (file, gzprintf (file, fmt, ##__VA_ARGS__));
+#define GZPUTS(file, str) ASSERT_GZBYTES(file, gzputs (file, str));
+
#include "command-line-arguments.h"
extern const char *notmuch_requested_db_uuid;
-extern const notmuch_opt_desc_t notmuch_shared_options [];
+extern const notmuch_opt_desc_t notmuch_shared_options [];
void notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch);
-void notmuch_process_shared_options (const char* subcommand_name);
-int notmuch_minimal_options (const char* subcommand_name,
+void notmuch_process_shared_options (const char *subcommand_name);
+int notmuch_minimal_options (const char *subcommand_name,
int argc, char **argv);
/* the state chosen by the user invoking one of the notmuch
* subcommands that does indexing */
struct _notmuch_client_indexing_cli_choices {
- bool try_decrypt;
- bool try_decrypt_set;
- notmuch_indexopts_t * opts;
+ int decrypt_policy;
+ bool decrypt_policy_set;
+ notmuch_indexopts_t *opts;
};
extern struct _notmuch_client_indexing_cli_choices indexing_cli_choices;
-extern const notmuch_opt_desc_t notmuch_shared_indexing_options [];
+extern const notmuch_opt_desc_t notmuch_shared_indexing_options [];
notmuch_status_t
-notmuch_process_shared_indexing_options (notmuch_database_t *notmuch, notmuch_config_t *config);
+notmuch_process_shared_indexing_options (notmuch_database_t *notmuch);
#endif