diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-01-21 07:17:56 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-01-21 10:31:37 +0200 |
commit | db7165424199a473265eda5d35f2399e8816e92d (patch) | |
tree | c55a57f21f540c45b93f60543bca8bbb24b9bc3a | |
parent | 29a837b1126c701191affceb092afbb8de5d5ffc (diff) | |
download | mailutils-db7165424199a473265eda5d35f2399e8816e92d.tar.gz mailutils-db7165424199a473265eda5d35f2399e8816e92d.tar.bz2 |
Improve folder handling and expansion in mail. Add convenience functions to the library.
* configure.ac: Build libmailutils/wicket
* libmailutils/Makefile.am: Likewise.
* libmailutils/base/wicket.c: Move file wicket stuff to ...
* libmailutils/wicket/file.c: ... here
* libmailutils/wicket/noauth.c: New file.
* libmailutils/wicket/Makefile.am: New file.
* include/mailutils/auth.h (mu_noauth_ticket_create)
(mu_noauth_wicket_create): New protos.
* include/mailutils/folder.h (mu_folder_attach_ticket)
(mu_folder_is_local): New protos.
* include/mailutils/mailbox.h (mu_mailbox_attach_ticket): New proto.
* include/mailutils/sys/folder.h (_mu_folder): Remove flags. Add
new member: is_local.
* libmailutils/mailbox/folder.c (mu_folder_create_from_record): Set is_local.
(mu_folder_attach_ticket): New function.
(mu_folder_is_local): New function.
* libmailutils/mailbox/mbx_default.c (mu_mailbox_attach_ticket): New function.
* libmailutils/url/create.c: Allow for trailing / in url.
* libproto/imap/mbox.c (_imap_mbx_open): Do initial scan.
(__imap_msg_get_stream): Initialize clos.size.
* libproto/imap/tests/imapfolder.c: Attach ticket to the folder.
* mail/cd.c (mail_cd): Expand directory name (~, %, + notations) prior
to use.
* mail/file.c (mail_file): Attach ticket to the mailbox.
* mail/copy.c (append_to_mailbox): Likewise.
* mail/mailline.c: Rewrite directory expansion. Implement fully
functional folder expansion.
* mail/util.c (util_folder_path)
(util_outfolder_name): Rewrite using mu_mailbox_expand_name.
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | include/mailutils/auth.h | 3 | ||||
-rw-r--r-- | include/mailutils/folder.h | 3 | ||||
-rw-r--r-- | include/mailutils/mailbox.h | 2 | ||||
-rw-r--r-- | include/mailutils/sys/folder.h | 5 | ||||
-rw-r--r-- | libmailutils/Makefile.am | 5 | ||||
-rw-r--r-- | libmailutils/base/wicket.c | 253 | ||||
-rw-r--r-- | libmailutils/mailbox/folder.c | 49 | ||||
-rw-r--r-- | libmailutils/mailbox/mbx_default.c | 43 | ||||
-rw-r--r-- | libmailutils/url/create.c | 11 | ||||
-rw-r--r-- | libmailutils/wicket/Makefile.am | 28 | ||||
-rw-r--r-- | libmailutils/wicket/file.c | 266 | ||||
-rw-r--r-- | libmailutils/wicket/noauth.c | 65 | ||||
-rw-r--r-- | libproto/imap/mbox.c | 7 | ||||
-rw-r--r-- | libproto/imap/tests/imapfolder.c | 1 | ||||
-rw-r--r-- | mail/cd.c | 15 | ||||
-rw-r--r-- | mail/copy.c | 1 | ||||
-rw-r--r-- | mail/file.c | 24 | ||||
-rw-r--r-- | mail/mailline.c | 353 | ||||
-rw-r--r-- | mail/mailvar.c | 2 | ||||
-rw-r--r-- | mail/util.c | 133 |
21 files changed, 771 insertions, 499 deletions
diff --git a/configure.ac b/configure.ac index 8f440076a..0ef4a235d 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -1520,6 +1520,7 @@ AC_CONFIG_FILES([ | |||
1520 | libmailutils/stream/Makefile | 1520 | libmailutils/stream/Makefile |
1521 | libmailutils/stdstream/Makefile | 1521 | libmailutils/stdstream/Makefile |
1522 | libmailutils/url/Makefile | 1522 | libmailutils/url/Makefile |
1523 | libmailutils/wicket/Makefile | ||
1523 | libmailutils/Makefile | 1524 | libmailutils/Makefile |
1524 | messages/Makefile | 1525 | messages/Makefile |
1525 | mh/Makefile | 1526 | mh/Makefile |
diff --git a/include/mailutils/auth.h b/include/mailutils/auth.h index b4a650ed8..73fa98e54 100644 --- a/include/mailutils/auth.h +++ b/include/mailutils/auth.h | |||
@@ -74,6 +74,9 @@ void *mu_wicket_get_data (mu_wicket_t wicket); | |||
74 | int mu_wicket_set_get_ticket (mu_wicket_t wicket, | 74 | int mu_wicket_set_get_ticket (mu_wicket_t wicket, |
75 | int (*_get_ticket) (mu_wicket_t, void *, | 75 | int (*_get_ticket) (mu_wicket_t, void *, |
76 | const char *, mu_ticket_t *)); | 76 | const char *, mu_ticket_t *)); |
77 | |||
78 | int mu_noauth_ticket_create (mu_ticket_t *pticket); | ||
79 | int mu_noauth_wicket_create (mu_wicket_t *pwicket); | ||
77 | int mu_file_wicket_create (mu_wicket_t *pwicket, const char *filename); | 80 | int mu_file_wicket_create (mu_wicket_t *pwicket, const char *filename); |
78 | 81 | ||
79 | struct mu_debug_locus; | 82 | struct mu_debug_locus; |
diff --git a/include/mailutils/folder.h b/include/mailutils/folder.h index 2d71a0e11..12327987d 100644 --- a/include/mailutils/folder.h +++ b/include/mailutils/folder.h | |||
@@ -60,6 +60,9 @@ extern int mu_folder_enumerate (mu_folder_t, const char *, | |||
60 | extern int mu_folder_lsub (mu_folder_t, const char *, const char *, | 60 | extern int mu_folder_lsub (mu_folder_t, const char *, const char *, |
61 | mu_list_t *); | 61 | mu_list_t *); |
62 | 62 | ||
63 | extern int mu_folder_attach_ticket (mu_folder_t folder); | ||
64 | extern int mu_folder_is_local (mu_folder_t folder); | ||
65 | |||
63 | /* Match function */ | 66 | /* Match function */ |
64 | extern int mu_folder_set_match (mu_folder_t folder, mu_folder_match_fp pmatch); | 67 | extern int mu_folder_set_match (mu_folder_t folder, mu_folder_match_fp pmatch); |
65 | extern int mu_folder_get_match (mu_folder_t folder, | 68 | extern int mu_folder_get_match (mu_folder_t folder, |
diff --git a/include/mailutils/mailbox.h b/include/mailutils/mailbox.h index 5c5f4c628..e54ae88f0 100644 --- a/include/mailutils/mailbox.h +++ b/include/mailutils/mailbox.h | |||
@@ -72,6 +72,8 @@ extern int mu_mailbox_expunge (mu_mailbox_t); | |||
72 | extern int mu_mailbox_sync (mu_mailbox_t); | 72 | extern int mu_mailbox_sync (mu_mailbox_t); |
73 | extern int mu_mailbox_save_attributes (mu_mailbox_t) MU_DEPRECATED; | 73 | extern int mu_mailbox_save_attributes (mu_mailbox_t) MU_DEPRECATED; |
74 | 74 | ||
75 | extern int mu_mailbox_attach_ticket (mu_mailbox_t mbox); | ||
76 | |||
75 | #define MU_UIDL_LENGTH 70 | 77 | #define MU_UIDL_LENGTH 70 |
76 | #define MU_UIDL_BUFFER_SIZE (MU_UIDL_LENGTH+1) | 78 | #define MU_UIDL_BUFFER_SIZE (MU_UIDL_LENGTH+1) |
77 | 79 | ||
diff --git a/include/mailutils/sys/folder.h b/include/mailutils/sys/folder.h index c32835e66..050a18f97 100644 --- a/include/mailutils/sys/folder.h +++ b/include/mailutils/sys/folder.h | |||
@@ -28,9 +28,6 @@ | |||
28 | extern "C" { | 28 | extern "C" { |
29 | # endif | 29 | # endif |
30 | 30 | ||
31 | # define MU_FOLDER_LIST 0 | ||
32 | # define MU_FOLDER_ENUM 1 | ||
33 | |||
34 | struct _mu_folder | 31 | struct _mu_folder |
35 | { | 32 | { |
36 | /* Data */ | 33 | /* Data */ |
@@ -39,7 +36,7 @@ struct _mu_folder | |||
39 | mu_property_t property; | 36 | mu_property_t property; |
40 | mu_monitor_t monitor; | 37 | mu_monitor_t monitor; |
41 | mu_url_t url; | 38 | mu_url_t url; |
42 | int flags; | 39 | int is_local; |
43 | int ref; | 40 | int ref; |
44 | size_t uid; | 41 | size_t uid; |
45 | 42 | ||
diff --git a/libmailutils/Makefile.am b/libmailutils/Makefile.am index c940d9cc2..55b623892 100644 --- a/libmailutils/Makefile.am +++ b/libmailutils/Makefile.am | |||
@@ -18,7 +18,7 @@ | |||
18 | SUBDIRS = \ | 18 | SUBDIRS = \ |
19 | auth base address list sockaddr cidr cfg cli diag\ | 19 | auth base address list sockaddr cidr cfg cli diag\ |
20 | filter locus mailbox mailer mime msgset opt server string stream stdstream\ | 20 | filter locus mailbox mailer mime msgset opt server string stream stdstream\ |
21 | property url imapio datetime . tests | 21 | property url imapio datetime wicket . tests |
22 | 22 | ||
23 | lib_LTLIBRARIES = libmailutils.la | 23 | lib_LTLIBRARIES = libmailutils.la |
24 | 24 | ||
@@ -49,7 +49,8 @@ libmailutils_la_LIBADD = \ | |||
49 | string/libstring.la\ | 49 | string/libstring.la\ |
50 | stream/libstream.la\ | 50 | stream/libstream.la\ |
51 | stdstream/libstdstream.la\ | 51 | stdstream/libstdstream.la\ |
52 | url/liburl.la | 52 | url/liburl.la\ |
53 | wicket/libwicket.la | ||
53 | 54 | ||
54 | libmailutils_la_LDFLAGS = -version-info @VI_CURRENT@:@VI_REVISION@:@VI_AGE@ | 55 | libmailutils_la_LDFLAGS = -version-info @VI_CURRENT@:@VI_REVISION@:@VI_AGE@ |
55 | 56 | ||
diff --git a/libmailutils/base/wicket.c b/libmailutils/base/wicket.c index c60ddff85..22cd2c155 100644 --- a/libmailutils/base/wicket.c +++ b/libmailutils/base/wicket.c | |||
@@ -19,24 +19,9 @@ | |||
19 | # include <config.h> | 19 | # include <config.h> |
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | #include <errno.h> | ||
23 | #include <sys/types.h> | ||
24 | #include <sys/stat.h> | ||
25 | #include <pwd.h> | ||
26 | #include <string.h> | ||
27 | #include <stdlib.h> | 22 | #include <stdlib.h> |
28 | #include <stdio.h> | ||
29 | #include <unistd.h> | ||
30 | #include <ctype.h> | ||
31 | 23 | ||
32 | #include <mailutils/errno.h> | 24 | #include <mailutils/errno.h> |
33 | #include <mailutils/util.h> | ||
34 | #include <mailutils/mu_auth.h> | ||
35 | #include <mailutils/stream.h> | ||
36 | #include <mailutils/cstr.h> | ||
37 | #include <mailutils/nls.h> | ||
38 | #include <mailutils/errno.h> | ||
39 | |||
40 | #include <mailutils/sys/auth.h> | 25 | #include <mailutils/sys/auth.h> |
41 | #include <mailutils/sys/url.h> | 26 | #include <mailutils/sys/url.h> |
42 | 27 | ||
@@ -135,241 +120,3 @@ mu_wicket_set_get_ticket (mu_wicket_t wicket, | |||
135 | return 0; | 120 | return 0; |
136 | } | 121 | } |
137 | 122 | ||
138 | |||
139 | /* A "file wicket" implementation */ | ||
140 | |||
141 | struct file_wicket | ||
142 | { | ||
143 | char *filename; | ||
144 | }; | ||
145 | |||
146 | static void | ||
147 | _file_wicket_destroy (mu_wicket_t wicket) | ||
148 | { | ||
149 | struct file_wicket *fw = mu_wicket_get_data (wicket); | ||
150 | free (fw->filename); | ||
151 | free (fw); | ||
152 | } | ||
153 | |||
154 | struct file_ticket | ||
155 | { | ||
156 | char *filename; | ||
157 | char *user; | ||
158 | mu_url_t tickurl; | ||
159 | }; | ||
160 | |||
161 | static void | ||
162 | file_ticket_destroy (mu_ticket_t ticket) | ||
163 | { | ||
164 | struct file_ticket *ft = mu_ticket_get_data (ticket); | ||
165 | if (ft) | ||
166 | { | ||
167 | free (ft->filename); | ||
168 | free (ft->user); | ||
169 | mu_url_destroy (&ft->tickurl); | ||
170 | free (ft); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | int | ||
175 | file_ticket_get_cred (mu_ticket_t ticket, mu_url_t url, const char *challenge, | ||
176 | char **pplain, mu_secret_t *psec) | ||
177 | { | ||
178 | struct file_ticket *ft = mu_ticket_get_data (ticket); | ||
179 | int rc = 0; | ||
180 | |||
181 | if (!ft->tickurl) | ||
182 | { | ||
183 | rc = mu_wicket_file_match_url (ft->filename, url, | ||
184 | MU_URL_PARSE_ALL, | ||
185 | &ft->tickurl); | ||
186 | if (rc) | ||