Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 06 Dec 2011 17:14:05 +0000
From:      Arthur Chance <freebsd@qeng-ho.org>
To:        Devin Teske <devin.teske@fisglobal.com>
Cc:        freebsd-questions@freebsd.org, "'Ronald F. Guilmette'" <rfg@tristatelogic.com>
Subject:   Re: drivin' me nuts: permissions and cdda2wav
Message-ID:  <4EDE4D5D.2010606@qeng-ho.org>
In-Reply-To: <04d201ccb431$c9e46f10$5dad4d30$@fisglobal.com>
References:  <66927.1323170567@tristatelogic.com> <4EDE00CD.6070507@qeng-ho.org> <04d201ccb431$c9e46f10$5dad4d30$@fisglobal.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 12/06/11 16:12, Devin Teske wrote:
>
>
>> -----Original Message-----
>> From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd-
>> questions@freebsd.org] On Behalf Of Arthur Chance
>> Sent: Tuesday, December 06, 2011 3:47 AM
>> To: Ronald F. Guilmette
>> Cc: freebsd-questions@freebsd.org
>> Subject: Re: drivin' me nuts: permissions and cdda2wav
>>
>> On 12/06/11 11:22, Ronald F. Guilmette wrote:
>>> With a pre-recorded CD in the drive, the following works fine for me
>>> when I'm root:
>>>
>>>       cdda2wav -D 0,0,0 -B
>>>
>>> My question is:  What do I need to do in order to make this work also
>>> when executed from a non-root account?
>>>
>>> Here's what I get when I try to do the above from a non-root account:
>>>
>>>     cdda2wav: Permission denied. Cannot open or use SCSI driver.
>>>     cdda2wav: For possible targets try 'cdda2wav -scanbus'. Make sure you are
>> root.
>>>     Probably you did not define your SCSI device.
>>>     Set the CDDA_DEVICE environment variable or use the -D option.
>>>     You can also define the default device in the Makefile.
>>>     For possible transport specifiers try 'cdda2wav dev=help'.
>>>
>>> Effing hell!  I've tried just about everything I can think of off the
>>> top of my head to beat this and nothing works.  I've tried chmod 0660
>>> /dev/pass* (and yes, the account I'm trying these experiments from
>>> _is_ a member of the `operator' group), but that didn't help a bit.
>>>
>>> And before anybody asks, let me say that yes, I _do_ have:
>>>
>>>      atapicam_load="YES"
>>>
>>> in my /boot/loader.conf file.
>>>
>>> So how exactly does one adjust the permissions on one of these
>>> atamicam pseudo-SCSI devices.  Where are they underneath /dev ?
>>> Please excuse my ignorance, but I just don't know.
>>>
>>> <<gnashing of teeth sound>>
>>
>> I've just been through the same experience getting cdparanoia to work for a
> non-
>> root user under REL 8.2p4. Note that I have the ahci module loaded so my cd is
>> /dev/cd0.
>>
>> You need write access to /dev/cd0 plus the corresponding /dev/passN (use
>> camcontrol devlist to find out which) *and* /dev/xpt0.
>>
>>   From my /etc/devfs.conf
>>
>> own     cd0     root:operator
>> perm    cd0     0660
>> link    cd0     cdrom
>> perm    xpt0    0660
>> perm    pass5   0660
>>
>
> An alternative approach would be to create files in /etc/devd
>
> For example, creating the configuration file "/etc/devd/mydevice.conf" with the
> following contents:
>
> notify 100 {
> 	match "system" "DEVFS";
> 	match "subsystem" "CDEV";
> 	match "cdev" "pass[0-9]";
> 	match "type" "CREATE";
> 	action "/bin/chmod 666 /dev/$cdev";
> };
>
> Will cause the system to execute the associated-action whenever /dev/pass[0-9]
> is created in realtime by devd.
>
> A really cute way to log devfs activity is to create /etc/devd/logger.conf with
> these contents:
>
> notify 100 {
> 	action "logger DEVD ACTIVITY LOGGER";
> 	action "logger bus == $bus";
> 	action "logger cdev == $cdev";
> 	action "logger cisproduct == $cisproduct";
> 	action "logger cisvendor == $cisvendor";
> 	action "logger class == $class";
> 	action "logger device == $device";
> 	action "logger devclass == $devclass";
> 	action "logger device-name == $device-name";
> 	action "logger endpoints == $endpoints";
> 	action "logger function == $function";
> 	action "logger interface == $interface";
> 	action "logger intclass == $intclass";
> 	action "logger intprotocol == $intprotocol";
> 	action "logger intsubclass == $intsubclass";
> 	action "logger manufacturer == $manufacturer";
> 	action "logger mode == $mode";
> 	action "logger notify == $notify";
> 	action "logger parent == $parent";
> 	action "logger port == $port";
> 	action "logger product == $product";
> 	action "logger release == $release";
> 	action "logger serial == $serial";
> 	action "logger slot == $slot";
> 	action "logger subvendor == $subvendor";
> 	action "logger subdevice == $subdevice";
> 	action "logger subsystem == $subsystem";
> 	action "logger system == $system";
> 	action "logger type == $type";
> 	action "logger vendor == $vendor";
> };
>
> Once the above file is installed, just bounce the devd process and now whenever
> a device is created or destroyed (for example, when performing "camcontrol
> rescan all" or plugging/un-plugging USB devices), /var/log/messages will show
> you all the criteria that you can match-against for your given device.

Excellent as a general purpose diagnostic for pluggable devices, but for 
a CD drive that's permanently wired to a SATA port and has its SCSI 
address fixed by device hints like mine it's rather overkill.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4EDE4D5D.2010606>