Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Apr 2013 13:40:01 GMT
From:      Hirohisa Yamaguchi <umq@ueo.co.jp>
To:        freebsd-ports-bugs@FreeBSD.org
Subject:   Re: ports/177626: Update port net/nbd-server to 3.2
Message-ID:  <201304051340.r35De127064817@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/177626; it has been noted by GNATS.

From: Hirohisa Yamaguchi <umq@ueo.co.jp>
To: Denis Generalov <gd@rambler-co.ru>
Cc: bug-followup@FreeBSD.ORG
Subject: Re: ports/177626: Update port net/nbd-server to 3.2
Date: Fri, 05 Apr 2013 22:19:45 +0900

 --Multipart_Fri_Apr__5_22:19:45_2013-1
 Content-Type: text/plain; charset=US-ASCII
 
 Hi,
 
 As mentioned in freebsd-ports@ [1], net/nbd-server has a test suite.
 But they don't run in my environment.
 
 In my patch, I've done:
  - fix test-client, which had a strange use of getopt(3) and
    apparently assumed that it will run on IPv4 only environment
  - modify test script to create temporary directory as intended
  - add missing header files and fix typo to reduce compiler warnings
  - and made some aesthetic change
 
 
 [1] http://docs.freebsd.org/cgi/mid.cgi?515D33E6.90208
 
 Regards,
 -- 
 
 	Hirohisa Yamaguchi
 	  umq@ueo.co.jp
 
 --Multipart_Fri_Apr__5_22:19:45_2013-1
 Content-Type: application/octet-stream; type=patch
 Content-Disposition: attachment; filename="net_nbd-server-177626.patch"
 Content-Transfer-Encoding: 7bit
 
 M       net/nbd-server/Makefile
 M       net/nbd-server/distinfo
 D       net/nbd-server/files/nbd.h
 A       net/nbd-server/files/patch-cliserv.h
 M       net/nbd-server/files/patch-nbd-server.c
 A       net/nbd-server/files/patch-nbd-tester-client.c
 A       net/nbd-server/files/patch-netdb-compat.h
 A       net/nbd-server/files/patch-simple_test
 
 Index: net/nbd-server/Makefile
 ===================================================================
 --- net/nbd-server/Makefile	(revision 315729)
 +++ net/nbd-server/Makefile	(working copy)
 @@ -1,13 +1,12 @@
  # Created by: Christian Laursen <xi@borderworlds.dk>
  # $FreeBSD$
  
 -PORTNAME=	nbd-server
 -PORTVERSION=	2.8.5
 -PORTREVISION=	1
 +PORTNAME=	nbd
 +PORTVERSION=	3.2
  PORTEPOCH=	1
  CATEGORIES=	net
 -MASTER_SITES=	SF/nbd/nbd/${PORTVERSION}
 -DISTNAME=	nbd-${PORTVERSION}
 +MASTER_SITES=	SF
 +PKGNAMESUFFIX=	-server
  
  MAINTAINER=	ports@FreeBSD.org
  COMMENT=	Server for the Linux network block device (nbd)
 @@ -16,12 +15,14 @@
  USE_GNOME=	glib20
  USE_PKGCONFIG=	build
  GNU_CONFIGURE=	yes
 -CONFIGURE_ARGS=	--prefix=${PREFIX} --enable-lfs --enable-syslog
 +CONFIGURE_ARGS=	--enable-lfs --enable-syslog
  
 -PLIST_FILES=	bin/nbd-server
 -MAN1=		nbd-server.1
 +PLIST_FILES=	bin/nbd-server bin/nbd-trdump
 +MAN1=		nbd-server.1 nbd-trdump.1
 +MAN5=		nbd-server.5
 +MAN8=		nbd-client.8
  
 -post-extract:
 -	@${CP} ${FILESDIR}/nbd.h ${WRKSRC}
 +regression-test: build
 +		cd ${WRKSRC} && ${MAKE} check
  
  .include <bsd.port.mk>
 Index: net/nbd-server/distinfo
 ===================================================================
 --- net/nbd-server/distinfo	(revision 315729)
 +++ net/nbd-server/distinfo	(working copy)
 @@ -1,2 +1,2 @@
 -SHA256 (nbd-2.8.5.tar.bz2) = dc77166f086712fa0d1ff63997d487d99eaac238819b1aebff9a8fddfcc0b835
 -SIZE (nbd-2.8.5.tar.bz2) = 151053
 +SHA256 (nbd-3.2.tar.bz2) = e297c1883133f04a55d8e9527a2e4344e577a54046cf81694ffabe13f73793db
 +SIZE (nbd-3.2.tar.bz2) = 508734
 Index: net/nbd-server/files/nbd.h
 ===================================================================
 --- net/nbd-server/files/nbd.h	(revision 315729)
 +++ net/nbd-server/files/nbd.h	(working copy)
 @@ -1,91 +0,0 @@
 -/*
 - * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
 - * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
 - *            Made nbd_end_request() use the io_request_lock
 - * 2001 Copyright (C) Steven Whitehouse
 - *            New nbd_end_request() for compatibility with new linux block
 - *            layer code.
 - * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
 - *            Removed unneeded blksize_bits field from nbd_device struct.
 - *            Cleanup PARANOIA usage & code.
 - * 2004/02/19 Paul Clements
 - *            Removed PARANOIA, plus various cleanup and comments
 - */
 -
 -#ifndef LINUX_NBD_H
 -#define LINUX_NBD_H
 -
 -#define NBD_SET_SOCK	_IO( 0xab, 0 )
 -#define NBD_SET_BLKSIZE	_IO( 0xab, 1 )
 -#define NBD_SET_SIZE	_IO( 0xab, 2 )
 -#define NBD_DO_IT	_IO( 0xab, 3 )
 -#define NBD_CLEAR_SOCK	_IO( 0xab, 4 )
 -#define NBD_CLEAR_QUE	_IO( 0xab, 5 )
 -#define NBD_PRINT_DEBUG	_IO( 0xab, 6 )
 -#define NBD_SET_SIZE_BLOCKS	_IO( 0xab, 7 )
 -#define NBD_DISCONNECT  _IO( 0xab, 8 )
 -
 -enum {
 -	NBD_CMD_READ = 0,
 -	NBD_CMD_WRITE = 1,
 -	NBD_CMD_DISC = 2
 -};
 -
 -#define nbd_cmd(req) ((req)->cmd[0])
 -#define MAX_NBD 128
 -
 -/* userspace doesn't need the nbd_device structure */
 -#ifdef __KERNEL__
 -
 -/* values for flags field */
 -#define NBD_READ_ONLY 0x0001
 -#define NBD_WRITE_NOCHK 0x0002
 -
 -struct nbd_device {
 -	int flags;
 -	int harderror;		/* Code of hard error			*/
 -	struct socket * sock;
 -	struct file * file; 	/* If == NULL, device is not ready, yet	*/
 -	int magic;
 -	spinlock_t queue_lock;
 -	struct list_head queue_head;/* Requests are added here...	*/
 -	struct semaphore tx_lock;
 -	struct gendisk *disk;
 -	int blksize;
 -	u64 bytesize;
 -};
 -
 -#endif
 -
 -/* These are sent over the network in the request/reply magic fields */
 -
 -#define NBD_REQUEST_MAGIC 0x25609513
 -#define NBD_REPLY_MAGIC 0x67446698
 -/* Do *not* use magics: 0x12560953 0x96744668. */
 -
 -/*
 - * This is the packet used for communication between client and
 - * server. All data are in network byte order.
 - */
 -struct nbd_request {
 -	u32 magic;
 -	u32 type;	/* == READ || == WRITE 	*/
 -	char handle[8];
 -	u64 from;
 -	u32 len;
 -}
 -#ifdef __GNUC__
 -	__attribute__ ((packed))
 -#endif
 -;
 -
 -/*
 - * This is the reply packet that nbd-server sends back to the client after
 - * it has completed an I/O request (or an error occurs).
 - */
 -struct nbd_reply {
 -	u32 magic;
 -	u32 error;		/* 0 = ok, else error	*/
 -	char handle[8];		/* handle you got from request	*/
 -};
 -#endif
 Index: net/nbd-server/files/patch-cliserv.h
 ===================================================================
 --- net/nbd-server/files/patch-cliserv.h	(revision 0)
 +++ net/nbd-server/files/patch-cliserv.h	(working copy)
 @@ -0,0 +1,11 @@
 +--- ./cliserv.h.orig	2012-05-25 17:09:16.000000000 +0900
 ++++ ./cliserv.h	2013-04-04 19:36:34.000000000 +0900
 +@@ -15,6 +15,8 @@
 + #include <netinet/tcp.h>
 + #include <netinet/in.h>
 + #include <stdlib.h>
 ++#include <sys/types.h>
 ++#include <sys/socket.h>
 + 
 + #if SIZEOF_UNSIGNED_SHORT_INT==4
 + typedef unsigned short u32;
 Index: net/nbd-server/files/patch-nbd-server.c
 ===================================================================
 --- net/nbd-server/files/patch-nbd-server.c	(revision 315729)
 +++ net/nbd-server/files/patch-nbd-server.c	(working copy)
 @@ -1,18 +1,10 @@
 -diff -urN nbd-2.8.3.orig/nbd-server.c nbd-2.8.3/nbd-server.c
 ---- nbd-2.8.3.orig/nbd-server.c	Thu Dec 22 21:37:20 2005
 -+++ nbd-server.c	Sun Jan  8 16:45:30 2006
 -@@ -363,12 +363,12 @@
 -  * is severely wrong)
 -  **/
 - void sigchld_handler(int s) {
 --        int* status=NULL;
 -+        int status;
 - 	int* i;
 - 	pid_t pid;
 - 	int done=0;
 - 
 --	while(!done && (pid=wait(status)) > 0) {
 -+	while(!done && (pid=wait(&status)) > 0) {
 - 		if(WIFEXITED(status)) {
 - 			msg3(LOG_INFO, "Child exited with %d", WEXITSTATUS(status));
 - 			msg3(LOG_INFO, "pid is %d", pid);
 +--- ./nbd-server.c.orig	2012-07-04 05:54:53.000000000 +0900
 ++++ ./nbd-server.c	2013-04-04 19:36:34.000000000 +0900
 +@@ -72,6 +72,7 @@
 + #ifdef HAVE_SYS_MOUNT_H
 + #include <sys/mount.h>
 + #endif
 ++#include <sys/uio.h>
 + #include <signal.h>
 + #include <errno.h>
 + #include <netinet/tcp.h>
 Index: net/nbd-server/files/patch-nbd-tester-client.c
 ===================================================================
 --- net/nbd-server/files/patch-nbd-tester-client.c	(revision 0)
 +++ net/nbd-server/files/patch-nbd-tester-client.c	(working copy)
 @@ -0,0 +1,116 @@
 +--- ./nbd-tester-client.c.orig	2012-05-25 17:09:16.000000000 +0900
 ++++ ./nbd-tester-client.c	2013-04-05 12:52:06.000000000 +0900
 +@@ -336,9 +336,11 @@
 + #define WRITE_ALL_ERR_RT(f, buf, len, whereto, rval, errmsg...) if((write_all(f, buf, len))<=0) { snprintf(errstr, errstr_len, ##errmsg); retval = rval; goto whereto; }
 + 
 + int setup_connection(gchar *hostname, int port, gchar* name, CONNECTION_TYPE ctype, int* serverflags) {
 +-	int sock;
 ++	int sock, sock6;
 ++	bool v4ok, v6ok;
 + 	struct hostent *host;
 + 	struct sockaddr_in addr;
 ++	struct sockaddr_in6 addr6;
 + 	char buf[256];
 + 	uint64_t mymagic = (name ? opts_magic : cliserv_magic);
 + 	u64 tmp64;
 +@@ -347,21 +349,58 @@
 + 	sock=0;
 + 	if(ctype<CONNECTION_TYPE_CONNECT)
 + 		goto end;
 ++	/* try IPv4 first */
 + 	if((sock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))<0) {
 + 		strncpy(errstr, strerror(errno), errstr_len);
 +-		goto err;
 +-	}
 +-	setmysockopt(sock);
 +-	if(!(host=gethostbyname(hostname))) {
 +-		strncpy(errstr, strerror(errno), errstr_len);
 +-		goto err_open;
 ++		v4ok = false;
 ++	} else
 ++		v4ok = true;
 ++	/* then IPv6 */
 ++	sock6=0;
 ++	if((sock6=socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP))<0) {
 ++		if (v4ok) {
 ++			strncpy(errstr, strerror(errno), errstr_len);
 ++			goto err;
 ++		} else
 ++			v6ok = false;
 ++	} else
 ++		v6ok = true;
 ++	if (v4ok) {
 ++		setmysockopt(sock);
 ++		if(!(host=gethostbyname(hostname))) {
 ++			if (!v6ok) {
 ++				strncpy(errstr, strerror(errno), errstr_len);
 ++				goto err_open;
 ++			} else
 ++				v4ok = false;
 ++		}
 ++		addr.sin_family=AF_INET;
 ++		addr.sin_port=htons(port);
 ++		addr.sin_addr.s_addr=*((int *) host->h_addr);
 ++		if((connect(sock, (struct sockaddr *)&addr, sizeof(addr))<0)) {
 ++			if (!v6ok) {
 ++				strncpy(errstr, strerror(errno), errstr_len);
 ++				goto err_open;
 ++			} else
 ++				v4ok = false;
 ++		}
 + 	}
 +-	addr.sin_family=AF_INET;
 +-	addr.sin_port=htons(port);
 +-	addr.sin_addr.s_addr=*((int *) host->h_addr);
 +-	if((connect(sock, (struct sockaddr *)&addr, sizeof(addr))<0)) {
 +-		strncpy(errstr, strerror(errno), errstr_len);
 +-		goto err_open;
 ++	if (!v4ok && v6ok) {
 ++		sock = sock6;
 ++		setmysockopt(sock);
 ++		if (!(host=gethostbyname2(hostname, AF_INET6))){
 ++			strncpy(errstr, strerror(errno), errstr_len);
 ++			goto err_open;
 ++		}
 ++		memset((char *)&addr6, 0, sizeof(addr6));
 ++		addr6.sin6_len=sizeof(addr6);
 ++		memcpy((char *)&addr6.sin6_addr, host->h_addr, host->h_length);
 ++		addr6.sin6_family = host->h_addrtype;
 ++		addr6.sin6_port = htons(port);
 ++		if ((connect(sock,(struct sockaddr *)&addr6, sizeof(addr6))<0)) {
 ++			strncpy(errstr, strerror(errno), errstr_len);
 ++			goto err_open;
 ++		}
 + 	}
 + 	if(ctype<CONNECTION_TYPE_INIT_PASSWD)
 + 		goto end;
 +@@ -1267,22 +1306,25 @@
 + 		exit(EXIT_FAILURE);
 + 	}
 + 	logging();
 +-	while((c=getopt(argc, argv, "-N:t:owfil"))>=0) {
 ++	while(optind<argc) {
 ++		c=getopt(argc, argv, "-N:t:owfil");
 + 		switch(c) {
 +-			case 1:
 ++			case -1:
 + 				switch(nonopt) {
 + 					case 0:
 +-						hostname=g_strdup(optarg);
 ++						hostname=g_strdup(argv[optind]);
 + 						nonopt++;
 + 						break;
 + 					case 1:
 +-						p=(strtol(argv[2], NULL, 0));
 ++						p=(strtol(argv[optind], NULL, 0));
 + 						if(p==LONG_MIN||p==LONG_MAX) {
 + 							g_critical("Could not parse port number: %s", strerror(errno));
 + 							exit(EXIT_FAILURE);
 + 						}
 + 						break;
 + 				}
 ++				argc--;
 ++				argv++;
 + 				break;
 + 			case 'N':
 + 				name=g_strdup(optarg);
 Index: net/nbd-server/files/patch-netdb-compat.h
 ===================================================================
 --- net/nbd-server/files/patch-netdb-compat.h	(revision 0)
 +++ net/nbd-server/files/patch-netdb-compat.h	(working copy)
 @@ -0,0 +1,8 @@
 +--- ./netdb-compat.h.orig	2012-05-25 17:22:38.000000000 +0900
 ++++ ./netdb-compat.h	2013-04-04 19:38:04.000000000 +0900
 +@@ -1,4 +1,4 @@
 +-#ifndef NETDB COMPAT_H
 ++#ifndef NETDB_COMPAT_H
 + #define NETDB_COMPAT_H
 + 
 + /* AI_NUMERICSERV as a value for the `ai_flags' member
 Index: net/nbd-server/files/patch-simple_test
 ===================================================================
 --- net/nbd-server/files/patch-simple_test	(revision 0)
 +++ net/nbd-server/files/patch-simple_test	(working copy)
 @@ -0,0 +1,11 @@
 +--- ./simple_test.orig	2012-06-24 08:43:42.000000000 +0900
 ++++ ./simple_test	2013-04-05 08:11:03.000000000 +0900
 +@@ -1,7 +1,7 @@
 + #!/bin/sh
 + # Yes, that's POSIX sh, not bash!
 + 
 +-tmpdir=`mktemp -d`
 ++tmpdir=`mktemp -d /tmp/nbd-XXXX`
 + conffile=${tmpdir}/nbd.conf
 + pidfile=${tmpdir}/nbd.pid
 + tmpnam=${tmpdir}/nbd.dd
 
 --Multipart_Fri_Apr__5_22:19:45_2013-1--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304051340.r35De127064817>