Alternate patch for bug 3093 -- backend.c doesn't compare offered mechanisms to conf file
Michael Bacon
baconm at email.unc.edu
Sun Jul 5 23:52:08 EDT 2009
So I spent several hours today working on this patch, before I
realized that Wesley Craig had already developed a patch. I notice
that his hasn't been accepted into the trunk on CVS yet. Let me just
state that this was a blocker bug for our implementation, and that I
support some kind of fix being applied. Since I've already written
it, I went ahead and attached the patch as I wrote it below -- same
basic idea as Wesley's, but different implementation. Someone else
can decide which to use... :)
Another (new, I think) bug patch coming in just a sec....
index: backend.c
===================================================================
RCS file: /cvs/src/cyrus/imap/backend.c,v
retrieving revision 1.59
diff -u -r1.59 backend.c
--- backend.c 4 Feb 2009 16:42:02 -0000 1.59
+++ backend.c 6 Jul 2009 03:35:52 -0000
@@ -134,6 +134,38 @@
return ret;
}
+static void reconcile_mechs(char **list, const char *conflist)
+{
+ char *new;
+ char *cur;
+ char *end;
+
+ if (strlen(*list) == 0) {
+ return;
+ }
+
+ /* Lazy way of getting a big enough buffer */
+ /* The new string should be no longer than the old */
+ new = xstrndup(*list, strlen(*list) + 1);
+ *new = '\0';
+
+ for (cur = *list; cur != NULL; cur = end) {
+ if (end = strchr(cur, ' ')) {
+ *end = '\0';
+ end++;
+ }
+
+ if (strstr(cur, conflist)) {
+ if (strlen(new)) {
+ strcat(new, " ");
+ }
+ strcat(new, cur);
+ }
+ }
+ free(*list);
+ *list = new;
+}
+
static int do_starttls(struct backend *s, struct tls_cmd_t *tls_cmd)
{
#ifndef HAVE_SSL
@@ -247,8 +279,7 @@
do {
/* If we have a mech_conf, use it */
if (mech_conf) {
- free(*mechlist);
- *mechlist = xstrdup(mech_conf);
+ reconcile_mechs(mechlist, mech_conf);
}
if (*mechlist) {
More information about the Cyrus-devel
mailing list