bin/129963: [newusb] usbconfig(8) fails with misleading error when run as a normal user

Garrett Cooper yanefbsd at gmail.com
Tue Jan 6 11:21:26 PST 2009


On Tue, Jan 6, 2009 at 11:15 AM, M. Warner Losh <imp at bsdimp.com> wrote:
> In message: <7d6fde3d0901061110r79333a07jf4eb134224a94747 at mail.gmail.com>
>            "Garrett Cooper" <yanefbsd at gmail.com> writes:
> : On Tue, Jan 6, 2009 at 10:32 AM, Hans Petter Selasky <hselasky at c2i.net> wrote:
> : > On Saturday 03 January 2009, Volker wrote:
> : >> On 01/03/09 01:35, Hans Petter Selasky wrote:
> : >> > On Wednesday 31 December 2008, vwe at freebsd.org wrote:
> : >> >> Synopsis: [newusb] usbconfig(8) fails with misleading error when run as
> : >> >> a normal user
> : >> >>
> : >> >> Responsible-Changed-From-To: freebsd-bugs->freebsd-usb
> : >> >> Responsible-Changed-By: vwe
> : >> >> Responsible-Changed-When: Wed Dec 31 12:55:52 UTC 2008
> : >> >> Responsible-Changed-Why:
> : >> >> reassign
> : >> >>
> : >> >> http://www.freebsd.org/cgi/query-pr.cgi?pr=129963
> : >> >
> : >> > Hi,
> : >> >
> : >> > "usbconfig" will only show USB devices which the user has access to.
> : >> >
> : >> > What should be the correct display message when no devices are accessible
> : >> > due to innsufficient permissions?
> : >> >
> : >> > --HPS
> : >>
> : >> Hans,
> : >>
> : >> what about "access denied" or "insufficient privileges"?
> : >>
> : >> Someone might have a better idea but everything should be better than
> : >> silently refusing to do anything.
> : >>
> : >> Volker
> : >
> : > Is this Ok:
> : >
> : > http://perforce.freebsd.org/chv.cgi?CH=155731
> : >
> : > --HPS
> :
> : Eh? I still think that strerror or something along those lines would
> : be more helpful.
> :
> : You could also do
> :
> : if (getuid() != 0) {
> :     errx(1, "Cluebat -- you might not be able to read the usb devices
> : if you're not root");
> : }
> :
> : or...
> :
> : struct stat usb_s;
> :
> : int fd = open(..., O_RDONLY /* blah, blah... */);
> :
> : if (fd == -1) {
> :     errx(1, "Does the file -- %s -- exist?", file);
> : }
> :
> : if (fstat(fd, &usb_s) == -1) {
> :     errx(1, "Couldn't stat the file: %s", file);
> : }
> :
> : if (!S_IRUSR(usb_s.st_mode) && !S_IRGRP(usb_s.st_mode) &&
> : !S_IROTH(usb_s.st_mode)) {
> :     errx(1, "File not readable (do you have read permissions?)");
> : }
> :
> : /* Continue on merry way reading devices; maybe use strerror(3) for
> : more intuitive error messages? */
> :
> : Thoughts?
>
> Do you really have to be root to find the devices, if so, that's bad.
> Very bad.  xsane refuses to run as root.  I have:
>
> [localrules=10]
>        add path 'uscanner*' mode 0660
>
> to make it work.  /dev/usb* in old usb allow listing w/o privs...
>
> Warner

    Hence that's why I provided another hacked solution. I hate `can't
run this app unless root' because it doesn't accurately solve the
problem, but it makes the issue more straightforward than `no devices'
:).
    Personally I think using errno and strerror when trying to open /
read devices would be a lot cleaner. Let me see what I can quickly
grok from libusb(3) either tonight or tomorrow that might be an
improvement..
-Garrett


More information about the freebsd-bugs mailing list