From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2383 invoked by alias); 21 Aug 2012 14:44:35 -0000 Received: (qmail 2226 invoked by uid 22791); 21 Aug 2012 14:44:31 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_BJ X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 21 Aug 2012 14:44:12 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q7LEiB57020337 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 Aug 2012 10:44:11 -0400 Received: from host2.jankratochvil.net (ovpn-116-37.ams2.redhat.com [10.36.116.37]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q7LEi5CM018376 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Tue, 21 Aug 2012 10:44:08 -0400 Date: Tue, 21 Aug 2012 14:44:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Cc: Doug Evans Subject: [patch+7.5] auto-load: User conveniences suggested by Doug Evans Message-ID: <20120821144355.GA28426@host2.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00569.txt.bz2 Hi, according to user feedback after gdb-7.5 with the auto-load feature considered by users as pain I have implemented various backward compatible extensions suggested by Doug. * Make new full explanatory message for forbidden auto-load file attempt. Display it only once per session. Particularly suggest how to set it up in ~/.gdbinit. * "set auto-load scripts-directory" should specifically mention *-gdb.gdb and *-gdb.py to prevent confusion with the unrelated section .debug_gdb_scripts. * "set auto-load safe-path" may contain also files, not just directories. Doug said the files should not be allowed there, I did not understand why, but as it is now released in gdb-7.5 it is too late for any change anyway. So at least document it in "help set auto-load safe-path"; GDB Manual already documents it. No regressions on {x86_64,x86_64-m32,i686}-fedora18-linux-gnu. Thanks, Jan gdb/ 2012-08-21 Jan Kratochvil Implement auto-load user conveniences suggested by Doug Evans. * auto-load.c: Include top.h. (file_is_auto_load_safe): New variable advice_printed. Print advice. (_initialize_auto_load): New variable scripts_directory_help. Mention GDBPY_AUTO_FILE_NAME and GDB_AUTO_FILE_NAME for set auto-load scripts-directory. Document in online help one can use also files for set auto-load safe-path. * python/py-auto-load.c: (GDBPY_AUTO_FILE_NAME): Move it from here ... * python/python.h (GDBPY_AUTO_FILE_NAME): ... to here. diff --git a/gdb/auto-load.c b/gdb/auto-load.c index 03a7539..cf33d1d 100644 --- a/gdb/auto-load.c +++ b/gdb/auto-load.c @@ -37,6 +37,7 @@ #include "completer.h" #include "observer.h" #include "fnmatch.h" +#include "top.h" /* The suffix of per-objfile scripts to auto-load as non-Python command files. E.g. When the program loads libfoo.so, look for libfoo-gdb.gdb. */ @@ -441,6 +442,7 @@ file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...) { char *filename_real = NULL; struct cleanup *back_to; + static int advice_printed = 0; if (debug_auto_load) { @@ -470,6 +472,27 @@ file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...) "`auto-load safe-path' set to \"%s\"."), filename_real, auto_load_safe_path); + if (!advice_printed) + { + const char *homedir = getenv ("HOME"); + char *homeinit; + + if (homedir == NULL) + homedir = "$HOME"; + homeinit = xstrprintf ("%s/%s", homedir, gdbinit); + make_cleanup (xfree, homeinit); + + printf_filtered (_("\ +To enable execution of this file add \"add-auto-load-safe-path %s\" \ +line to \"%s\".\n\ +To completely disable this security protection \ +add \"set auto-load safe-path /\" line to \"%s\".\n\ +For more information about this security protection run from the shell: \ +info \"(gdb)Auto-loading safe path\"\n"), + filename_real, homeinit, homeinit); + advice_printed = 1; + } + do_cleanups (back_to); return 0; } @@ -1128,6 +1151,7 @@ void _initialize_auto_load (void) { struct cmd_list_element *cmd; + char *scripts_directory_help; auto_load_pspace_data = register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup); @@ -1170,30 +1194,45 @@ Usage: info auto-load local-gdbinit"), auto_load_info_cmdlist_get ()); auto_load_dir = xstrdup (AUTO_LOAD_DIR); + scripts_directory_help = xstrprintf (_("\ +Automatically loaded %s%s%sGDB scripts\n\ +(named OBJFILE%s) are located in one of the directories listed by this\n\ +option.\n\ +This option is ignored for the kinds of scripts \ +having 'set auto-load ... off'.\n\ +Directories listed here need to be present also \ +in the 'set auto-load safe-path'\n\ +option."), +#ifdef HAVE_PYTHON + _("Python scripts (named OBJFILE"), + GDBPY_AUTO_FILE_NAME, _(") and "), +#else + "", "", "", +#endif + GDB_AUTO_FILE_NAME); add_setshow_optional_filename_cmd ("scripts-directory", class_support, &auto_load_dir, _("\ Set the list of directories from which to load auto-loaded scripts."), _("\ -Show the list of directories from which to load auto-loaded scripts."), _("\ -Automatically loaded Python scripts and GDB scripts are located in one of the\n\ -directories listed by this option. This option is ignored for the kinds of\n\ -scripts having 'set auto-load ... off'. Directories listed here need to be\n\ -present also in the 'set auto-load safe-path' option."), +Show the list of directories from which to load auto-loaded scripts."), + scripts_directory_help, set_auto_load_dir, show_auto_load_dir, auto_load_set_cmdlist_get (), auto_load_show_cmdlist_get ()); + xfree (scripts_directory_help); auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH); auto_load_safe_path_vec_update (); add_setshow_optional_filename_cmd ("safe-path", class_support, &auto_load_safe_path, _("\ -Set the list of directories from which it is safe to auto-load files."), _("\ -Show the list of directories from which it is safe to auto-load files."), _("\ +Set the list of paths from which it is safe to auto-load files."), _("\ +Show the list of paths from which it is safe to auto-load files."), _("\ Various files loaded automatically for the 'set auto-load ...' options must\n\ be located in one of the directories listed by this option. Warning will be\n\ printed and file will not be used otherwise.\n\ +You can mix both directory and filename entries.\n\ Setting this parameter to an empty list resets it to its default value.\n\ Setting this parameter to '/' (without the quotes) allows any file\n\ -for the 'set auto-load ...' options. Each directory can be also shell\n\ +for the 'set auto-load ...' options. Each path entry can be also shell\n\ wildcard pattern; '*' does not match directory separator.\n\ This option is ignored for the kinds of files having 'set auto-load ... off'.\n\ This options has security implications for untrusted inferiors."), diff --git a/gdb/python/py-auto-load.c b/gdb/python/py-auto-load.c index 8512129..a018f5f 100644 --- a/gdb/python/py-auto-load.c +++ b/gdb/python/py-auto-load.c @@ -31,10 +31,6 @@ #include "python-internal.h" -/* The suffix of per-objfile scripts to auto-load. - E.g. When the program loads libfoo.so, look for libfoo-gdb.py. */ -#define GDBPY_AUTO_FILE_NAME "-gdb.py" - /* The section to look for Python auto-loaded scripts (in file formats that support sections). Each entry in this section is a byte of value 1, and then the nul-terminated diff --git a/gdb/python/python.h b/gdb/python/python.h index dd7066f..0d07271 100644 --- a/gdb/python/python.h +++ b/gdb/python/python.h @@ -24,6 +24,10 @@ struct breakpoint_object; +/* The suffix of per-objfile scripts to auto-load. + E.g. When the program loads libfoo.so, look for libfoo-gdb.py. */ +#define GDBPY_AUTO_FILE_NAME "-gdb.py" + extern void finish_python_initialization (void); void eval_python_from_control_command (struct command_line *);