retitle 322597 GNU/kFreeBSD support
thanks
Hi,
I'm adding GNU/kFreeBSD SCSI transport support to the patch in #322597.
Please could you apply this soon? This bug is very old now.
(attached 22_linux_rawio_capability.dpatch is a portable replacement that
doesn't assume Linux)
Thanks!
--
Robert Millan
#! /bin/sh /usr/share/dpatch/dpatch-run
##
## DP: Add linux specific rawio capability allocation to work with kernels >
2.6.8
@DPATCH@
diff -ur cdrtools-2.01+01a01.old/RULES/os-linux.id
cdrtools-2.01+01a01/RULES/os-linux.id
--- cdrtools-2.01+01a01.old/RULES/os-linux.id 1997-02-01 01:10:06.000000000
+0100
+++ cdrtools-2.01+01a01/RULES/os-linux.id 2005-08-19 20:53:43.000000000
+0200
@@ -22,3 +22,5 @@
###########################################################################
O_ARCH= linux
-O_ARCH= -$(O_ARCH)
+
+LIB_CAP= -lcap
diff -ur cdrtools-2.01+01a01.old/cdrecord/Makefile
cdrtools-2.01+01a01/cdrecord/Makefile
--- cdrtools-2.01+01a01.old/cdrecord/Makefile 2004-05-26 09:31:00.000000000
+0200
+++ cdrtools-2.01+01a01/cdrecord/Makefile 2005-08-19 20:55:47.000000000
+0200
@@ -33,7 +33,7 @@
../include/scg/scgio.h ../include/scg/scsidefs.h \
../include/scg/scsireg.h ../include/scg/scsitransp.h
#LIBS= -lschily $(LIB_SOCKET)
-LIBS= -lrscg -lscg $(LIB_VOLMGT) -ledc_ecc -ldeflt -lschily
$(SCSILIB) $(LIB_SOCKET)
+LIBS= -lrscg -lscg $(LIB_VOLMGT) -ledc_ecc -ldeflt -lschily
$(SCSILIB) $(LIB_SOCKET) $(LIB_CAP)
XMK_FILE= Makefile.man
###########################################################################
diff -ur cdrtools-2.01+01a01.old/cdrecord/cdrecord.c
cdrtools-2.01+01a01/cdrecord/cdrecord.c
--- cdrtools-2.01+01a01.old/cdrecord/cdrecord.c 2004-10-17 13:44:58.000000000
+0200
+++ cdrtools-2.01+01a01/cdrecord/cdrecord.c 2005-08-19 20:55:06.000000000
+0200
@@ -58,6 +58,9 @@
#include "defaults.h"
#include "movesect.h"
+#ifdef __linux__
+#include <sys/capability.h> /* for rawio capability */
+#endif
char cdr_version[] = "2.01.01a01";
@@ -244,6 +247,10 @@
LOCAL void set_wrmode __PR((cdr_t *dp, int wmode, int tflags));
LOCAL void linuxcheck __PR((void));
+#ifdef __linux__
+LOCAL int get_cap __PR((cap_value_t cap_array));
+#endif
+
struct exargs {
SCSI *scgp;
cdr_t *dp;
@@ -505,6 +512,14 @@
#endif
comerr("Panic cannot set back effective uid.\n");
}
+
+#ifdef __linux__
+ /* get the rawio capability */
+ if (get_cap(CAP_SYS_RAWIO))
+ perror("Error: Cannot gain SYS_RAWIO capability."
+ "Is cdrecord installed SUID root?\n");
+#endif
+
/*
* WARNING: We now are no more able to do any privilleged operation
* unless we have been called by root.
@@ -1032,6 +1047,12 @@
if (setreuid(-1, getuid()) < 0)
comerr("Panic cannot set back effective
uid.\n");
}
+#ifdef __linux__
+ if (get_cap(CAP_SYS_RAWIO))
+ perror("Error: Cannot gain SYS_RAWIO capability."
+ "Is cdrecord installed SUID root?\n");
+#endif
+
#endif
}
if ((*dp->cdr_set_speed_dummy)(scgp, dp, &speed) < 0) {
@@ -4724,3 +4745,18 @@
}
#endif
}
+
+#ifdef __linux__
+LOCAL int
+get_cap(cap_array)
+ cap_value_t cap_array;
+{
+ int ret;
+ cap_t capa;
+ capa = cap_get_proc();
+ cap_set_flag(capa, CAP_EFFECTIVE, 1, &cap_array, CAP_SET);
+ ret = cap_set_proc(capa);
+ cap_free(capa);
+ return ret;
+}
+#endif
diff -ur -N cdrtools-2.01+01a03.old/debian/control
cdrtools-2.01+01a03/debian/control
--- cdrtools-2.01+01a03.old/debian/control 2005-11-06 20:17:01.000000000
+0100
+++ cdrtools-2.01+01a03/debian/control 2005-11-06 20:21:48.000000000 +0100
@@ -3,7 +3,7 @@
Section: otherosfs
Maintainer: Joerg Jaspert <[EMAIL PROTECTED]>
Uploaders: Eduard Bloch <[EMAIL PROTECTED]>, Steve McIntyre <[EMAIL PROTECTED]>
-Build-Depends: debhelper (>=4.1.16), autotools-dev, smake, zlib1g-dev, dpatch,
libcap-dev
+Build-Depends: debhelper (>=4.1.16), autotools-dev, smake, zlib1g-dev, dpatch,
libcap-dev [!kfreebsd-i386 !hurd-i386], libcam-dev [kfreebsd-i386]
Standards-Version: 3.6.2.1
Package: cdrecord
diff -ur -N cdrtools-2.01+01a03.old/debian/patches/00list
cdrtools-2.01+01a03/debian/patches/00list
--- cdrtools-2.01+01a03.old/debian/patches/00list 2005-11-06
20:17:00.000000000 +0100
+++ cdrtools-2.01+01a03/debian/patches/00list 2005-11-06 20:19:27.000000000
+0100
@@ -20,4 +20,5 @@
24_debug_tmpfile
25_mkisofs_iconv_manpage
26_author_locale
-30_doc_typo_fixes
\ No newline at end of file
+30_doc_typo_fixes
+31_gnu-kfreebsd.dpatch
diff -ur -N cdrtools-2.01+01a03.old/debian/patches/31_gnu-kfreebsd.dpatch
cdrtools-2.01+01a03/debian/patches/31_gnu-kfreebsd.dpatch
--- cdrtools-2.01+01a03.old/debian/patches/31_gnu-kfreebsd.dpatch
1970-01-01 01:00:00.000000000 +0100
+++ cdrtools-2.01+01a03/debian/patches/31_gnu-kfreebsd.dpatch 2005-11-06
20:19:10.000000000 +0100
@@ -0,0 +1,125 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 31_gnu-kfreebsd.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: GNU/kFreeBSD support (not accepted upstream)
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch) patch -f --no-backup-if-mismatch -p1 < $0;;
+ -unpatch) patch -f --no-backup-if-mismatch -R -p1 < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
[EMAIL PROTECTED]@
+diff -Nur cdrtools-2.01.old/RULES/os-gnu-kfreebsd.def
cdrtools-2.01/RULES/os-gnu-kfreebsd.def
+--- cdrtools-2.01.old/RULES/os-gnu-kfreebsd.def 1970-01-01
01:00:00.000000000 +0100
++++ cdrtools-2.01/RULES/os-gnu-kfreebsd.def 2005-08-18 13:51:58.000000000
+0200
+@@ -0,0 +1,1 @@
++MANSTYLE= bsd
+diff -Nur cdrtools-2.01.old/cdda2wav/interface.c
cdrtools-2.01/cdda2wav/interface.c
+--- cdrtools-2.01.old/cdda2wav/interface.c 2004-08-05 11:57:27.000000000
+0200
++++ cdrtools-2.01/cdda2wav/interface.c 2005-08-18 13:19:10.000000000 +0200
+@@ -439,12 +439,12 @@
+ #endif
+ #endif
+ break;
+-#if defined (__linux__) || defined (__FreeBSD__)
++#if defined (__linux__) || defined (__FreeBSD__) ||
defined(__FreeBSD_kernel__)
+ #if defined (__linux__)
+ case SCSI_CDROM_MAJOR: /* scsi cd */
+ default: /* for example ATAPI cds */
+ #else
+-#if defined (__FreeBSD__)
++#if defined (__FreeBSD__) || defined(__FreeBSD_kernel__)
+ case 117:
+ if (!S_ISCHR(statstruct->st_mode)) {
+ fprintf(stderr, "%s is not a char device\n",pdev_name);
+diff -Nur cdrtools-2.01.old/cdda2wav/ioctl.c cdrtools-2.01/cdda2wav/ioctl.c
+--- cdrtools-2.01.old/cdda2wav/ioctl.c 2003-12-27 17:29:28.000000000 +0100
++++ cdrtools-2.01/cdda2wav/ioctl.c 2005-08-18 13:19:10.000000000 +0200
+@@ -156,7 +156,7 @@
+ fprintf( stderr, "can't get TocEntry #%d lba (error %d).\n", i+1,
err );
+ exit( MEDIA_ERROR );
+ }
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ entry[i].cdte_addr.lba = be32_to_cpu(entry[i].cdte_addr.lba);
+ #endif
+ }
+@@ -168,7 +168,7 @@
+ fprintf( stderr, "can't get TocEntry LEADOUT lba (error %d).\n", err );
+ exit( MEDIA_ERROR );
+ }
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ entry[i].cdte_addr.lba = be32_to_cpu(entry[i].cdte_addr.lba);
+ #endif
+
+@@ -196,7 +196,7 @@
+ {
+ /* trash the cache */
+
+-#if defined __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ static struct cdrom_read_audio arg2;
+
+ arg2.address.lba = find_an_off_sector(lSector, SectorBurstVal);
+@@ -266,7 +266,7 @@
+ static int nothing_read = 1;
+
+ /* read 2352 bytes audio data */
+-#if defined __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ arg.address.lba = lSector;
+ arg.addr_format = CDROM_LBA;
+ arg.nframes = SectorBurstVal;
+@@ -395,7 +395,7 @@
+ {
+ struct cdrom_subchnl sub_ch;
+
+-#if defined __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ struct cd_sub_channel_info sub_ch_info;
+
+ if (x && x->verbose) {
+@@ -433,7 +433,7 @@
+ return NULL;
+ }
+ case GET_POSITIONDATA:
+-#if defined __FreeBSD__
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+ sub_ch.data_format = CD_CURRENT_POSITION;
+ #endif
+ #if defined (__linux__)
+diff -Nur cdrtools-2.01.old/cdda2wav/mycdrom.h cdrtools-2.01/cdda2wav/mycdrom.h
+--- cdrtools-2.01.old/cdda2wav/mycdrom.h 2002-09-04 14:07:16.000000000
+0200
++++ cdrtools-2.01/cdda2wav/mycdrom.h 2005-08-18 13:19:11.000000000 +0200
+@@ -52,7 +52,7 @@
+
+ # endif /* if 0 */
+ # else /* not Sun SVR4 */
+-# if defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__
++# if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined
__NetBSD__ || defined __OpenBSD__
+ # if !defined CDIOCREADAUDIO
+ # undef HAVE_IOCTL_INTERFACE
+ # else
+diff -Nur cdrtools-2.01.old/libscg/scsihack.c cdrtools-2.01/libscg/scsihack.c
+--- cdrtools-2.01.old/libscg/scsihack.c 2003-11-28 02:33:18.000000000
+0100
++++ cdrtools-2.01/libscg/scsihack.c 2005-08-18 13:19:11.000000000 +0200
+@@ -129,7 +129,7 @@
+
+ #endif /* linux */
+
+-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ||
defined(__NetBSD__) || defined(__OpenBSD__)
+ #define SCSI_IMPL /* We have a SCSI implementation for
*BSD */
+
+ #include "scsi-bsd.c"