This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch+7.5] auto-load: User conveniences suggested by Doug Evans


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  <jan.kratochvil@redhat.com>

	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 *);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]