Hi - Another request from fedora fesco. (I don't have anything else on the queue for the next elfutils release.)
commit be5ebebb1f12134b673c5b8cbede62390d077b0d Author: Frank Ch. Eigler <f...@redhat.com> Date: Thu Apr 29 14:34:06 2021 -0400 PR27784 debuginfod: notify interactive clients one time about usage Because debuginfod-client functionality makes a user dependent on the correct operation of remote debuginfod server, it was suggested that new users be notified of this. This patch adds a one-time notification to stderr if it isatty(), commemorated by a new cache notify_p file. (It cannot easily be tested because our test scripts run without pty/tty enclosure.) Signed-off-by: Frank Ch. Eigler <f...@redhat.com> diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 20744497e383..800709416c61 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2021-04-29 Frank Ch. Eigler <f...@redhat.com> + + PR27784 + * debuginfod-client.c (debuginfod_query_server): Notify interactive + users, one time, about impending debuginfod-client usage. + 2021-04-29 Frank Ch. Eigler <f...@redhat.com> PR27783 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index e65aac8b4c1c..d3fbf7caae6d 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -141,6 +141,10 @@ static const time_t cache_clean_default_interval_s = 86400; /* 1 day */ static const char *cache_max_unused_age_filename = "max_unused_age_s"; static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */ +/* The cache_notified_p_filename file within the cache indicates the user has + received a one-time notification of debuginfod client operation on a TTY. */ +static const char *cache_notified_p_filename = "notified_p"; + /* Location of the cache of files downloaded from debuginfods. The default parent directory is $HOME, or '/' if $HOME doesn't exist. */ static const char *cache_default_name = ".debuginfod_client_cache"; @@ -503,6 +507,7 @@ debuginfod_query_server (debuginfod_client *c, char *urls_envvar; char *cache_path = NULL; char *maxage_path = NULL; + char *notified_p_path = NULL; char *interval_path = NULL; char *target_cache_dir = NULL; char *target_cache_path = NULL; @@ -678,7 +683,28 @@ debuginfod_query_server (debuginfod_client *c, /* XXX combine these */ xalloc_str (interval_path, "%s/%s", cache_path, cache_clean_interval_filename); xalloc_str (maxage_path, "%s/%s", cache_path, cache_max_unused_age_filename); + xalloc_str (notified_p_path, "%s/%s", cache_path, cache_notified_p_filename); + + + /* If on a TTY, notify the user if this is the first time + debuginfod-client is activated. */ + if (isatty (STDERR_FILENO) && + access (notified_p_path, R_OK)) + { + int fd = open (notified_p_path, O_CREAT | O_RDWR, 0400); + if (fd >= 0) + close (fd); + if (vfd >= 0) + dprintf (vfd, "recorded first notification %s\n", notified_p_path); + + fprintf (stderr, + "\nNOTICE: This system is configured to auto-download debuginfo from:\n%s\n\n", + urls_envvar); + fflush (stderr); + sleep (3); + } + if (vfd >= 0) dprintf (vfd, "checking cache dir %s\n", cache_path); @@ -1112,6 +1138,7 @@ debuginfod_query_server (debuginfod_client *c, } free (cache_path); + free (notified_p_path); free (maxage_path); free (interval_path); free (target_cache_dir); diff --git a/tests/ChangeLog b/tests/ChangeLog index bc2016f40203..1f1b2dd8695b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-04-29 Frank Ch. Eigler <f...@redhat.com> + + PR27784 + * run-debuginfod-find.sh: Don't test tty first-use notification. + 2021-04-29 Frank Ch. Eigler <f...@redhat.com> PR27783 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 9a217121b7e2..cc364c861ca4 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -384,6 +384,12 @@ wait_ready $PORT1 'groomed_total{decision="stale"}' 4 rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +# check for first-use notice; don't bother run this one under valgrind, to collect stderr +# ... but need a pty/tty to trigger the message, so just comment this out for now +# ${abs_top_builddir}/debuginfod/debuginfod-find executable 0000111122223333 2>errfile && false || true +# tempfiles errfile +# grep NOTICE errfile + # this is one of the buildids from the groom-deleted rpms testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true # but this one was not deleted so should be still around