Bug#245142: gnome-applets: Mailcheck is unable to work with preauth'd or tunnel'd IMAP

Wesley W. Terpstra "Wesley W. Terpstra" <terpstra@debian.org>, 245142@bugs.debian.org
Wed, 21 Apr 2004 18:20:57 +0200


This is a multi-part MIME message sent by reportbug.

--===============0385195657==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Package: gnome-applets
Version: 2.4.2-6
Severity: wishlist
Tags: patch


I have prepared a patch which adds support to mailcheck for using an
arbitrary command to be used in establishing a connection. This allows
for running POP and IMAP over ssh.

Please forward it upstream.


-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.4
Locale: LANG=C, LC_CTYPE=C

Versions of packages gnome-applets depends on:
ii  gnome-applets-data          2.4.2-6      Various applets for GNOME 2 panel 
ii  gnome-panel                 2.4.2-4      Launch and/or dock GNOME 2 applica
ii  libapm1                     3.2.1-4      Library for interacting with APM d
ii  libart-2.0-2                2.3.16-5     Library of functions for 2D graphi
ii  libatk1.0-0                 1.4.1-1      The ATK accessibility toolkit
ii  libaudiofile0               0.2.6-3      Open-source version of SGI's audio
ii  libbonobo2-0                2.4.3-1      Bonobo CORBA interfaces library
ii  libbonoboui2-0              2.4.3-2      The Bonobo UI library
ii  libc6                       2.3.2.ds1-11 GNU C Library: Shared libraries an
ii  libesd0                     0.2.29-1     Enlightened Sound Daemon - Shared 
ii  libgail-common              1.4.1-1      GNOME Accessibility Implementation
ii  libgail17                   1.4.1-1      GNOME Accessibility Implementation
ii  libgconf2-4                 2.4.0.1-4    GNOME configuration database syste
ii  libgcrypt1                  1.1.12-4     LGPL Crypto library - runtime libr
ii  libglade2-0                 1:2.0.1-13   Library to load .glade files at ru
ii  libglib2.0-0                2.2.3-1      The GLib library of C routines
ii  libgnome2-0                 2.4.0-11     The GNOME 2 library - runtime file
ii  libgnomecanvas2-0           2.4.0-3      A powerful object-oriented display
ii  libgnomeui-0                2.4.0.1-12   The GNOME 2 libraries (User Interf
ii  libgnomevfs2-0              2.4.1-5      The GNOME virtual file-system libr
ii  libgnomevfs2-common         2.4.1-5      The GNOME virtual file-system libr
ii  libgnutls7                  0.8.12-5     GNU TLS library - runtime library
ii  libgtk2.0-0                 2.2.4-3      The GTK+ graphical user interface 
ii  libgtop2                    2.0.8-7      Libraries for gtop system monitori
ii  libice6                     4.3.0-7      Inter-Client Exchange library
ii  libjpeg62                   6b-9         The Independent JPEG Group's JPEG 
ii  liborbit2                   1:2.8.3-2    libraries for ORBit2 - a CORBA ORB
ii  libpanel-applet2-0          2.4.2-4      Library for GNOME 2 Panel applets
ii  libpango1.0-0               1.2.5-3      Layout and rendering of internatio
ii  libpopt0                    1.7-4        lib for parsing cmdline parameters
ii  libsm6                      4.3.0-7      X Window System Session Management
ii  libtasn1-0                  0.1.2-1      Manage ASN.1 structures (runtime)
ii  libx11-6                    4.3.0-7      X Window System protocol client li
ii  libxml2                     2.6.8-2      GNOME XML library
ii  xlibs                       4.3.0-7      X Window System client libraries m
ii  zlib1g                      1:1.2.1-5    compression library - runtime

-- no debconf information

--===============0385195657==
Content-Type: text/x-c; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="gnome-applets-imap-tunnel.patch"

diff -cr gnome-applets-2.4.2.orig/mailcheck/mailcheck.c gnome-applets-2.4.2/mailcheck/mailcheck.c
*** gnome-applets-2.4.2.orig/mailcheck/mailcheck.c	Mon Sep 15 23:24:58 2003
--- gnome-applets-2.4.2/mailcheck/mailcheck.c	Wed Apr 21 17:38:39 2004
***************
*** 91,97 ****
  
  	/* execute a command before checking email (fetchmail etc.) */
  	char *pre_check_cmd;
! 	gboolean pre_check_enabled;	
  
  	PanelApplet *applet;
  	/* This is the event box for catching events */
--- 91,101 ----
  
  	/* execute a command before checking email (fetchmail etc.) */
  	char *pre_check_cmd;
! 	gboolean pre_check_enabled;
! 	
! 	/* execute a command to establish connection (ssh tunnel etc.) */
! 	char *connection_cmd;
! 	gboolean connection_enabled;	
  
  	PanelApplet *applet;
  	/* This is the event box for catching events */
***************
*** 137,142 ****
--- 141,147 ----
  	GtkWidget *property_window;
  	GtkWidget *min_spin, *sec_spin;
  	GtkWidget *pre_check_cmd_entry, *pre_check_cmd_check;
+ 	GtkWidget *connection_cmd_entry, *connection_cmd_check;
  	GtkWidget *newmail_cmd_entry, *newmail_cmd_check;
  	GtkWidget *clicked_cmd_entry, *clicked_cmd_check;
  
***************
*** 727,733 ****
  static void
  check_remote_mailbox (MailCheck *mc)
  {
! 	if (!mc->real_password || !mc->remote_username || !mc->remote_server)
  		return;
  
  	if (mc->mailbox_type == MAILBOX_POP3)
--- 732,739 ----
  static void
  check_remote_mailbox (MailCheck *mc)
  {
! 	if ((!mc->real_password || !mc->remote_username || !mc->remote_server)
! 	    && !mc->connection_cmd)
  		return;
  
  	if (mc->mailbox_type == MAILBOX_POP3)
***************
*** 736,741 ****
--- 742,748 ----
  						       mc,
  						       null_remote_handle,
  						       NULL,
+ 						       mc->connection_cmd,
  						       mc->remote_server,
  						       mc->remote_username,
  						       mc->real_password);
***************
*** 745,750 ****
--- 752,758 ----
  						       mc,
  						       null_remote_handle,
  						       NULL,
+ 						       mc->connection_cmd,
  						       mc->remote_server,
  						       mc->remote_username,
  						       mc->real_password,
***************
*** 949,955 ****
  			g_free (mc->real_password);
  			mc->real_password = g_strdup (mc->remote_password);
  
! 		} else if (!mc->real_password)
  			get_remote_password (mc);
  
  		check_remote_mailbox (mc);
--- 957,963 ----
  			g_free (mc->real_password);
  			mc->real_password = g_strdup (mc->remote_password);
  
! 		} else if (!mc->real_password && !mc->connection_cmd)
  			get_remote_password (mc);
  
  		check_remote_mailbox (mc);
