From a0220e864f6bcf4355896e58d1ac9b499e19016f Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 13 Dec 2015 08:34:26 +0100 Subject: [PATCH] client: Use fnameat() to construct history file name We truncate the user's home directory name to 1000 characters when constructing the history file name. Use fnameat() to fix that. Signed-off-by: Markus Armbruster --- Make.mk | 5 +++-- src/client/Makefile.in | 9 +++++---- src/client/main.c | 9 +++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Make.mk b/Make.mk index 05547d1c..6ea44d09 100644 --- a/Make.mk +++ b/Make.mk @@ -314,7 +314,7 @@ info.html/%.html: info/%.t $(server): $(filter src/server/% src/lib/commands/% src/lib/player/% src/lib/subs/% src/lib/update/%, $(obj)) $(empth_obj) $(empth_lib) $(libs) $(call quiet-command,$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@,LINK $@) -$(client): $(filter src/client/%, $(obj)) src/lib/global/version.o +$(client): $(filter src/client/%, $(obj)) src/lib/global/version.o src/lib/gen/fnameat.o $(call quiet-command,$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@,LINK $@) $(util): $(libs) @@ -373,8 +373,9 @@ dist-client: $(cli_distgen) $(tarball) $(TARNAME)-client-$(VERSION) \ -C $(srcdir)/src/client \ $(notdir $(filter src/client/%, $(src)) $(cli_distgen)) \ - -C $(srcdir)/include proto.h version.h \ + -C $(srcdir)/include fnameat.h proto.h version.h \ -C $(srcdir)/src/lib/global version.c \ + -C $(srcdir)/src/lib/gen fnameat.c \ -C $(srcdir)/src/lib $(addprefix w32/, $(client/w32)) \ -C $(srcdir)/man empire.6 \ -C $(srcdir)/build-aux install-sh \ diff --git a/src/client/Makefile.in b/src/client/Makefile.in index c5a6c3e3..f794c2fd 100644 --- a/src/client/Makefile.in +++ b/src/client/Makefile.in @@ -28,7 +28,7 @@ # Makefile.in: Makefile template for configure # # Known contributors to this file: -# Markus Armbruster, 2005-2013 +# Markus Armbruster, 2005-2015 # CC = @CC@ @@ -53,8 +53,9 @@ srcdir = @srcdir@ VPATH = @srcdir@ prog = empire$E -obj = expect.$O host.$O ipglob.$O linebuf.$O login.$O main.$O play.$O \ -ringbuf.$O secure.$O servcmd.$O termlib.$O version.$O $(LIBOBJS) +obj = expect.$O fnameat.$O host.$O ipglob.$O linebuf.$O login.$O \ +main.$O play.$O ringbuf.$O secure.$O servcmd.$O termlib.$O version.$O \ +$(LIBOBJS) all: $(prog) @@ -83,7 +84,7 @@ expect.$O: misc.h proto.h host.$O: misc.h linebuf.$O: linebuf.h login.$O: misc.h proto.h -main.$O: misc.h version.h +main.$O: fnameat.h misc.h version.h play.$O: linebuf.h misc.h proto.h ringbuf.h secure.h ringbuf.$O: ringbuf.h secure.$O: ringbuf.h secure.h diff --git a/src/client/main.c b/src/client/main.c index cdffc8ac..aaa54e9d 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -47,6 +47,7 @@ #include #endif #include +#include "fnameat.h" #include "misc.h" #include "version.h" @@ -190,12 +191,8 @@ main(int argc, char **argv) sock = tcp_connect(host, port); - if (use_history_file) { - /* FIXME don't truncate udir */ - history_file = malloc(1024); - strncpy(history_file, udir, 1000); - strcat(history_file, "/.empire.history"); - } + if (use_history_file) + history_file = fnameat(".empire_history", udir); if (!login(sock, uname, country, passwd, send_kill, utf8)) exit(1);