static int cmd_show_mailboxes(struct backup *backup, const struct cyrbu_cmd_options *options) { struct backup_mailbox *mailbox = NULL; struct backup_mailbox_message *record = NULL; int i; for (i = 0; i < strarray_size(options->argv); i++) { char ts_deleted[32] = ""; const char *arg = strarray_nth(options->argv, i); /* argument could be a uniqueid */ mailbox = backup_get_mailbox_by_uniqueid(backup, arg, 1); /* or it could be an mboxname */ if (!mailbox) { mbname_t *mbname = mbname_from_intname(arg); if (!mbname) continue; mailbox = backup_get_mailbox_by_name(backup, mbname, 1); mbname_free(&mbname); } /* or it could be junk */ if (!mailbox) continue; fprintf(stdout, "mboxname: %s\n", mailbox->mboxname); fprintf(stdout, "uniqueid: %s\n", mailbox->uniqueid); if (mailbox->deleted) { strftime(ts_deleted, sizeof(ts_deleted), "%F %T", localtime(&mailbox->deleted)); fprintf(stdout, "deleted: %s\n", ts_deleted); } fprintf(stdout, "messages:\n"); fprintf(stdout, " uid expunged time guid\n"); for (record = mailbox->records->head; record; record = record->next) { char ts_expunged[32] = " "; if (record->expunged) strftime(ts_expunged, sizeof(ts_expunged), "%F %T", localtime(&record->expunged)); fprintf(stdout, "%10d %s %s\n", record->uid, ts_expunged, message_guid_encode(&record->guid)); } fprintf(stdout, "\n"); backup_mailbox_free(&mailbox); } return 0; }
static void print_stringlist(const char *label, strarray_t *list) { int x, list_len = strarray_size(list); printf("%s{%d} [", label, list_len); for (x = 0; x < list_len; x++) { const char *str = strarray_nth(list, x); if (!(x % 5)) printf("\n\t\t"); print_string(" ", str); } printf("\n\t]"); free(strarray_takevf(list)); }
static int cmd_show_messages(struct backup *backup, const struct cyrbu_cmd_options *options) { struct backup_message *message = NULL; struct backup_mailbox_list *mailboxes = NULL; struct backup_mailbox *mailbox; struct message_guid want_guid; int i; for (i = 0; i < strarray_size(options->argv); i++) { if (!message_guid_decode(&want_guid, strarray_nth(options->argv, i))) continue; message = backup_get_message(backup, &want_guid); if (!message) continue; fprintf(stdout, "guid:\t%s\n", message_guid_encode(message->guid)); mailboxes = backup_get_mailboxes_by_message(backup, message, 0); if (mailboxes) { fprintf(stdout, "mailboxes:\n"); for (mailbox = mailboxes->head; mailbox; mailbox = mailbox->next) { fprintf(stdout, "\t%s\t%s\n", mailbox->uniqueid, mailbox->mboxname); } backup_mailbox_list_empty(mailboxes); free(mailboxes); } fprintf(stdout, "headers:\n"); backup_read_message_data(backup, message, show_message_headers, stdout); fprintf(stdout, "\n"); backup_message_free(&message); } return 0; }