summaryrefslogtreecommitdiffstats
path: root/login-utils
diff options
context:
space:
mode:
authorSami Kerola2012-04-04 19:58:34 +0200
committerSami Kerola2012-04-04 19:58:34 +0200
commit439cdf1e2475d2f6622c151419f90c7da6de1434 (patch)
treec7e0fac0bef7831d7603fd95e8ff30cc805843da /login-utils
parentmisc-utils: verify writing to streams was successful (diff)
downloadkernel-qcow2-util-linux-439cdf1e2475d2f6622c151419f90c7da6de1434.tar.gz
kernel-qcow2-util-linux-439cdf1e2475d2f6622c151419f90c7da6de1434.tar.xz
kernel-qcow2-util-linux-439cdf1e2475d2f6622c151419f90c7da6de1434.zip
login-utils: verify writing to streams was successful
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'login-utils')
-rw-r--r--login-utils/chfn.c2
-rw-r--r--login-utils/chsh.c2
-rw-r--r--login-utils/islocal.c2
-rw-r--r--login-utils/last.c2
-rw-r--r--login-utils/logindefs.c2
-rw-r--r--login-utils/newgrp.c2
-rw-r--r--login-utils/setpwnam.c6
-rw-r--r--login-utils/sulogin.c2
-rw-r--r--login-utils/vipw.c6
9 files changed, 20 insertions, 6 deletions
diff --git a/login-utils/chfn.c b/login-utils/chfn.c
index 2d9a092cb..02014c7ce 100644
--- a/login-utils/chfn.c
+++ b/login-utils/chfn.c
@@ -33,6 +33,7 @@
#include "c.h"
#include "env.h"
+#include "closestream.h"
#include "islocal.h"
#include "nls.h"
#include "pamfail.h"
@@ -96,6 +97,7 @@ int main(int argc, char **argv)
setlocale(LC_ALL, ""); /* both for messages and for iscntrl() below */
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
/*
* "oldf" contains the users original finger information.
diff --git a/login-utils/chsh.c b/login-utils/chsh.c
index 4f0615c08..7d944e19f 100644
--- a/login-utils/chsh.c
+++ b/login-utils/chsh.c
@@ -34,6 +34,7 @@
#include "c.h"
#include "env.h"
+#include "closestream.h"
#include "islocal.h"
#include "nls.h"
#include "pamfail.h"
@@ -82,6 +83,7 @@ int main(int argc, char **argv)
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
uid = getuid();
memset(&info, 0, sizeof(info));
diff --git a/login-utils/islocal.c b/login-utils/islocal.c
index 91dda0d29..e23ca44e0 100644
--- a/login-utils/islocal.c
+++ b/login-utils/islocal.c
@@ -22,6 +22,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include "closestream.h"
#include "islocal.h"
#include "nls.h"
#include "pathnames.h"
@@ -94,6 +95,7 @@ int is_local(const char *user)
#ifdef TEST_PROGRAM
int main(int argc, char *argv[])
{
+ atexit(close_stdout);
if (argc <= 2) {
fprintf(stderr, "usage: %s <passwdfile> <username> [...]\n",
argv[0]);
diff --git a/login-utils/last.c b/login-utils/last.c
index 417314ee5..34558bb9d 100644
--- a/login-utils/last.c
+++ b/login-utils/last.c
@@ -56,6 +56,7 @@
#include <netinet/in.h>
#include <arpa/inet.h>
+#include "closestream.h"
#include "pathnames.h"
#include "nls.h"
#include "xalloc.h"
@@ -121,6 +122,7 @@ main(int argc, char **argv) {
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
while ((ch = getopt(argc, argv, "0123456789yli:f:h:t:")) != -1)
switch((char)ch) {
diff --git a/login-utils/logindefs.c b/login-utils/logindefs.c
index 7b801cf70..ff7266ea1 100644
--- a/login-utils/logindefs.c
+++ b/login-utils/logindefs.c
@@ -29,6 +29,7 @@
#include <sys/syslog.h>
#include "c.h"
+#include "closestream.h"
#include "logindefs.h"
#include "nls.h"
#include "pathnames.h"
@@ -252,6 +253,7 @@ int logindefs_setenv(const char *name, const char *conf, const char *dflt)
int main(int argc, char *argv[])
{
char *name, *type;
+ atexit(close_stdout);
if (argc <= 1)
errx(EXIT_FAILURE, "usage: %s <filename> "
diff --git a/login-utils/newgrp.c b/login-utils/newgrp.c
index 707c5893a..4f6de12a1 100644
--- a/login-utils/newgrp.c
+++ b/login-utils/newgrp.c
@@ -29,6 +29,7 @@
#endif
#include "c.h"
+#include "closestream.h"
#include "nls.h"
#include "pathnames.h"
@@ -132,6 +133,7 @@ int main(int argc, char *argv[])
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
while ((ch = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1)
switch (ch) {
diff --git a/login-utils/setpwnam.c b/login-utils/setpwnam.c
index 7459fe298..ba15bc131 100644
--- a/login-utils/setpwnam.c
+++ b/login-utils/setpwnam.c
@@ -59,7 +59,7 @@
#include <unistd.h>
#include "c.h"
-#include "fileutils.h"
+#include "closestream.h"
#include "setpwnam.h"
static void pw_init(void);
@@ -143,9 +143,7 @@ int setpwnam(struct passwd *pwd)
/* xfmkstemp is too restrictive by default for passwd file */
if (fchmod(fileno(fp), 0644) < 0)
goto fail;
- rc = fclose(fp);
- fp = NULL;
- if (rc < 0)
+ if (close_stream(fp) != 0)
goto fail;
fclose(pwf); /* I don't think I want to know if this failed */
diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c
index 616442ee4..ee725b588 100644
--- a/login-utils/sulogin.c
+++ b/login-utils/sulogin.c
@@ -47,6 +47,7 @@
#endif
#include "c.h"
+#include "closestream.h"
#include "nls.h"
#include "pathnames.h"
#include "strutils.h"
@@ -476,6 +477,7 @@ int main(int argc, char **argv)
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
/*
* See if we have a timeout flag.
diff --git a/login-utils/vipw.c b/login-utils/vipw.c
index 29e485cc4..2d16999d2 100644
--- a/login-utils/vipw.c
+++ b/login-utils/vipw.c
@@ -72,7 +72,7 @@
#include <unistd.h>
#include "c.h"
-#include "fileutils.h"
+#include "closestream.h"
#include "nls.h"
#include "setpwnam.h"
#include "strutils.h"
@@ -283,7 +283,8 @@ static void edit_file(int is_shadow)
ch_ret = fchmod(fileno(tmp_fd), 0400);
if (ch_ret < 0)
err(EXIT_FAILURE, "%s: %s", _("cannot chmod file"), orig_file);
- fclose(tmp_fd);
+ if (close_stream(tmp_fd) != 0)
+ err(EXIT_FAILURE, _("write error"));
pw_write();
close(passwd_file);
ulckpwdf();
@@ -294,6 +295,7 @@ int main(int argc, char *argv[])
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
+ atexit(close_stdout);
if (!strcmp(program_invocation_short_name, "vigr")) {
program = VIGR;