[Debburn-changes] r438 - cdrkit/trunk/netscsid

Eduard Bloch blade at alioth.debian.org
Thu Nov 23 20:33:10 CET 2006


Author: blade
Date: 2006-11-23 20:33:10 +0100 (Thu, 23 Nov 2006)
New Revision: 438

Added:
   cdrkit/trunk/netscsid/netscsid.c
   cdrkit/trunk/netscsid/netscsid.dfl
Removed:
   cdrkit/trunk/netscsid/rscsi.c
   cdrkit/trunk/netscsid/rscsi.dfl
Modified:
   cdrkit/trunk/netscsid/CMakeLists.txt
Log:
rscsi -> netscsid, part 2

Modified: cdrkit/trunk/netscsid/CMakeLists.txt
===================================================================
--- cdrkit/trunk/netscsid/CMakeLists.txt	2006-11-23 19:31:33 UTC (rev 437)
+++ cdrkit/trunk/netscsid/CMakeLists.txt	2006-11-23 19:33:10 UTC (rev 438)
@@ -1,12 +1,12 @@
-PROJECT (RSCSI)
+PROJECT (netscsid)
 INCLUDE_DIRECTORIES(../include ../wodim ${CMAKE_BINARY_DIR} )
 INCLUDE(../include/AddScgBits.cmake)
 INCLUDE(../include/AddSchilyBits.cmake)
 
 LINK_DIRECTORIES(../libschily ../libusal ../libdeflt)
-ADD_EXECUTABLE (rscsi rscsi.c)
-#SET_SOURCE_FILES_PROPERTIES(rscsi.c )
-TARGET_LINK_LIBRARIES(rscsi ${EXTRA_LIBS} deflt)
-#SET_TARGET_PROPERTIES(rscsi PROPERTIES  SKIP_BUILD_RPATH TRUE)
-INSTALL(TARGETS rscsi DESTINATION sbin)
+ADD_EXECUTABLE (netscsid netscsid.c)
+#SET_SOURCE_FILES_PROPERTIES(netscsid.c )
+TARGET_LINK_LIBRARIES(netscsid ${EXTRA_LIBS} deflt)
+#SET_TARGET_PROPERTIES(netscsid PROPERTIES  SKIP_BUILD_RPATH TRUE)
+INSTALL(TARGETS netscsid DESTINATION sbin)
 

Copied: cdrkit/trunk/netscsid/netscsid.c (from rev 437, cdrkit/trunk/netscsid/rscsi.c)

Copied: cdrkit/trunk/netscsid/netscsid.dfl (from rev 437, cdrkit/trunk/netscsid/rscsi.dfl)