***************
*** 1562,1567 ****
--- 1570,1587 ----
  }
  
  static void
+ connection_toggled (GtkToggleButton *button, gpointer data)
+ {
+ 	MailCheck *mc = data;
+ 	
+ 	mc->connection_enabled = gtk_toggle_button_get_active (button);
+ 	panel_applet_gconf_set_bool(mc->applet, "connection_enabled", 
+ 				    mc->connection_enabled, NULL);
+ 	soft_set_sensitive (mc->connection_cmd_entry, mc->connection_enabled);
+ 
+ }
+ 
+ static void
  remote_password_save_toggled (GtkToggleButton *button, gpointer data)
  {
  	MailCheck *mc = data;
***************
*** 1602,1607 ****
--- 1622,1646 ----
  }
  
  static void
+ connection_changed (GtkEntry *entry, gpointer data)
+ {
+ 	MailCheck *mc = data;
+ 	gchar *text;
+ 	
+ 	text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1);
+ 	if (!text)
+ 		return;
+ 		
+ 	if (mc->connection_cmd)
+ 		g_free (mc->connection_cmd);	
+ 	mc->connection_cmd = g_strdup (text);
+ 	panel_applet_gconf_set_string(mc->applet, "connection_command", 
+ 				      mc->connection_cmd, NULL);
+ 	g_free (text);
+ 	
+ }
+ 
+ static void
  newmail_toggled (GtkToggleButton *button, gpointer data)
  {
  	MailCheck *mc = data;
***************
*** 2173,2179 ****
  	gtk_box_pack_start (GTK_BOX (hbox), control_vbox, TRUE, TRUE, 0);
  	gtk_widget_show (control_vbox);
  
! 	table = gtk_table_new (3, 2, FALSE);
  	gtk_table_set_col_spacings (GTK_TABLE (table), 12);
  	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
  	gtk_container_set_border_width (GTK_CONTAINER (table), 0);
--- 2212,2218 ----
  	gtk_box_pack_start (GTK_BOX (hbox), control_vbox, TRUE, TRUE, 0);
  	gtk_widget_show (control_vbox);
  
! 	table = gtk_table_new (4, 2, FALSE);
  	gtk_table_set_col_spacings (GTK_TABLE (table), 12);
  	gtk_table_set_row_spacings (GTK_TABLE (table), 6);
  	gtk_container_set_border_width (GTK_CONTAINER (table), 0);
***************
*** 2209,2220 ****
  	if ( ! key_writable (mc->applet, "exec_command"))
  		hard_set_sensitive (mc->pre_check_cmd_entry, FALSE);
  
  	l = gtk_check_button_new_with_mnemonic (_("When new mail _arrives:"));
  	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(l), mc->newmail_enabled);
  	g_signal_connect(G_OBJECT(l), "toggled",
  			   G_CALLBACK(newmail_toggled), mc);
  	gtk_widget_show(l);
