Module Name:    othersrc
Committed By:   agc
Date:           Mon Aug  8 02:24:33 UTC 2011

Modified Files:
        othersrc/external/bsd/iscsi/sbin/iscsictl: TODO iscsic_daemonif.c
            iscsic_driverif.c iscsic_globals.h iscsic_main.c iscsic_parse.c

Log Message:
Make this compile WARNS=4


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 othersrc/external/bsd/iscsi/sbin/iscsictl/TODO \
    othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c \
    othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c \
    othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h \
    othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c \
    othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/external/bsd/iscsi/sbin/iscsictl/TODO
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/TODO:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/TODO:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/TODO:1.1.1.1	Mon May  2 07:01:06 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/TODO	Mon Aug  8 02:24:33 2011
@@ -1,6 +1,5 @@
 To Do
 =====
-mktemp()
 man page
 global buf - make local
 
@@ -14,3 +13,4 @@
 ctype.h
 u_int
 u_char
+mktemp()
Index: othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c:1.1.1.1	Mon May  2 07:01:03 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_daemonif.c	Mon Aug  8 02:24:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsic_daemonif.c,v 1.1.1.1 2011/05/02 07:01:03 agc Exp $	*/
+/*	$NetBSD: iscsic_daemonif.c,v 1.2 2011/08/08 02:24:33 agc Exp $	*/
 
 /*-
  * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc.
@@ -49,7 +49,8 @@
 	iscsid_get_set_target_options_t opt;
 	iscsid_response_t *rsp;
 	iscsid_add_target_rsp_t *res;
-	int opts, auths, tlen, i;
+	unsigned		i;
+	int opts, auths, tlen;
 	uint32_t tid;
 
 	tlen = cl_get_target(&targ, argc, argv, kind != SEND_TARGETS_LIST);
@@ -134,7 +135,7 @@
 	iscsid_response_t *rsp;
 
 	if (!cl_get_id('I', &req.id, argc, argv)) {
-		if (!cl_get_string('n', srch.strval, argc, argv)) {
+		if (!cl_get_string('n', (char *)srch.strval, argc, argv)) {
 			arg_missing("Target ID or Name");
 		}
 		check_extra_args(argc, argv);
@@ -192,7 +193,8 @@
 
 			srch.search_kind = FIND_NAME;
 			srch.list_kind = kind;
-			strlcpy(srch.strval, id.name, sizeof(srch.strval));
+			strlcpy((char *)srch.strval, (char *)id.name,
+				sizeof(srch.strval));
 
 			send_request(ISCSID_SEARCH_LIST, sizeof(srch), &srch);
 			rsp = get_response(FALSE);
@@ -347,7 +349,7 @@
 	iscsid_response_t *trsp, *prsp;
 	iscsid_get_target_rsp_t *targ;
 	iscsid_get_portal_rsp_t *port;
-	int i;
+	unsigned i;
 
 	/* get target info */
 	req.list_kind = kind;
@@ -414,7 +416,7 @@
 	iscsid_get_list_req_t lst;
 	iscsid_response_t *rsp;
 	iscsid_get_list_rsp_t *list;
-	int i;
+	unsigned i;
 
 	check_extra_args(argc, argv);
 
