rpms/mc/devel mc-extensions.patch, 1.14, 1.15 mc-ipv6.patch, 1.3, 1.4 mc.spec, 1.145, 1.146

Jindrich Novy jnovy at fedoraproject.org
Wed Aug 5 12:26:02 UTC 2009


Author: jnovy

Update of /cvs/pkgs/rpms/mc/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3799

Modified Files:
	mc-ipv6.patch mc.spec 
Added Files:
	mc-extensions.patch 
Log Message:
* Wed Aug  5 2009 Jindrich Novy <jnovy at redhat.com> 4.7.0-0.2.pre1
- update extension binding to be more Fedora-like
- update to upstream IPv6 patch


mc-extensions.patch:
 configure      |    2 +-
 configure.ac   |    2 +-
 misc/mc.ext.in |   39 ++++++++++++++++++++++++++++-----------
 3 files changed, 30 insertions(+), 13 deletions(-)

Index: mc-extensions.patch
===================================================================
RCS file: mc-extensions.patch
diff -N mc-extensions.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mc-extensions.patch	5 Aug 2009 12:26:01 -0000	1.15
@@ -0,0 +1,118 @@
+diff -up mc-4.7.0-pre1/configure.ac.extensions mc-4.7.0-pre1/configure.ac
+--- mc-4.7.0-pre1/configure.ac.extensions	2009-07-31 18:36:24.000000000 +0200
++++ mc-4.7.0-pre1/configure.ac	2009-08-05 12:51:08.000000000 +0200
+@@ -67,7 +67,7 @@ AC_PROG_LN_S
+ AC_CHECK_TOOL(AR, ar, ar)
+ 
+ dnl Only list browsers here that can be run in background (i.e. with `&')
+-AC_CHECK_PROGS(X11_WWW, [gnome-moz-remote mozilla konqueror opera netscape])
++AC_CHECK_PROGS(X11_WWW, [firefox gnome-moz-remote mozilla konqueror opera netscape])
+ 
+ dnl
+ dnl Ovverriding mmap support.  This has to be before AC_FUNC_MMAP is used.
+diff -up mc-4.7.0-pre1/configure.extensions mc-4.7.0-pre1/configure
+--- mc-4.7.0-pre1/configure.extensions	2009-07-31 20:49:03.000000000 +0200
++++ mc-4.7.0-pre1/configure	2009-08-05 12:51:08.000000000 +0200
+@@ -15250,7 +15250,7 @@ else
+ fi
+ 
+ 
+-for ac_prog in gnome-moz-remote mozilla konqueror opera netscape
++for ac_prog in firefox gnome-moz-remote mozilla konqueror opera netscape
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+diff -up mc-4.7.0-pre1/misc/mc.ext.in.extensions mc-4.7.0-pre1/misc/mc.ext.in
+--- mc-4.7.0-pre1/misc/mc.ext.in.extensions	2009-06-23 20:55:11.000000000 +0200
++++ mc-4.7.0-pre1/misc/mc.ext.in	2009-08-05 13:01:48.000000000 +0200
+@@ -221,8 +221,8 @@ regex/\.rpm$
+ 
+ # deb
+ regex/\.u?deb$
+-	Open=%cd %p#deb
+-	View=%view{ascii} dpkg-deb -I %f && echo && dpkg-deb -c %f
++	Open=%cd %p#uar
++	View=%view{ascii} file %f && nm %f
+ 
+ # dpkg
+ shell/.debd
+@@ -397,11 +397,16 @@ regex/\.([wW][aA][wW]22)$
+        Open=vplay -s 22 %f
+ 
+ regex/\.([mM][pP]3)$
+-	Open=if [ "$DISPLAY" = "" ]; then mpg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
+-	View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p'
++	Include=audio
++#	Open=if [ "$DISPLAY" = "" ]; then mpg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
++#	View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p'
++
++regex/\.([mM][kK][aA])$
++	Include=audio
+ 
+ regex/\.([oO][gG][gG|aA|vV|xX])$
+-	Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
++	Open=ogg123 %f
++#	Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f >/dev/null 2>&1 &); fi
+ 	View=%view{ascii} ogginfo %s
+ 
+ regex/\.([sS][pP][xX]|[fF][lL][aA][cC])$
+@@ -414,11 +419,15 @@ regex/\.([wW][mM][aA])$
+ 	Open=mplayer -vo null %f
+ 	View=%view{ascii} mplayer -quiet -slave -frames 0 -vo null -ao null -identify %f 2>/dev/null | tail +13 || file %f
+ 
++include/audio
++	Open=mplayer %f
++	View=%view{ascii} mplayer -identify -vo null -ao null -frames 0 %f 2>&1 | sed -n '/^ID_/p'
+ 
+ ### Play lists ###
+ 
+ regex/\.([mM]3[uU]|[pP][lL][sS])$
+-	Open=if [ -z "$DISPLAY" ]; then mplayer -vo null -playlist %f; else (xmms -p %f >/dev/null 2>&1 &); fi
++	Open=mplayer -vo null -playlist %f
++#	Open=if [ -z "$DISPLAY" ]; then mplayer -vo null -playlist %f; else (xmms -p %f >/dev/null 2>&1 &); fi
+ 
+ 
+ ### Video ###
+@@ -432,6 +441,9 @@ regex/\.([aA][sS][fFxX])$
+ regex/\.([dD][iI][vV][xX])$
+ 	Include=video
+ 
++regex/\.([mM][kK][vV])$
++	Include=video
++
+ regex/\.([mM][oO][vV]|[qQ][tT])$
+ 	Include=video
+ 
+@@ -496,22 +508,27 @@ shell/.abw
+ 
+ # Microsoft Word Document
+ regex/\.([Dd][oO][cCtT]|[Ww][rR][iI])$
+-	Open=(abiword %f >/dev/null 2>&1 &)
++	Open=(ooffice %f &)
++#	Open=(abiword %f >/dev/null 2>&1 &)
+ 	View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f
+ type/^Microsoft\ Word
+-	Open=(abiword %f >/dev/null 2>&1 &)
++	Open=(ooffice %f &)
++#	Open=(abiword %f >/dev/null 2>&1 &)
+ 	View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f
+ 
+ # RTF document
+ regex/\.([rR][tT][fF])$
+-	Open=(abiword %f >/dev/null 2>&1 &)
++	Open=(ooffice %f &)
++#	Open=(abiword %f >/dev/null 2>&1 &)
+ 
+ # Microsoft Excel Worksheet
+ regex/\.([xX][lL][sSwW])$
+-	Open=(gnumeric %f >/dev/null 2>&1 &)
++	Open=(ooffice %f &)
++#	Open=(gnumeric %f >/dev/null 2>&1 &)
+ 	View=%view{ascii} xls2csv %f || strings %f
+ type/^Microsoft\ Excel
+-	Open=(gnumeric %f >/dev/null 2>&1 &)
++	Open=(ooffice %f &)
++#	Open=(gnumeric %f >/dev/null 2>&1 &)
+ 	View=%view{ascii} xls2csv %f || strings %f
+ 
+ # Use OpenOffice.org to open any MS Office documents

mc-ipv6.patch:
 ftpfs.c   |  311 ++++++++++++++++++++++++++++++++++++++++++--------------------
 ftpfs.h   |    3 
 utilvfs.c |   16 ++-
 3 files changed, 231 insertions(+), 99 deletions(-)

Index: mc-ipv6.patch
===================================================================
RCS file: /cvs/pkgs/rpms/mc/devel/mc-ipv6.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- mc-ipv6.patch	20 Nov 2006 14:08:49 -0000	1.3
+++ mc-ipv6.patch	5 Aug 2009 12:26:01 -0000	1.4
@@ -1,43 +1,69 @@
---- mc-2006-09-12-21/vfs/ftpfs.c.ipv6	2006-03-08 16:17:55.000000000 +0100
-+++ mc-2006-09-12-21/vfs/ftpfs.c	2006-09-26 10:43:27.000000000 +0200
-@@ -639,12 +639,13 @@ ftpfs_get_proxy_host_and_port (const cha
+commit 883967347e817e1743d265d19a95a432cf875b5e
+Author: Slava Zanko <slavazanko at gmail.com>
+Date:   Wed Aug 5 09:44:39 2009 +0300
+
+    Ticket #121 (support IPv6).
+    
+    121_support_IPv6 -> origin/121_support_IPv6
+    
+    Thanks to Dan Kopecek.
+    
+    Signed-off-by: Slava Zanko <slavazanko at gmail.com>
+
+diff --git a/vfs/ftpfs.c b/vfs/ftpfs.c
+index 9ac03bc..f2baaee 100644
+--- a/vfs/ftpfs.c
++++ b/vfs/ftpfs.c
+@@ -652,17 +652,17 @@ ftpfs_get_proxy_host_and_port (const char *proxy, char **host, int *port)
  static int
  ftpfs_open_socket (struct vfs_class *me, struct vfs_s_super *super)
  {
 -    struct   sockaddr_in server_address;
 -    struct   hostent *hp;
 -    int      my_socket;
-+    struct addrinfo hints, *res, *restmp;
-+    int      my_socket = 0;
-     char     *host;
+-    char     *host;
 -    int      port = SUP.port;
-+    char     *port;
+-    int      free_host = 0;
++    struct addrinfo hints, *res, *curr_res;
++    int      my_socket = 0;
++    char     *host = NULL;
++    char     *port = NULL;
 +    int      tmp_port;
-     int      free_host = 0;
 +    int      e;
  
      (void) me;
      
-@@ -657,62 +658,83 @@ ftpfs_open_socket (struct vfs_class *me,
- 	return -1;
+     /* Use a proxy host? */
+-    host = SUP.host;
++    host = g_strdup(SUP.host);
+ 
+     if (!host || !*host){
+ 	print_vfs_message (_("ftpfs: Invalid host name."));
+@@ -671,61 +671,86 @@ ftpfs_open_socket (struct vfs_class *me, struct vfs_s_super *super)
      }
  
-+    port = malloc (sizeof (char) * 6);
-+    if (port == NULL) {
-+      ftpfs_errno = errno;
-+      return -1;
-+    }
-+
      /* Hosts to connect to that start with a ! should use proxy */
 +    tmp_port = SUP.port;
 +
      if (SUP.proxy){
 -	ftpfs_get_proxy_host_and_port (ftpfs_proxy_host, &host, &port);
+-	free_host = 1;
++	char *orig_host = host;
++
 +	ftpfs_get_proxy_host_and_port (ftpfs_proxy_host, &host, &tmp_port);
- 	free_host = 1;
++
++	if (orig_host != host)
++	    g_free(orig_host);
++    }
++
++    port = g_strdup_printf("%hu", (unsigned short) tmp_port);
++    if (port == NULL) {
++	g_free (host);
++	ftpfs_errno = errno;
++	return -1;
      }
  
--    enable_interrupt_key(); /* clear the interrupt flag */
+     enable_interrupt_key(); /* clear the interrupt flag */
 -    
 -    /* Get host address */
 -    memset ((char *) &server_address, 0, sizeof (server_address));
@@ -54,178 +80,183 @@
 -	    return -1;
 -	}
 -	server_address.sin_family = hp->h_addrtype;
--
+ 
 -	/* We copy only 4 bytes, we cannot trust hp->h_length, as it comes from the DNS */
 -	memcpy ((char *) &server_address.sin_addr, (char *) hp->h_addr, 4);
-+    if (snprintf (port, 6, "%hu", (unsigned short)tmp_port) < 0) {
-+      g_free (port);
-+      if (free_host)
-+	g_free (host);
-+      ftpfs_errno = errno;
-+      return -1;
-     }
+-    }
++    memset (&hints, 0, sizeof (struct addrinfo));
++    hints.ai_socktype = SOCK_STREAM;
++    hints.ai_flags = AI_ADDRCONFIG;
  
 -    server_address.sin_port = htons (port);
-+    enable_interrupt_key(); /* clear the interrupt flag */
  
 -    /* Connect */
 -    if ((my_socket = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
--	disable_interrupt_key();
++    e = getaddrinfo (host, port, &hints, &res);
++    g_free (port);
++    port = NULL;
++
++    if ( e != 0 ) {
+ 	disable_interrupt_key();
 -	ftpfs_errno = errno;
 -        if (free_host)
 -	    g_free (host);
--	return -1;
--    }
++	print_vfs_message (_("ftpfs: %s"), gai_strerror (e));
++	g_free (host);
++	ftpfs_errno = EINVAL;
+ 	return -1;
+     }
 -    
 -    print_vfs_message (_("ftpfs: making connection to %s"), host);
 -    if (free_host)
-+    memset (&hints, 0, sizeof (struct addrinfo));
-+    hints.ai_socktype = SOCK_STREAM;
-+    hints.ai_flags = AI_ADDRCONFIG;
 +
-+    if ((e = getaddrinfo (host, port, &hints, &res)) != 0) {
-+      disable_interrupt_key();
-+      print_vfs_message (_("ftpfs: %s"), gai_strerror (e));
-+      if (free_host)
++    for (curr_res = res; curr_res != NULL; curr_res = curr_res->ai_next) {
++
++	my_socket = socket (curr_res->ai_family, curr_res->ai_socktype, curr_res->ai_protocol);
++
++	if (my_socket < 0) {
++
++	    if (curr_res->ai_next != NULL)
++		continue;
++
++	    disable_interrupt_key();
++	    print_vfs_message (_("ftpfs: %s"), unix_error_string (errno));
++	    g_free (host);
++	    freeaddrinfo (res);
++	    ftpfs_errno = errno;
++	    return -1;
++	}
++
++	print_vfs_message (_("ftpfs: making connection to %s"), host);
  	g_free (host);
--
++	host = NULL;
++
++	if ( connect (my_socket, curr_res->ai_addr, curr_res->ai_addrlen) >= 0 )
++	    break;
+ 
 -    if (connect (my_socket, (struct sockaddr *) &server_address,
 -	     sizeof (server_address)) < 0){
--	ftpfs_errno = errno;
+ 	ftpfs_errno = errno;
 -	if (errno == EINTR && got_interrupt ())
-+      g_free (port);
-+      ftpfs_errno = EINVAL;
-+      return -1;
-+    }
-+    g_free (port);
++	close (my_socket);
 +
-+    for (restmp = res; res != NULL; res = res->ai_next) {
-+      my_socket = socket (res->ai_family, res->ai_socktype, res->ai_protocol);
-+      if (my_socket < 0) {
-+	if (res->ai_next == NULL) {
-+	  disable_interrupt_key();
-+	  print_vfs_message (_("ftpfs: %s"), unix_error_string (errno));
-+	  if (free_host)
-+	    g_free (host);
-+	  freeaddrinfo (restmp);
-+	  ftpfs_errno = errno;
-+	  return -1;
-+	} else
-+	  continue;
-+      } else {
-+	print_vfs_message (_("ftpfs: making connection to %s"), host);
-+	if (free_host)
-+	  g_free (host);
-+	
-+	if (connect (my_socket, res->ai_addr, res->ai_addrlen) < 0) {
-+	  ftpfs_errno = errno;
-+	  close (my_socket);
-+	  if (errno == EINTR && got_interrupt ()) {
++	if (errno == EINTR && got_interrupt ()) {
  	    print_vfs_message (_("ftpfs: connection interrupted by user"));
 -	else
-+	  } else if (res->ai_next == NULL) {
++	} else if (res->ai_next == NULL) {
  	    print_vfs_message (_("ftpfs: connection to server failed: %s"),
 -				   unix_error_string(errno));
 -	disable_interrupt_key();
 -	close (my_socket);
--	return -1;
-+			       unix_error_string (errno));
-+	  } else
++				unix_error_string (errno));
++	} else {
 +	    continue;
-+	  freeaddrinfo (restmp);
-+	  disable_interrupt_key ();
-+	  return -1;
-+	} else
-+	  break;
-+      }
++	}
++
++	freeaddrinfo (res);
++	disable_interrupt_key ();
+ 	return -1;
      }
 -    disable_interrupt_key();
 +
-+    freeaddrinfo (restmp);
++    freeaddrinfo (res);
 +    disable_interrupt_key ();
      return my_socket;
  }
  
-@@ -861,93 +883,179 @@ ftpfs_get_current_directory (struct vfs_
+@@ -874,84 +899,174 @@ ftpfs_get_current_directory (struct vfs_class *me, struct vfs_s_super *super)
      
  /* Setup Passive ftp connection, we use it for source routed connections */
  static int
 -ftpfs_setup_passive (struct vfs_class *me, struct vfs_s_super *super, int my_socket, struct sockaddr_in *sa)
-+ftpfs_setup_passive (struct vfs_class *me, struct vfs_s_super *super, int my_socket, struct sockaddr_storage *sa, socklen_t *salen)
++ftpfs_setup_passive (struct vfs_class *me, struct vfs_s_super *super,
++	int my_socket, struct sockaddr_storage *sa, socklen_t *salen)
  {
-+  char *c;
-+  
-+  if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "EPSV") == COMPLETE) {
-+    int port;
-+    /* (|||<port>|) */
-+    c = strchr (reply_str, '|');
-+    if (c == NULL)
-+      return 0;
-+    if(strlen(c) > 3)
-+      c+=3;
-+    else
-+      return 0;
-+
-+    port = atoi (c);
-+    if (port < 0 || port > 65535)
-+      return 0;
-+    port = htons (port);
-+
-+    switch (sa->ss_family) {
-+    case AF_INET:
-+      ((struct sockaddr_in *)sa)->sin_port = port;
-+      break;
-+    case AF_INET6:
-+      ((struct sockaddr_in6 *)sa)->sin6_port = port;
-+      break;
-+    default:
-+      print_vfs_message (_("ftpfs: invalid address family"));
-+      ERRNOR (EINVAL, -1);
-+    }
-+  } else if (sa->ss_family == AF_INET) {
-     int xa, xb, xc, xd, xe, xf;
-     char n [6];
--    char *c;
-     
-     if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "PASV") != COMPLETE)
+-    int xa, xb, xc, xd, xe, xf;
+-    char n [6];
+     char *c;
+-    
+-    if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "PASV") != COMPLETE)
 -	return 0;
--
-+      return 0;
-+    
-     /* Parse remote parameters */
-     for (c = reply_str + 4; (*c) && (!isdigit ((unsigned char) *c)); c++)
+ 
+-    /* Parse remote parameters */
+-    for (c = reply_str + 4; (*c) && (!isdigit ((unsigned char) *c)); c++)
 -	;
-+      ;
-     if (!*c)
--	return 0;
-+      return 0;
-     if (!isdigit ((unsigned char) *c))
+-    if (!*c)
 -	return 0;
-+      return 0;
-     if (sscanf (c, "%d,%d,%d,%d,%d,%d", &xa, &xb, &xc, &xd, &xe, &xf) != 6)
+-    if (!isdigit ((unsigned char) *c))
 -	return 0;
-+      return 0;
-     n [0] = (unsigned char) xa;
-     n [1] = (unsigned char) xb;
-     n [2] = (unsigned char) xc;
-     n [3] = (unsigned char) xd;
-     n [4] = (unsigned char) xe;
-     n [5] = (unsigned char) xf;
-+    
-+    memcpy (&(((struct sockaddr_in *)sa)->sin_addr.s_addr), (void *)n, 4);
-+    memcpy (&(((struct sockaddr_in *)sa)->sin_port), (void *)&n[4], 2);
-+  } else
-+    return 0;
- 
+-    if (sscanf (c, "%d,%d,%d,%d,%d,%d", &xa, &xb, &xc, &xd, &xe, &xf) != 6)
++    if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "EPSV") == COMPLETE) {
++	int port;
++	/* (|||<port>|) */
++	c = strchr (reply_str, '|');
++	if (c == NULL)
++	    return 0;
++	if(strlen(c) > 3)
++	    c+=3;
++	else
++	    return 0;
++
++	port = atoi (c);
++	if (port < 0 || port > 65535)
++	    return 0;
++	port = htons (port);
++
++	switch (sa->ss_family) {
++	case AF_INET:
++	    ((struct sockaddr_in *)sa)->sin_port = port;
++	break;
++	case AF_INET6:
++	    ((struct sockaddr_in6 *)sa)->sin6_port = port;
++	break;
++	default:
++	    print_vfs_message (_("ftpfs: invalid address family"));
++	    ERRNOR (EINVAL, -1);
++	}
++    } else if (sa->ss_family == AF_INET) {
++	int xa, xb, xc, xd, xe, xf;
++	char n [6];
++
++	if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "PASV") != COMPLETE)
++	    return 0;
++
++	/* Parse remote parameters */
++	for (c = reply_str + 4; (*c) && (!isdigit ((unsigned char) *c)); c++);
++
++	if (!*c)
++	    return 0;
++	if (!isdigit ((unsigned char) *c))
++	    return 0;
++	if (sscanf (c, "%d,%d,%d,%d,%d,%d", &xa, &xb, &xc, &xd, &xe, &xf) != 6)
++	    return 0;
++
++	n [0] = (unsigned char) xa;
++	n [1] = (unsigned char) xb;
++	n [2] = (unsigned char) xc;
++	n [3] = (unsigned char) xd;
++	n [4] = (unsigned char) xe;
++	n [5] = (unsigned char) xf;
++
++	memcpy (&(((struct sockaddr_in *)sa)->sin_addr.s_addr), (void *)n, 4);
++	memcpy (&(((struct sockaddr_in *)sa)->sin_port), (void *)&n[4], 2);
++    } else
+ 	return 0;
+-    n [0] = (unsigned char) xa;
+-    n [1] = (unsigned char) xb;
+-    n [2] = (unsigned char) xc;
+-    n [3] = (unsigned char) xd;
+-    n [4] = (unsigned char) xe;
+-    n [5] = (unsigned char) xf;
+-
 -    memcpy (&(sa->sin_addr.s_addr), (void *)n, 4);
 -    memcpy (&(sa->sin_port), (void *)&n[4], 2);
 -    if (connect (my_socket, (struct sockaddr *) sa, sizeof (struct sockaddr_in)) < 0)
--	return 0;
--    return 1;
-+  if (connect (my_socket, (struct sockaddr *) sa, *salen ) < 0)
-+    return 0;
 +
-+  return 1;
++    if (connect (my_socket, (struct sockaddr *) sa, *salen ) < 0)
+ 	return 0;
++
+     return 1;
  }
  
  static int
@@ -235,9 +266,9 @@
 -    int data;
 -    socklen_t len = sizeof(data_addr);
 -    struct protoent *pe;
-+  struct sockaddr_storage data_addr;
-+  socklen_t data_addrlen;
-+  int data_sock;
++    struct sockaddr_storage data_addr;
++    socklen_t data_addrlen;
++    int data_sock;
  
 -    pe = getprotobyname ("tcp");
 -    if (pe == NULL)
@@ -250,122 +281,117 @@
 -    data = socket (AF_INET, SOCK_STREAM, pe->p_proto);
 -    if (data < 0)
 -	ERRNOR (EIO, -1);
-+  memset (&data_addr, 0, sizeof (struct sockaddr_storage));
-+  data_addrlen = sizeof (struct sockaddr_storage);
++    memset (&data_addr, 0, sizeof (struct sockaddr_storage));
++    data_addrlen = sizeof (struct sockaddr_storage);
++
++    if (getpeername (SUP.sock, (struct sockaddr *) &data_addr, &data_addrlen) == -1)
++	return -1;
++
++    switch (data_addr.ss_family) {
++    case AF_INET:
++	((struct sockaddr_in *)&data_addr)->sin_port = 0;
++    break;
++    case AF_INET6:
++	((struct sockaddr_in6 *)&data_addr)->sin6_port = 0;
++    break;
++    default:
++	print_vfs_message (_("ftpfs: invalid address family"));
++	ERRNOR(EINVAL, -1);
++    }
++
++    data_sock = socket (data_addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
++    if (data_sock < 0) {
++	if (SUP.use_passive_connection) {
++	    print_vfs_message (_("ftpfs: could not setup passive mode: %s"), unix_error_string (errno));
++	    SUP.use_passive_connection = 0;
++	    goto again;
++	}
++
++	print_vfs_message (_("ftpfs: could not create socket: %s"), unix_error_string (errno));
++	return -1;
++    }
  
--    if (SUP.use_passive_connection) {
+     if (SUP.use_passive_connection) {
 -	if (ftpfs_setup_passive (me, super, data, &data_addr))
 -	    return data;
--
--	SUP.use_passive_connection = 0;
--	print_vfs_message (_("ftpfs: could not setup passive mode"));
-+  if (getpeername (SUP.sock, (struct sockaddr *) &data_addr, &data_addrlen) == -1)
-+    return -1;
-+  
-+  switch (data_addr.ss_family) {
-+  case AF_INET:
-+    ((struct sockaddr_in *)&data_addr)->sin_port = 0;
-+    break;
-+  case AF_INET6:
-+    ((struct sockaddr_in6 *)&data_addr)->sin6_port = 0;
-+    break;
-+  default:
-+    print_vfs_message (_("ftpfs: invalid address family"));
-+    ERRNOR(EINVAL, -1);
-+  }
++
++	if (ftpfs_setup_passive (me, super, data_sock, &data_addr, &data_addrlen))
++	    return data_sock;
+ 
+ 	SUP.use_passive_connection = 0;
+ 	print_vfs_message (_("ftpfs: could not setup passive mode"));
  
 -	/* data or data_addr may be damaged by ftpfs_setup_passive */
 -	close (data);
--	goto again;
-+  data_sock = socket (data_addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
-+  if (data_sock < 0) {
-+    if (SUP.use_passive_connection) {
-+      print_vfs_message (_("ftpfs: could not setup passive mode: %s"), unix_error_string (errno));
-+      SUP.use_passive_connection = 0;
-+      goto again;
++	close (data_sock);
+ 	goto again;
      }
-+    print_vfs_message (_("ftpfs: could not create socket: %s"), unix_error_string (errno));
-+    return -1;
-+  }
- 
-+  if (SUP.use_passive_connection) {
-+    if (ftpfs_setup_passive (me, super, data_sock, &data_addr, &data_addrlen))
-+      return data_sock;
-+
-+    SUP.use_passive_connection = 0;
-+    print_vfs_message (_("ftpfs: could not setup passive mode"));
-+
-+    close (data_sock);
-+    goto again;
-+  }
-+  
+ 
      /* If passive setup fails, fallback to active connections */
      /* Active FTP connection */
 -    if ((bind (data, (struct sockaddr *)&data_addr, len) == 0) &&
 -	(getsockname (data, (struct sockaddr *) &data_addr, &len) == 0) && 
 -	(listen (data, 1) == 0))
-+  if ((bind (data_sock, (struct sockaddr *)&data_addr, data_addrlen) == 0) &&
-+      (getsockname (data_sock, (struct sockaddr *)&data_addr, &data_addrlen) == 0) && 
-+      (listen (data_sock, 1) == 0))
-     {
+-    {
 -	unsigned char *a = (unsigned char *)&data_addr.sin_addr;
 -	unsigned char *p = (unsigned char *)&data_addr.sin_port;
-+      unsigned short int port;
-+      char *addr;
-+      unsigned int af;
-+
-+      switch (data_addr.ss_family) {
-+      case AF_INET: 
-+	af = FTP_INET;
-+	port = ((struct sockaddr_in *)&data_addr)->sin_port;
++    if ((bind (data_sock, (struct sockaddr *)&data_addr, data_addrlen) == 0) &&
++      (getsockname (data_sock, (struct sockaddr *)&data_addr, &data_addrlen) == 0) && 
++      (listen (data_sock, 1) == 0)) {
++	unsigned short int port;
++	char *addr;
++	unsigned int af;
++
++	switch (data_addr.ss_family) {
++	case AF_INET: 
++	    af = FTP_INET;
++	    port = ((struct sockaddr_in *)&data_addr)->sin_port;
 +	break;
-+      case AF_INET6: 
-+	af = FTP_INET6;
-+	port = ((struct sockaddr_in6 *)&data_addr)->sin6_port;
++	case AF_INET6: 
++	    af = FTP_INET6;
++	    port = ((struct sockaddr_in6 *)&data_addr)->sin6_port;
 +	break;
-+      default:
-+	print_vfs_message (_("ftpfs: invalid address family"));
-+	ERRNOR (EINVAL, -1);
-+      }
-+      port = ntohs (port);
-+     
-+      addr = malloc (NI_MAXHOST);
-+      if (addr == NULL)
-+	ERRNOR (ENOMEM, -1);
-+
-+      if (getnameinfo ((struct sockaddr *)&data_addr, data_addrlen, addr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) != 0) {
++	default:
++	    print_vfs_message (_("ftpfs: invalid address family"));
++	    ERRNOR (EINVAL, -1);
++	}
++
++	port = ntohs (port);
++
++	addr = malloc (NI_MAXHOST);
++	if (addr == NULL)
++	    ERRNOR (ENOMEM, -1);
++
++	if (getnameinfo ((struct sockaddr *)&data_addr, data_addrlen, addr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST) != 0) {
++	    g_free (addr);
++	    ERRNOR (EIO, -1);
++	}
++
++	if (ftpfs_command (me, super, WAIT_REPLY, "EPRT |%u|%s|%hu|", af, addr, port) == COMPLETE) {
++	    g_free (addr);
++	    return data_sock;
++	}
 +	g_free (addr);
-+	ERRNOR (EIO, -1);
-+      }
 +
-+      if (ftpfs_command (me, super, WAIT_REPLY, "EPRT |%u|%s|%hu|", af, addr, port) == COMPLETE) {
-+	g_free (addr);
-+	return data_sock;
-+      }
-+      g_free (addr);
-+      
-+      if (FTP_INET == af) {
-+	unsigned char *a = (unsigned char *)&((struct sockaddr_in *)&data_addr)->sin_addr;
-+	unsigned char *p = (unsigned char *)&port;
++	if (FTP_INET == af) {
++	    unsigned char *a = (unsigned char *)&((struct sockaddr_in *)&data_addr)->sin_addr;
++	    unsigned char *p = (unsigned char *)&port;
  	
 -	if (ftpfs_command (me, super, WAIT_REPLY, "PORT %d,%d,%d,%d,%d,%d", a[0], a[1], 
 -		     a[2], a[3], p[0], p[1]) == COMPLETE)
 -	    return data;
-+	if (ftpfs_command (me, super, WAIT_REPLY, "PORT %u,%u,%u,%u,%u,%u", a[0], a[1], a[2], a[3],
-+			   p[0], p[1]) == COMPLETE)
++	if (ftpfs_command (me, super, WAIT_REPLY, 
++			    "PORT %u,%u,%u,%u,%u,%u", a[0], a[1], a[2], a[3],
++			    p[0], p[1]) == COMPLETE)
 +	  return data_sock;
-+      }
++	}
      }
 -    close (data);
--    ftpfs_errno = EIO;
--    return -1;
-+
-+  close (data_sock);
-+  ftpfs_errno = EIO;
-+  return -1;
++    close (data_sock);
+     ftpfs_errno = EIO;
+     return -1;
  }
- 
- static int
+@@ -960,7 +1075,7 @@ static int
  ftpfs_open_data_connection (struct vfs_class *me, struct vfs_s_super *super, const char *cmd,
  		      const char *remote, int isbinary, int reget)
  {
@@ -374,9 +400,11 @@
      int s, j, data;
      socklen_t fromlen = sizeof(from);
      
---- mc-2006-09-12-21/vfs/ftpfs.h.ipv6	2005-05-29 14:10:08.000000000 +0200
-+++ mc-2006-09-12-21/vfs/ftpfs.h	2006-09-26 10:42:36.000000000 +0200
-@@ -15,6 +15,9 @@ extern int ftpfs_first_cd_then_ls;
+diff --git a/vfs/ftpfs.h b/vfs/ftpfs.h
+index b2003db..0f41b18 100644
+--- a/vfs/ftpfs.h
++++ b/vfs/ftpfs.h
+@@ -21,6 +21,9 @@ extern int ftpfs_first_cd_then_ls;
  void ftpfs_init_passwd (void);
  void init_ftpfs (void);
  
@@ -386,27 +414,29 @@
  #define OPT_FLUSH        1
  #define OPT_IGNORE_ERROR 2
  
---- mc-2006-08-12-18/vfs/utilvfs.c.ipv6	2006-01-30 18:01:58.000000000 +0100
-+++ mc-2006-08-12-18/vfs/utilvfs.c	2010-12-14 20:41:09.000000000 +0100
-@@ -109,7 +109,21 @@ vfs_split_url (const char *path, char **
+diff --git a/vfs/utilvfs.c b/vfs/utilvfs.c
+index af05144..f53914a 100644
+--- a/vfs/utilvfs.c
++++ b/vfs/utilvfs.c
+@@ -123,7 +123,21 @@ vfs_split_url (const char *path, char **host, char **user, int *port,
      }
  
      /* Check if the host comes with a port spec, if so, chop it */
 -    colon = strchr (rest, ':');
 +    if ('[' == *rest) {
-+      colon = strchr (++rest, ']');
-+      if (colon) {
-+	colon[0] = '\0';
-+	colon[1] = '\0';
-+	colon++;
-+      } else {
-+	g_free (pcopy);
-+	*host = NULL;
-+	*port = 0;
-+	return NULL;
-+      }
++	colon = strchr (++rest, ']');
++	if (colon) {
++	    colon[0] = '\0';
++	    colon[1] = '\0';
++	    colon++;
++	} else {
++	    g_free (pcopy);
++	    *host = NULL;
++	    *port = 0;
++	    return NULL;
++	}
 +    } else
-+      colon = strchr (rest, ':');
++	colon = strchr (rest, ':');
 +
      if (colon) {
  	*colon = 0;


Index: mc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/mc/devel/mc.spec,v
retrieving revision 1.145
retrieving revision 1.146
diff -u -p -r1.145 -r1.146
--- mc.spec	3 Aug 2009 10:38:05 -0000	1.145
+++ mc.spec	5 Aug 2009 12:26:02 -0000	1.146
@@ -1,7 +1,7 @@
 Summary:	User-friendly text console file manager and visual shell
 Name:		mc
 Version:	4.7.0
-Release:	0.1.pre1%{?dist}
+Release:	0.2.pre1%{?dist}
 Epoch:		1
 License:	GPLv2
 Group:		System Environment/Shells
@@ -15,6 +15,7 @@ Requires:	dev >= 3.3-3
 Patch1:		mc-ipv6.patch
 Patch2:		mc-prompt.patch
 Patch3:		mc-exit.patch
+Patch4:		mc-extensions.patch
 
 %description
 Midnight Commander is a visual shell much like a file manager, only
@@ -28,6 +29,7 @@ specific files.
 %patch1 -p1 -b .ipv6
 %patch2 -p1 -b .prompt
 %patch3 -p1 -b .exit
+%patch4 -p1 -b .extensions
 
 %build
 export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $RPM_OPT_FLAGS"
@@ -83,6 +85,10 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{_libexecdir}/mc
 
 %changelog
+* Wed Aug  5 2009 Jindrich Novy <jnovy at redhat.com> 4.7.0-0.2.pre1
+- update extension binding to be more Fedora-like
+- update to upstream IPv6 patch
+
 * Mon Aug  3 2009 Jindrich Novy <jnovy at redhat.com> 4.7.0-0.1.pre1
 - update to 4.7.0-pre1 (fixes #513757)
 




More information about the fedora-extras-commits mailing list