diff --git a/ChangeLog b/ChangeLog index 8233e5fa38..a134451557 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-07-18 Ulrich Drepper + * nscd/Makefile (nscd-cflags): Add _FORTIFY_SOURCE. + + * nscd/connections.c: Fix a few wur warnings. + * nscd/grpcache.c (cache_addgr): Use correct maximum for group ID length. Patch by Ivan Gyurdiev . diff --git a/nscd/Makefile b/nscd/Makefile index 2ebd90b989..4b6f2967a5 100644 --- a/nscd/Makefile +++ b/nscd/Makefile @@ -84,7 +84,7 @@ CFLAGS-nscd_gethst_r.c = -fexceptions CFLAGS-nscd_getai.c = -fexceptions CFLAGS-nscd_initgroups.c = -fexceptions -nscd-cflags = -DIS_IN_nscd=1 +nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2 ifeq (yesyes,$(have-fpie)$(build-shared)) nscd-cflags += -fpie endif diff --git a/nscd/connections.c b/nscd/connections.c index 9dc852a1df..347862e521 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -393,20 +393,23 @@ cannot create read-only descriptor for \"%s\"; no mmap"), if (offset % ps != 0) { towrite = MIN (remaining, ps - (offset % ps)); - pwrite (fd, tmpbuf, towrite, offset); + if (pwrite (fd, tmpbuf, towrite, offset) != towrite) + goto write_fail; offset += towrite; remaining -= towrite; } while (remaining > ps) { - pwrite (fd, tmpbuf, ps, offset); + if (pwrite (fd, tmpbuf, ps, offset) == -1) + goto write_fail; offset += ps; remaining -= ps; } - if (remaining > 0) - pwrite (fd, tmpbuf, remaining, offset); + if (remaining > 0 + && pwrite (fd, tmpbuf, remaining, offset) != remaining) + goto write_fail; /* Create the header of the file. */ struct database_pers_head head = @@ -426,6 +429,7 @@ cannot create read-only descriptor for \"%s\"; no mmap"), || (mem = mmap (NULL, total, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) { + write_fail: unlink (dbs[cnt].db_filename); dbg_log (_("cannot write to database file %s: %s"), dbs[cnt].db_filename, strerror (errno)); @@ -965,7 +969,9 @@ cannot change to old working directory: %s; disabling paranoia mode"), setuid (server_uid); setgid (server_gid); } - chdir ("/"); + if (chdir ("/") != 0) + dbg_log (_("cannot change current working directory to \"/\": %s"), + strerror (errno)); paranoia = 0; }