[dovecot] fix name conflict with cyrus-sasl (#975869)
Michal Hlavinka
mhlavink at fedoraproject.org
Wed Jul 10 15:29:09 UTC 2013
commit c0f861a867ae08300e9619a6e630843eb020501e
Author: Michal Hlavinka <mhlavink at redhat.com>
Date: Wed Jul 10 17:28:55 2013 +0200
fix name conflict with cyrus-sasl (#975869)
dovecot-2.2.4-saslconflict.patch | 745 ++++++++++++++++++++++++++++++++++++++
dovecot.spec | 7 +-
2 files changed, 751 insertions(+), 1 deletions(-)
---
diff --git a/dovecot-2.2.4-saslconflict.patch b/dovecot-2.2.4-saslconflict.patch
new file mode 100644
index 0000000..7d2e4ff
--- /dev/null
+++ b/dovecot-2.2.4-saslconflict.patch
@@ -0,0 +1,745 @@
+
+# HG changeset patch
+# User Timo Sirainen <tss at iki.fi>
+# Date 1372246654 -10800
+# Node ID 2dd27b0e7e49785f4a2257a2b0933bc028ea9975
+# Parent d6b18c237be50b8327f068e918d297906e06ba6d
+lib-sasl: Use dsasl_ prefix so we don't conflict with Cyrus SASL library.
+
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/imap-login/imap-proxy.c
+--- a/src/imap-login/imap-proxy.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/imap-login/imap-proxy.c Wed Jun 26 14:37:34 2013 +0300
+@@ -9,7 +9,7 @@
+ #include "str.h"
+ #include "str-sanitize.h"
+ #include "safe-memset.h"
+-#include "sasl-client.h"
++#include "dsasl-client.h"
+ #include "client.h"
+ #include "client-authenticate.h"
+ #include "imap-resp-code.h"
+@@ -58,7 +58,7 @@
+
+ static int proxy_write_login(struct imap_client *client, string_t *str)
+ {
+- struct sasl_client_settings sasl_set;
++ struct dsasl_client_settings sasl_set;
+ const unsigned char *output;
+ unsigned int len;
+ const char *mech_name, *error;
+@@ -85,14 +85,14 @@
+ sasl_set.authzid = client->common.proxy_user;
+ sasl_set.password = client->common.proxy_password;
+ client->common.proxy_sasl_client =
+- sasl_client_new(client->common.proxy_mech, &sasl_set);
+- mech_name = sasl_client_mech_get_name(client->common.proxy_mech);
++ dsasl_client_new(client->common.proxy_mech, &sasl_set);
++ mech_name = dsasl_client_mech_get_name(client->common.proxy_mech);
+
+ str_append(str, "L AUTHENTICATE ");
+ str_append(str, mech_name);
+ if (client->proxy_sasl_ir) {
+- if (sasl_client_output(client->common.proxy_sasl_client,
+- &output, &len, &error) < 0) {
++ if (dsasl_client_output(client->common.proxy_sasl_client,
++ &output, &len, &error) < 0) {
+ client_log_err(&client->common, t_strdup_printf(
+ "proxy: SASL mechanism %s init failed: %s",
+ mech_name, error));
+@@ -226,11 +226,11 @@
+ client_proxy_failed(client, TRUE);
+ return -1;
+ }
+- ret = sasl_client_input(client->proxy_sasl_client,
+- str_data(str), str_len(str), &error);
++ ret = dsasl_client_input(client->proxy_sasl_client,
++ str_data(str), str_len(str), &error);
+ if (ret == 0) {
+- ret = sasl_client_output(client->proxy_sasl_client,
+- &data, &data_len, &error);
++ ret = dsasl_client_output(client->proxy_sasl_client,
++ &data, &data_len, &error);
+ }
+ if (ret < 0) {
+ client_log_err(client, t_strdup_printf(
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/Makefile.am
+--- a/src/lib-sasl/Makefile.am Tue Jun 25 16:03:04 2013 +0300
++++ b/src/lib-sasl/Makefile.am Wed Jun 26 14:37:34 2013 +0300
+@@ -6,11 +6,11 @@
+ libsasl_la_SOURCES = \
+ mech-login.c \
+ mech-plain.c \
+- sasl-client.c
++ dsasl-client.c
+
+ headers = \
+- sasl-client.h \
+- sasl-client-private.h
++ dsasl-client.h \
++ dsasl-client-private.h
+
+ pkginc_libdir=$(pkgincludedir)
+ pkginc_lib_HEADERS = $(headers)
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/dsasl-client-private.h
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ b/src/lib-sasl/dsasl-client-private.h Wed Jun 26 14:37:34 2013 +0300
+@@ -0,0 +1,33 @@
++#ifndef DSASL_CLIENT_PRIVATE_H
++#define DSASL_CLIENT_PRIVATE_H
++
++#include "dsasl-client.h"
++
++struct dsasl_client {
++ pool_t pool;
++ struct dsasl_client_settings set;
++ char *password;
++ const struct dsasl_client_mech *mech;
++};
++
++struct dsasl_client_mech {
++ const char *name;
++ size_t struct_size;
++
++ int (*input)(struct dsasl_client *client,
++ const unsigned char *input,
++ unsigned int input_len,
++ const char **error_r);
++ int (*output)(struct dsasl_client *client,
++ const unsigned char **output_r,
++ unsigned int *output_len_r,
++ const char **error_r);
++ void (*free)(struct dsasl_client *client);
++};
++
++extern const struct dsasl_client_mech dsasl_client_mech_login;
++
++void dsasl_client_mech_register(const struct dsasl_client_mech *mech);
++void dsasl_client_mech_unregister(const struct dsasl_client_mech *mech);
++
++#endif
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/dsasl-client.c
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ b/src/lib-sasl/dsasl-client.c Wed Jun 26 14:37:34 2013 +0300
+@@ -0,0 +1,104 @@
++/* Copyright (c) 2013 Dovecot authors, see the included COPYING file */
++
++#include "lib.h"
++#include "array.h"
++#include "safe-memset.h"
++#include "dsasl-client-private.h"
++
++static ARRAY(const struct dsasl_client_mech *) dsasl_mechanisms = ARRAY_INIT;
++
++static const struct dsasl_client_mech *
++dsasl_client_mech_find_idx(const char *name, unsigned int *idx_r)
++{
++ const struct dsasl_client_mech *const *mechp;
++
++ array_foreach(&dsasl_mechanisms, mechp) {
++ if (strcasecmp((*mechp)->name, name) == 0) {
++ *idx_r = array_foreach_idx(&dsasl_mechanisms, mechp);
++ return *mechp;
++ }
++ }
++ return NULL;
++}
++
++const struct dsasl_client_mech *dsasl_client_mech_find(const char *name)
++{
++ unsigned int idx;
++
++ return dsasl_client_mech_find_idx(name, &idx);
++}
++
++const char *dsasl_client_mech_get_name(const struct dsasl_client_mech *mech)
++{
++ return mech->name;
++}
++
++void dsasl_client_mech_register(const struct dsasl_client_mech *mech)
++{
++ array_append(&dsasl_mechanisms, &mech, 1);
++}
++
++void dsasl_client_mech_unregister(const struct dsasl_client_mech *mech)
++{
++ unsigned int idx;
++
++ if (dsasl_client_mech_find_idx(mech->name, &idx) == NULL)
++ i_panic("SASL mechanism not registered: %s", mech->name);
++ array_delete(&dsasl_mechanisms, idx, 1);
++}
++
++struct dsasl_client *dsasl_client_new(const struct dsasl_client_mech *mech,
++ const struct dsasl_client_settings *set)
++{
++ struct dsasl_client *client;
++ pool_t pool = pool_alloconly_create("sasl client", 512);
++
++ client = p_malloc(pool, mech->struct_size);
++ client->pool = pool;
++ client->mech = mech;
++ client->set.authid = p_strdup(pool, set->authid);
++ client->set.authzid = p_strdup(pool, set->authzid);
++ client->password = p_strdup(pool, set->password);
++ client->set.password = client->password;
++ return client;
++}
++
++void dsasl_client_free(struct dsasl_client **_client)
++{
++ struct dsasl_client *client = *_client;
++
++ *_client = NULL;
++
++ if (client->mech->free != NULL)
++ client->mech->free(client);
++ safe_memset(client->password, 0, strlen(client->password));
++ pool_unref(&client->pool);
++}
++
++int dsasl_client_input(struct dsasl_client *client,
++ const unsigned char *input,
++ unsigned int input_len,
++ const char **error_r)
++{
++ return client->mech->input(client, input, input_len, error_r);
++}
++
++int dsasl_client_output(struct dsasl_client *client,
++ const unsigned char **output_r,
++ unsigned int *output_len_r,
++ const char **error_r)
++{
++ return client->mech->output(client, output_r, output_len_r, error_r);
++}
++
++void dsasl_clients_init(void)
++{
++ i_array_init(&dsasl_mechanisms, 8);
++ dsasl_client_mech_register(&dsasl_client_mech_plain);
++ dsasl_client_mech_register(&dsasl_client_mech_login);
++}
++
++void dsasl_clients_deinit(void)
++{
++ array_free(&dsasl_mechanisms);
++}
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/dsasl-client.h
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ b/src/lib-sasl/dsasl-client.h Wed Jun 26 14:37:34 2013 +0300
+@@ -0,0 +1,39 @@
++#ifndef DSASL_CLIENT_H
++#define DSASL_CLIENT_H
++
++struct dsasl_client_settings {
++ /* authentication ID - must be set with most mechanisms */
++ const char *authid;
++ /* authorization ID (who to log in as, if authentication ID is a
++ master user) */
++ const char *authzid;
++ /* password - must be set with most mechanisms */
++ const char *password;
++};
++
++/* PLAIN mechanism always exists and can be accessed directly via this. */
++extern const struct dsasl_client_mech dsasl_client_mech_plain;
++
++const struct dsasl_client_mech *dsasl_client_mech_find(const char *name);
++const char *dsasl_client_mech_get_name(const struct dsasl_client_mech *mech);
++
++struct dsasl_client *dsasl_client_new(const struct dsasl_client_mech *mech,
++ const struct dsasl_client_settings *set);
++void dsasl_client_free(struct dsasl_client **client);
++
++/* Call for server input. */
++int dsasl_client_input(struct dsasl_client *client,
++ const unsigned char *input,
++ unsigned int input_len,
++ const char **error_r);
++/* Call for getting server output. Also used to get the initial SASL response
++ if supported by the protocol. */
++int dsasl_client_output(struct dsasl_client *client,
++ const unsigned char **output_r,
++ unsigned int *output_len_r,
++ const char **error_r);
++
++void dsasl_clients_init(void);
++void dsasl_clients_deinit(void);
++
++#endif
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/mech-login.c
+--- a/src/lib-sasl/mech-login.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/lib-sasl/mech-login.c Wed Jun 26 14:37:34 2013 +0300
+@@ -2,7 +2,7 @@
+
+ #include "lib.h"
+ #include "str.h"
+-#include "sasl-client-private.h"
++#include "dsasl-client-private.h"
+
+ enum login_state {
+ STATE_INIT = 0,
+@@ -10,18 +10,19 @@
+ STATE_PASS
+ };
+
+-struct login_sasl_client {
+- struct sasl_client client;
++struct login_dsasl_client {
++ struct dsasl_client client;
+ enum login_state state;
+ };
+
+ static int
+-mech_login_input(struct sasl_client *_client,
++mech_login_input(struct dsasl_client *_client,
+ const unsigned char *input ATTR_UNUSED,
+ unsigned int input_len ATTR_UNUSED,
+ const char **error_r)
+ {
+- struct login_sasl_client *client = (struct login_sasl_client *)_client;
++ struct login_dsasl_client *client =
++ (struct login_dsasl_client *)_client;
+
+ if (client->state == STATE_PASS) {
+ *error_r = "Server didn't finish authentication";
+@@ -32,11 +33,12 @@
+ }
+
+ static int
+-mech_login_output(struct sasl_client *_client,
++mech_login_output(struct dsasl_client *_client,
+ const unsigned char **output_r, unsigned int *output_len_r,
+ const char **error_r)
+ {
+- struct login_sasl_client *client = (struct login_sasl_client *)_client;
++ struct login_dsasl_client *client =
++ (struct login_dsasl_client *)_client;
+
+ if (_client->set.authid == NULL) {
+ *error_r = "authid not set";
+@@ -64,9 +66,9 @@
+ i_unreached();
+ }
+
+-const struct sasl_client_mech sasl_client_mech_login = {
++const struct dsasl_client_mech dsasl_client_mech_login = {
+ .name = "LOGIN",
+- .struct_size = sizeof(struct login_sasl_client),
++ .struct_size = sizeof(struct login_dsasl_client),
+
+ .input = mech_login_input,
+ .output = mech_login_output
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/mech-plain.c
+--- a/src/lib-sasl/mech-plain.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/lib-sasl/mech-plain.c Wed Jun 26 14:37:34 2013 +0300
+@@ -2,19 +2,20 @@
+
+ #include "lib.h"
+ #include "str.h"
+-#include "sasl-client-private.h"
++#include "dsasl-client-private.h"
+
+-struct plain_sasl_client {
+- struct sasl_client client;
++struct plain_dsasl_client {
++ struct dsasl_client client;
+ bool output_sent;
+ };
+
+ static int
+-mech_plain_input(struct sasl_client *_client,
++mech_plain_input(struct dsasl_client *_client,
+ const unsigned char *input ATTR_UNUSED, unsigned int input_len,
+ const char **error_r)
+ {
+- struct plain_sasl_client *client = (struct plain_sasl_client *)_client;
++ struct plain_dsasl_client *client =
++ (struct plain_dsasl_client *)_client;
+
+ if (!client->output_sent) {
+ if (input_len > 0) {
+@@ -29,11 +30,12 @@
+ }
+
+ static int
+-mech_plain_output(struct sasl_client *_client,
++mech_plain_output(struct dsasl_client *_client,
+ const unsigned char **output_r, unsigned int *output_len_r,
+ const char **error_r)
+ {
+- struct plain_sasl_client *client = (struct plain_sasl_client *)_client;
++ struct plain_dsasl_client *client =
++ (struct plain_dsasl_client *)_client;
+ string_t *str;
+
+ if (_client->set.authid == NULL) {
+@@ -59,9 +61,9 @@
+ return 0;
+ }
+
+-const struct sasl_client_mech sasl_client_mech_plain = {
++const struct dsasl_client_mech dsasl_client_mech_plain = {
+ .name = "PLAIN",
+- .struct_size = sizeof(struct plain_sasl_client),
++ .struct_size = sizeof(struct plain_dsasl_client),
+
+ .input = mech_plain_input,
+ .output = mech_plain_output
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/sasl-client-private.h
+--- a/src/lib-sasl/sasl-client-private.h Tue Jun 25 16:03:04 2013 +0300
++++ /dev/null Thu Jan 01 00:00:00 1970 +0000
+@@ -1,33 +0,0 @@
+-#ifndef SASL_CLIENT_PRIVATE_H
+-#define SASL_CLIENT_PRIVATE_H
+-
+-#include "sasl-client.h"
+-
+-struct sasl_client {
+- pool_t pool;
+- struct sasl_client_settings set;
+- char *password;
+- const struct sasl_client_mech *mech;
+-};
+-
+-struct sasl_client_mech {
+- const char *name;
+- size_t struct_size;
+-
+- int (*input)(struct sasl_client *client,
+- const unsigned char *input,
+- unsigned int input_len,
+- const char **error_r);
+- int (*output)(struct sasl_client *client,
+- const unsigned char **output_r,
+- unsigned int *output_len_r,
+- const char **error_r);
+- void (*free)(struct sasl_client *client);
+-};
+-
+-extern const struct sasl_client_mech sasl_client_mech_login;
+-
+-void sasl_client_mech_register(const struct sasl_client_mech *mech);
+-void sasl_client_mech_unregister(const struct sasl_client_mech *mech);
+-
+-#endif
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/sasl-client.c
+--- a/src/lib-sasl/sasl-client.c Tue Jun 25 16:03:04 2013 +0300
++++ /dev/null Thu Jan 01 00:00:00 1970 +0000
+@@ -1,104 +0,0 @@
+-/* Copyright (c) 2013 Dovecot authors, see the included COPYING file */
+-
+-#include "lib.h"
+-#include "array.h"
+-#include "safe-memset.h"
+-#include "sasl-client-private.h"
+-
+-static ARRAY(const struct sasl_client_mech *) sasl_mechanisms = ARRAY_INIT;
+-
+-static const struct sasl_client_mech *
+-sasl_client_mech_find_idx(const char *name, unsigned int *idx_r)
+-{
+- const struct sasl_client_mech *const *mechp;
+-
+- array_foreach(&sasl_mechanisms, mechp) {
+- if (strcasecmp((*mechp)->name, name) == 0) {
+- *idx_r = array_foreach_idx(&sasl_mechanisms, mechp);
+- return *mechp;
+- }
+- }
+- return NULL;
+-}
+-
+-const struct sasl_client_mech *sasl_client_mech_find(const char *name)
+-{
+- unsigned int idx;
+-
+- return sasl_client_mech_find_idx(name, &idx);
+-}
+-
+-const char *sasl_client_mech_get_name(const struct sasl_client_mech *mech)
+-{
+- return mech->name;
+-}
+-
+-void sasl_client_mech_register(const struct sasl_client_mech *mech)
+-{
+- array_append(&sasl_mechanisms, &mech, 1);
+-}
+-
+-void sasl_client_mech_unregister(const struct sasl_client_mech *mech)
+-{
+- unsigned int idx;
+-
+- if (sasl_client_mech_find_idx(mech->name, &idx) == NULL)
+- i_panic("SASL mechanism not registered: %s", mech->name);
+- array_delete(&sasl_mechanisms, idx, 1);
+-}
+-
+-struct sasl_client *sasl_client_new(const struct sasl_client_mech *mech,
+- const struct sasl_client_settings *set)
+-{
+- struct sasl_client *client;
+- pool_t pool = pool_alloconly_create("sasl client", 512);
+-
+- client = p_malloc(pool, mech->struct_size);
+- client->pool = pool;
+- client->mech = mech;
+- client->set.authid = p_strdup(pool, set->authid);
+- client->set.authzid = p_strdup(pool, set->authzid);
+- client->password = p_strdup(pool, set->password);
+- client->set.password = client->password;
+- return client;
+-}
+-
+-void sasl_client_free(struct sasl_client **_client)
+-{
+- struct sasl_client *client = *_client;
+-
+- *_client = NULL;
+-
+- if (client->mech->free != NULL)
+- client->mech->free(client);
+- safe_memset(client->password, 0, strlen(client->password));
+- pool_unref(&client->pool);
+-}
+-
+-int sasl_client_input(struct sasl_client *client,
+- const unsigned char *input,
+- unsigned int input_len,
+- const char **error_r)
+-{
+- return client->mech->input(client, input, input_len, error_r);
+-}
+-
+-int sasl_client_output(struct sasl_client *client,
+- const unsigned char **output_r,
+- unsigned int *output_len_r,
+- const char **error_r)
+-{
+- return client->mech->output(client, output_r, output_len_r, error_r);
+-}
+-
+-void sasl_clients_init(void)
+-{
+- i_array_init(&sasl_mechanisms, 8);
+- sasl_client_mech_register(&sasl_client_mech_plain);
+- sasl_client_mech_register(&sasl_client_mech_login);
+-}
+-
+-void sasl_clients_deinit(void)
+-{
+- array_free(&sasl_mechanisms);
+-}
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/lib-sasl/sasl-client.h
+--- a/src/lib-sasl/sasl-client.h Tue Jun 25 16:03:04 2013 +0300
++++ /dev/null Thu Jan 01 00:00:00 1970 +0000
+@@ -1,39 +0,0 @@
+-#ifndef SASL_CLIENT_H
+-#define SASL_CLIENT_H
+-
+-struct sasl_client_settings {
+- /* authentication ID - must be set with most mechanisms */
+- const char *authid;
+- /* authorization ID (who to log in as, if authentication ID is a
+- master user) */
+- const char *authzid;
+- /* password - must be set with most mechanisms */
+- const char *password;
+-};
+-
+-/* PLAIN mechanism always exists and can be accessed directly via this. */
+-extern const struct sasl_client_mech sasl_client_mech_plain;
+-
+-const struct sasl_client_mech *sasl_client_mech_find(const char *name);
+-const char *sasl_client_mech_get_name(const struct sasl_client_mech *mech);
+-
+-struct sasl_client *sasl_client_new(const struct sasl_client_mech *mech,
+- const struct sasl_client_settings *set);
+-void sasl_client_free(struct sasl_client **client);
+-
+-/* Call for server input. */
+-int sasl_client_input(struct sasl_client *client,
+- const unsigned char *input,
+- unsigned int input_len,
+- const char **error_r);
+-/* Call for getting server output. Also used to get the initial SASL response
+- if supported by the protocol. */
+-int sasl_client_output(struct sasl_client *client,
+- const unsigned char **output_r,
+- unsigned int *output_len_r,
+- const char **error_r);
+-
+-void sasl_clients_init(void);
+-void sasl_clients_deinit(void);
+-
+-#endif
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/login-common/client-common-auth.c
+--- a/src/login-common/client-common-auth.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/login-common/client-common-auth.c Wed Jun 26 14:37:34 2013 +0300
+@@ -9,7 +9,7 @@
+ #include "time-util.h"
+ #include "login-proxy.h"
+ #include "auth-client.h"
+-#include "sasl-client.h"
++#include "dsasl-client.h"
+ #include "master-service-ssl-settings.h"
+ #include "client-common.h"
+
+@@ -202,7 +202,7 @@
+ }
+
+ if (client->proxy_sasl_client != NULL)
+- sasl_client_free(&client->proxy_sasl_client);
++ dsasl_client_free(&client->proxy_sasl_client);
+ login_proxy_free(&client->login_proxy);
+ proxy_free_password(client);
+ i_free_and_null(client->proxy_user);
+@@ -275,7 +275,7 @@
+ const struct client_auth_reply *reply)
+ {
+ struct login_proxy_settings proxy_set;
+- const struct sasl_client_mech *sasl_mech = NULL;
++ const struct dsasl_client_mech *sasl_mech = NULL;
+
+ i_assert(reply->destuser != NULL);
+ i_assert(!client->destroyed);
+@@ -296,7 +296,7 @@
+ }
+
+ if (reply->proxy_mech != NULL) {
+- sasl_mech = sasl_client_mech_find(reply->proxy_mech);
++ sasl_mech = dsasl_client_mech_find(reply->proxy_mech);
+ if (sasl_mech == NULL) {
+ client_log_err(client, t_strdup_printf(
+ "proxy: Unsupported SASL mechanism %s",
+@@ -306,7 +306,7 @@
+ }
+ } else if (reply->master_user != NULL) {
+ /* have to use PLAIN authentication with master user logins */
+- sasl_mech = &sasl_client_mech_plain;
++ sasl_mech = &dsasl_client_mech_plain;
+ }
+
+ i_assert(client->refcount > 1);
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/login-common/client-common.c
+--- a/src/login-common/client-common.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/login-common/client-common.c Wed Jun 26 14:37:34 2013 +0300
+@@ -18,7 +18,7 @@
+ #include "master-service-ssl-settings.h"
+ #include "master-auth.h"
+ #include "auth-client.h"
+-#include "sasl-client.h"
++#include "dsasl-client.h"
+ #include "login-proxy.h"
+ #include "ssl-proxy.h"
+ #include "client-common.h"
+@@ -211,7 +211,7 @@
+ }
+
+ if (client->proxy_sasl_client != NULL)
+- sasl_client_free(&client->proxy_sasl_client);
++ dsasl_client_free(&client->proxy_sasl_client);
+ if (client->login_proxy != NULL)
+ login_proxy_free(&client->login_proxy);
+ if (client->v.destroy != NULL)
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/login-common/client-common.h
+--- a/src/login-common/client-common.h Tue Jun 25 16:03:04 2013 +0300
++++ b/src/login-common/client-common.h Wed Jun 26 14:37:34 2013 +0300
+@@ -122,8 +122,8 @@
+
+ struct login_proxy *login_proxy;
+ char *proxy_user, *proxy_master_user, *proxy_password;
+- const struct sasl_client_mech *proxy_mech;
+- struct sasl_client *proxy_sasl_client;
++ const struct dsasl_client_mech *proxy_mech;
++ struct dsasl_client *proxy_sasl_client;
+ unsigned int proxy_state;
+ unsigned int proxy_ttl;
+
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/login-common/main.c
+--- a/src/login-common/main.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/login-common/main.c Wed Jun 26 14:37:34 2013 +0300
+@@ -13,7 +13,7 @@
+ #include "access-lookup.h"
+ #include "anvil-client.h"
+ #include "auth-client.h"
+-#include "sasl-client.h"
++#include "dsasl-client.h"
+ #include "master-service-ssl-settings.h"
+ #include "ssl-proxy.h"
+ #include "login-proxy.h"
+@@ -282,7 +282,7 @@
+ /* Initialize SSL proxy so it can read certificate and private
+ key file. */
+ ssl_proxy_init();
+- sasl_clients_init();
++ dsasl_clients_init();
+
+ /* set the number of fds we want to use. it may get increased or
+ decreased. leave a couple of extra fds for auth sockets and such.
+@@ -358,7 +358,7 @@
+ anvil_client_deinit(&anvil);
+ if (auth_client_to != NULL)
+ timeout_remove(&auth_client_to);
+- sasl_clients_deinit();
++ dsasl_clients_deinit();
+ login_settings_deinit();
+ }
+
+diff -r d6b18c237be5 -r 2dd27b0e7e49 src/pop3-login/pop3-proxy.c
+--- a/src/pop3-login/pop3-proxy.c Tue Jun 25 16:03:04 2013 +0300
++++ b/src/pop3-login/pop3-proxy.c Wed Jun 26 14:37:34 2013 +0300
+@@ -8,7 +8,7 @@
+ #include "safe-memset.h"
+ #include "str.h"
+ #include "str-sanitize.h"
+-#include "sasl-client.h"
++#include "dsasl-client.h"
+ #include "client.h"
+ #include "pop3-proxy.h"
+
+@@ -23,7 +23,7 @@
+
+ static int proxy_send_login(struct pop3_client *client, struct ostream *output)
+ {
+- struct sasl_client_settings sasl_set;
++ struct dsasl_client_settings sasl_set;
+ const unsigned char *sasl_output;
+ unsigned int len;
+ const char *mech_name, *error;
+@@ -60,12 +60,12 @@
+ sasl_set.authzid = client->common.proxy_user;
+ sasl_set.password = client->common.proxy_password;
+ client->common.proxy_sasl_client =
+- sasl_client_new(client->common.proxy_mech, &sasl_set);
+- mech_name = sasl_client_mech_get_name(client->common.proxy_mech);
++ dsasl_client_new(client->common.proxy_mech, &sasl_set);
++ mech_name = dsasl_client_mech_get_name(client->common.proxy_mech);
+
+ str_printfa(str, "AUTH %s ", mech_name);
+- if (sasl_client_output(client->common.proxy_sasl_client,
+- &sasl_output, &len, &error) < 0) {
++ if (dsasl_client_output(client->common.proxy_sasl_client,
++ &sasl_output, &len, &error) < 0) {
+ client_log_err(&client->common, t_strdup_printf(
+ "proxy: SASL mechanism %s init failed: %s",
+ mech_name, error));
+@@ -99,11 +99,11 @@
+ client_log_err(client, "proxy: Server sent invalid base64 data in AUTH response");
+ return -1;
+ }
+- ret = sasl_client_input(client->proxy_sasl_client,
+- str_data(str), str_len(str), &error);
++ ret = dsasl_client_input(client->proxy_sasl_client,
++ str_data(str), str_len(str), &error);
+ if (ret == 0) {
+- ret = sasl_client_output(client->proxy_sasl_client,
+- &data, &data_len, &error);
++ ret = dsasl_client_output(client->proxy_sasl_client,
++ &data, &data_len, &error);
+ }
+ if (ret < 0) {
+ client_log_err(client, t_strdup_printf(
+
diff --git a/dovecot.spec b/dovecot.spec
index 9254184..c207b47 100644
--- a/dovecot.spec
+++ b/dovecot.spec
@@ -5,7 +5,7 @@ Name: dovecot
Epoch: 1
Version: 2.2.4
%global prever %{nil}
-Release: 1%{?dist}
+Release: 2%{?dist}
#dovecot itself is MIT, a few sources are PD, pigeonhole is LGPLv2
License: MIT and LGPLv2
Group: System Environment/Daemons
@@ -35,6 +35,7 @@ Patch5: dovecot-2.1-privatetmp.patch
#wait for network
Patch6: dovecot-2.1.10-waitonline.patch
+Patch7: dovecot-2.2.4-saslconflict.patch
Source15: prestartscript
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -131,6 +132,7 @@ This package provides the development files for dovecot.
%patch4 -p1 -b .reload
%patch5 -p1 -b .privatetmp
%patch6 -p1 -b .waitonline
+%patch7 -p1 -b .saslconflict
sed -i '/DEFAULT_INCLUDES *=/s|$| '"$(pkg-config --cflags libclucene-core)|" src/plugins/fts-lucene/Makefile.in
%build
@@ -484,6 +486,9 @@ make check
%{_libdir}/%{name}/dict/libdriver_pgsql.so
%changelog
+* Wed Jul 10 2013 Michal Hlavinka <mhlavink at redhat.com> - 1:2.2.4-2
+- fix name conflict with cyrus-sasl (#975869)
+
* Tue Jun 25 2013 Michal Hlavinka <mhlavink at redhat.com> - 1:2.2.4-1
- dovecot updated to 2.2.4
- imap/pop3 proxy: Master user logins were broken in v2.2.3
More information about the scm-commits
mailing list