@@ -512,10 +514,11 @@
 int
 add_isns_server(int argc, char **argv)
 {
-	iscsid_add_isns_server_req_t arg = { {0} };
+	iscsid_add_isns_server_req_t arg;
 	iscsid_add_isns_server_rsp_t *res;
 	iscsid_response_t *rsp;
 
+	(void) memset(&arg, 0x0, sizeof(arg));
 	if (!(cl_get_isns(&arg, argc, argv))) {
 		arg_missing("Server Address");
 	}
@@ -553,7 +556,7 @@
 	iscsid_response_t *rsp;
 
 	if (!cl_get_id('I', &req, argc, argv)) {
-		if (!cl_get_string('a', srch.strval, argc, argv)) {
+		if (!cl_get_string('a', (char *)srch.strval, argc, argv)) {
 			arg_missing("Server Address");
 		}
 		check_extra_args(argc, argv);
@@ -615,9 +618,10 @@
 	iscsid_response_t *rsp, *prsp;
 	iscsid_get_list_rsp_t *list;
 	iscsid_get_isns_server_rsp_t *isns;
-	iscsid_sym_id_t req = { 0 };
-	int i;
+	iscsid_sym_id_t req;
+	unsigned i;
 
+	(void) memset(&req, 0x0, sizeof(req));
 	check_extra_args(argc, argv);
 
 	/* get the list of servers */
@@ -674,11 +678,12 @@
 int
 add_initiator(int argc, char **argv)
 {
-	iscsid_add_initiator_req_t req = { {0} };
+	iscsid_add_initiator_req_t req;
 	iscsid_add_initiator_rsp_t *res;
 	iscsid_response_t *rsp;
 
-	if (!cl_get_string('a', req.address, argc, argv)) {
+	(void) memset(&req, 0x0, sizeof(req));
+	if (!cl_get_string('a', (char *)req.address, argc, argv)) {
 		arg_missing("Interface Address");
 	}
 	cl_get_symname(req.name, argc, argv);
@@ -709,9 +714,10 @@
 int
 remove_initiator(int argc, char **argv)
 {
-	iscsid_sym_id_t req = { 0 };
+	iscsid_sym_id_t req;
 	iscsid_response_t *rsp;
 
+	(void) memset(&req, 0x0, sizeof(req));
 	if (!cl_get_id('I', &req, argc, argv)) {
 		arg_missing("Initiator Portal ID");
 	}
@@ -744,9 +750,10 @@
 	iscsid_response_t *rsp, *prsp;
 	iscsid_get_list_rsp_t *list;
 	iscsid_get_initiator_rsp_t *init;
-	iscsid_sym_id_t req = { 0 };
-	int i;
+	iscsid_sym_id_t req;
+	unsigned i;
 
+	(void) memset(&req, 0x0, sizeof(req));
 	check_extra_args(argc, argv);
 
 	/* get the list of servers */
@@ -831,7 +838,8 @@
 				/* else find the target by its TargetName */
 				srch.search_kind = FIND_TARGET_NAME;
 				srch.list_kind = TARGET_LIST;
-				strlcpy(srch.strval, targ->TargetName, sizeof(srch.strval));
+				strlcpy((char *)srch.strval, (char *)targ->TargetName,
+					sizeof(srch.strval));
 
 				send_request(ISCSID_SEARCH_LIST, sizeof(srch), &srch);
 				rsp = get_response(FALSE);
@@ -882,10 +890,11 @@
 int
 login(int argc, char **argv)
 {
-	iscsid_login_req_t loginp = { {0} };
+	iscsid_login_req_t loginp;
 	iscsid_login_rsp_t *res;
 	iscsid_response_t *rsp;
 
+	(void) memset(&loginp, 0x0, sizeof(loginp));
 	loginp.login_type = (cl_get_opt('m', argc, argv))
 						? ISCSI_LOGINTYPE_NOMAP : ISCSI_LOGINTYPE_MAP;
 
@@ -950,9 +959,10 @@
 int
 add_connection(int argc, char **argv)
 {
-	iscsid_login_req_t loginp = { {0} };
+	iscsid_login_req_t loginp;
 	iscsid_response_t *rsp;
 
+	(void) memset(&loginp, 0x0, sizeof(loginp));
 	loginp.login_type = ISCSI_LOGINTYPE_MAP;
 	cl_get_id('I', &loginp.session_id, argc, argv);
 
@@ -1024,13 +1034,17 @@
 	iscsid_response_t *lrsp, *rsp;
 	iscsid_get_session_list_rsp_t *list;
 	iscsid_session_list_entry_t *ent;
-	iscsid_get_connection_info_req_t creq = { {0} };
+	iscsid_get_connection_info_req_t creq;
 	iscsid_get_connection_info_rsp_t *info;
-	iscsid_sym_id_t clreq = { 0 };
+	iscsid_sym_id_t clreq;
 	iscsid_get_connection_list_rsp_t *clinfo;
 	iscsid_connection_list_entry_t *clent;
-	int i, j, lconn;
+	unsigned i;
+	unsigned j;
+	int lconn;
 
+	(void) memset(&creq, 0x0, sizeof(creq));
+	(void) memset(&clreq, 0x0, sizeof(clreq));
 	lconn = cl_get_opt('c', argc, argv);
 
 	check_extra_args(argc, argv);
@@ -1099,14 +1113,15 @@
 int
 set_node_name(int argc, char **argv)
 {
-	iscsid_set_node_name_req_t req = { {0} };
+	iscsid_set_node_name_req_t req;
 	iscsid_response_t *rsp;
 	uint64_t isid;
 
-	if (!cl_get_string('n', req.InitiatorName, argc, argv)) {
+	(void) memset(&req, 0x0, sizeof(req));
+	if (!cl_get_string('n', (char *)req.InitiatorName, argc, argv)) {
 		arg_missing("Initiator Name");
 	}
-	cl_get_string('A', req.InitiatorAlias, argc, argv);
+	cl_get_string('A', (char *)req.InitiatorAlias, argc, argv);
 	isid = cl_get_longlong('i', argc, argv);
 	hton6(req.ISID, isid);
 
Index: othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c:1.1.1.1	Mon May  2 07:01:04 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_driverif.c	Mon Aug  8 02:24:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsic_driverif.c,v 1.1.1.1 2011/05/02 07:01:04 agc Exp $	*/
+/*	$NetBSD: iscsic_driverif.c,v 1.2 2011/08/08 02:24:33 agc Exp $	*/
 
 /*-
  * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc.
@@ -32,11 +32,12 @@
 #include "iscsic_globals.h"
 
 #include <ctype.h>
+#include <inttypes.h>
 
 typedef struct {
-	uint8_t asc;
-	uint8_t ascq;
-	char *key;
+	uint8_t		 asc;
+	uint8_t		 ascq;
+	const char	*key;
 } asc_tab_t;
 
 asc_tab_t asctab[] = {
@@ -259,7 +260,7 @@
 	if (!sid.id) {
 		srch.list_kind = SESSION_LIST;
 		srch.search_kind = FIND_NAME;
-		strlcpy(srch.strval, sid.name, sizeof(srch.strval));
+		strlcpy((char *)srch.strval, (char *)sid.name, sizeof(srch.strval));
 		srch.intval = 0;
 
 		send_request(ISCSID_SEARCH_LIST, sizeof(srch), &srch);
@@ -285,7 +286,7 @@
  */
 
 void
-dump_data(char *title, void *buffer, int len)
+dump_data(const char *title, void *buffer, int len)
 {
 	uint8_t *bp = (uint8_t *) buffer;
 	int i, nelem;
@@ -334,7 +335,7 @@
 
 	for (pt = asctab; pt->key != NULL && asc >= pt->asc; pt++) {
 		if (asc == pt->asc && ascq == pt->ascq) {
-			bp = &buf[1024];
+			bp = (char *)&buf[1024];
 			(void) snprintf(bp, sizeof(buf) - 1024, "%s: %s",
 					str, pt->key);
 			return bp;
@@ -358,8 +359,9 @@
 int
 do_ioctl(iscsi_iocommand_parameters_t * io, int rd)
 {
-	int rc;
-	char *es;
+	char	*esp;
+	char	 es[64];
+	int	 rc;
 
 	io->req.databuf = buf;
 	io->req.senselen = sizeof(io->req.sense);
@@ -371,40 +373,39 @@
 	if (io->req.senselen_used) {
 		switch (io->req.sense[2] & 0x0f) {
 		case 0x01:
-			es = "Recovered Error";
+			(void) snprintf(esp = es, sizeof(es), "Recovered Error");
 			break;
 		case 0x02:
-			es = "Not Ready";
+			(void) snprintf(esp = es, sizeof(es), "Not Ready");
 			break;
 		case 0x03:
-			es = "Medium Error";
+			(void) snprintf(esp = es, sizeof(es), "Medium Error");
 			break;
 		case 0x04:
-			es = "Hardware Error";
+			(void) snprintf(esp = es, sizeof(es), "Hardware Error");
 			break;
 		case 0x05:
-			es = "Illegal Request";
+			(void) snprintf(esp = es, sizeof(es), "Illegal Request");
 			break;
 		case 0x06:
-			es = "Unit Attention";
+			(void) snprintf(esp = es, sizeof(es), "Unit Attention");
 			break;
 		case 0x07:
-			es = "Data Protect";
+			(void) snprintf(esp = es, sizeof(es), "Data Protect");
 			break;
 		case 0x08:
-			es = "Blank Check";
+			(void) snprintf(esp = es, sizeof(es), "Blank Check");
 			break;
 		default:
-			es = &buf[256];
-			(void) snprintf(es, sizeof(buf) - 256, "Sense key 0x%x",
+			(void) snprintf(esp = (char *)&buf[256], sizeof(buf) - 256, "Sense key 0x%x",
 				io->req.sense[2] & 0x0f);
 			break;
 		}
 		if (io->req.senselen_used >= 14) {
-			es = add_asc_info(es, io->req.sense[12], io->req.sense[13]);
+			add_asc_info(esp, io->req.sense[12], io->req.sense[13]);
 		}
-		(void) snprintf(buf, sizeof(buf), "Sense Data (%s):", es);
-		dump_data(buf, io->req.sense, io->req.senselen_used);
+		(void) snprintf((char *)buf, sizeof(buf), "Sense Data (%s):", esp);
+		dump_data((char *)buf, io->req.sense, io->req.senselen_used);
 		return io->req.retsts;
 	}
 
@@ -430,10 +431,11 @@
 int
 inquiry(int argc, char **argv)
 {
-	iscsi_iocommand_parameters_t io = { 0 };
+	iscsi_iocommand_parameters_t io;
 	char opt;
 	int pag, rc;
 
+	(void) memset(&io, 0x0, sizeof(io));
 	if ((io.session_id = get_sessid(argc, argv, FALSE)) == 0) {
 		return 1;
 	}
@@ -497,11 +499,12 @@
 int
 read_capacity(int argc, char **argv)
 {
-	iscsi_iocommand_parameters_t io = { 0 };
+	iscsi_iocommand_parameters_t io;
 	int rc;
 	uint32_t bsz;
 	uint64_t lbn, cap;
 
+	(void) memset(&io, 0x0, sizeof(io));
 	if ((io.session_id = get_sessid(argc, argv, FALSE)) == 0) {
 		return 1;
 	}
@@ -519,7 +522,7 @@
 	lbn = (uint64_t) ntohl(*((long *) buf)) + 1;
 	bsz = ntohl(*((long *) &buf[4]));
 	cap = lbn * bsz;
-	printf("Total Blocks: %qd, Block Size: %u, Capacity: %qd Bytes\n",
+	printf("Total Blocks: %" PRIu64 ", Block Size: %u, Capacity: %" PRIu64 " Bytes\n",
 		lbn, bsz, cap);
 
 	return 0;
@@ -538,9 +541,10 @@
 int
 test_unit_ready(int argc, char **argv)
 {
-	iscsi_iocommand_parameters_t io = { 0 };
+	iscsi_iocommand_parameters_t io;
 	int rc;
 
+	(void) memset(&io, 0x0, sizeof(io));
 	if ((io.session_id = get_sessid(argc, argv, FALSE)) == 0) {
 		return 1;
 	}
@@ -572,11 +576,12 @@
 int
 report_luns(int argc, char **argv)
 {
-	iscsi_iocommand_parameters_t io = { 0 };
+	iscsi_iocommand_parameters_t io;
 	int rc;
 	uint32_t llen;
 	uint64_t *lp;
 
+	(void) memset(&io, 0x0, sizeof(io));
 	if ((io.session_id = get_sessid(argc, argv, FALSE)) == 0) {
 		return 1;
 	}
@@ -602,7 +607,7 @@
 	lp = (uint64_t *) & buf[8];
 
 	for (llen = min(llen, sizeof(buf) - 8) / 8; llen; llen--) {
-		printf("  0x%qx\n", ntohq(*lp));
+		printf("  0x%" PRIx64 "\n", ntohq(*lp));
 		lp++;
 	}
 	return 0;
Index: othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h:1.1.1.1	Mon May  2 07:01:04 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_globals.h	Mon Aug  8 02:24:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsic_globals.h,v 1.1.1.1 2011/05/02 07:01:04 agc Exp $	*/
+/*	$NetBSD: iscsic_globals.h,v 1.2 2011/08/08 02:24:33 agc Exp $	*/
 
 /*-
  * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc.
@@ -64,10 +64,9 @@
 
 typedef int (*cmdproc_t) (int, char **);
 
-typedef struct
-{
-	char *cmd;
-	cmdproc_t proc;
+typedef struct {
+	const char	*cmd;
+	cmdproc_t	 proc;
 } command_t;
 
 
@@ -144,10 +143,10 @@
 
 /* iscsic_main.c */
 
-void arg_error(char *, char *, ...);
-void arg_missing(char *);
-void io_error(char *, ...);
-void gen_error(char *, ...);
+void arg_error(char *, const char *, ...);
+void arg_missing(const char *);
+void io_error(const char *, ...);
+void gen_error(const char *, ...);
 void check_extra_args(int, char **);
 void status_error(unsigned);
 void status_error_slist(unsigned);
@@ -188,7 +187,7 @@
 /* iscsic_driverif.c */
 
 uint32_t get_sessid(int, char **, int);
-void dump_data(char *, void *, int);
+void dump_data(const char *, void *, int);
 int do_ioctl(iscsi_iocommand_parameters_t *, int);
 int set_node_name(int, char **);
 int inquiry(int, char **);
Index: othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c:1.1.1.1	Mon May  2 07:01:04 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_main.c	Mon Aug  8 02:24:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsic_main.c,v 1.1.1.1 2011/05/02 07:01:04 agc Exp $	*/
+/*	$NetBSD: iscsic_main.c,v 1.2 2011/08/08 02:24:33 agc Exp $	*/
 
 /*-
  * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc.
@@ -28,6 +28,10 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  */
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/un.h>
 
 #include "iscsic_globals.h"
 #include "iscsi_test.h"
@@ -35,15 +39,11 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <sys/socket.h>
-#include <sys/un.h>
 #include <stdarg.h>
 
 #define DEVICE    "/dev/iscsi0"
 
-/* response socket name template */
-#define TEMPLATE "/tmp/iscsi_client.XXXXXX"
-
+#define ISCSICTL_VERSION	"20110805"
 
 /*
  *-------- Table of commands and the associated handler function -------------
@@ -92,10 +92,9 @@
  *-------- Table of error codes and the associated message text -------------
 */
 
-typedef struct
-{
-	unsigned code;
-	char *str;
+typedef struct {
+	unsigned	 code;
+	const char	*str;
 } status_msg_t;
 
 static status_msg_t status_msg[] = {
@@ -192,9 +191,11 @@
 /* -------------------------------------------------------------------------- */
 /* local variables */
 
-static struct sockaddr_un daemon_name;	/* daemon socket name */
-static struct sockaddr_un myname;	/* my socket name */
-static int sock;				/* the socket */
+static struct sockaddr_un	daemon_name;	/* daemon socket name */
+
+static char		 	sockdir[MAXPATHLEN]; /* where myname lives */
+static struct sockaddr_un	myname;		/* my socket name */
+static int			sock;		/* the socket */
 
 static char *cmdname;			/* pointer to command name for error msgs */
 
@@ -221,9 +222,9 @@
 static void
 bye(void)
 {
-
 	close(sock);
-	unlink(myname.sun_path);
+	(void) unlink(myname.sun_path);
+	(void) rmdir(sockdir);
 	exit(EXIT_FAILURE);
 }
 
@@ -241,15 +242,15 @@
 */
 
 void
-arg_error(char *argp, char *fmt, ...)
+arg_error(char *argp, const char *fmt, ...)
 {
-
 	va_list args;
+	char	lbuf[BUF_SIZE];
 
 	va_start(args, fmt);
-	vsnprintf(buf, sizeof(buf), fmt, args);
+	vsnprintf(lbuf, sizeof(lbuf), fmt, args);
 	fprintf(stderr, "%s: %s: Invalid option at or near '%s': %s\n",
-		progname, cmdname, argp, buf);
+		progname, cmdname, argp, lbuf);
 	bye();
 }
 
@@ -265,7 +266,7 @@
  */
 
 void
-arg_missing(char *arg)
+arg_missing(const char *arg)
 {
 	warnx("%s: Missing argument: %s", cmdname, arg);
 	bye();
@@ -284,14 +285,15 @@
  */
 
 void
-io_error(char *fmt, ...)
+io_error(const char *fmt, ...)
 {
 	va_list args;
+	char	lbuf[BUF_SIZE];
 
 	va_start(args, fmt);
-	vsnprintf(buf, sizeof(buf), fmt, args);
+	vsnprintf(lbuf, sizeof(lbuf), fmt, args);
 	fprintf(stderr, "%s: %s: %s: %s\n",
-		progname, cmdname, buf, strerror(errno));
+		progname, cmdname, lbuf, strerror(errno));
 	bye();
 }
 
@@ -308,13 +310,14 @@
  */
 
 void
-gen_error(char *fmt, ...)
+gen_error(const char *fmt, ...)
 {
 	va_list args;
+	char	lbuf[BUF_SIZE];
 
 	va_start(args, fmt);
-	vsnprintf(buf, sizeof(buf), fmt, args);
-	fprintf(stderr, "%s: %s: %s\n", progname, cmdname, buf);
+	vsnprintf(lbuf, sizeof(lbuf), fmt, args);
+	fprintf(stderr, "%s: %s: %s\n", progname, cmdname, lbuf);
 	bye();
 }
 
@@ -434,7 +437,7 @@
 	   to fit into the static buffer, alloc a temp buffer.
 	 */
 
-	temp = temp || (len > (sizeof(buf) - sizeof(int)));
+	temp = temp || (len > (int)(sizeof(buf) - sizeof(int)));
 
 	if (temp) {
 		if (NULL == (pbuf = (int *) malloc(len + sizeof(int))))
@@ -494,7 +497,7 @@
 	len = sizeof(iscsid_request_t) + par_len;
 
 	/* alloc buffer if static one is too small to hold request */
-	req_temp = len > sizeof(buf);
+	req_temp = len > (int)sizeof(buf);
 
 	if (req_temp) {
 		req = malloc(len);
@@ -534,14 +537,29 @@
 int
 main(int argc, char **argv)
 {
-	command_t *c;
-	int res;
-
-	if (argc < 2)
-		errx(1, "Usage: %s <command> <options>, see manual for details.",
+	command_t	*c;
+	int		 res;
+	int		 i;
+
+	(void) snprintf(sockdir, sizeof(sockdir), "/tmp/iscsictl.XXXXXX");
+	while ((i = getopt(argc, argv, "d:v")) != -1) {
+		switch(i) {
+		case 'd':
+			(void) snprintf(sockdir, sizeof(sockdir), "%s", optarg);
+			break;
+		case 'v':
+			printf("%s version %s\n", *argv, ISCSICTL_VERSION);
+			break;
+		default:
+			break;
+		}
+	}
+	if (argc - optind  < 1) {
+		errx(EXIT_FAILURE, "Usage: %s <command> <options>, see manual for details.",
 			progname);
+	}
 
-	cmdname = argv[1];
+	cmdname = argv[optind];
 
 	for (c = cmds; c->cmd != NULL; c++) {
 		if (strcmp(c->cmd, cmdname) == 0) {
@@ -549,36 +567,39 @@
 		}
 	}
 	if (c->cmd == NULL) {
-		errx(2, "Unknown command: '%s'\n", cmdname);
+		errx(EXIT_FAILURE, "Unknown command: '%s'", cmdname);
 	}
 	if ((driver = open(DEVICE, O_RDONLY)) < 0) {
 		warn("Opening " DEVICE);
 #ifndef ISCSI_DEBUG				/* DEBUG ONLY: Allow CLI to operate w/o driver */
-		return 3;
+		return EXIT_FAILURE;
 #endif
 	}
 
 	sock = socket(AF_UNIX, SOCK_DGRAM, 0);
 	if (sock < 0)
-		err(4, "opening datagram socket");
+		err(EXIT_FAILURE, "opening datagram socket");
 
 	/* bind socket to unique name */
+	if (mkdtemp(sockdir) == NULL) {
+		errx(EXIT_FAILURE, "can't create iscsictl dir '%s'", sockdir);
+	}
 	myname.sun_family = AF_UNIX;
-	strlcpy(myname.sun_path, TEMPLATE, sizeof(myname.sun_path));
-	mktemp(myname.sun_path);
-	if (bind(sock, (struct sockaddr *) &myname, sizeof(struct sockaddr_un)))
+	(void) snprintf(myname.sun_path, sizeof(myname.sun_path), "%s/socket", sockdir);
+	if (bind(sock, (struct sockaddr *) &myname, sizeof(struct sockaddr_un)) < 0) {
 		io_error("Binding name to datagram socket");
-
+	}
 	daemon_name.sun_family = AF_UNIX;
 	strlcpy(daemon_name.sun_path, ISCSID_SOCK_NAME,
 		sizeof(daemon_name.sun_path));
 
 	/* dispatch command */
-	res = c->proc(argc - 2, &argv[2]);
+	res = (*c->proc)(optind + 1, &argv[optind + 1]);
 
 	/* cleanup */
 	close(sock);
 	unlink(myname.sun_path);
+	rmdir(sockdir);
 
 	return res;
 }
Index: othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c
diff -u othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c:1.1.1.1 othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c:1.2
--- othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c:1.1.1.1	Mon May  2 07:01:04 2011
+++ othersrc/external/bsd/iscsi/sbin/iscsictl/iscsic_parse.c	Mon Aug  8 02:24:33 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsic_parse.c,v 1.1.1.1 2011/05/02 07:01:04 agc Exp $	*/
+/*	$NetBSD: iscsic_parse.c,v 1.2 2011/08/08 02:24:33 agc Exp $	*/
 
 /*-
  * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc.
@@ -75,7 +75,7 @@
 			portal->port = (uint16_t) val;
 		}
 		/* is there a group tag? */
-		for (; isdigit(*sp); sp++);
+		for (; isdigit((unsigned char)*sp); sp++);
 		if (*sp && *sp != ',')
 			arg_error(arg, "Bad address format: Extra character(s) '%c'", *sp);
 	} else
@@ -94,7 +94,7 @@
 	if (strlen(str) >= sizeof(portal->address))
 		arg_error(arg, "Bad address format: Address string too long");
 
-	strlcpy(portal->address, str, sizeof(portal->address));
+	strlcpy((char *)portal->address, str, sizeof(portal->address));
 }
 
 
@@ -112,7 +112,7 @@
  */
 
 STATIC uint16_t
-get_short_int(char *sp, char *arg, char *name)
+get_short_int(char *sp, char *arg, const char *name)
 {
 	int val;
 
@@ -169,7 +169,7 @@
  */
 
 STATIC void
-get_str(char *dest, char *sp, char *arg, char *name)
+get_str(char *dest, char *sp, char *arg, const char *name)
 {
 
 	if (!sp || !*sp)
@@ -232,7 +232,7 @@
 
 		switch (argv[i][1]) {
 		case 'n':				/* target name */
-			get_str(targ->TargetName, sp, argv[i], "Target name");
+			get_str((char *)targ->TargetName, sp, argv[i], "Target name");
 			break;
 
 		case 'a':				/* target address */
@@ -278,10 +278,11 @@
 int
 cl_get_isns(iscsid_add_isns_server_req_t * srv, int argc, char **argv)
 {
-	iscsi_portal_address_t addr = { {0} };
+	iscsi_portal_address_t addr;
 	char *sp;
 	int i, found;
 
+	(void) memset(&addr, 0x0, sizeof(addr));
 	found = FALSE;
 
 	for (i = 0; i < argc; i++) {
@@ -292,7 +293,7 @@
 
 		switch (argv[i][1]) {
 		case 'N':				/* symbolic name */
-			get_str(srv->name, sp, argv[i], "Server name");
+			get_str((char *)srv->name, sp, argv[i], "Server name");
 			break;
 
 		case 'a':				/* target address */
@@ -313,7 +314,7 @@
 		argv[i] = NULL;
 	}
 
-	strlcpy(srv->address, addr.address, sizeof(srv->address));
+	strlcpy((char *)srv->address, (char *)addr.address, sizeof(srv->address));
 	srv->port = addr.port;
 
 	return found;
@@ -375,15 +376,15 @@
 			break;
 
 		case 'u':				/* user name */
-			get_str(auth->user_name, sp, argv[i], "User name");
+			get_str((char *)auth->user_name, sp, argv[i], "User name");
 			break;
 
 		case 's':				/* secret */
-			get_str(auth->password, sp, argv[i], "Secret");
+			get_str((char *)auth->password, sp, argv[i], "Secret");
 			break;
 
 		case 'S':				/* target secret */
-			get_str(auth->target_password, sp, argv[i], "Target secret");
+			get_str((char *)auth->target_password, sp, argv[i], "Target secret");
 			break;
 
 		default:
@@ -587,7 +588,7 @@
 			if (strlen(sp) >= ISCSI_STRING_LENGTH)
 				arg_error(argv[i], "ID String too long");
 			if (!sscanf(sp, "%d", &sid->id))
-				strlcpy(sid->name, sp, sizeof(sid->name));
+				strlcpy((char *)sid->name, sp, sizeof(sid->name));
 			else if (!sid->id)
 				arg_error(argv[i], "Invalid ID");
 
@@ -634,12 +635,12 @@
 
 			if (!sp || !*sp)
 				arg_error(argv[i], "Symbolic name missing");
-			if (isdigit(*sp))
+			if (isdigit((unsigned char)*sp))
 				arg_error(argv[i], "Symbolic name must not be numeric");
 			if (strlen(sp) >= ISCSI_STRING_LENGTH)
 				arg_error(argv[i], "Symbolic name too long");
 
-			strlcpy(sn, sp, ISCSI_STRING_LENGTH);
+			strlcpy((char *)sn, sp, ISCSI_STRING_LENGTH);
 
 			if (!argv[i][2])
 				argv[i + 1] = NULL;
@@ -903,7 +904,7 @@
 
 			if (!sp || !*sp)
 				arg_error(argv[i], "Option value missing");
-			if (!sscanf(sp, "%qi", &val))
+			if (!sscanf(sp, "%qi", (long long *)(void *)&val))
 				arg_error(argv[i], "Integer expected");
 
 			if (!argv[i][2])

Reply via email to