[evolution-data-server] Make Camel's SASL framework more extensible.



commit 75cc27f6f649ca274ed27e392883f2e990e46a82
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jun 24 11:29:04 2011 -0400

    Make Camel's SASL framework more extensible.
    
    Gather SASL mechanism names by traversing subclasses of CamelSasl
    instead of hard-coding all known mechanism names.  This allows
    mechanisms to be added from outside of libcamel.
    
    This adds a CamelServiceAuthType pointer to CamelSaslClass, which
    changes the ABI.  Statically registered subclasses can just point to a
    static CamelServiceAuthType struct.  Dynamically registered subclasses
    should allocate a CamelServiceAuthType struct in their base_init class
    method and free it in their base_finalize class method.
    
    Adapt CamelSasl subclasses to the new approach.

 camel/camel-sasl-anonymous.c                       |    3 +-
 camel/camel-sasl-anonymous.h                       |    2 -
 camel/camel-sasl-cram-md5.c                        |    3 +-
 camel/camel-sasl-cram-md5.h                        |    2 -
 camel/camel-sasl-digest-md5.c                      |    3 +-
 camel/camel-sasl-digest-md5.h                      |    2 -
 camel/camel-sasl-gssapi.c                          |    3 +-
 camel/camel-sasl-gssapi.h                          |    2 -
 camel/camel-sasl-login.c                           |    3 +-
 camel/camel-sasl-login.h                           |    2 -
 camel/camel-sasl-ntlm.c                            |    3 +-
 camel/camel-sasl-ntlm.h                            |    2 -
 camel/camel-sasl-plain.c                           |    3 +-
 camel/camel-sasl-plain.h                           |    2 -
 camel/camel-sasl-popb4smtp.c                       |    3 +-
 camel/camel-sasl-popb4smtp.h                       |    2 -
 camel/camel-sasl.c                                 |  174 ++++++++++++++------
 camel/camel-sasl.h                                 |    3 +
 configure.ac                                       |    2 +-
 docs/reference/camel/camel-sections.txt            |    8 -
 .../reference/camel/tmpl/camel-sasl-anonymous.sgml |    6 -
 docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml |    6 -
 .../camel/tmpl/camel-sasl-digest-md5.sgml          |    6 -
 docs/reference/camel/tmpl/camel-sasl-gssapi.sgml   |    6 -
 docs/reference/camel/tmpl/camel-sasl-login.sgml    |    6 -
 docs/reference/camel/tmpl/camel-sasl-ntlm.sgml     |    6 -
 docs/reference/camel/tmpl/camel-sasl-plain.sgml    |    6 -
 .../reference/camel/tmpl/camel-sasl-popb4smtp.sgml |    6 -
 docs/reference/camel/tmpl/camel-unused.sgml        |   48 ++++++
 29 files changed, 195 insertions(+), 128 deletions(-)
---
diff --git a/camel/camel-sasl-anonymous.c b/camel/camel-sasl-anonymous.c
index b075671..b26ee25 100644
--- a/camel/camel-sasl-anonymous.c
+++ b/camel/camel-sasl-anonymous.c
@@ -31,7 +31,7 @@
 #include "camel-internet-address.h"
 #include "camel-sasl-anonymous.h"
 