Deleted: cdrkit/trunk/netscsid/rscsi.c
===================================================================
--- cdrkit/trunk/netscsid/rscsi.c	2006-11-23 19:31:33 UTC (rev 437)
+++ cdrkit/trunk/netscsid/rscsi.c	2006-11-23 19:33:10 UTC (rev 438)
@@ -1,1013 +0,0 @@
-/*
- * This file has been modified for the cdrkit suite.
- *
- * The behaviour and appearence of the program code below can differ to a major
- * extent from the version distributed by the original author(s).
- *
- * For details, see Changelog file distributed with the cdrkit package. If you
- * received this file from another source then ask the distributing person for
- * a log of modifications.
- *
- */
-
-/* @(#)rscsi.c	1.29 05/05/16 Copyright 1994,2000-2002 J. Schilling*/
-#ifndef lint
-static	char sccsid[] =
-	"@(#)rscsi.c	1.29 05/05/16 Copyright 1994,2000-2002 J. Schilling";
-#endif
-/*
- *	Remote SCSI server
- *
- *	Copyright (c) 1994,2000-2002 J. Schilling
- */
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; see the file COPYING.  If not, write to the Free Software
- * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*#define	FORCE_DEBUG*/
-
-#include <mconfig.h>
-
-#include <stdio.h>
-#include <stdxlib.h>
-#include <unixstd.h>	/* includes <sys/types.h> */
-#include <utypes.h>
-#include <fctldefs.h>
-#include <statdefs.h>
-#include <strdefs.h>
-#ifdef	HAVE_SYS_SOCKET_H
-#define	USE_REMOTE
-#include <sys/socket.h>
-#endif
-#ifdef	 HAVE_SYS_PARAM_H
-#include <sys/param.h>	/* BSD-4.2 & Linux need this for MAXHOSTNAMELEN */
-#endif
-#include <errno.h>
-#include <pwd.h>
-
-#include <standard.h>
-#include <deflts.h>
-#include <patmatch.h>
-#include <schily.h>
-
-#include <usal/usalcmd.h>
-#include <usal/scsitransp.h>
-
-#include <netinet/in.h>
-#ifdef	HAVE_ARPA_INET_H
-#include <arpa/inet.h>		/* BeOS does not have <arpa/inet.h> */
-#endif				/* but inet_ntaoa() is in <netdb.h> */
-#ifdef	HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef	USE_REMOTE
-static	void	checkuser(void);
-static	char	*getpeer(void);
-static	BOOL	checktarget(void);
-static	BOOL	strmatch(char *str, char *pat);
-static	void	dorscsi(void);
-static	void	scsiversion(void);
-static	void	openscsi(void);
-static	void	closescsi(void);
-static	void	maxdma(void);
-static	void	getbuf(void);
-static	void	freebuf(void);
-static	void	havebus(void);
-static	void	scsifileno(void);
-static	void	initiator_id(void);
-static	void	isatapi(void);
-static	void	scsireset(void);
-static	void	sendcmd(void);
-
-static	int	fillrdbuf(void);
-static	int	readchar(char *cp);
-
-static	void	readbuf(char *buf, int n);
-static	void	voidarg(int n);
-static	void	readarg(char *buf, int n);
-static	char *preparebuffer(int size);
-static	int	checkscsi(char *decive);
-static	void	rscsirespond(int ret, int err);
-static	void	rscsireply(int ret);
-static	void	rscsierror(int err, char *str, char *xstr);
-
-#define	CMD_SIZE	80
-
-static	SCSI	*scsi_ptr = NULL;
-static	char	*Sbuf;
-static	long	Sbufsize;
-
-static	char	*username;
-static	char	*peername;
-
-static	char	*debug_name;
-static	FILE	*debug_file;
-
-#define	DEBUG(fmt)		if (debug_file) js_fprintf(debug_file, fmt)
-#define	DEBUG1(fmt,a)		if (debug_file) js_fprintf(debug_file, fmt, a)
-#define	DEBUG2(fmt,a1,a2)	if (debug_file) js_fprintf(debug_file, fmt, a1, a2)
-#define	DEBUG3(fmt,a1,a2,a3)	if (debug_file) js_fprintf(debug_file, fmt, a1, a2, a3)
-#define	DEBUG4(fmt,a1,a2,a3,a4)	if (debug_file) js_fprintf(debug_file, fmt, a1, a2, a3, a4)
-#define	DEBUG5(fmt,a1,a2,a3,a4,a5)	if (debug_file) js_fprintf(debug_file, fmt, a1, a2, a3, a4, a5)
-#define	DEBUG6(fmt,a1,a2,a3,a4,a5,a6)	if (debug_file) js_fprintf(debug_file, fmt, a1, a2, a3, a4, a5, a6)
-#endif	/* USE_REMOTE */
-
-int
-main(int argc, char *argv[])
-{
-	save_args(argc, argv);
-#ifndef	USE_REMOTE
-	comerrno(EX_BAD, "No remote SCSI support on this platform.\n");
-#else
-	argc--, argv++;
-	if (argc > 0 && strcmp(*argv, "-c") == 0) {
-		/*
-		 * Skip params in case we have been installed as shell.
-		 */
-		argc--, argv++;
-		argc--, argv++;
-	}
-	/*
-	 * WARNING you are only allowed to change the defaults configuration
-	 * filename if you also change the documentation and add a statement
-	 * that makes clear where the official location of the file is, why you
-	 * did choose a nonstandard location and that the nonstandard location
-	 * only refers to inofficial rscsi versions.
-	 *
-	 * I was forced to add this because some people change cdrecord without
-	 * rational reason and then publish the result. As those people
-	 * don't contribute work and don't give support, they are causing extra
-	 * work for me and this way slow down the development.
-	 */
-	if (cfg_open("/etc/rscsi.conf") < 0) {
-		rscsierror(geterrno(), errmsgstr(geterrno()),
-			"Remote configuration error: Cannot open /etc/rscsi.conf");
-/*		rscsirespond(-1, geterrno());*/
-		exit(EX_BAD);
-	}
-	debug_name=cfg_get("DEBUG");
-#ifdef	FORCE_DEBUG
-	if (debug_name == NULL && argc <= 0)
-		debug_name = "/tmp/RSCSI";
-#endif
-#ifdef	NONONO
-	/*
-	 * Should we allow root to shoot himself into the foot?
-	 * Allowing to write arbitrary files may be a security risk.
-	 */
-	if (argc > 0 && getuid() == 0)
-		debug_name = *argv;
-#endif
-
-	/*
-	 * XXX If someone sets up debugging and allows the debug file to be
-	 * XXX replaced by a symlink to e.g. /etc/passwd this would be a
-	 * XXX security risk. But /etc/rscsi.conf is only writable by root
-	 * XXX and for this reason a possible security risk would have been
-	 * XXX introduced by the administrator.
-	 */
-    if (debug_name != NULL) {
-        /* Try to be careful when opening debug files, might be
-         * created in an unsafe location 
-         * */
-        int fd = open(debug_name, O_CREAT | O_EXCL | O_TRUNC | O_RDWR, 0600);
-        if (fd > -1) 
-            debug_file = fdopen(fd, "w");
-        else {
-            rscsirespond(-1, geterrno());
-            exit(EX_BAD);
-        }
-    } 
-		
-	if (argc > 0) {
-		if (debug_file == 0) {
-			rscsirespond(-1, geterrno());
-			exit(EX_BAD);
-		}
-		(void) setbuf(debug_file, (char *)0);
-	}
-	checkuser();		/* Check if we are called by a bad guy	*/
-	peername = getpeer();	/* Get host name of caller		*/
-	dorscsi();
-#endif	/* USE_REMOTE */
-	return (0);
-}
-
-#ifdef	USE_REMOTE
-static void
-checkuser()
-{
-	uid_t	uid = getuid();
-	char	*uname;
-	struct passwd *pw;
-
-	if (uid == 0) {
-		username = "root";
-		DEBUG("rscsid: user id 0, name root\n");
-		return;
-	}
-	pw = getpwuid(uid);
-	if (pw == NULL)
-		goto notfound;
-
-	username = pw->pw_name;
-	DEBUG2("rscsid: user id %ld, name %s\n", (long)uid, username);
-
-	cfg_restart();
-	while ((uname = cfg_get_next("USER")) != NULL) {
-		if (strmatch(username, uname))
-			return;
-	}
-notfound:
-	DEBUG2("rscsid: Illegal user '%s' id %ld for RSCSI server\n",
-						username, (long)uid);
-	rscsierror(0, "Illegal user id for RSCSI server", NULL);
-	exit(EX_BAD);
-}
-
-#ifndef	NI_MAXHOST
-#ifdef	MAXHOSTNAMELEN			/* XXX remove this and sys/param.h */
-#define	NI_MAXHOST	MAXHOSTNAMELEN
-#else
-#define	NI_MAXHOST	64
-#endif
-#endif
-
-static char *
-getpeer()
-{
-#ifdef	HAVE_GETNAMEINFO
-#ifdef	HAVE_SOCKADDR_STORAGE
-	struct sockaddr_storage sa;
-#else
-	char			sa[256];
-#endif
-#else
-	struct	sockaddr sa;
-	struct hostent	*he;
-#endif
-	struct	sockaddr *sap;
-	struct	sockaddr_in *s;
-	socklen_t	 sasize = sizeof (sa);
-static	char		buffer[NI_MAXHOST];
-
-	sap = (struct  sockaddr *)&sa;
-	if (getpeername(STDIN_FILENO, sap, &sasize) < 0) {
-		int		errsav = geterrno();
-		struct stat	sb;
-
-		if (fstat(STDIN_FILENO, &sb) >= 0) {
-			if (S_ISFIFO(sb.st_mode)) {
-				DEBUG("rmt: stdin is a PIPE\n");
-				return ("PIPE");
-			}
-			DEBUG1("rscsid: stdin st_mode %0llo\n", (Llong)sb.st_mode);
-		}
-
-		DEBUG1("rscsid: peername %s\n", errmsgstr(errsav));
-		return ("ILLEGAL_SOCKET");
-	} else {
-		s = (struct sockaddr_in *)&sa;
-#ifdef	AF_INET6
-		if (s->sin_family != AF_INET && s->sin_family != AF_INET6) {
-#else
-		if (s->sin_family != AF_INET) {
-#endif
-#ifdef	AF_UNIX
-			/*
-			 * AF_UNIX is not defined on BeOS
-			 */
-			if (s->sin_family == AF_UNIX) {
-				DEBUG("rmt: stdin is a PIPE (UNIX domain socket)\n");
-				return ("PIPE");
-			}
-#endif
-			DEBUG1("rmt: stdin NOT_IP socket (sin_family: %d)\n",
-							s->sin_family);
-			return ("NOT_IP");
-		}
-               
-#ifdef	HAVE_GETNAMEINFO
-		buffer[0] = '\0';
-		if (debug_file &&
-		    getnameinfo(sap, sasize, buffer, sizeof (buffer), NULL, 0,
-		    NI_NUMERICHOST) == 0) {
-			DEBUG1("rmt: peername %s\n", buffer);
-		}
-		buffer[0] = '\0';
-		if (getnameinfo(sap, sasize, buffer, sizeof (buffer), NULL, 0,
-		    0) == 0) {
-			DEBUG1("rmt: peername %s\n", buffer);
-			return (buffer);
-		}
-		return ("CANNOT_MAP_ADDRESS");
-#else	/* HAVE_GETNAMEINFO */
-#ifdef	HAVE_INET_NTOA
-		(void) js_snprintf(buffer, sizeof(buffer), "%s", inet_ntoa(s->sin_addr));
-#else
-		(void) js_snprintf(buffer, sizeof(buffer), "%x", s->sin_addr.s_addr);
-#endif
-		DEBUG1("rscsid: peername %s\n", buffer);
-		he = gethostbyaddr((char *)&s->sin_addr.s_addr, 4, AF_INET);
-		DEBUG1("rscsid: peername %s\n", he!=NULL?he->h_name:buffer);
-		if (he != NULL)
-			return (he->h_name);
-		return (buffer);
-#endif	/* HAVE_GETNAMEINFO */
-	}
-}
-
-static BOOL
-checktarget()
-{
-	char	*target;
-	char	*user;
-	char	*host;
-	char	*p;
-	int	bus;
-	int	chan;
-	int	tgt;
-	int	lun;
-
-	if (peername == NULL)
-		return (FALSE);
-  cfg_restart();
-	while ((target = cfg_get_next("ACCESS")) != NULL) {
-		p = target;
-		while (*p == '\t')
-			p++;
-		user = p;
-		if ((p = strchr(p, '\t')) != NULL)
-			*p++ = '\0';
-		else
-			continue;
-		if (!strmatch(username, user))
-			continue;
-
-		while (*p == '\t')
-			p++;
-		host = p;
-		if ((p = strchr(p, '\t')) != NULL)
-			*p++ = '\0';
-		else
-			continue;
-		if (!strmatch(peername, host))
-			continue;
-
-		p = astoi(p, &bus);
-		if (*p != '\t')
-			continue;
-		p = astoi(p, &chan);
-		if (*p != '\t')
-			continue;
-		p = astoi(p, &tgt);
-		if (*p != '\t')
-			continue;
-		p = astoi(p, &lun);
-
-		if (*p != '\t' && *p != '\n' && *p != '\r' && *p != '\0') 
-			continue;
-		DEBUG6("ACCESS %s %s %d.%d,%d,%d\n", user, host, bus, chan, tgt, lun);
-
-		if (bus != -1 && bus != usal_scsibus(scsi_ptr))
-			continue;
-		if (tgt != -1 && tgt != usal_target(scsi_ptr))
-			continue;
-		if (lun != -1 && lun != usal_lun(scsi_ptr))
-			continue;
-		return (TRUE);
-	}
-	return (FALSE);
-}
-
-static BOOL
-strmatch(char *str, char *pat)
-{
-	int	*aux;
-	int	*state;
-	int	alt;
-	int	plen;
-	char	*p;
-
-	plen = strlen(pat);
-	aux = malloc(plen*sizeof(int));
-	state = malloc((plen+1)*sizeof(int));
-	if (aux == NULL || state == NULL) {
-		if (aux) free(aux);
-		if (state) free(state);
-		return (FALSE);
-	}
-
-	if ((alt = patcompile((const unsigned char *)pat, plen, aux)) == 0) {
-		/* Bad pattern */
-		free(aux);
-		free(state);
-		return (FALSE);
-	}
-
-	p = (char *)patmatch((const unsigned char *)pat, aux,
-							(const unsigned char *)str, 0,
-							strlen(str), alt, state);
-	free(aux);
-	free(state);
-
-	if (p != NULL && *p == '\0')
-		return (TRUE);
-	return (FALSE);
-}
-
-static void
-dorscsi()
-{
-	char	c;
-
-	while (readchar(&c) == 1) {
-		seterrno(0);
-
-		switch (c) {
-
-		case 'V':		/* "V" ersion	*/
-			scsiversion();
-			break;
-		case 'O':		/* "O" pen	*/
-			openscsi();
-			break;
-		case 'C':		/* "C" lose	*/
-			closescsi();
-			break;
-		case 'D':		/* "D" MA	*/
-			maxdma();
-			break;
-		case 'M':		/* "M" alloc	*/
-			getbuf();
-			break;
-		case 'F':		/* "F" free	*/
-			freebuf();
-			break;
-		case 'B':		/* "B" us	*/
-			havebus();
-			break;
-		case 'T':		/* "T" arget	*/
-			scsifileno();
-			break;
-		case 'I':		/* "I" nitiator	*/
-			initiator_id();
-			break;
-		case 'A':		/* "A" tapi	*/
-			isatapi();
-			break;
-		case 'R':		/* "R" eset	*/
-			scsireset();
-			break;
-		case 'S':		/* "S" end	*/
-			sendcmd();
-			break;
-
-		default:
-			DEBUG1("rscsid: garbage command '%c'\n", c);
-			rscsierror(0, "Garbage command", NULL);
-			exit(EX_BAD);
-		}
-	}
-	exit(0);
-}
-
-static void
-scsiversion()
-{
-	int	ret;
-	char	*str;
-	char	what[CMD_SIZE];
-
-	readarg(what, sizeof(what));
-	DEBUG1("rscsid: V %s\n", what);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	str = usal_version(scsi_ptr, atoi(what));
-	ret = strlen(str);
-	ret++;	/* Include null char */
-	rscsirespond(ret, geterrno());
-	_nixwrite(STDOUT_FILENO, str, ret);
-}
-
-static void
-openscsi()
-{
-	char	device[CMD_SIZE];
-	char	errstr[80];
-	int	debug = 0;
-	int	lverbose = 0;
-	int	ret = 0;
-	char	rbuf[1600];
-
-	if (scsi_ptr != NULL)
-		(void) usal_close(scsi_ptr);
-
-	readarg(device, sizeof(device));
-	DEBUG1("rscsid: O %s\n", device);
-	if (strncmp(device, "REMOTE", 6) == 0) {
-		scsi_ptr = NULL;
-		seterrno(EINVAL);
-	} else if (!checkscsi(device)) {
-		scsi_ptr = NULL;
-		seterrno(EACCES);
-	} else {
-		scsi_ptr = usal_open(device, errstr, sizeof(errstr), debug, lverbose);
-		if (scsi_ptr == NULL) {
-			ret = -1;
-		} else {
-			scsi_ptr->silent = 1;
-			scsi_ptr->verbose = 0;
-			scsi_ptr->debug = 0;
-			scsi_ptr->kdebug = 0;
-		}
-	}
-	if (ret < 0) {
-		/*
-		 * XXX This is currently the only place where we use the
-		 * XXX extended error string.
-		 */
-		rscsierror(geterrno(), errmsgstr(geterrno()), errstr);
-/*		rscsirespond(ret, geterrno());*/
-		return;
-	}
-	DEBUG4("rscsid:>A 0 %d.%d,%d,%d\n", 
-		usal_scsibus(scsi_ptr),
-		0,
-		usal_target(scsi_ptr),
-		usal_lun(scsi_ptr));
-
-	ret = js_snprintf(rbuf, sizeof(rbuf), "A0\n%d\n%d\n%d\n%d\n",
-		usal_scsibus(scsi_ptr),
-		0,
-		usal_target(scsi_ptr),
-		usal_lun(scsi_ptr));
-	(void) _nixwrite(STDOUT_FILENO, rbuf, ret);
-}
-
-static void
-closescsi()
-{
-	int	ret;
-	char	device[CMD_SIZE];
-
-	readarg(device, sizeof(device));
-	DEBUG1("rscsid: C %s\n", device);
-	ret = usal_close(scsi_ptr);
-	rscsirespond(ret, geterrno());
-	scsi_ptr = NULL;
-}
-
-static void
-maxdma()
-{
-	int	ret;
-	char	amt[CMD_SIZE];
-
-	readarg(amt, sizeof(amt));
-	DEBUG1("rscsid: D %s\n", amt);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	ret = usal_bufsize(scsi_ptr, atol(amt));
-	rscsirespond(ret, geterrno());
-}
-
-static void
-getbuf()
-{
-	int	ret = 0;
-	char	amt[CMD_SIZE];
-
-	readarg(amt, sizeof(amt));
-	DEBUG1("rscsid: M %s\n", amt);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	ret = usal_bufsize(scsi_ptr, atol(amt));
-	if (preparebuffer(ret) == NULL)
-		ret = -1;
-	rscsirespond(ret, geterrno());
-}
-
-static void
-freebuf()
-{
-	int	ret = 0;
-	char	dummy[CMD_SIZE];
-
-	readarg(dummy, sizeof(dummy));
-	DEBUG1("rscsid: F %s\n", dummy);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	usal_freebuf(scsi_ptr);
-	Sbuf = NULL;
-	rscsirespond(ret, geterrno());
-}
-
-static void
-havebus()
-{
-	int	ret;
-	char	bus[CMD_SIZE];
-	char	chan[CMD_SIZE];
-
-	readarg(bus, sizeof(bus));
-	readarg(chan, sizeof(chan));
-	DEBUG2("rscsid: B %s.%s\n", bus, chan);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	ret = usal_havebus(scsi_ptr, atol(bus));
-	rscsirespond(ret, geterrno());
-}
-
-static void
-scsifileno()
-{
-	int	ret;
-	char	bus[CMD_SIZE];
-	char	chan[CMD_SIZE];
-	char	tgt[CMD_SIZE];
-	char	lun[CMD_SIZE];
-
-	readarg(bus, sizeof(bus));
-	readarg(chan, sizeof(chan));
-	readarg(tgt, sizeof(tgt));
-	readarg(lun, sizeof(lun));
-	DEBUG4("rscsid: T %s.%s,%s,%s\n", bus, chan, tgt, lun);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	seterrno(0);
-	ret = usal_settarget(scsi_ptr, atoi(bus), atoi(tgt), atoi(lun));
-	if (!checktarget()) {
-		usal_settarget(scsi_ptr, -1, -1, -1);
-		ret = -1;
-	}
-	if (geterrno() != 0)
-		rscsirespond(ret, geterrno());
-	else
-		rscsireply(ret);
-}
-
-static void
-initiator_id()
-{
-	int	ret;
-	char	dummy[CMD_SIZE];
-
-	readarg(dummy, sizeof(dummy));
-	DEBUG1("rscsid: I %s\n", dummy);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	seterrno(0);
-	ret = usal_initiator_id(scsi_ptr);
-	if (geterrno() != 0)
-		rscsirespond(ret, geterrno());
-	else
-		rscsireply(ret);
-}
-
-static void
-isatapi()
-{
-	int	ret;
-	char	dummy[CMD_SIZE];
-
-	readarg(dummy, sizeof(dummy));
-	DEBUG1("rscsid: A %s\n", dummy);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	seterrno(0);
-	ret = usal_isatapi(scsi_ptr);
-	if (geterrno() != 0)
-		rscsirespond(ret, geterrno());
-	else
-		rscsireply(ret);
-}
-
-static void
-scsireset()
-{
-	int	ret;
-	char	what[CMD_SIZE];
-
-	readarg(what, sizeof(what));
-	DEBUG1("rscsid: R %s\n", what);
-	if (scsi_ptr == NULL) {
-		rscsirespond(-1, EBADF);
-		return;
-	}
-	ret = usal_reset(scsi_ptr, atoi(what));
-	rscsirespond(ret, geterrno());
-}
-
-static void
-sendcmd()
-{
-	register struct	usal_cmd	*scmd;
-	int	n;
-	int	ret;
-	char	count[CMD_SIZE];
-	char	flags[CMD_SIZE];
-	char	cdb_len[CMD_SIZE];
-	char	sense_len[CMD_SIZE];
-	char	timeout[CMD_SIZE];
-	int	csize;
-	int	cflags;
-	int	clen;
-	int	ctimeout;
-	char	rbuf[1600];
-	char	*p;
-
-	/*
-	 *	S count\n
-	 *	flags\n
-	 *	cdb_len\n
-	 *	sense_len\n
-	 *	timeout\n
-	 *	<data if available>
-	 *
-	 *	Timeout:
-	 *	-	sss	(e.g. 10)
-	 *	-	sss.uuu	(e.g. 10.23)
-	 */
-	readarg(count, sizeof(count));
-	readarg(flags, sizeof(flags));
-	readarg(cdb_len, sizeof(cdb_len));
-	readarg(sense_len, sizeof(sense_len));
-	readarg(timeout, sizeof(timeout));
-	DEBUG5("rscsid: S %s %s %s %s %s", count, flags, cdb_len, sense_len, timeout);
-	csize = atoi(count);
-	cflags = atoi(flags);
-	clen = atoi(cdb_len);
-
-	p = strchr(timeout, '.');
-	if (p)
-		*p = '\0';
-	ctimeout = atoi(timeout);
-
-	if (scsi_ptr == NULL || clen > SCG_MAX_CMD || csize > Sbufsize) {
-		DEBUG("\n");
-		voidarg(clen);
-		if ((cflags & SCG_RECV_DATA) == 0 && csize > 0)
-			voidarg(csize);
-		rscsirespond(-1, scsi_ptr==NULL ? EBADF : EINVAL);
-		return;
-	}
-
-	scmd = scsi_ptr->scmd;
-	fillbytes((caddr_t)scmd, sizeof(*scmd), '\0');
-	scmd->addr = (caddr_t)Sbuf;
-	scmd->size = csize;
-	scmd->flags = cflags;
-	scmd->cdb_len = clen;
-	scmd->sense_len = atoi(sense_len);
-	scmd->timeout = ctimeout;
-	readbuf((char *)scmd->cdb.cmd_cdb, clen);
-	DEBUG6(" 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
-		scmd->cdb.cmd_cdb[0],
-		scmd->cdb.cmd_cdb[1],
-		scmd->cdb.cmd_cdb[2],
-		scmd->cdb.cmd_cdb[3],
-		scmd->cdb.cmd_cdb[4],
-		scmd->cdb.cmd_cdb[5]);
-
-	if ((cflags & SCG_RECV_DATA) == 0 && csize > 0)
-		readbuf(Sbuf, scmd->size);
-
-	scsi_ptr->cmdname = "";
-
-	ret = usal_cmd(scsi_ptr);
-
-	n = 0;
-	if ((csize - scmd->resid) > 0)
-		n = csize - scmd->resid;
-
-	/*
-	 *	A count\n
-	 *	error\n
-	 *	errno\n
-	 *	scb\n
-	 *	sense_count\n
-	 *	<data if available>
-	 */
-	DEBUG5("rscsid:>A %d %d %d %d %d\n",
-		n,
-		scmd->error,
-		scmd->ux_errno,
-		*(Uchar *)&scmd->scb,
-		scmd->sense_count);
-
-	ret = js_snprintf(rbuf, sizeof(rbuf), "A%d\n%d\n%d\n%d\n%d\n",
-		n,
-		scmd->error,
-		scmd->ux_errno,
-		*(Uchar *)&scmd->scb,
-		scmd->sense_count);
-
-	if (scmd->sense_count > 0) {
-		movebytes(scmd->u_sense.cmd_sense, &rbuf[ret], scmd->sense_count);
-		ret += scmd->sense_count;
-	}
-	if ((cflags & SCG_RECV_DATA) == 0)
-		n = 0;
-	if (n > 0 && ((ret + n) <= sizeof(rbuf))) {
-		movebytes(Sbuf, &rbuf[ret], n);
-		ret += n;
-		n = 0;
-	}
-	(void) _nixwrite(STDOUT_FILENO, rbuf, ret);
-
-	if (n > 0)
-		(void) _nixwrite(STDOUT_FILENO, Sbuf, n);
-}
-
-#define	READB_SIZE	128
-static	char		readb[READB_SIZE];
-static	char		*readbptr;
-static	int		readbcnt;
-
-static int
-fillrdbuf()
-{
-	readbptr = readb;
-
-	return (readbcnt = _niread(STDIN_FILENO, readb, READB_SIZE));
-}
-
-static int
-readchar(char *cp)
-{
-	if (--readbcnt < 0) {
-		if (fillrdbuf() <= 0)
-			return (readbcnt);
-		--readbcnt;
-	}
-	*cp = *readbptr++;
-	return (1);
-}
-
-static void
-readbuf(register char *buf, register int n)
-{
-	register int	i = 0;
-	register int	amt;
-
-	if (readbcnt > 0) {
-		amt = readbcnt;
-		if (amt > n)
-			amt = n;
-		movebytes(readbptr, buf, amt);
-		readbptr += amt;
-		readbcnt -= amt;
-		i += amt;
-	}
-
-	for (; i < n; i += amt) {
-		amt = _niread(STDIN_FILENO, &buf[i], n - i);
-		if (amt <= 0) {
-			DEBUG("rscsid: premature eof\n");
-			rscsierror(0, "Premature eof", NULL);
-			exit(EX_BAD);
-		}
-	}
-}
-
-static void
-voidarg(register int n)
-{
-	register int	i;
-	register int	amt;
-		 char	buf[512];
-
-	for (i = 0; i < n; i += amt) {
-		amt = sizeof(buf);
-		if ((n - i) < amt)
-			amt = n - i;
-		readbuf(buf, amt);
-	}
-}
-
-static void
-readarg(char *buf, int n)
-{
-	int	i;
-
-	for (i = 0; i < n; i++) {
-		if (readchar(&buf[i]) != 1)
-			exit(0);
-		if (buf[i] == '\n')
-			break;
-	}
-	buf[i] = '\0';
-}
-
-static char *
-preparebuffer(int size)
-{
-	Sbufsize = size;
-	if ((Sbuf = usal_getbuf(scsi_ptr, Sbufsize)) == NULL) {
-		Sbufsize = 0L;
-		return (Sbuf);
-	}
-	size = Sbufsize + 1024;	/* Add protocol overhead */
-
-#ifdef	SO_SNDBUF
-	while (size > 512 &&
-	       setsockopt(STDOUT_FILENO, SOL_SOCKET, SO_SNDBUF, (char *)&size, sizeof (size)) < 0)
-		size -= 512;
-	DEBUG1("rscsid: sndsize: %d\n", size);
-#endif
-#ifdef	SO_RCVBUF
-	while (size > 512 &&
-	       setsockopt(STDIN_FILENO, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof (size)) < 0)
-		size -= 512;
-	DEBUG1("rscsid: rcvsize: %d\n", size);
-#endif
-	return (Sbuf);
-}
-
-static int
-checkscsi(char *device)
-{
-#ifdef	CHECKTAPE
-	if (strncmp(device, "/dev/rst", 8) == 0 ||
-	    strncmp(device, "/dev/nrst", 9) == 0 ||
-	    strcmp(device, "/dev/zero") == 0 ||
-	    strcmp(device, "/dev/null") == 0)
-		return (1);
-	return (0);
-#else
-	return (1);
-#endif
-}
-
-static void
-rscsirespond(int ret, int err)
-{
-	if (ret < 0) {
-		rscsierror(err, errmsgstr(err), NULL);
-	} else {
-		rscsireply(ret);
-	}
-}
-
-static void
-rscsireply(int ret)
-{
-	char	rbuf[CMD_SIZE];
-
-	DEBUG1("rscsid:>A %d\n", ret);
-	(void) js_snprintf(rbuf, sizeof(rbuf), "A%d\n", ret);
-	(void) _nixwrite(STDOUT_FILENO, rbuf, strlen(rbuf));
-}
-
-static void
-rscsierror(int err, char *str, char *xstr)
-{
-	char	rbuf[1600];
-	int	xlen = 0;
-	int	n;
-
-	if (xstr != NULL)
-		xlen = strlen(xstr) + 1;
-
-	DEBUG3("rscsid:>E %d (%s) [%s]\n", err, str, xstr?xstr:"");
-	n = js_snprintf(rbuf, sizeof(rbuf), "E%d\n%s\n%d\n", err, str, xlen);
-
-	if (xlen > 0 && ((xlen + n) <= sizeof(rbuf))) {
-		movebytes(xstr, &rbuf[n], xlen);
-		n += xlen;
-		xlen = 0;
-	}
-	(void) _nixwrite(STDOUT_FILENO, rbuf, n);
-	if (xlen > 0)
-		(void) _nixwrite(STDOUT_FILENO, xstr, xlen);
-}
-#endif	/* USE_REMOTE */

Deleted: cdrkit/trunk/netscsid/rscsi.dfl
===================================================================
--- cdrkit/trunk/netscsid/rscsi.dfl	2006-11-23 19:31:33 UTC (rev 437)
+++ cdrkit/trunk/netscsid/rscsi.dfl	2006-11-23 19:33:10 UTC (rev 438)
@@ -1,62 +0,0 @@
-#ident @(#)rscsi.dfl	1.3 05/08/09 Copyr 2000 J. Schilling
-#
-# This file is /etc/rscsi.conf
-#
-# NOTE: If this file is not present, rscsi will reject to work.
-#
-# If no USER= entry is present, only root is allowed to run rscsi.
-# If no ACCESS= entry is present, no device may to be used by remote users.
-
-# 
-# The file where debug info should go to.
-# This is commented out by default to speed up the program.
-# If you enable it make sure you substitute SAFE_DIR to a safe directory
-# to debug to.
-#
-# Note that rscsi runs as root and thus may be able to overwrite any file.
-# Be sure not to allow other people to replace the debug file by a symlink
-# to e.g. /etc/passwd. 
-#
-#DEBUG=SAFE_DIR/rscsi.dbg
-
-#
-# Each USER= entry adds the listed user to the users who may run rscsi
-#
-# A typical passwd entry looks like this:
-# rscsi:x:1999:1000:Remote SCSI:/export/home/rscsi:/opt/schily/sbin/rscsi
-#
-# Add entries for all valid remote users to /export/home/rscsi/.rhosts
-#
-# USER= entries are checked with a pattern matcher. USER=* matches all users.
-#
-USER=rscsi
-#USER=joerg
-
-#
-# Each ACCESS= entry adds a target or group of targets to the list of visible
-# targets for all users that do remote SCSI access from a specific host.
-#
-#	Username is the name of the user that runs rscsi. If you create
-#	different users, you may assign different permissions to different
-#	users from the same host.
-#
-#	Hostname must be in the same notation as needed for .rhosts (e.g. in
-#	the way you will be listed by 'who' if you log in from this host).
-#
-#	bus/chan/target/lun are the numbers from the scanbus output from
-#	cdrecord or sformat. If you use -1, you allow any value for this
-#	placeholder.
-#
-# 	local user name and remote host name are checked with a pattern matcher.
-#	ACCESS=*	* .... matches all users from all hosts.
-#
-#	NOTE: chan is currently not implementd (set it to 0 or -1)
-#
-#	local	remote
-#	user	host	bus	chan	target	lun
-#	name	name
-#
-#ACCESS=rscsi	sparky	-1	-1	-1	-1
-#ACCESS=rscsi	sparky	0	-1	6	-1
-#ACCESS=rscsi	sparky	1	-1	3	-1
-#ACCESS=rscsi	sparky	1	-1	4	-1




More information about the Debburn-changes mailing list