Use stpeprintf() where appropriate

This function allows reducing error checking (since errors are
propagated across chained calls), and also simplifies the calculation of
the start and end of the buffer where the string should be written.

Moreover, the new code is more optimized, since many calls to strlen(3)
have been removed.

Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar
2023-01-30 00:54:07 +01:00
committed by Iker Pedrosa
parent 7e213cfb50
commit 46610792e9
2 changed files with 40 additions and 38 deletions

View File

@@ -35,6 +35,7 @@
#include "sgroupio.h"
#endif
#include "shadowlog.h"
#include "stpeprintf.h"
/*
* exit status values
*/
@@ -543,46 +544,49 @@ static void close_files (void)
*/
static void prepare_failure_reports (void)
{
char *gr, *gr_end;
#ifdef SHADOWGRP
char *sgr, *sgr_end;
#endif
char *pw, *pw_end;
info_group.name = group_name;
#ifdef SHADOWGRP
info_gshadow.name = group_name;
#endif
info_passwd.name = group_name;
info_group.audit_msg = xmalloc (512);
gr = xmalloc (512);
info_group.audit_msg = gr;
gr_end = gr + 512;
#ifdef SHADOWGRP
info_gshadow.audit_msg = xmalloc (512);
sgr = xmalloc (512);
info_gshadow.audit_msg = sgr;
sgr_end = sgr + 512;
#endif
info_passwd.audit_msg = xmalloc (512);
pw = xmalloc (512);
info_passwd.audit_msg = pw;
pw_end = pw + 512;
(void) snprintf (info_group.audit_msg, 512,
"changing %s; ", gr_dbname ());
gr = stpeprintf(gr, gr_end, "changing %s; ", gr_dbname ());
#ifdef SHADOWGRP
(void) snprintf (info_gshadow.audit_msg, 512,
"changing %s; ", sgr_dbname ());
sgr = stpeprintf(sgr, sgr_end, "changing %s; ", sgr_dbname ());
#endif
(void) snprintf (info_passwd.audit_msg, 512,
"changing %s; ", pw_dbname ());
pw = stpeprintf(pw, pw_end, "changing %s; ", pw_dbname ());
info_group.action = info_group.audit_msg
+ strlen (info_group.audit_msg);
info_group.action = gr;
#ifdef SHADOWGRP
info_gshadow.action = info_gshadow.audit_msg
+ strlen (info_gshadow.audit_msg);
info_gshadow.action = sgr;
#endif
info_passwd.action = info_passwd.audit_msg
+ strlen (info_passwd.audit_msg);
info_passwd.action = pw;
(void) snprintf (info_group.action,
512 - strlen (info_group.audit_msg),
gr = stpeprintf(gr, gr_end,
"group %s/%ju", group_name, (uintmax_t) group_id);
#ifdef SHADOWGRP
(void) snprintf (info_gshadow.action,
512 - strlen (info_gshadow.audit_msg),
sgr = stpeprintf(sgr, sgr_end,
"group %s", group_name);
#endif
(void) snprintf (info_passwd.action,
512 - strlen (info_passwd.audit_msg),
pw = stpeprintf(pw, pw_end,
"group %s/%ju", group_name, (uintmax_t) group_id);
if (nflg) {
@@ -615,15 +619,13 @@ static void prepare_failure_reports (void)
if (gflg) {
strncat (info_group.action, ", new gid: ",
511 - strlen (info_group.audit_msg));
(void) snprintf (info_group.action+strlen (info_group.action),
512 - strlen (info_group.audit_msg),
"%ju", (uintmax_t) group_newid);
stpeprintf(info_group.action+strlen (info_group.action),
gr_end, "%ju", (uintmax_t) group_newid);
strncat (info_passwd.action, ", new gid: ",
511 - strlen (info_passwd.audit_msg));
(void) snprintf (info_passwd.action+strlen (info_passwd.action),
512 - strlen (info_passwd.audit_msg),
"%ju", (uintmax_t) group_newid);
stpeprintf(info_passwd.action+strlen (info_passwd.action),
pw_end, "%ju", (uintmax_t) group_newid);
}
info_group.audit_msg[511] = '\0';
#ifdef SHADOWGRP