! 	gtk_table_attach (GTK_TABLE (table), l, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
  	mc->newmail_cmd_check = l;
  	if ( ! key_writable (mc->applet, "newmail_enabled"))
  		hard_set_sensitive (l, FALSE);
--- 2248,2288 ----
  	if ( ! key_writable (mc->applet, "exec_command"))
  		hard_set_sensitive (mc->pre_check_cmd_entry, FALSE);
  
+ 	l = gtk_check_button_new_with_mnemonic(_("Establish _connection:"));
+ 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(l), mc->connection_enabled);
+ 	g_signal_connect(G_OBJECT(l), "toggled",
+ 			   G_CALLBACK(connection_toggled), mc);
+ 	gtk_widget_show(l);
+ 	mc->connection_cmd_check = l;
+ 	if ( ! key_writable (mc->applet, "connection_enabled"))
+ 		hard_set_sensitive (l, FALSE);
+ 
+ 	gtk_table_attach (GTK_TABLE (table), mc->connection_cmd_check, 
+ 			  0, 1, 1, 2, GTK_FILL, 0, 0, 0);
+ 			   
+ 
+ 	mc->connection_cmd_entry = gtk_entry_new();
+ 	if(mc->connection_cmd)
+ 		gtk_entry_set_text(GTK_ENTRY(mc->connection_cmd_entry), 
+ 				   mc->connection_cmd);
+ 	set_atk_name_description (mc->connection_cmd_entry, _("Command to execute to establish POP/IMAP connection"), "");
+ 	set_atk_relation (mc->connection_cmd_entry, mc->connection_cmd_check, ATK_RELATION_CONTROLLED_BY);
+ 	set_atk_relation (mc->connection_cmd_check, mc->connection_cmd_entry, ATK_RELATION_CONTROLLER_FOR);
+ 	soft_set_sensitive (mc->connection_cmd_entry, mc->connection_enabled);
+ 	g_signal_connect(G_OBJECT(mc->connection_cmd_entry), "changed",
+ 			   G_CALLBACK(connection_changed), mc);
+ 	gtk_widget_show(mc->connection_cmd_entry);
+ 	gtk_table_attach_defaults (GTK_TABLE (table), mc->connection_cmd_entry,
+ 				   1, 2, 1, 2);
+ 	if ( ! key_writable (mc->applet, "connection_command"))
+ 		hard_set_sensitive (mc->connection_cmd_entry, FALSE);
+ 
  	l = gtk_check_button_new_with_mnemonic (_("When new mail _arrives:"));
  	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(l), mc->newmail_enabled);
  	g_signal_connect(G_OBJECT(l), "toggled",
  			   G_CALLBACK(newmail_toggled), mc);
  	gtk_widget_show(l);
