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"

Reply via email to