-CamelServiceAuthType camel_sasl_anonymous_authtype = {
+static CamelServiceAuthType sasl_anonymous_auth_type = {
 	N_("Anonymous"),
 
 	N_("This option will connect to the server using an anonymous login."),
@@ -125,6 +125,7 @@ camel_sasl_anonymous_class_init (CamelSaslAnonymousClass *class)
 	object_class->finalize = sasl_anonymous_finalize;
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_anonymous_auth_type;
 	sasl_class->challenge_sync = sasl_anonymous_challenge_sync;
 }
 
diff --git a/camel/camel-sasl-anonymous.h b/camel/camel-sasl-anonymous.h
index 57844ab..239c353 100644
--- a/camel/camel-sasl-anonymous.h
+++ b/camel/camel-sasl-anonymous.h
@@ -75,8 +75,6 @@ GType camel_sasl_anonymous_get_type (void);
 /* public methods */
 CamelSasl *camel_sasl_anonymous_new (CamelSaslAnonTraceType type, const gchar *trace_info);
 
-extern CamelServiceAuthType camel_sasl_anonymous_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_ANONYMOUS_H */
diff --git a/camel/camel-sasl-cram-md5.c b/camel/camel-sasl-cram-md5.c
index 66fd351..06c12a0 100644
--- a/camel/camel-sasl-cram-md5.c
+++ b/camel/camel-sasl-cram-md5.c
@@ -37,7 +37,7 @@ struct _CamelSaslCramMd5Private {
 	gint placeholder;  /* allow for future expansion */
 };
 
-CamelServiceAuthType camel_sasl_cram_md5_authtype = {
+static CamelServiceAuthType sasl_cram_md5_auth_type = {
 	N_("CRAM-MD5"),
 
 	N_("This option will connect to the server using a "
@@ -139,6 +139,7 @@ camel_sasl_cram_md5_class_init (CamelSaslCramMd5Class *class)
 	g_type_class_add_private (class, sizeof (CamelSaslCramMd5Private));
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_cram_md5_auth_type;
 	sasl_class->challenge_sync = sasl_cram_md5_challenge_sync;
 }
 
diff --git a/camel/camel-sasl-cram-md5.h b/camel/camel-sasl-cram-md5.h
index 70145b5..9c71729 100644
--- a/camel/camel-sasl-cram-md5.h
+++ b/camel/camel-sasl-cram-md5.h
@@ -65,8 +65,6 @@ struct _CamelSaslCramMd5Class {
 
 GType camel_sasl_cram_md5_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_cram_md5_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_CRAM_MD5_H */
diff --git a/camel/camel-sasl-digest-md5.c b/camel/camel-sasl-digest-md5.c
index 526cb82..d1c1379 100644
--- a/camel/camel-sasl-digest-md5.c
+++ b/camel/camel-sasl-digest-md5.c
@@ -50,7 +50,7 @@
 
 /* Implements rfc2831 */
 
-CamelServiceAuthType camel_sasl_digest_md5_authtype = {
+static CamelServiceAuthType sasl_digest_md5_auth_type = {
 	N_("DIGEST-MD5"),
 
 	N_("This option will connect to the server using a "
@@ -938,6 +938,7 @@ camel_sasl_digest_md5_class_init (CamelSaslDigestMd5Class *class)
 	object_class->finalize = sasl_digest_md5_finalize;
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_digest_md5_auth_type;
 	sasl_class->challenge_sync = sasl_digest_md5_challenge_sync;
 }
 
diff --git a/camel/camel-sasl-digest-md5.h b/camel/camel-sasl-digest-md5.h
index 62e904e..dd29fa8 100644
--- a/camel/camel-sasl-digest-md5.h
+++ b/camel/camel-sasl-digest-md5.h
@@ -66,8 +66,6 @@ struct _CamelSaslDigestMd5Class {
 
 GType camel_sasl_digest_md5_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_digest_md5_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_DIGEST_MD5_H */
diff --git a/camel/camel-sasl-gssapi.c b/camel/camel-sasl-gssapi.c
index 9f1d1de..45e934b 100644
--- a/camel/camel-sasl-gssapi.c
+++ b/camel/camel-sasl-gssapi.c
@@ -82,7 +82,7 @@ extern gss_OID gss_nt_service_name;
 #define DBUS_INTERFACE		"org.gnome.KrbAuthDialog"
 #define DBUS_METHOD		"org.gnome.KrbAuthDialog.acquireTgt"
 
-CamelServiceAuthType camel_sasl_gssapi_authtype = {
+static CamelServiceAuthType sasl_gssapi_auth_type = {
 	N_("GSSAPI"),
 
 	N_("This option will connect to the server using "
@@ -440,6 +440,7 @@ camel_sasl_gssapi_class_init (CamelSaslGssapiClass *class)
 	object_class->finalize = sasl_gssapi_finalize;
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_gssapi_auth_type;
 	sasl_class->challenge_sync = sasl_gssapi_challenge_sync;
 #endif /* HAVE_KRB5 */
 }
diff --git a/camel/camel-sasl-gssapi.h b/camel/camel-sasl-gssapi.h
index a921211..6885ebb 100644
--- a/camel/camel-sasl-gssapi.h
+++ b/camel/camel-sasl-gssapi.h
@@ -66,8 +66,6 @@ struct _CamelSaslGssapiClass {
 
 GType camel_sasl_gssapi_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_gssapi_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_GSSAPI_H */
diff --git a/camel/camel-sasl-login.c b/camel/camel-sasl-login.c
index c5ef80b..333049b 100644
--- a/camel/camel-sasl-login.c
+++ b/camel/camel-sasl-login.c
@@ -31,7 +31,7 @@
 #include "camel-sasl-login.h"
 #include "camel-service.h"
 
-CamelServiceAuthType camel_sasl_login_authtype = {
+static CamelServiceAuthType sasl_login_auth_type = {
 	N_("Login"),
 
 	N_("This option will connect to the server using a "
@@ -105,6 +105,7 @@ camel_sasl_login_class_init (CamelSaslLoginClass *class)
 	g_type_class_add_private (class, sizeof (CamelSaslLoginPrivate));
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_login_auth_type;
 	sasl_class->challenge_sync = sasl_login_challenge_sync;
 }
 
diff --git a/camel/camel-sasl-login.h b/camel/camel-sasl-login.h
index e17bbf8..2410a8d 100644
--- a/camel/camel-sasl-login.h
+++ b/camel/camel-sasl-login.h
@@ -65,8 +65,6 @@ struct _CamelSaslLoginClass {
 
 GType camel_sasl_login_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_login_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_LOGIN_H */
diff --git a/camel/camel-sasl-ntlm.c b/camel/camel-sasl-ntlm.c
index 3dea971..e25078a 100644
--- a/camel/camel-sasl-ntlm.c
+++ b/camel/camel-sasl-ntlm.c
@@ -38,7 +38,7 @@ struct _CamelSaslNTLMPrivate {
 #endif
 };
 
-CamelServiceAuthType camel_sasl_ntlm_authtype = {
+static CamelServiceAuthType sasl_ntlm_auth_type = {
 	N_("NTLM / SPA"),
 
 	N_("This option will connect to a Windows-based server using "
@@ -921,6 +921,7 @@ camel_sasl_ntlm_class_init (CamelSaslNTLMClass *class)
 	object_class->finalize = sasl_ntlm_finalize;
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_ntlm_auth_type;
 	sasl_class->challenge_sync = sasl_ntlm_challenge_sync;
 	sasl_class->try_empty_password_sync = sasl_ntlm_try_empty_password_sync;
 }
diff --git a/camel/camel-sasl-ntlm.h b/camel/camel-sasl-ntlm.h
index c012895..c67e915 100644
--- a/camel/camel-sasl-ntlm.h
+++ b/camel/camel-sasl-ntlm.h
@@ -63,8 +63,6 @@ struct _CamelSaslNTLMClass {
 
 GType camel_sasl_ntlm_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_ntlm_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_NTLM_H */
diff --git a/camel/camel-sasl-plain.c b/camel/camel-sasl-plain.c
index d59c54a..d0fd856 100644
--- a/camel/camel-sasl-plain.c
+++ b/camel/camel-sasl-plain.c
@@ -35,7 +35,7 @@ struct _CamelSaslPlainPrivate {
 	gint placeholder;  /* allow for future expansion */
 };
 
-CamelServiceAuthType camel_sasl_plain_authtype = {
+static CamelServiceAuthType sasl_plain_auth_type = {
 	N_("PLAIN"),
 
 	N_("This option will connect to the server using a "
@@ -82,6 +82,7 @@ camel_sasl_plain_class_init (CamelSaslPlainClass *class)
 	g_type_class_add_private (class, sizeof (CamelSaslPlainPrivate));
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_plain_auth_type;
 	sasl_class->challenge_sync = sasl_plain_challenge_sync;
 }
 
diff --git a/camel/camel-sasl-plain.h b/camel/camel-sasl-plain.h
index 761eaad..796c07c 100644
--- a/camel/camel-sasl-plain.h
+++ b/camel/camel-sasl-plain.h
@@ -65,8 +65,6 @@ struct _CamelSaslPlainClass {
 
 GType camel_sasl_plain_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_plain_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_PLAIN_H */
diff --git a/camel/camel-sasl-popb4smtp.c b/camel/camel-sasl-popb4smtp.c
index 736387c..f98cee4 100644
--- a/camel/camel-sasl-popb4smtp.c
+++ b/camel/camel-sasl-popb4smtp.c
@@ -38,7 +38,7 @@ struct _CamelSaslPOPB4SMTPPrivate {
 	gint placeholder;  /* allow for future expansion */
 };
 
-CamelServiceAuthType camel_sasl_popb4smtp_authtype = {
+static CamelServiceAuthType sasl_popb4smtp_auth_type = {
 	N_("POP before SMTP"),
 
 	N_("This option will authorise a POP connection before attempting SMTP"),
@@ -160,6 +160,7 @@ camel_sasl_popb4smtp_class_init (CamelSaslPOPB4SMTPClass *class)
 	g_type_class_add_private (class, sizeof (CamelSaslPOPB4SMTPPrivate));
 
 	sasl_class = CAMEL_SASL_CLASS (class);
+	sasl_class->auth_type = &sasl_popb4smtp_auth_type;
 	sasl_class->challenge_sync = sasl_popb4smtp_challenge_sync;
 
 	poplast = g_hash_table_new (g_str_hash, g_str_equal);
diff --git a/camel/camel-sasl-popb4smtp.h b/camel/camel-sasl-popb4smtp.h
index 7882223..ea21f8c 100644
--- a/camel/camel-sasl-popb4smtp.h
+++ b/camel/camel-sasl-popb4smtp.h
@@ -65,8 +65,6 @@ struct _CamelSaslPOPB4SMTPClass {
 
 GType camel_sasl_popb4smtp_get_type (void);
 
-extern CamelServiceAuthType camel_sasl_popb4smtp_authtype;
-
 G_END_DECLS
 
 #endif /* CAMEL_SASL_POPB4SMTP_H */
diff --git a/camel/camel-sasl.c b/camel/camel-sasl.c
index 9e073dd..e75d738 100644
--- a/camel/camel-sasl.c
+++ b/camel/camel-sasl.c
@@ -28,6 +28,7 @@
 
 #include "camel-debug.h"
 #include "camel-mime-utils.h"
+#include "camel-sasl-anonymous.h"
 #include "camel-sasl-cram-md5.h"
 #include "camel-sasl-digest-md5.h"
 #include "camel-sasl-gssapi.h"
@@ -89,6 +90,72 @@ async_context_free (AsyncContext *async_context)
 }
 
 static void
+sasl_build_class_table_rec (GType type,
+                            GHashTable *class_table)
+{
+	GType *children;
+	guint n_children, ii;
+
+	children = g_type_children (type, &n_children);
+
+	for (ii = 0; ii < n_children; ii++) {
+		GType type = children[ii];
+		CamelSaslClass *sasl_class;
+		gpointer key;
+
+		/* Recurse over the child's children. */
+		sasl_build_class_table_rec (type, class_table);
+
+		/* Skip abstract types. */
+		if (G_TYPE_IS_ABSTRACT (type))
+			continue;
+
+		sasl_class = g_type_class_ref (type);
+
+		if (sasl_class->auth_type == NULL) {
+			g_critical (
+				"%s has an empty CamelServiceAuthType",
+				G_OBJECT_CLASS_NAME (sasl_class));
+			g_type_class_unref (sasl_class);
+			continue;
+		}
+
+		key = (gpointer) sasl_class->auth_type->authproto;
+		g_hash_table_insert (class_table, key, sasl_class);
+	}
+
+	g_free (children);
+}
+
+static GHashTable *
+sasl_build_class_table (void)
+{
+	GHashTable *class_table;
+
+	/* Register known types. */
+	CAMEL_TYPE_SASL_ANONYMOUS;
+	CAMEL_TYPE_SASL_CRAM_MD5;
+	CAMEL_TYPE_SASL_DIGEST_MD5;
+#ifdef HAVE_KRB5
+	CAMEL_TYPE_SASL_GSSAPI;
+#endif
+	CAMEL_TYPE_SASL_LOGIN;
+	CAMEL_TYPE_SASL_NTLM;
+	CAMEL_TYPE_SASL_PLAIN;
+	CAMEL_TYPE_SASL_POPB4SMTP;
+
+	class_table = g_hash_table_new_full (
+		(GHashFunc) g_str_hash,
+		(GEqualFunc) g_str_equal,
+		(GDestroyNotify) NULL,
+		(GDestroyNotify) g_type_class_unref);
+
+	sasl_build_class_table_rec (CAMEL_TYPE_SASL, class_table);
+
+	return class_table;
+}
+
+static void
 sasl_set_mechanism (CamelSasl *sasl,
                     const gchar *mechanism)
 {
@@ -430,36 +497,28 @@ camel_sasl_new (const gchar *service_name,
                 const gchar *mechanism,
                 CamelService *service)
 {
-	GType type;
+	GHashTable *class_table;
+	CamelSaslClass *sasl_class;
+	CamelSasl *sasl = NULL;
 
 	g_return_val_if_fail (service_name != NULL, NULL);
 	g_return_val_if_fail (mechanism != NULL, NULL);
 	g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
 
-	/* We don't do ANONYMOUS here, because it's a little bit weird. */
+	class_table = sasl_build_class_table ();
+	sasl_class = g_hash_table_lookup (class_table, mechanism);
 
-	if (!strcmp (mechanism, "CRAM-MD5"))
-		type = CAMEL_TYPE_SASL_CRAM_MD5;
-	else if (!strcmp (mechanism, "DIGEST-MD5"))
-		type = CAMEL_TYPE_SASL_DIGEST_MD5;
-#ifdef HAVE_KRB5
-	else if (!strcmp (mechanism, "GSSAPI"))
-		type = CAMEL_TYPE_SASL_GSSAPI;
-#endif
-	else if (!strcmp (mechanism, "PLAIN"))
-		type = CAMEL_TYPE_SASL_PLAIN;
-	else if (!strcmp (mechanism, "LOGIN"))
-		type = CAMEL_TYPE_SASL_LOGIN;
-	else if (!strcmp (mechanism, "POPB4SMTP"))
-		type = CAMEL_TYPE_SASL_POPB4SMTP;
-	else if (!strcmp (mechanism, "NTLM"))
-		type = CAMEL_TYPE_SASL_NTLM;
-	else
-		return NULL;
+	if (sasl_class != NULL)
+		sasl = g_object_new (
+			G_OBJECT_CLASS_TYPE (sasl_class),
+			"mechanism", mechanism,
+			"service", service,
+			"service-name", service_name,
+			NULL);
+
+	g_hash_table_destroy (class_table);
 
-	return g_object_new (
-		type, "mechanism", mechanism, "service",
-		service, "service-name", service_name, NULL);
+	return sasl;
 }
 
 /**
@@ -914,16 +973,43 @@ camel_sasl_challenge_base64_finish (CamelSasl *sasl,
 GList *
 camel_sasl_authtype_list (gboolean include_plain)
 {
+	CamelSaslClass *sasl_class;
+	GHashTable *class_table;
 	GList *types = NULL;
 
-	types = g_list_prepend (types, &camel_sasl_cram_md5_authtype);
-	types = g_list_prepend (types, &camel_sasl_digest_md5_authtype);
+	/* XXX I guess these are supposed to be common SASL auth types,
+	 *     since this is called by the IMAP, POP and SMTP providers.
+	 *     The returned list can be extended with other auth types
+	 *     by way of camel_sasl_authtype(), so maybe we should just
+	 *     drop the ad-hoc "include_plain" parameter? */
+
+	class_table = sasl_build_class_table ();
+
+	sasl_class = g_hash_table_lookup (class_table, "CRAM-MD5");
+	g_return_val_if_fail (sasl_class != NULL, types);
+	types = g_list_prepend (types, sasl_class->auth_type);
+
+	sasl_class = g_hash_table_lookup (class_table, "DIGEST-MD5");
+	g_return_val_if_fail (sasl_class != NULL, types);
+	types = g_list_prepend (types, sasl_class->auth_type);
+
 #ifdef HAVE_KRB5
-	types = g_list_prepend (types, &camel_sasl_gssapi_authtype);
+	sasl_class = g_hash_table_lookup (class_table, "GSSAPI");
+	g_return_val_if_fail (sasl_class != NULL, types);
+	types = g_list_prepend (types, sasl_class->auth_type);
 #endif
-	types = g_list_prepend (types, &camel_sasl_ntlm_authtype);
-	if (include_plain)
-		types = g_list_prepend (types, &camel_sasl_plain_authtype);
+
+	sasl_class = g_hash_table_lookup (class_table, "NTLM");
+	g_return_val_if_fail (sasl_class != NULL, types);
+	types = g_list_prepend (types, sasl_class->auth_type);
+
+	if (include_plain) {
+		sasl_class = g_hash_table_lookup (class_table, "PLAIN");
+		g_return_val_if_fail (sasl_class != NULL, types);
+		types = g_list_prepend (types, sasl_class->auth_type);
+	}
+
+	g_hash_table_destroy (class_table);
 
 	return types;
 }
@@ -938,22 +1024,16 @@ camel_sasl_authtype_list (gboolean include_plain)
 CamelServiceAuthType *
 camel_sasl_authtype (const gchar *mechanism)
 {
-	if (!strcmp (mechanism, "CRAM-MD5"))
-		return &camel_sasl_cram_md5_authtype;
-	else if (!strcmp (mechanism, "DIGEST-MD5"))
-		return &camel_sasl_digest_md5_authtype;
-#ifdef HAVE_KRB5
-	else if (!strcmp (mechanism, "GSSAPI"))
-		return &camel_sasl_gssapi_authtype;
-#endif
-	else if (!strcmp (mechanism, "PLAIN"))
-		return &camel_sasl_plain_authtype;
-	else if (!strcmp (mechanism, "LOGIN"))
-		return &camel_sasl_login_authtype;
-	else if (!strcmp(mechanism, "POPB4SMTP"))
-		return &camel_sasl_popb4smtp_authtype;
-	else if (!strcmp (mechanism, "NTLM"))
-		return &camel_sasl_ntlm_authtype;
-	else
-		return NULL;
+	GHashTable *class_table;
+	CamelSaslClass *sasl_class;
+	CamelServiceAuthType *auth_type;
+
+	g_return_val_if_fail (mechanism != NULL, NULL);
+
+	class_table = sasl_build_class_table ();
+	sasl_class = g_hash_table_lookup (class_table, mechanism);
+	auth_type = (sasl_class != NULL) ? sasl_class->auth_type : NULL;
+	g_hash_table_destroy (class_table);
+
+	return auth_type;
 }
diff --git a/camel/camel-sasl.h b/camel/camel-sasl.h
index 953cad5..d24de05 100644
--- a/camel/camel-sasl.h
+++ b/camel/camel-sasl.h
@@ -63,6 +63,9 @@ struct _CamelSasl {
 struct _CamelSaslClass {
 	CamelObjectClass parent_class;
 
+	/* Auth Mechanism Details */
+	CamelServiceAuthType *auth_type;
+
 	/* Synchronous I/O Methods */
 	gboolean	(*try_empty_password_sync)
 						(CamelSasl *sasl,
diff --git a/configure.ac b/configure.ac
index 9b3f341..9c98e61 100644
--- a/configure.ac
+++ b/configure.ac
@@ -102,7 +102,7 @@ LIBEGROUPWISE_CURRENT=13
 LIBEGROUPWISE_REVISION=1
 LIBEGROUPWISE_AGE=0
 
-LIBCAMEL_CURRENT=26
+LIBCAMEL_CURRENT=27
 LIBCAMEL_REVISION=0
 LIBCAMEL_AGE=0
 
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index d9f4339..a67122c 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -1690,7 +1690,6 @@ CAMEL_PROVIDER_IS_REMOTE
 CamelSaslAnonymous
 CamelSaslAnonTraceType
 camel_sasl_anonymous_new
-camel_sasl_anonymous_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_ANONYMOUS
 CAMEL_IS_SASL_ANONYMOUS
@@ -1707,7 +1706,6 @@ camel_sasl_anonymous_get_type
 <FILE>camel-sasl-cram-md5</FILE>
 <TITLE>CamelSaslCramMd5</TITLE>
 CamelSaslCramMd5
-camel_sasl_cram_md5_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_CRAM_MD5
 CAMEL_IS_SASL_CRAM_MD5
@@ -1725,7 +1723,6 @@ camel_sasl_cram_md5_get_type
 <FILE>camel-sasl-digest-md5</FILE>
 <TITLE>CamelSaslDigestMd5</TITLE>
 CamelSaslDigestMd5
-camel_sasl_digest_md5_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_DIGEST_MD5
 CAMEL_IS_SASL_DIGEST_MD5
@@ -1743,7 +1740,6 @@ camel_sasl_digest_md5_get_type
 <FILE>camel-sasl-gssapi</FILE>
 <TITLE>CamelSaslGssapi</TITLE>
 CamelSaslGssapi
-camel_sasl_gssapi_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_GSSAPI
 CAMEL_IS_SASL_GSSAPI
@@ -1761,7 +1757,6 @@ camel_sasl_gssapi_get_type
 <FILE>camel-sasl-login</FILE>
 <TITLE>CamelSaslLogin</TITLE>
 CamelSaslLogin
-camel_sasl_login_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_LOGIN
 CAMEL_IS_SASL_LOGIN
@@ -1779,7 +1774,6 @@ camel_sasl_login_get_type
 <FILE>camel-sasl-ntlm</FILE>
 <TITLE>CamelSaslNTLM</TITLE>
 CamelSaslNTLM
-camel_sasl_ntlm_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_NTLM
 CAMEL_IS_SASL_NTLM
@@ -1797,7 +1791,6 @@ camel_sasl_ntlm_get_type
 <FILE>camel-sasl-plain</FILE>
 <TITLE>CamelSaslPlain</TITLE>
 CamelSaslPlain
-camel_sasl_plain_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_PLAIN
 CAMEL_IS_SASL_PLAIN
@@ -1815,7 +1808,6 @@ camel_sasl_plain_get_type
 <FILE>camel-sasl-popb4smtp</FILE>
 <TITLE>CamelSaslPOPB4SMTP</TITLE>
 CamelSaslPOPB4SMTP
-camel_sasl_popb4smtp_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_POPB4SMTP
 CAMEL_IS_SASL_POPB4SMTP
diff --git a/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml b/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
index 9c0d359..a2dd8d8 100644
--- a/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
@@ -45,9 +45,3 @@ CamelSaslAnonymous
 @Returns: 
 
 
-<!-- ##### VARIABLE camel_sasl_anonymous_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml b/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
index 00b71e9..66915f5 100644
--- a/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
@@ -26,9 +26,3 @@ CamelSaslCramMd5
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_cram_md5_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml b/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
index 3d7b7e2..4634a7e 100644
--- a/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
@@ -26,9 +26,3 @@ CamelSaslDigestMd5
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_digest_md5_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml b/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
index 44738cd..95aac35 100644
--- a/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
@@ -26,9 +26,3 @@ CamelSaslGssapi
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_gssapi_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-login.sgml b/docs/reference/camel/tmpl/camel-sasl-login.sgml
index 4cd3fea..c62bbc9 100644
--- a/docs/reference/camel/tmpl/camel-sasl-login.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-login.sgml
@@ -26,9 +26,3 @@ CamelSaslLogin
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_login_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml b/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
index 79bab89..ee924b5 100644
--- a/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
@@ -26,9 +26,3 @@ CamelSaslNTLM
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_ntlm_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-plain.sgml b/docs/reference/camel/tmpl/camel-sasl-plain.sgml
index 9a73f29..266d543 100644
--- a/docs/reference/camel/tmpl/camel-sasl-plain.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-plain.sgml
@@ -26,9 +26,3 @@ CamelSaslPlain
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_plain_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml b/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
index 3fe4e62..fc98595 100644
--- a/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
+++ b/docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
@@ -26,9 +26,3 @@ CamelSaslPOPB4SMTP
 </para>
 
 
-<!-- ##### VARIABLE camel_sasl_popb4smtp_authtype ##### -->
-<para>
-
-</para>
-
-
diff --git a/docs/reference/camel/tmpl/camel-unused.sgml b/docs/reference/camel/tmpl/camel-unused.sgml
index 382fa94..24edac7 100644
--- a/docs/reference/camel/tmpl/camel-unused.sgml
+++ b/docs/reference/camel/tmpl/camel-unused.sgml
@@ -8432,6 +8432,12 @@ streams
 @pid: 
 @Returns: 
 
+<!-- ##### VARIABLE camel_sasl_anonymous_authtype ##### -->
+<para>
+
+</para>
+
+
 <!-- ##### FUNCTION camel_sasl_authenticated ##### -->
 <para>
 
@@ -8440,6 +8446,48 @@ streams
 @sasl: 
 @Returns: 
 
+<!-- ##### VARIABLE camel_sasl_cram_md5_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_digest_md5_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_gssapi_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_login_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_ntlm_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_plain_authtype ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### VARIABLE camel_sasl_popb4smtp_authtype ##### -->
+<para>
+
+</para>
+
+
 <!-- ##### FUNCTION camel_search_build_match_regex ##### -->
 <para>
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]