Updated.
2001-02-05 Jeffrey Stedfast <fejj@ximian.com> * providers/smtp/camel-smtp-transport.c (query_auth_types): Updated. * providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types): Updated. * providers/pop3/camel-pop3-store.c (query_auth_types): Updated. * providers/imap/camel-imap-store.c (query_auth_types): Updated. * camel-service.c (camel_service_query_auth_types): Now takes a boolean value to specify whether or not to connect when constructing a supported authtype list. svn path=/trunk/; revision=7979
This commit is contained in:
committed by
Jeffrey Stedfast
parent
e582e23949
commit
ddfc033633
@ -1,3 +1,18 @@
|
||||
2001-02-05 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
* providers/smtp/camel-smtp-transport.c (query_auth_types): Updated.
|
||||
|
||||
* providers/nntp/camel-nntp-store.c (nntp_store_query_auth_types):
|
||||
Updated.
|
||||
|
||||
* providers/pop3/camel-pop3-store.c (query_auth_types): Updated.
|
||||
|
||||
* providers/imap/camel-imap-store.c (query_auth_types): Updated.
|
||||
|
||||
* camel-service.c (camel_service_query_auth_types): Now takes a
|
||||
boolean value to specify whether or not to connect when
|
||||
constructing a supported authtype list.
|
||||
|
||||
2001-02-05 Not Zed <NotZed@Ximian.com>
|
||||
|
||||
* camel-stream-filter.c (do_write): Revert jeff's earlier change,
|
||||
|
||||
@ -42,7 +42,7 @@ static gboolean service_connect(CamelService *service, CamelException *ex);
|
||||
static gboolean service_disconnect(CamelService *service, gboolean clean,
|
||||
CamelException *ex);
|
||||
/*static gboolean is_connected (CamelService *service);*/
|
||||
static GList * query_auth_types (CamelService *service, CamelException *ex);
|
||||
static GList * query_auth_types (CamelService *service, gboolean connect, CamelException *ex);
|
||||
static void free_auth_types (CamelService *service, GList *authtypes);
|
||||
static char * get_name (CamelService *service, gboolean brief);
|
||||
static char * get_path (CamelService *service);
|
||||
@ -112,15 +112,16 @@ camel_service_get_type (void)
|
||||
static CamelType camel_service_type = CAMEL_INVALID_TYPE;
|
||||
|
||||
if (camel_service_type == CAMEL_INVALID_TYPE) {
|
||||
camel_service_type = camel_type_register( CAMEL_OBJECT_TYPE, "CamelService",
|
||||
sizeof (CamelService),
|
||||
sizeof (CamelServiceClass),
|
||||
(CamelObjectClassInitFunc) camel_service_class_init,
|
||||
NULL,
|
||||
(CamelObjectInitFunc) camel_service_init,
|
||||
camel_service_finalize );
|
||||
camel_service_type =
|
||||
camel_type_register (CAMEL_OBJECT_TYPE, "CamelService",
|
||||
sizeof (CamelService),
|
||||
sizeof (CamelServiceClass),
|
||||
(CamelObjectClassInitFunc) camel_service_class_init,
|
||||
NULL,
|
||||
(CamelObjectInitFunc) camel_service_init,
|
||||
camel_service_finalize );
|
||||
}
|
||||
|
||||
|
||||
return camel_service_type;
|
||||
}
|
||||
|
||||
@ -428,8 +429,8 @@ camel_service_get_provider (CamelService *service)
|
||||
return service->provider;
|
||||
}
|
||||
|
||||
GList *
|
||||
query_auth_types (CamelService *service, CamelException *ex)
|
||||
static GList *
|
||||
query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@ -437,6 +438,7 @@ query_auth_types (CamelService *service, CamelException *ex)
|
||||
/**
|
||||
* camel_service_query_auth_types:
|
||||
* @service: a CamelService
|
||||
* @connect: specifies whether or not to connect
|
||||
* @ex: a CamelException
|
||||
*
|
||||
* This is used by the mail source wizard to get the list of
|
||||
@ -445,23 +447,24 @@ query_auth_types (CamelService *service, CamelException *ex)
|
||||
*
|
||||
* This may be called on a service with or without an associated URL.
|
||||
* If there is no URL, the routine must return a generic answer. If
|
||||
* the service does have a URL, the routine SHOULD connect to the
|
||||
* server and query what authentication mechanisms it supports. If
|
||||
* it cannot do that for any reason, it should set @ex accordingly.
|
||||
* the service does have a URL, the routine should connect to the
|
||||
* server and query what authentication mechanisms it supports only if
|
||||
* @connect is TRUE. If it cannot do that for any reason, it should
|
||||
* set @ex accordingly.
|
||||
*
|
||||
* Return value: a list of CamelServiceAuthType records. The caller
|
||||
* must free the list by calling camel_service_free_auth_types when
|
||||
* it is done.
|
||||
**/
|
||||
GList *
|
||||
camel_service_query_auth_types (CamelService *service, CamelException *ex)
|
||||
camel_service_query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
GList *ret;
|
||||
|
||||
/* note that we get the connect lock here, which means the callee
|
||||
must not call the connect functions itself */
|
||||
CAMEL_SERVICE_LOCK(service, connect_lock);
|
||||
ret = CSERV_CLASS (service)->query_auth_types (service, ex);
|
||||
ret = CSERV_CLASS (service)->query_auth_types (service, connect, ex);
|
||||
CAMEL_SERVICE_UNLOCK(service, connect_lock);
|
||||
|
||||
return ret;
|
||||
|
||||
@ -68,6 +68,7 @@ typedef struct {
|
||||
/*gboolean (*is_connected) (CamelService *service);*/
|
||||
|
||||
GList * (*query_auth_types) (CamelService *service,
|
||||
gboolean connect,
|
||||
CamelException *ex);
|
||||
void (*free_auth_types) (CamelService *service,
|
||||
GList *authtypes);
|
||||
@ -104,6 +105,7 @@ char * camel_service_get_path (CamelService *service);
|
||||
CamelSession * camel_service_get_session (CamelService *service);
|
||||
CamelProvider * camel_service_get_provider (CamelService *service);
|
||||
GList * camel_service_query_auth_types (CamelService *service,
|
||||
gboolean connect,
|
||||
CamelException *ex);
|
||||
void camel_service_free_auth_types (CamelService *service,
|
||||
GList *authtypes);
|
||||
|
||||
@ -59,7 +59,7 @@ static CamelRemoteStoreClass *remote_store_class = NULL;
|
||||
|
||||
static gboolean imap_connect (CamelService *service, CamelException *ex);
|
||||
static gboolean imap_disconnect (CamelService *service, gboolean clean, CamelException *ex);
|
||||
static GList *query_auth_types (CamelService *service, CamelException *ex);
|
||||
static GList *query_auth_types (CamelService *service, gboolean connect, CamelException *ex);
|
||||
static CamelFolder *get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex);
|
||||
static char *get_folder_name (CamelStore *store, const char *folder_name,
|
||||
CamelException *ex);
|
||||
@ -268,19 +268,26 @@ static CamelServiceAuthType kerberos_v4_authtype = {
|
||||
#endif
|
||||
|
||||
static GList *
|
||||
query_auth_types (CamelService *service, CamelException *ex)
|
||||
query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
GList *types;
|
||||
|
||||
if (!connect_to_server (service, ex))
|
||||
return NULL;
|
||||
|
||||
types = CAMEL_SERVICE_CLASS (remote_store_class)->query_auth_types (service, ex);
|
||||
|
||||
types = CAMEL_SERVICE_CLASS (remote_store_class)->query_auth_types (service, connect, ex);
|
||||
|
||||
if (connect) {
|
||||
if (!connect_to_server (service, ex))
|
||||
return NULL;
|
||||
#ifdef HAVE_KRB4
|
||||
if (CAMEL_IMAP_STORE (service)->capabilities &
|
||||
IMAP_CAPABILITY_AUTH_KERBEROS_V4)
|
||||
types = g_list_prepend (types, &kerberos_v4_authtype);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef HAVE_KRB4
|
||||
if (CAMEL_IMAP_STORE (service)->capabilities &
|
||||
IMAP_CAPABILITY_AUTH_KERBEROS_V4)
|
||||
types = g_list_prepend (types, &kerberos_v4_authtype);
|
||||
#endif
|
||||
}
|
||||
|
||||
return g_list_prepend (types, &password_authtype);
|
||||
}
|
||||
|
||||
|
||||
@ -300,12 +300,12 @@ static CamelServiceAuthType password_authtype = {
|
||||
};
|
||||
|
||||
static GList *
|
||||
nntp_store_query_auth_types (CamelService *service, CamelException *ex)
|
||||
nntp_store_query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
GList *prev;
|
||||
|
||||
g_warning ("nntp::query_auth_types: not implemented. Defaulting.");
|
||||
prev = CAMEL_SERVICE_CLASS (remote_store_class)->query_auth_types (service, ex);
|
||||
prev = CAMEL_SERVICE_CLASS (remote_store_class)->query_auth_types (service, connect, ex);
|
||||
return g_list_prepend (prev, &password_authtype);
|
||||
}
|
||||
|
||||
|
||||
@ -70,7 +70,7 @@ static void finalize (CamelObject *object);
|
||||
|
||||
static gboolean pop3_connect (CamelService *service, CamelException *ex);
|
||||
static gboolean pop3_disconnect (CamelService *service, gboolean clean, CamelException *ex);
|
||||
static GList *query_auth_types (CamelService *service, CamelException *ex);
|
||||
static GList *query_auth_types (CamelService *service, gboolean connect, CamelException *ex);
|
||||
|
||||
static CamelFolder *get_folder (CamelStore *store, const char *folder_name,
|
||||
guint32 flags, CamelException *ex);
|
||||
@ -284,59 +284,63 @@ connect_to_server (CamelService *service, /*gboolean real, */CamelException *ex)
|
||||
}
|
||||
|
||||
static GList *
|
||||
query_auth_types (CamelService *service, CamelException *ex)
|
||||
query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
CamelPop3Store *store = CAMEL_POP3_STORE (service);
|
||||
GList *ret = NULL;
|
||||
GList *types = NULL;
|
||||
gboolean passwd = TRUE, apop = TRUE;
|
||||
#ifdef HAVE_KRB4
|
||||
gboolean kpop = TRUE;
|
||||
int saved_port;
|
||||
#endif
|
||||
|
||||
ret = CAMEL_SERVICE_CLASS (parent_class)->query_auth_types (service, ex);
|
||||
|
||||
passwd = camel_service_connect (service, ex);
|
||||
/*ignore the exception here; the server may just not support passwd */
|
||||
/*if (camel_exception_is_set (ex) != CAMEL_EXCEPTION_NONE)*/
|
||||
/*return NULL;*/
|
||||
|
||||
/* should we check apop too? */
|
||||
apop = store->apop_timestamp != NULL;
|
||||
if (passwd)
|
||||
camel_service_disconnect (service, TRUE, ex);
|
||||
camel_exception_clear (ex);
|
||||
|
||||
types = CAMEL_SERVICE_CLASS (parent_class)->query_auth_types (service, connect, ex);
|
||||
|
||||
if (connect) {
|
||||
passwd = camel_service_connect (service, ex);
|
||||
/*ignore the exception here; the server may just not support passwd */
|
||||
|
||||
/* should we check apop too? */
|
||||
apop = store->apop_timestamp != NULL;
|
||||
if (passwd)
|
||||
camel_service_disconnect (service, TRUE, ex);
|
||||
camel_exception_clear (ex);
|
||||
|
||||
#ifdef HAVE_KRB4
|
||||
saved_port = service->url->port;
|
||||
service->url->port = KPOP_PORT;
|
||||
kpop = camel_service_connect (service, ex);
|
||||
service->url->port = saved_port;
|
||||
/*ignore the exception here; the server may just not support kpop */
|
||||
/*if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)*/
|
||||
/*return NULL;*/
|
||||
|
||||
if (kpop)
|
||||
camel_service_disconnect (service, TRUE, ex);
|
||||
camel_exception_clear (ex);
|
||||
saved_port = service->url->port;
|
||||
service->url->port = KPOP_PORT;
|
||||
kpop = camel_service_connect (service, ex);
|
||||
service->url->port = saved_port;
|
||||
/*ignore the exception here; the server may just not support kpop */
|
||||
|
||||
if (kpop)
|
||||
camel_service_disconnect (service, TRUE, ex);
|
||||
camel_exception_clear (ex);
|
||||
#endif
|
||||
|
||||
if (passwd)
|
||||
ret = g_list_append (ret, &password_authtype);
|
||||
if (apop)
|
||||
ret = g_list_append (ret, &apop_authtype);
|
||||
|
||||
if (passwd)
|
||||
types = g_list_append (types, &password_authtype);
|
||||
if (apop)
|
||||
types = g_list_append (types, &apop_authtype);
|
||||
#ifdef HAVE_KRB4
|
||||
if (kpop)
|
||||
ret = g_list_append (ret, &kpop_authtype);
|
||||
if (kpop)
|
||||
types = g_list_append (types, &kpop_authtype);
|
||||
#endif
|
||||
|
||||
if (!ret) {
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
|
||||
_("Could not connect to POP server on "
|
||||
"%s."), service->url->host);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
if (!types) {
|
||||
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
|
||||
_("Could not connect to POP server on "
|
||||
"%s."), service->url->host);
|
||||
}
|
||||
} else {
|
||||
types = g_list_append (types, &password_authtype);
|
||||
types = g_list_append (types, &apop_authtype);
|
||||
#ifdef HAVE_KRB4
|
||||
types = g_list_append (types, &kpop_authtype);
|
||||
#endif
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -3,8 +3,7 @@
|
||||
|
||||
/*
|
||||
*
|
||||
* Author :
|
||||
* Dan Winship <danw@helixcode.com>
|
||||
* Authors: Dan Winship <danw@helixcode.com>
|
||||
*
|
||||
* Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
|
||||
*
|
||||
@ -41,11 +40,11 @@
|
||||
|
||||
static char *get_name (CamelService *service, gboolean brief);
|
||||
|
||||
static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
|
||||
static gboolean _send (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex);
|
||||
static gboolean _send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex);
|
||||
static gboolean sendmail_can_send (CamelTransport *transport, CamelMedium *message);
|
||||
static gboolean sendmail_send (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex);
|
||||
static gboolean sendmail_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex);
|
||||
|
||||
|
||||
static void
|
||||
@ -59,9 +58,9 @@ camel_sendmail_transport_class_init (CamelSendmailTransportClass *camel_sendmail
|
||||
/* virtual method overload */
|
||||
camel_service_class->get_name = get_name;
|
||||
|
||||
camel_transport_class->can_send = _can_send;
|
||||
camel_transport_class->send = _send;
|
||||
camel_transport_class->send_to = _send_to;
|
||||
camel_transport_class->can_send = sendmail_can_send;
|
||||
camel_transport_class->send = sendmail_send;
|
||||
camel_transport_class->send_to = sendmail_send_to;
|
||||
}
|
||||
|
||||
CamelType
|
||||
@ -70,13 +69,14 @@ camel_sendmail_transport_get_type (void)
|
||||
static CamelType camel_sendmail_transport_type = CAMEL_INVALID_TYPE;
|
||||
|
||||
if (camel_sendmail_transport_type == CAMEL_INVALID_TYPE) {
|
||||
camel_sendmail_transport_type = camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSendmailTransport",
|
||||
sizeof (CamelSendmailTransport),
|
||||
sizeof (CamelSendmailTransportClass),
|
||||
(CamelObjectClassInitFunc) camel_sendmail_transport_class_init,
|
||||
NULL,
|
||||
(CamelObjectInitFunc) NULL,
|
||||
NULL);
|
||||
camel_sendmail_transport_type =
|
||||
camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSendmailTransport",
|
||||
sizeof (CamelSendmailTransport),
|
||||
sizeof (CamelSendmailTransportClass),
|
||||
(CamelObjectClassInitFunc) camel_sendmail_transport_class_init,
|
||||
NULL,
|
||||
(CamelObjectInitFunc) NULL,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return camel_sendmail_transport_type;
|
||||
@ -84,14 +84,14 @@ camel_sendmail_transport_get_type (void)
|
||||
|
||||
|
||||
static gboolean
|
||||
_can_send (CamelTransport *transport, CamelMedium *message)
|
||||
sendmail_can_send (CamelTransport *transport, CamelMedium *message)
|
||||
{
|
||||
return CAMEL_IS_MIME_MESSAGE (message);
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
_send_internal (CamelMedium *message, char **argv, CamelException *ex)
|
||||
sendmail_send_internal (CamelMedium *message, char **argv, CamelException *ex)
|
||||
{
|
||||
int fd[2], nullfd, wstat;
|
||||
sigset_t mask, omask;
|
||||
@ -181,8 +181,8 @@ _send_internal (CamelMedium *message, char **argv, CamelException *ex)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
sendmail_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
{
|
||||
GList *r;
|
||||
char **argv;
|
||||
@ -198,19 +198,19 @@ _send_to (CamelTransport *transport, CamelMedium *message,
|
||||
for (i = 1, r = recipients; i <= len; i++, r = r->next)
|
||||
argv[i + 2] = r->data;
|
||||
argv[i + 2] = NULL;
|
||||
|
||||
status = _send_internal (message, argv, ex);
|
||||
|
||||
status = sendmail_send_internal (message, argv, ex);
|
||||
g_free (argv);
|
||||
return status;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_send (CamelTransport *transport, CamelMedium *message,
|
||||
sendmail_send (CamelTransport *transport, CamelMedium *message,
|
||||
CamelException *ex)
|
||||
{
|
||||
char *argv[4] = { "sendmail", "-t", "-i", NULL };
|
||||
|
||||
return _send_internal (message, argv, ex);
|
||||
|
||||
return sendmail_send_internal (message, argv, ex);
|
||||
}
|
||||
|
||||
static char *
|
||||
|
||||
@ -56,15 +56,15 @@
|
||||
#define SMTP_PORT 25
|
||||
|
||||
/* camel smtp transport class prototypes */
|
||||
static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
|
||||
static gboolean _send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
|
||||
static gboolean _send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
|
||||
static gboolean smtp_can_send (CamelTransport *transport, CamelMedium *message);
|
||||
static gboolean smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
|
||||
static gboolean smtp_send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
|
||||
|
||||
/* support prototypes */
|
||||
static gboolean smtp_connect (CamelService *service, CamelException *ex);
|
||||
static gboolean smtp_disconnect (CamelService *service, gboolean clean, CamelException *ex);
|
||||
static GList *esmtp_get_authtypes(gchar *buffer);
|
||||
static GList *query_auth_types (CamelService *service, CamelException *ex);
|
||||
static GList *esmtp_get_authtypes (gchar *buffer);
|
||||
static GList *query_auth_types (CamelService *service, gboolean connect, CamelException *ex);
|
||||
static void free_auth_types (CamelService *service, GList *authtypes);
|
||||
static char *get_name (CamelService *service, gboolean brief);
|
||||
|
||||
@ -97,9 +97,9 @@ camel_smtp_transport_class_init (CamelSmtpTransportClass *camel_smtp_transport_c
|
||||
camel_service_class->free_auth_types = free_auth_types;
|
||||
camel_service_class->get_name = get_name;
|
||||
|
||||
camel_transport_class->can_send = _can_send;
|
||||
camel_transport_class->send = _send;
|
||||
camel_transport_class->send_to = _send_to;
|
||||
camel_transport_class->can_send = smtp_can_send;
|
||||
camel_transport_class->send = smtp_send;
|
||||
camel_transport_class->send_to = smtp_send_to;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -356,7 +356,7 @@ static CamelServiceAuthType cram_md5_authtype = {
|
||||
#endif
|
||||
|
||||
static GList *
|
||||
query_auth_types (CamelService *service, CamelException *ex)
|
||||
query_auth_types (CamelService *service, gboolean connect, CamelException *ex)
|
||||
{
|
||||
/* FIXME: Re-enable this when auth types are actually
|
||||
* implemented.
|
||||
@ -383,14 +383,14 @@ get_name (CamelService *service, gboolean brief)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_can_send (CamelTransport *transport, CamelMedium *message)
|
||||
smtp_can_send (CamelTransport *transport, CamelMedium *message)
|
||||
{
|
||||
return CAMEL_IS_MIME_MESSAGE (message);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
smtp_send_to (CamelTransport *transport, CamelMedium *message,
|
||||
GList *recipients, CamelException *ex)
|
||||
{
|
||||
CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (transport);
|
||||
const CamelInternetAddress *cia;
|
||||
@ -450,7 +450,7 @@ _send_to (CamelTransport *transport, CamelMedium *message,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_send (CamelTransport *transport, CamelMedium *message, CamelException *ex)
|
||||
smtp_send (CamelTransport *transport, CamelMedium *message, CamelException *ex)
|
||||
{
|
||||
const CamelInternetAddress *to, *cc, *bcc;
|
||||
GList *recipients = NULL;
|
||||
@ -487,7 +487,7 @@ _send (CamelTransport *transport, CamelMedium *message, CamelException *ex)
|
||||
recipients = g_list_append (recipients, g_strdup (addr));
|
||||
}
|
||||
|
||||
return _send_to (transport, message, recipients, ex);
|
||||
return smtp_send_to (transport, message, recipients, ex);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
Reference in New Issue
Block a user