! 	gtk_table_attach (GTK_TABLE (table), l, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
  	mc->newmail_cmd_check = l;
  	if ( ! key_writable (mc->applet, "newmail_enabled"))
  		hard_set_sensitive (l, FALSE);
***************
*** 2232,2238 ****
  			   G_CALLBACK(newmail_changed), mc);
  	gtk_widget_show(mc->newmail_cmd_entry);
  	gtk_table_attach_defaults (GTK_TABLE (table), mc->newmail_cmd_entry,
! 				    1, 2, 1, 2);
  	if ( ! key_writable (mc->applet, "newmail_command"))
  		hard_set_sensitive (mc->newmail_cmd_entry, FALSE);
  
--- 2300,2306 ----
  			   G_CALLBACK(newmail_changed), mc);
  	gtk_widget_show(mc->newmail_cmd_entry);
  	gtk_table_attach_defaults (GTK_TABLE (table), mc->newmail_cmd_entry,
! 				    1, 2, 2, 3);
  	if ( ! key_writable (mc->applet, "newmail_command"))
  		hard_set_sensitive (mc->newmail_cmd_entry, FALSE);
  
***************
*** 2241,2247 ****
  	g_signal_connect(G_OBJECT(l), "toggled",
  			   G_CALLBACK(clicked_toggled), mc);
          gtk_widget_show(l);
! 	gtk_table_attach (GTK_TABLE (table), l, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
  	mc->clicked_cmd_check = l;
  	if ( ! key_writable (mc->applet, "clicked_enabled"))
  		hard_set_sensitive (l, FALSE);
--- 2309,2315 ----
  	g_signal_connect(G_OBJECT(l), "toggled",
  			   G_CALLBACK(clicked_toggled), mc);
          gtk_widget_show(l);
! 	gtk_table_attach (GTK_TABLE (table), l, 0, 1, 3, 4, GTK_FILL, 0, 0, 0);
  	mc->clicked_cmd_check = l;
  	if ( ! key_writable (mc->applet, "clicked_enabled"))
  		hard_set_sensitive (l, FALSE);
***************
*** 2259,2265 ****
                             G_CALLBACK(clicked_changed), mc);
          gtk_widget_show(mc->clicked_cmd_entry);
  	gtk_table_attach_defaults (GTK_TABLE (table), mc->clicked_cmd_entry,
! 				   1, 2, 2, 3);
  	if ( ! key_writable (mc->applet, "clicked_command"))
  		hard_set_sensitive (mc->clicked_cmd_entry, FALSE);
  
--- 2327,2333 ----
                             G_CALLBACK(clicked_changed), mc);
          gtk_widget_show(mc->clicked_cmd_entry);
  	gtk_table_attach_defaults (GTK_TABLE (table), mc->clicked_cmd_entry,
! 				   1, 2, 3, 4);
  	if ( ! key_writable (mc->applet, "clicked_command"))
  		hard_set_sensitive (mc->clicked_cmd_entry, FALSE);
  
***************
*** 2395,2400 ****
--- 2463,2470 ----
  	mc->update_freq = panel_applet_gconf_get_int(mc->applet, "update_frequency", NULL);
  	mc->pre_check_cmd = panel_applet_gconf_get_string(mc->applet, "exec_command", NULL);
  	mc->pre_check_enabled = panel_applet_gconf_get_bool(mc->applet, "exec_enabled", NULL);
+ 	mc->connection_cmd = panel_applet_gconf_get_string(mc->applet, "connection_command", NULL);
+ 	mc->connection_enabled = panel_applet_gconf_get_bool(mc->applet, "connection_enabled", NULL);
  	mc->newmail_cmd = panel_applet_gconf_get_string(mc->applet, "newmail_command", NULL);
  	mc->newmail_enabled = panel_applet_gconf_get_bool(mc->applet, "newmail_enabled", NULL);
  	mc->clicked_cmd = panel_applet_gconf_get_string(mc->applet, "clicked_command", NULL);
