----- Original Message -----
----- Original Message -----
> make_build_data uses the output of the id command in order to generate the
> string in build_data.c indicating who built the program. Unfortunately, the
> previous parsing code looked for the presence of a ")" in order to
> determine
> where the user field ended. If the user is not found in the user database,
> the output looks more like:
> uid=59784003 gid=60243 groups=60243
For the changelog, what does "help -B" show in that case? Or does the
build fail?
Hello Sargun,
OK, after looking into this, I see that it causes a segmentation fault on build.
And although I do appreciate your efforts, and welcome your interest, this patch
is a bit of overkill. This simple patch fixes it:
--- a/configure.c
+++ b/configure.c
@@ -1277,8 +1277,7 @@ make_build_data(char *target)
p = fgets(inbuf1, 79, fp1);
p = fgets(inbuf2, 79, fp2);
- p = strstr(inbuf2, ")");
- p++;
+ p = strstr(inbuf2, " ");
*p = '\0';
p = fgets(inbuf3, 79, fp3);
Thanks for the report.
Dave
>
> Instead, now it just calls the glibc helpers and formats the line based
> upon those instead of shelling out and trying to parse the output of id.
> If it cannot retrieve the username, it just sets the UID.
Ok, that's fine.
I also seem to recall that coverity scans (or perhaps distro-specific
compiler flags?) complain about not assigning/looking-at the return
value fgets(). The old code assigned it to "p" (and ignored it), so
the fgets() should probably still be assigned to something -- maybe by
re-introducing "char *p" with an "__attribute__ ((__unused__))".
Dave
>
> Signed-off-by: Sargun Dhillon <sargun(a)sargun.me>
> ---
> configure.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/configure.c b/configure.c
> index 10bc6e1..8ddec66 100644
> --- a/configure.c
> +++ b/configure.c
> @@ -56,6 +56,7 @@
> #include <sys/stat.h>
> #include <unistd.h>
> #include <ctype.h>
> +#include <pwd.h>
>
> struct supported_gdb_version;
> void build_configure(struct supported_gdb_version *);
> @@ -1252,7 +1253,7 @@ count_chars(char *s, char c)
> void
> make_build_data(char *target)
> {
> - char *p;
> + struct passwd *passwd;
> char hostname[MAXSTRLEN];
> char progname[MAXSTRLEN];
> char datebuf[MAXSTRLEN];
> @@ -1274,14 +1275,15 @@ make_build_data(char *target)
> if (gethostname(hostname, MAXSTRLEN) != 0)
> hostname[0] = '\0';
>
> - p = fgets(datebuf, 79, fp_date);
> + fgets(datebuf, 79, fp_date);
>
> - p = fgets(idbuf, 79, fp_id);
> - p = strstr(idbuf, ")");
> - p++;
> - *p = '\0';
> + passwd = getpwuid(getuid());
> + if (passwd)
> + sprintf(idbuf, "uid=%d(%s)", passwd->pw_uid, passwd->pw_name);
> + else
> + sprintf(idbuf, "uid=%d", getuid());
>
> - p = fgets(gccversionbuf, 79, fp_gcc);
> + fgets(gccversionbuf, 79, fp_gcc);
>
> lower_case(target_data.program, progname);
>
> --
> 2.9.3
>
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/crash-utility
>