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

Pedro Alves
2012-09-10T11:29:41Z

On 09/09/2012 10:01 AM, Jan Kratochvil wrote:
> On Mon, 27 Aug 2012 20:11:47 +0200, Jan Kratochvil wrote:
>> On Mon, 27 Aug 2012 20:02:27 +0200, Pedro Alves wrote:
>>> For more information about this security protection see the
>>> "Auto-loading safe path" section in the GDB manual
>>> (For example, run from the shell: info \"(gdb)Auto-loading safe path\).
>>
>> When we are at it then:
>>
>> For example, run from the shell: info "(gdb)Auto-loading safe path"
>
>> As otherwise it is pain to copy-paste it. Or in fact it does not work when
>> naively copy-pasted.

Sure. It was just a typo - (mis)copied from the original patch.

> Without the parentheses we have looped back to the original form in the patch.

Well, we have not. The original form of the patch didn't point at the
manual in English; it only showed an info command.
I really don't care for the parentheses. Fine with me with or without.

>
> Suggesting therefore the following output form which I tried to compile from
> all the suggestions:
>
> Reading symbols from /home/jkratoch/redhat/gdb-clean/gdb/gdb...done.
> warning: File "/home/jkratoch/redhat/gdb-clean/gdb/gdb-gdb.gdb" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
> To enable execution of this file add
> add-auto-load-safe-path /home/jkratoch/redhat/gdb-clean/gdb/gdb-gdb.gdb
> line to your configuration file "/home/jkratoch/.gdbinit".
> To completely disable this security protection add
> set auto-load safe-path /
> line to your configuration file "/home/jkratoch/.gdbinit".
> For more information about this security protection see
> the "Auto-loading safe path" section in the GDB manual or run from the shell:
> info "(gdb)Auto-loading safe path"
> warning: File "/home/jkratoch/redhat/gdb-clean/gdb/gdb-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".

I honestly don't understand why "for example, run..." would be worse
than "or run...", while "or" to my ears implies that the information that
you get in the pointed section of the manual might be different (alternative)
from what you get from that info command. But that's maybe just language
barrier, or just me. I'm happy enough with this version. Thanks.

> I will check it the case of no further comments.
>
>
> Thanks,
> Jan
>
>
> gdb/
> 2012-09-09 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 b314ad6..603183c 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,30 @@ 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\n\
> +\tadd-auto-load-safe-path %s\n\
> +line to your configuration file \"%s\".\n\
> +To completely disable this security protection add\n\
> +\tset auto-load safe-path /\n\
> +line to your configuration file \"%s\".\n\
> +For more information about this security protection see\n\
> +the \"Auto-loading safe path\" section in the GDB manual or run from the shell:\n\
> +\tinfo \"(gdb)Auto-loading safe path\"\n"),
> + filename_real, homeinit, homeinit);
> + advice_printed = 1;
> + }
> +
> do_cleanups (back_to);
> return 0;
> }
> @@ -1164,6 +1190,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 (NULL,
> @@ -1207,30 +1234,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 files and directories that are safe for auto-loading."), _("\
> +Show the list of files and directories that are safe for auto-loading."), _("\
> 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 *);
>

--
Pedro Alves