From c0632b88f1b5f2d810c758366489b408ecd9e74d Mon Sep 17 00:00:00 2001 From: root Date: Sun, 8 Jan 2006 08:49:20 +0000 Subject: [PATCH] *** empty log message *** --- src/main.C | 22 ++++++++++++++-------- src/rxvtlib.h.in | 1 + src/rxvtperl.h | 2 +- src/rxvtperl.xs | 6 +++--- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main.C b/src/main.C index 90ea32c4..dfaab157 100644 --- a/src/main.C +++ b/src/main.C @@ -53,6 +53,16 @@ static uid_t saved_euid; static gid_t saved_egid; #endif +bool +rxvt_tainted () +{ +#if (defined(HAVE_SETEUID) || defined(HAVE_SETREUID)) && !defined(__CYGWIN32__) + return getuid () != saved_euid || getgid () != saved_egid; +#else + return false; +#endif +} + vector rxvt_term::termlist; static char curlocale[128], savelocale[128]; @@ -504,24 +514,20 @@ rxvt_term::init (int argc, const char *const *argv) || (rs[Rs_perl_ext_2] && *rs[Rs_perl_ext_2]) || (rs[Rs_perl_eval] && *rs[Rs_perl_eval])) { - bool tainted = false; - #if (defined(HAVE_SETEUID) || defined(HAVE_SETREUID)) && !defined(__CYGWIN32__) // ignore some perl-related arguments if some bozo installed us set[ug]id - if (getuid () != saved_euid || getgid () != saved_egid) + if (rxvt_tainted ()) { - tainted = true; - if ((rs[Rs_perl_lib] && *rs[Rs_perl_lib]) || (rs[Rs_perl_eval] && *rs[Rs_perl_eval])) { rxvt_warn ("running with elevated privileges: ignoring perl-lib and perl-eval.\n"); - rs[Rs_perl_lib] = 0; - rs[Rs_perl_eval] = "our $tainted = 1"; + rs[Rs_perl_lib] = 0; + rs[Rs_perl_eval] = 0; } } #endif - rxvt_perl.init (tainted); + rxvt_perl.init (); HOOK_INVOKE ((this, HOOK_INIT, DT_END)); } #endif diff --git a/src/rxvtlib.h.in b/src/rxvtlib.h.in index 567674ac..54a9f26a 100644 --- a/src/rxvtlib.h.in +++ b/src/rxvtlib.h.in @@ -267,6 +267,7 @@ struct rxvt_vars : TermWin_t { }; void rxvt_init (); +bool rxvt_tainted (); #endif /* _RXVTLIB_H_ */ diff --git a/src/rxvtperl.h b/src/rxvtperl.h index 747cf103..bf69305d 100644 --- a/src/rxvtperl.h +++ b/src/rxvtperl.h @@ -41,7 +41,7 @@ struct rxvt_perl_interp bool should_invoke[HOOK_NUM]; - void init (bool tainted); + void init (); bool invoke (rxvt_term *term, hook_type htype, ...); void line_update (rxvt_term *term); }; diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs index 530a67f7..471a9e1d 100644 --- a/src/rxvtperl.xs +++ b/src/rxvtperl.xs @@ -408,20 +408,20 @@ rxvt_perl_interp::~rxvt_perl_interp () } void -rxvt_perl_interp::init (bool tainted) +rxvt_perl_interp::init () { if (!perl) { char *argv[] = { "", - "-edo '" LIBDIR "/urxvt.pm' or ($@ and die $@) or exit 1", "-T", + "-edo '" LIBDIR "/urxvt.pm' or ($@ and die $@) or exit 1", }; perl = perl_alloc (); perl_construct (perl); - if (perl_parse (perl, xs_init, 2 + !!tainted, argv, (char **)NULL) + if (perl_parse (perl, xs_init, 3, argv, (char **)NULL) || perl_run (perl)) { rxvt_warn ("unable to initialize perl-interpreter, continuing without.\n"); -- 2.34.1