diff -cr gnome-applets-2.4.2.orig/mailcheck/popcheck.c gnome-applets-2.4.2/mailcheck/popcheck.c
*** gnome-applets-2.4.2.orig/mailcheck/popcheck.c	Mon Sep 15 23:24:58 2003
--- gnome-applets-2.4.2/mailcheck/popcheck.c	Wed Apr 21 18:04:06 2004
***************
*** 29,34 ****
--- 29,35 ----
  static int get_server_port(const char *);
  static char* get_server_hostname(const char *);
  static int connect_socket(const char *, int);
+ static int connect_command(const char *);
  static char *read_line(int);
  static int write_line(int, char *);
  static int is_pop3_answer_ok(const char *);
***************
*** 221,226 ****
--- 222,260 ----
    return fd; 
   }  
  
+ static int connect_command(const char *cmd)
+  {
+   int socks[2], child;
+   
+   if (socketpair(AF_UNIX, SOCK_STREAM, 0, socks) < 0)
+    {
+     return NETWORK_ERROR;
+    }
+   
+   if ((child = fork()) == -1)
+    {
+     close(socks[0]);
+     close(socks[1]);
+     return NETWORK_ERROR;
+    }
+   
+   if (!child)
+    {
+     setsid();
+     close(socks[1]);
+     close(0);
+     dup(socks[0]);
+     close(1);
+     dup(socks[0]);
+     close(socks[0]);
+     execl("/bin/sh", "sh", "-c", cmd, NULL);
+     exit(1);
+    }
+   
+   close(socks[0]);
+   return socks[1];
+  }  
+ 
  static char *read_line(int s)
   {
    static char response[1024];
***************
*** 284,290 ****
    return 0;
   }
  
! int pop3_check(const char *h, const char* n, const char* e)
  {
    int s;
    char *c;
--- 318,324 ----
    return 0;
   }
  
