[prev in list] [next in list] [prev in thread] [next in thread]
List: gnuplot-info-beta
Subject: Re: linux svga terminals
From: Ethan Merritt <merritt () u ! washington ! edu>
Date: 2008-02-01 23:59:54
Message-ID: 200802011559.54589.merritt () u ! washington ! edu
[Download RAW message or body]
On Friday 01 February 2008 15:41, Don Taber wrote:
> The linux and vgagl terminals for the Linux console use
> svgalib. Older versions of svgalib required that binaries
> linked to it be installed suid to access the video hardware.
> Gnuplot will not make the linux terminals available if
> getuid returns nonzero.
>
> However, recent versions of svgalib (1.9.x) employ a kernel
> module (svgalib_helper.ko) and binaries linking it do not
> need to be installed suid. Typical installations will
> create a udev rule like:
>
> KERNEL=="svga*", NAME="%k", MODE="0660", GROUP="video"
>
> So to give nonroot users console video access, you just
> create a "video" group and add them to it.
That's interesting. I wouldn't have thought group access
was sufficient.
Be that as it may, the bigger question is "Does it work?"
In 8 years of periodic tries, with a serious effort at the
time of the 4.0 and 4.2 releases, I have never once managed
to build a working version of svgalib support into gnuplot.
It either does nothing useful, locks up the machine, or
scribbles random garbage on the screen.
I would be delighted if you are willing to send me privately
a working linux executable, so I can at least see how it is
_supposed_ to work.
What's your secret recipe?
Ethan
> I have added an additional configuration step when deciding
> to compile in the linux terminal. If --with-linux-vga is
> requested and the library successfully found, I then
> check for the availability of the kernel module. If that
> test is successfull, I define an additional symbol to be
> inserted in config.h, SVGALIB_HELPER. When is defined
> code related to checking euid and toggling root
> privileges is not compiled.
>
> I am no kind of autoconf guru, but I think I did it right.
> I patched configure.in and config.hin. It works fine
> for me with a 2.6 kernel and svgalib 1.9.25, and I don't
> think it will break anything. But someone with
> genuine (TM) autoconf knowledge should check it.
>
> Patch against recent CVS follows.
>
> Don Taber
> -----------------------------------------------------------
>
>
> diff -ru gnuplot.orig/config.hin gnuplot/config.hin
> --- gnuplot.orig/config.hin 2008-02-01 12:42:11.000000000 -0800
> +++ gnuplot/config.hin 2008-02-01 12:39:23.000000000 -0800
> @@ -395,6 +395,9 @@
> /* Define if this is a Linux system with SuperVGA library. */
> #undef LINUXVGA
>
> +/* Define if svgalib uses svgalib_helper kernel module. */
> +#undef SVGALIB_HELPER
> +
> /* Define if you want to use the MGR Window system. */
> #undef MGR
>
> diff -ru gnuplot.orig/configure.in gnuplot/configure.in
> --- gnuplot.orig/configure.in 2008-02-01 12:44:55.000000000 -0800
> +++ gnuplot/configure.in 2008-02-01 12:39:18.000000000 -0800
> @@ -228,6 +228,11 @@
> LINUXSUID='chown root $(bindir)/gnuplot; chmod u+s $(bindir)/gnuplot'
> TERMLIBS="-lvga $TERMLIBS"],
> with_linux_vga=no)
> + if modprobe -n svgalib_helper ; then
> + with_svgalib_helper=yes
> + AC_DEFINE(SVGALIB_HELPER,1,
> + [ Define if svgalib uses svgalib_helper kernel module. ])
> + fi
> fi
>
> dnl TODO: simplify, get rid of GGI_SUPPORT
> @@ -1143,7 +1148,9 @@
> else
> AC_MSG_RESULT([ vgagl terminal ((s)vga console): no (requires vgagl)])
> fi
> - AC_MSG_RESULT([ SECURITY NOTICE: SVGAlib requires that gnuplot is installed \
> suid root!]) + if test "$with_svgalib_helper" != yes; then
> + AC_MSG_RESULT([ SECURITY NOTICE: SVGAlib without kernel helper module \
> requires that gnuplot is installed suid root!]) + fi
> else
> AC_MSG_RESULT([ linux terminal (vga console): no (use --with-linux-vga to \
> enable,]) AC_MSG_RESULT([ requires SVGAlib)])
> diff -ru gnuplot.orig/src/plot.c gnuplot/src/plot.c
> --- gnuplot.orig/src/plot.c 2008-02-01 12:42:28.000000000 -0800
> +++ gnuplot/src/plot.c 2008-02-01 12:40:11.000000000 -0800
> @@ -285,8 +285,10 @@
>
> #ifdef LINUXVGA
> LINUX_setup(); /* setup VGA before dropping privilege DBT 4/5/99 */
> +#ifndef SVGALIB_HELPER
> drop_privilege();
> #endif
> +#endif
> /* make sure that we really have revoked root access, this might happen if
> gnuplot is compiled without vga support but is installed suid by mistake */
> #ifdef __linux__
> diff -ru gnuplot.orig/term/linux.trm gnuplot/term/linux.trm
> --- gnuplot.orig/term/linux.trm 2008-02-01 12:42:42.000000000 -0800
> +++ gnuplot/term/linux.trm 2008-02-01 12:39:57.000000000 -0800
> @@ -122,8 +122,10 @@
>
> LINUX_graphics_allowed = FALSE;
>
> +#ifndef SVGALIB_HELPER
> if (geteuid() != 0)
> return; /* if we aren't root, we cannot init graphics */
> +#endif
>
> if ((pipe = popen("/usr/bin/tty", "r")) != NULL) {
> line[0] = 0;
> @@ -152,9 +154,13 @@
> }
> }
> if (LINUX_graphics_allowed) {
> +#ifndef SVGALIB_HELPER
> take_privilege();
> +#endif
> vga_init();
> +#ifndef SVGALIB_HELPER
> drop_privilege();
> +#endif
> } else {
> /* err - shouldn't we give up root uid whatever happens ?
> * or perhaps vga_init() does it ?
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> gnuplot-beta mailing list
> gnuplot-beta@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gnuplot-beta
>
--
Ethan A Merritt Courier Deliveries: 1959 NE Pacific
Dept of Biochemistry
Health Sciences Building
University of Washington - Seattle WA 98195-7742
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
gnuplot-beta mailing list
gnuplot-beta@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnuplot-beta
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic