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"