--- cdrtools-2.01/cdrecord/cdrecord.c.rawio	2004-08-30 17:54:07.048063553 +0200
+++ cdrtools-2.01/cdrecord/cdrecord.c	2004-08-30 18:05:10.373312106 +0200
@@ -58,6 +58,7 @@
 #include "defaults.h"
 #include "movesect.h"
 
+#include <sys/capability.h> 	/* for raw_io capability */
 
 char	cdr_version[] = "2.01a38";
 
@@ -245,6 +246,8 @@
 LOCAL	BOOL	check_wrmode	__PR((cdr_t *dp, int wmode, int tflags));
 LOCAL	void	set_wrmode	__PR((cdr_t *dp, int wmode, int tflags));
 LOCAL	void	linuxcheck	__PR((void));
+LOCAL	int	get_cap		__PR((cap_value_t cap_array));
+LOCAL	int	get_cap		__PR((cap_value_t cap_array));
 
 struct exargs {
 	SCSI	*scgp;
@@ -520,6 +523,11 @@
 #endif
 			comerr("Panic cannot set back effective uid.\n");
 	}
+
+	/* get the rawio capability */
+	if (get_cap(CAP_SYS_RAWIO))
+	    perror("WARNING ! Cannot gain SYS_RAWIO capability ! \n");
+
 	/*
 	 * WARNING: We now are no more able to do any privilleged operation
 	 * unless we have been called by root.
@@ -1051,6 +1059,10 @@
 			if (setreuid(-1, getuid()) < 0)
 				comerr("Panic cannot set back effective uid.\n");
 		}
+		/* get the rawio capability */
+		if (get_cap(CAP_SYS_RAWIO))
+			perror("WARNING ! Cannot gain SYS_RAWIO capability ! \n");
+
 #endif
 	}
 	if ((*dp->cdr_set_speed_dummy)(scgp, dp, &speed) < 0) {
@@ -4826,3 +4838,17 @@
 	}
 #endif
 }
+
+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; 
+}
+
--- cdrtools-2.01/cdrecord/Makefile.rawio	2004-05-26 09:31:00.000000000 +0200
+++ cdrtools-2.01/cdrecord/Makefile	2004-08-30 17:54:07.064059411 +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) -lcap
 XMK_FILE=	Makefile.man
 
 ###########################################################################