! int pop3_check(const char *cmd, const char *h, const char* n, const char* e)
  {
    int s;
    char *c;
***************
*** 293,299 ****
    
    if (!h || !n || !e) return -1;
    
!   s = connect_socket(h, 110);
  
    if (s > 0) {
      if (!is_pop3_answer_ok(read_line(s))) {
--- 327,335 ----
    
    if (!h || !n || !e) return -1;
    
!   if (cmd && cmd[0])
!   	s = connect_command(cmd);
!   else  s = connect_socket(h, 110);
  
    if (s > 0) {
      if (!is_pop3_answer_ok(read_line(s))) {
***************
*** 362,367 ****
--- 398,421 ----
    return 0;
   }
  
+ static int is_imap_answer_preauth(const char *p)
+  {
+   if (p) 
+    {
+     const char *b = strchr(p, ' ');
+     if (b)
+      {
+       if (*(++b) == 'P' && *(++b) == 'R' &&
+           *(++b) == 'E' && *(++b) == 'A' &&
+           *(++b) == 'U' && *(++b) == 'T' &&
+           *(++b) == 'H') 
+        return 1;
+      }
+    }
+   
+   return 0;
+  }
+ 
  static char *wait_for_imap_answer(int s, char *tag)
   {
    char *p;
***************
*** 378,384 ****
   }
  
  int 
! imap_check(const char *h, const char* n, const char* e, const char* f)
  {
  	int s;
  	char *c = NULL;
--- 432,438 ----
   }
  
  int 
! imap_check(const char *cmd, const char *h, const char* n, const char* e, const char* f)
  {
  	int s;
  	char *c = NULL;
***************
*** 387,420 ****
  	int total = 0, unseen = 0;
  	int count = 0;
  	
! 	if (!h || !n || !e) return NO_SERVER_INFO;
  	
  	if (f == NULL ||
  	    f[0] == '\0')
  		f = "INBOX";
  	
! 	s = connect_socket(h, 143);
  	
  	if (s < 0)
  		return s;
  	
  	x = read_line(s);
  	/* The greeting us untagged */
  	if (!is_imap_answer_untagged(x))
  		goto return_from_imap_check;
  	
! 	if (!is_imap_answer_ok(x))
! 		goto return_from_imap_check;
! 	
! 	
! 	c = g_strdup_printf("A1 LOGIN \"%s\" \"%s\"", n, e);
! 	if (!write_line(s, c))
  		goto return_from_imap_check;
  	
! 	if (!is_imap_answer_ok(wait_for_imap_answer(s, "A1"))) {
! 		g_free (c);
! 		close (s);
! 		return INVALID_PASS;
  	}
  	
  	c = g_strdup_printf("A2 STATUS \"%s\" (MESSAGES UNSEEN)",f);
--- 441,480 ----
  	int total = 0, unseen = 0;
  	int count = 0;
  	
! 	if (!cmd && (!h || !n || !e)) return NO_SERVER_INFO;
  	
  	if (f == NULL ||
  	    f[0] == '\0')
  		f = "INBOX";
  	
! 	if (cmd && cmd[0])
! 		s = connect_command(cmd);
! 	else	s = connect_socket(h, 143);
  	
  	if (s < 0)
  		return s;
  	
  	x = read_line(s);
+ 	
  	/* The greeting us untagged */
  	if (!is_imap_answer_untagged(x))
  		goto return_from_imap_check;
  	
! 	if (!is_imap_answer_ok(x) &&
! 	    !is_imap_answer_preauth(x))
  		goto return_from_imap_check;
  	
! 	/* tunneled connections are often preauthenticated */
! 	if (!is_imap_answer_preauth(x)) {
! 		c = g_strdup_printf("A1 LOGIN \"%s\" \"%s\"", n, e);
! 		if (!write_line(s, c))
! 			goto return_from_imap_check;
! 		
! 		if (!is_imap_answer_ok(wait_for_imap_answer(s, "A1"))) {
! 			g_free (c);
! 			close (s);
! 			return INVALID_PASS;
! 		}
  	}
  	
  	c = g_strdup_printf("A2 STATUS \"%s\" (MESSAGES UNSEEN)",f);
diff -cr gnome-applets-2.4.2.orig/mailcheck/popcheck.h gnome-applets-2.4.2/mailcheck/popcheck.h
*** gnome-applets-2.4.2.orig/mailcheck/popcheck.h	Thu Mar  6 07:16:26 2003
--- gnome-applets-2.4.2/mailcheck/popcheck.h	Wed Apr 21 17:24:58 2004
***************
*** 11,24 ****
  /* Returns how many mails are available on POP3-server "h" with username "n" and password "e"
   * The server-name may be given with or without port-number in form "host:port". 
   */
! int pop3_check(const char *h, const char* n, const char* e);
  
  /* Returns how many mails are available on IMAP-server "h"
   *     in folder "f" with username "n" and password "e"
   * Hi: unseen/recent; Lo: total
   * The server-name may be given with or without port-number in form "host:port".
   */
! int imap_check(const char *h, const char* n, const char* e, const char* f);
  
  #define NO_SERVER_INFO		-1
  #define NETWORK_ERROR		-2
--- 11,24 ----
  /* Returns how many mails are available on POP3-server "h" with username "n" and password "e"
   * The server-name may be given with or without port-number in form "host:port". 
   */
! int pop3_check(const char *c, const char *h, const char* n, const char* e);
  
  /* Returns how many mails are available on IMAP-server "h"
   *     in folder "f" with username "n" and password "e"
   * Hi: unseen/recent; Lo: total
   * The server-name may be given with or without port-number in form "host:port".
   */
! int imap_check(const char *c, const char *h, const char* n, const char* e, const char* f);
  
  #define NO_SERVER_INFO		-1
  #define NETWORK_ERROR		-2
diff -cr gnome-applets-2.4.2.orig/mailcheck/remote-helper.c gnome-applets-2.4.2/mailcheck/remote-helper.c
*** gnome-applets-2.4.2.orig/mailcheck/remote-helper.c	Thu Mar  6 07:16:26 2003
--- gnome-applets-2.4.2/mailcheck/remote-helper.c	Wed Apr 21 17:23:50 2004
***************
*** 185,191 ****
  		   gpointer data,
  		   GDestroyNotify destroy_notify,
  		   const char *command,
! 		   const char *h, const char* n, const char* e)
  {
  	RemoteHandlerData *handler_data;
  
--- 185,191 ----
  		   gpointer data,
  		   GDestroyNotify destroy_notify,
  		   const char *command,
! 		   const char *c, const char *h, const char* n, const char* e)
  {
  	RemoteHandlerData *handler_data;
  
***************
*** 195,201 ****
  	if (handler_data == NULL) {
  		int mails;
  
! 		mails = pop3_check (h, n, e);
  
  		if (mails < 0)
  			error_handler (mails, data);
--- 195,201 ----
  	if (handler_data == NULL) {
  		int mails;
  
! 		mails = pop3_check (c, h, n, e);
  
  		if (mails < 0)
  			error_handler (mails, data);
***************
*** 214,220 ****
  		    command[0] != '\0')
  			system (command);
  	       
! 		mails = pop3_check (h, n, e);
  
  		write (handler_data->fd, &mails, sizeof (mails));
  
--- 214,220 ----
  		    command[0] != '\0')
  			system (command);
  	       
! 		mails = pop3_check (c, h, n, e);
  
  		write (handler_data->fd, &mails, sizeof (mails));
  
***************
*** 229,235 ****
  		   gpointer data,
  		   GDestroyNotify destroy_notify,
  		   const char *command,
! 		   const char *h, const char* n, const char* e, const char *f)
  {
  	RemoteHandlerData *handler_data;
  
--- 229,235 ----
  		   gpointer data,
  		   GDestroyNotify destroy_notify,
  		   const char *command,
! 		   const char *c, const char *h, const char* n, const char* e, const char *f)
  {
  	RemoteHandlerData *handler_data;
  
***************
*** 239,245 ****
  	if (handler_data == NULL) {
  		int mails;
  
! 		mails = imap_check (h, n, e, f);
  
  		if (mails < 0)
  			error_handler (mails, data);
--- 239,245 ----
  	if (handler_data == NULL) {
  		int mails;
  
! 		mails = imap_check (c, h, n, e, f);
  
  		if (mails < 0)
  			error_handler (mails, data);
***************
*** 256,262 ****
  		    command[0] != '\0')
  			system (command);
  	       
! 		mails = imap_check (h, n, e, f);
  
  		write (handler_data->fd, &mails, sizeof (mails));
  
--- 256,262 ----
  		    command[0] != '\0')
  			system (command);
  	       
! 		mails = imap_check (c, h, n, e, f);
  
  		write (handler_data->fd, &mails, sizeof (mails));
  
diff -cr gnome-applets-2.4.2.orig/mailcheck/remote-helper.h gnome-applets-2.4.2/mailcheck/remote-helper.h
*** gnome-applets-2.4.2.orig/mailcheck/remote-helper.h	Thu Mar  6 07:16:26 2003
--- gnome-applets-2.4.2/mailcheck/remote-helper.h	Wed Apr 21 17:23:05 2004
***************
*** 14,25 ****
  			    gpointer data,
  			    GDestroyNotify destroy_notify,
  			    const char *command,
! 			    const char *h, const char* n, const char* e);
  gpointer helper_imap_check (RemoteHandler handler, RemoteHandler error_handler,
  			    gpointer data,
  			    GDestroyNotify destroy_notify,
  			    const char *command,
! 			    const char *h, const char* n, const char* e,
  			    const char *f);
  void helper_whack_handle (gpointer handle);
  
--- 14,25 ----
  			    gpointer data,
  			    GDestroyNotify destroy_notify,
  			    const char *command,
! 			    const char *c, const char *h, const char* n, const char* e);
  gpointer helper_imap_check (RemoteHandler handler, RemoteHandler error_handler,
  			    gpointer data,
  			    GDestroyNotify destroy_notify,
  			    const char *command,
! 			    const char *c, const char *h, const char* n, const char* e,
  			    const char *f);
  void helper_whack_handle (gpointer handle);
  

--===============0385195657==--