From: Diego Nieto Cid <[email protected]>
../../daemons/getty.c: In function 'main':
../../daemons/getty.c:184:3: warning: ignoring return value of 'asprintf'
declared with attribute 'warn_unused_result' [-Wunused-result]
184 | asprintf (&ttyname, "%s/%s", _PATH_DEV, argv[2]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../daemons/getty.c:186:3: warning: ignoring return value of 'chown'
declared with attribute 'warn_unused_result' [-Wunused-result]
186 | chown (ttyname, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~
../../daemons/getty.c:188:3: warning: ignoring return value of 'revoke'
declared with attribute 'warn_unused_result' [-Wunused-result]
188 | revoke (ttyname);
| ^~~~~~~~~~~~~~~~
../../daemons/getty.c:210:3: warning: ignoring return value of 'asprintf'
declared with attribute 'warn_unused_result' [-Wunused-result]
210 | asprintf (&arg, "TERM=%s", tt ? tt->ty_type : "unknown");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../daemons/getty.c: In function 'print_banner':
../../daemons/getty.c:120:3: warning: ignoring return value of 'write'
declared with attribute 'warn_unused_result' [-Wunused-result]
120 | write (fd, "\r\n", 2);
| ^~~~~~~~~~~~~~~~~~~~~
../../daemons/getty.c:125:7: warning: ignoring return value of 'write'
declared with attribute 'warn_unused_result' [-Wunused-result]
125 | write (fd, s, t - s);
| ^~~~~~~~~~~~~~~~~~~~
../../daemons/getty.c:149:7: warning: ignoring return value of 'write'
declared with attribute 'warn_unused_result' [-Wunused-result]
149 | write (fd, expansion, strlen (expansion));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
=======================================================================
../../daemons/lmail.c: In function 'deliver':
../../daemons/lmail.c:344:3: warning: ignoring return value of 'asprintf'
declared with attribute 'warn_unused_result' [-Wunused-result]
344 | asprintf (&mbox, "%s/%s", params->mail_dir, rcpt);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
=======================================================================
../../daemons/runttys.c: In function 'setup_terminal':
../../daemons/runttys.c:105:7: warning: ignoring return value of 'asprintf'
declared with attribute 'warn_unused_result' [-Wunused-result]
105 | asprintf (&line, "%s %s", tt->ty_getty, tt->ty_name);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../daemons/runttys.c: In function 'shutdown_terminal':
../../daemons/runttys.c:323:3: warning: ignoring return value of 'revoke'
declared with attribute 'warn_unused_result' [-Wunused-result]
323 | revoke (t->name);
| ^~~~~~~~~~~~~~~~
---
daemons/getty.c | 54 ++++++++++++++++++++++++++++++++++++++++-------
daemons/lmail.c | 4 ++--
daemons/runttys.c | 8 ++++---
3 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/daemons/getty.c b/daemons/getty.c
index b5b162d5..a6b394c2 100644
--- a/daemons/getty.c
+++ b/daemons/getty.c
@@ -35,6 +35,7 @@
#include <utmp.h>
#include <sys/ioctl.h>
#include <termios.h>
+#include <assert-backtrace.h>
/* XXX: should include directly from libshouldbeinlibc */
extern char *localhost (void);
@@ -111,18 +112,22 @@ load_banner (void)
static void
print_banner (int fd, char *ttyname)
{
+ ssize_t err;
char *s, *t, *expansion;
struct utsname u;
+ size_t len;
if (uname (&u))
u.sysname[0] = u.release[0] = '\0';
- write (fd, "\r\n", 2);
+ err = write (fd, "\r\n", 2);
+ assert_backtrace (err == 2);
for (s = load_banner (); *s; s++)
{
for (t = s; *t && *t != '\\'; t++) /* nomnomnom */;
- write (fd, s, t - s);
+ err = write (fd, s, t - s);
+ assert_backtrace (err == (t - s));
if (! *t)
return;
@@ -146,7 +151,9 @@ print_banner (int fd, char *ttyname)
default:
expansion = "?";
}
- write (fd, expansion, strlen (expansion));
+ len = strlen (expansion);
+ err = write (fd, expansion, len);
+ assert_backtrace (err == len);
s = t + 1;
}
@@ -155,6 +162,7 @@ print_banner (int fd, char *ttyname)
int
main (int argc, char **argv)
{
+ int err;
char *linespec, *ttyname;
int tty;
struct ttyent *tt;
@@ -174,11 +182,35 @@ main (int argc, char **argv)
linespec = argv[1];
tt = getttynam (argv[2]);
- asprintf (&ttyname, "%s/%s", _PATH_DEV, argv[2]);
+ err = asprintf (&ttyname, "%s/%s", _PATH_DEV, argv[2]);
+ if (err == -1)
+ {
+ syslog (LOG_ERR, "asprintf failed %s: %m", argv[2]);
+ closelog ();
+ exit (1);
+ }
- chown (ttyname, 0, 0);
- chmod (ttyname, 0600);
- revoke (ttyname);
+ err = chown (ttyname, 0, 0);
+ if (err == -1)
+ {
+ syslog (LOG_ERR, "chown failed %s: %m", ttyname);
+ closelog ();
+ exit (1);
+ }
+ err = chmod (ttyname, 0600);
+ if (err == -1)
+ {
+ syslog (LOG_ERR, "chmod failed %s: %m", ttyname);
+ closelog ();
+ exit (1);
+ }
+ err = revoke (ttyname);
+ if (err == -1)
+ {
+ syslog (LOG_ERR, "revoke failed %s; %m", ttyname);
+ closelog ();
+ exit (1);
+ }
sleep (2); /* leave DTR down for a bit */
do
@@ -200,7 +232,13 @@ main (int argc, char **argv)
if (login_tty (tty) == -1)
syslog (LOG_ERR, "cannot set controlling terminal to %s: %m", ttyname);
- asprintf (&arg, "TERM=%s", tt ? tt->ty_type : "unknown");
+ err = asprintf (&arg, "TERM=%s", tt ? tt->ty_type : "unknown");
+ if (err == -1)
+ {
+ syslog (LOG_ERR, "asprintf failed %s: %m", ttyname);
+ closelog ();
+ exit (1);
+ }
if (tt && strcmp (tt->ty_type, "dialup") == 0)
/* Dialup lines time out (which is login's default). */
diff --git a/daemons/lmail.c b/daemons/lmail.c
index ee6b6fdc..513d33f8 100644
--- a/daemons/lmail.c
+++ b/daemons/lmail.c
@@ -341,8 +341,8 @@ deliver (int msg, char *msg_name, char *rcpt, int flags,
struct params *params)
if (! pw)
return ERR ("%s: Unknown user", rcpt);
- asprintf (&mbox, "%s/%s", params->mail_dir, rcpt);
- if (! mbox)
+ int err = asprintf (&mbox, "%s/%s", params->mail_dir, rcpt);
+ if (err == -1)
return SYSERRX (ENOMEM, "%s", rcpt);
do
diff --git a/daemons/runttys.c b/daemons/runttys.c
index 1b4b3601..4e6b1b4f 100644
--- a/daemons/runttys.c
+++ b/daemons/runttys.c
@@ -102,8 +102,8 @@ setup_terminal (struct terminal *t, struct ttyent *tt)
}
char *line;
- asprintf (&line, "%s %s", tt->ty_getty, tt->ty_name);
- if (line == 0)
+ int err = asprintf (&line, "%s %s", tt->ty_getty, tt->ty_name);
+ if (err == -1)
{
error (0, ENOMEM,
"cannot allocate arguments for %s", t->name);
@@ -319,8 +319,10 @@ restart_terminal (pid_t pid)
static void
shutdown_terminal (struct terminal *t)
{
+ int err;
kill (t->pid, SIGHUP);
- revoke (t->name);
+ err = revoke (t->name);
+ assert_backtrace (err != -1);
}
/* Re-read /etc/ttys. If a line has turned off, kill what's there.
--
2.51.0