mutt_account_tourl (&mx.account, &url);
url.path = mx.mbox;
- rc = url_ciss_tostring (&url, path, len);
+ rc = url_ciss_tostring (&url, path, len, U_DECODE_PASSWD);
FREE (&mx.mbox);
return rc;
/* FIXME: That hard-coded constant is bogus. But we need the actual
* size of the buffer from mutt_pretty_mailbox. And these pretty
* operations usually shrink the result. Still... */
- url_ciss_tostring (&url, path, 1024);
+ url_ciss_tostring (&url, path, 1024, 0);
}
FREE (&target.mbox);
mutt_account_tourl (&mx->account, &url);
url.path = path;
- url_ciss_tostring (&url, dest, len);
+ url_ciss_tostring (&url, dest, len, 0);
}
/* account isn't actually modified, since url isn't either */
mutt_account_tourl ((ACCOUNT*) account, &url);
url.path = NULL;
- url_ciss_tostring (&url, hook, sizeof (hook));
+ url_ciss_tostring (&url, hook, sizeof (hook), 0);
mutt_account_hook (hook);
conn = start ? start->next : Connections;
}
while (recurse);
+#ifdef USE_IMAP
+ /* Rewrite IMAP path in canonical form - aids in string comparisons of
+ * folders. May possibly fail, in which case s should be the same. */
+ if (mx_is_imap (s))
+ imap_expand_path (s, slen);
+#endif
+
return (s);
}
mutt_account_tourl (&acct, &url);
url.path = NULL;
- url_ciss_tostring (&url, buf, sizeof (buf));
+ url_ciss_tostring (&url, buf, sizeof (buf), 0);
FREE (&ctx->path);
ctx->path = safe_strdup (buf);
}
/* url_ciss_tostring: output the URL string for a given CISS object. */
-int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len)
+int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags)
{
if (ciss->scheme == U_UNKNOWN)
return -1;
if (ciss->host)
{
strncat (dest, "//", len - strlen (dest));
- if (ciss->user)
- snprintf (dest + strlen (dest), len - strlen (dest), "%s@",
- ciss->user);
- /* password deliberately omitted. */
+ if (ciss->user) {
+ if (flags & U_DECODE_PASSWD && ciss->pass)
+ snprintf (dest + strlen (dest), len - strlen (dest), "%s:%s@",
+ ciss->user, ciss->pass);
+ else
+ snprintf (dest + strlen (dest), len - strlen (dest), "%s@",
+ ciss->user);
+ }
if (ciss->port)
snprintf (dest + strlen (dest), len - strlen (dest), "%s:%hu/",
}
url_scheme_t;
+#define U_DECODE_PASSWD (1)
+
typedef struct ciss_url
{
url_scheme_t scheme;
url_scheme_t url_check_scheme (const char *s);
int url_parse_file (char *d, const char *src, size_t dl);
int url_parse_ciss (ciss_url_t *ciss, char *src);
-int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len);
+int url_ciss_tostring (ciss_url_t* ciss, char* dest, size_t len, int flags);
int url_parse_mailto (ENVELOPE *e, char **body, const char *src);
#endif