Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory:Rebuild
xsane
002-close-fds.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 002-close-fds.patch of Package xsane
diff -up xsane-0.995/src/xsane.c.close-fds xsane-0.995/src/xsane.c --- xsane-0.995/src/xsane.c.close-fds 2007-09-28 17:24:56.000000000 +0200 +++ xsane-0.995/src/xsane.c 2008-07-18 16:10:30.000000000 +0200 @@ -48,6 +48,8 @@ #include <sys/wait.h> +#include <stdarg.h> + /* ---------------------------------------------------------------------------------------------------------------------- */ struct option long_options[] = @@ -3673,6 +3675,41 @@ static void xsane_show_gpl(GtkWidget *wi /* ---------------------------------------------------------------------------------------------------------------------- */ +static void xsane_close_fds_for_exec(signed int first_fd_to_leave_open, ...) +{ + int open_max; + signed int i; + + va_list ap; + unsigned char *close_fds; + + open_max = (int) sysconf (_SC_OPEN_MAX); + + close_fds = malloc (open_max); + + memset (close_fds, 1, open_max); + + va_start (ap, first_fd_to_leave_open); + + for (i = first_fd_to_leave_open; i >= 0; i = va_arg (ap, signed int)) { + if (i < open_max) + close_fds[i] = 0; + } + + va_end (ap); + + DBG(DBG_info, "closing unneeded file descriptors\n"); + + for (i = 0; i < open_max; i++) { + if (close_fds[i]) + close (i); + } + + free (close_fds); +} + +/* ---------------------------------------------------------------------------------------------------------------------- */ + static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via netscape remote */ { char *name = (char *) data; @@ -3725,6 +3762,8 @@ static void xsane_show_doc_via_nsr(GtkWi ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); } + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); + DBG(DBG_info, "trying to change user id for new subprocess:\n"); DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); setuid(getuid()); @@ -3767,6 +3806,8 @@ static void xsane_show_doc_via_nsr(GtkWi ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); } + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); + DBG(DBG_info, "trying to change user id for new subprocess:\n"); DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); setuid(getuid()); @@ -3888,6 +3929,8 @@ static void xsane_show_doc(GtkWidget *wi ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); } + xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); + DBG(DBG_info, "trying to change user id for new subprocess:\n"); DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); setuid(getuid());
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor