From efbbcade43ff2dca2b7a271dcbd186be08ac1913 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Sat, 4 Feb 2023 22:41:18 +0100 Subject: [PATCH] Use safer allocation macros Use of these macros, apart from the benefits mentioned in the commit that adds the macros, has some other good side effects: - Consistency in getting the size of the object from sizeof(type), instead of a mix of sizeof(type) sometimes and sizeof(*p) other times. - More readable code: no casts, and no sizeof(), so also shorter lines that we don't need to cut. - Consistency in using array allocation calls for allocations of arrays of objects, even when the object size is 1. Cc: Valentin V. Bartenev Signed-off-by: Alejandro Colomar --- lib/commonio.c | 18 ++++++++++-------- lib/getdef.c | 7 +++++-- lib/groupio.c | 7 ++++--- lib/groupmem.c | 5 +++-- lib/gshadow.c | 15 +++++++++------ lib/nss.c | 4 +++- lib/pwmem.c | 4 +++- lib/run_part.c | 4 +++- lib/sgetgrent.c | 6 ++++-- lib/sgroupio.c | 7 ++++--- lib/shadowmem.c | 4 +++- lib/sssd.c | 4 +++- lib/subordinateio.c | 10 ++++++---- libmisc/addgrps.c | 6 ++++-- libmisc/agetpass.c | 5 +++-- libmisc/copydir.c | 12 ++++++------ libmisc/env.c | 7 +++---- libmisc/find_new_gid.c | 3 ++- libmisc/find_new_uid.c | 3 ++- libmisc/idmapping.c | 6 ++++-- libmisc/list.c | 10 ++++++---- libmisc/loginprompt.c | 4 +++- libmisc/mail.c | 3 ++- libmisc/obscure.c | 4 +++- libmisc/pam_pass_non_interactive.c | 4 +++- libmisc/prefix_flag.c | 16 +++++++++------- libmisc/setupenv.c | 4 +++- libmisc/utmp.c | 10 ++++++---- libmisc/xgetXXbyYY.c | 6 ++++-- src/gpasswd.c | 4 +++- src/groupmems.c | 10 ++++++---- src/groupmod.c | 10 ++++++---- src/groups.c | 5 ++++- src/id.c | 5 ++++- src/login.c | 6 ++++-- src/newgrp.c | 4 +++- src/newusers.c | 8 +++++--- src/passwd.c | 4 +++- src/su.c | 6 ++++-- src/useradd.c | 20 +++++++++++--------- src/userdel.c | 8 +++++--- src/usermod.c | 16 +++++++++------- src/vipw.c | 6 ++++-- tests/libsubid/04_nss/libsubid_zzz.c | 4 ++-- 44 files changed, 196 insertions(+), 118 deletions(-) diff --git a/lib/commonio.c b/lib/commonio.c index 4113b5ce..40e62298 100644 --- a/lib/commonio.c +++ b/lib/commonio.c @@ -21,6 +21,8 @@ #include #include #include + +#include "alloc.h" #include "nscd.h" #include "sssd.h" #ifdef WITH_TCB @@ -240,11 +242,11 @@ int commonio_lock_nowait (struct commonio_db *db, bool log) } file_len = strlen(db->filename) + 11;/* %lu max size */ lock_file_len = strlen(db->filename) + 6; /* sizeof ".lock" */ - file = (char*)malloc(file_len); + file = MALLOCARRAY(file_len, char); if (file == NULL) { goto cleanup_ENOMEM; } - lock = (char*)malloc(lock_file_len); + lock = MALLOCARRAY(lock_file_len, char); if (lock == NULL) { goto cleanup_ENOMEM; } @@ -513,7 +515,7 @@ int commonio_open (struct commonio_db *db, int mode) fcntl (fileno (db->fp), F_SETFD, FD_CLOEXEC); buflen = BUFLEN; - buf = (char *) malloc (buflen); + buf = MALLOCARRAY (buflen, char); if (NULL == buf) { goto cleanup_ENOMEM; } @@ -524,7 +526,7 @@ int commonio_open (struct commonio_db *db, int mode) size_t len; buflen += BUFLEN; - cp = (char *) realloc (buf, buflen); + cp = REALLOCARRAY (buf, buflen, char); if (NULL == cp) { goto cleanup_buf; } @@ -558,7 +560,7 @@ int commonio_open (struct commonio_db *db, int mode) } } - p = (struct commonio_entry *) malloc (sizeof *p); + p = MALLOC (struct commonio_entry); if (NULL == p) { goto cleanup_entry; } @@ -635,7 +637,7 @@ commonio_sort (struct commonio_db *db, int (*cmp) (const void *, const void *)) return 0; } - entries = mallocarray (n, sizeof (struct commonio_entry *)); + entries = MALLOCARRAY (n, struct commonio_entry *); if (entries == NULL) { return -1; } @@ -954,7 +956,7 @@ int commonio_update (struct commonio_db *db, const void *eptr) return 1; } /* not found, new entry */ - p = (struct commonio_entry *) malloc (sizeof *p); + p = MALLOC (struct commonio_entry); if (NULL == p) { db->ops->free (nentry); errno = ENOMEM; @@ -991,7 +993,7 @@ int commonio_append (struct commonio_db *db, const void *eptr) return 0; } /* new entry */ - p = (struct commonio_entry *) malloc (sizeof *p); + p = MALLOC (struct commonio_entry); if (NULL == p) { db->ops->free (nentry); errno = ENOMEM; diff --git a/lib/getdef.c b/lib/getdef.c index 355215c4..a2a7e484 100644 --- a/lib/getdef.c +++ b/lib/getdef.c @@ -21,8 +21,11 @@ #ifdef USE_ECONF #include #endif + +#include "alloc.h" #include "getdef.h" #include "shadowlog_internal.h" + /* * A configuration item definition. */ @@ -445,14 +448,14 @@ void setdef_config_file (const char* file) char* cp; len = strlen(file) + strlen(sysconfdir) + 2; - cp = malloc(len); + cp = MALLOCARRAY(len, char); if (cp == NULL) exit (13); snprintf(cp, len, "%s/%s", file, sysconfdir); sysconfdir = cp; #ifdef VENDORDIR len = strlen(file) + strlen(vendordir) + 2; - cp = malloc(len); + cp = MALLOCARRAY(len, char); if (cp == NULL) exit (13); snprintf(cp, len, "%s/%s", file, vendordir); diff --git a/lib/groupio.c b/lib/groupio.c index f29ab643..d2116af2 100644 --- a/lib/groupio.c +++ b/lib/groupio.c @@ -15,6 +15,7 @@ #include #include +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "commonio.h" @@ -311,7 +312,7 @@ static /*@null@*/struct commonio_entry *merge_group_entries ( /* Concatenate the 2 lines */ new_line_len = strlen (gr1->line) + strlen (gr2->line) +1; - new_line = (char *)malloc (new_line_len + 1); + new_line = MALLOCARRAY (new_line_len + 1, char); if (NULL == new_line) { return NULL; } @@ -332,7 +333,7 @@ static /*@null@*/struct commonio_entry *merge_group_entries ( members++; } } - new_members = (char **)calloc ( (members+1), sizeof(char*) ); + new_members = CALLOC (members + 1, char *); if (NULL == new_members) { free (new_line); return NULL; @@ -393,7 +394,7 @@ static int split_groups (unsigned int max_members) continue; } - new = (struct commonio_entry *) malloc (sizeof *new); + new = MALLOC (struct commonio_entry); if (NULL == new) { return 0; } diff --git a/lib/groupmem.c b/lib/groupmem.c index e5f5e9cc..e0088fe3 100644 --- a/lib/groupmem.c +++ b/lib/groupmem.c @@ -12,6 +12,7 @@ #ident "$Id$" +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "groupio.h" @@ -21,7 +22,7 @@ struct group *gr; int i; - gr = (struct group *) malloc (sizeof *gr); + gr = MALLOC (struct group); if (NULL == gr) { return NULL; } @@ -46,7 +47,7 @@ for (i = 0; grent->gr_mem[i]; i++); /*@-mustfreeonly@*/ - gr->gr_mem = (char **) mallocarray (i + 1, sizeof (char *)); + gr->gr_mem = MALLOCARRAY (i + 1, char *); /*@=mustfreeonly@*/ if (NULL == gr->gr_mem) { gr_free(gr); diff --git a/lib/gshadow.c b/lib/gshadow.c index 2d0db28b..c17af67f 100644 --- a/lib/gshadow.c +++ b/lib/gshadow.c @@ -16,8 +16,11 @@ #include #include + +#include "alloc.h" #include "prototypes.h" #include "defines.h" + static /*@null@*/FILE *shadow; static /*@null@*//*@only@*/char **members = NULL; static size_t nmembers = 0; @@ -63,7 +66,7 @@ static /*@null@*/char **build_list (char *s, char **list[], size_t * nlist) while (s != NULL && *s != '\0') { size = (nelem + 1) * sizeof (ptr); - ptr = realloc (*list, size); + ptr = REALLOCARRAY (*list, size, char *); if (NULL != ptr) { ptr[nelem] = s; nelem++; @@ -77,7 +80,7 @@ static /*@null@*/char **build_list (char *s, char **list[], size_t * nlist) } } size = (nelem + 1) * sizeof (ptr); - ptr = realloc (*list, size); + ptr = REALLOCARRAY (*list, size, char *); if (NULL != ptr) { ptr[nelem] = NULL; *list = ptr; @@ -117,7 +120,7 @@ void endsgent (void) size_t len = strlen (string) + 1; if (len > sgrbuflen) { - char *buf = (char *) reallocarray (sgrbuf, len, sizeof (char)); + char *buf = REALLOCARRAY (sgrbuf, len, char); if (NULL == buf) { return NULL; } @@ -195,7 +198,7 @@ void endsgent (void) char *cp; if (0 == buflen) { - buf = (char *) malloc (BUFSIZ); + buf = MALLOCARRAY (BUFSIZ, char); if (NULL == buf) { return NULL; } @@ -216,7 +219,7 @@ void endsgent (void) && (feof (fp) == 0)) { size_t len; - cp = (char *) realloc (buf, buflen*2); + cp = REALLOCARRAY (buf, buflen * 2, char); if (NULL == cp) { return NULL; } @@ -437,7 +440,7 @@ int putsgent (const struct sgrp *sgrp, FILE * fp) size += strlen (sgrp->sg_mem[i]) + 1; } - buf = malloc (size); + buf = MALLOCARRAY (size, char); if (NULL == buf) { return -1; } diff --git a/lib/nss.c b/lib/nss.c index 89de2ac9..3864a87c 100644 --- a/lib/nss.c +++ b/lib/nss.c @@ -6,6 +6,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "../libsubid/subid.h" #include "shadowlog_internal.h" @@ -100,7 +102,7 @@ void nss_init(const char *nsswitch_path) { subid_nss = NULL; goto done; } - subid_nss = malloc(sizeof(*subid_nss)); + subid_nss = MALLOC(struct subid_nss_ops); if (!subid_nss) { dlclose(h); goto done; diff --git a/lib/pwmem.c b/lib/pwmem.c index a25e1928..4e966a42 100644 --- a/lib/pwmem.c +++ b/lib/pwmem.c @@ -13,6 +13,8 @@ #ident "$Id$" #include + +#include "alloc.h" #include "defines.h" #include "prototypes.h" #include "pwio.h" @@ -21,7 +23,7 @@ { struct passwd *pw; - pw = (struct passwd *) calloc (1, sizeof *pw); + pw = CALLOC (1, struct passwd); if (NULL == pw) { return NULL; } diff --git a/lib/run_part.c b/lib/run_part.c index bce11d37..aa7a67e2 100644 --- a/lib/run_part.c +++ b/lib/run_part.c @@ -8,6 +8,8 @@ #include #include #include + +#include "alloc.h" #include "run_part.h" #include "shadowlog_internal.h" @@ -57,7 +59,7 @@ int run_parts (const char *directory, const char *name, const char *action) struct stat sb; path_length=strlen(directory) + strlen(namelist[n]->d_name) + 2; - char *s = (char*)malloc(path_length); + char *s = MALLOCARRAY(path_length, char); if (!s) { printf ("could not allocate memory\n"); for (; n #include #include + +#include "alloc.h" #include "defines.h" #include "prototypes.h" @@ -44,7 +46,7 @@ static char **list (char *s) member name, or terminating NULL). */ if (i >= size) { size = i + 100; /* at least: i + 1 */ - members = reallocarrayf (members, size, sizeof(char *)); + members = REALLOCARRAYF(members, size, char *); if (!members) return NULL; } @@ -77,7 +79,7 @@ struct group *sgetgrent (const char *buf) allocate a larger block */ free (grpbuf); size = strlen (buf) + 1000; /* at least: strlen(buf) + 1 */ - grpbuf = malloc (size); + grpbuf = MALLOCARRAY (size, char); if (grpbuf == NULL) { size = 0; return NULL; diff --git a/lib/sgroupio.c b/lib/sgroupio.c index 4b4c020d..1255c53e 100644 --- a/lib/sgroupio.c +++ b/lib/sgroupio.c @@ -14,6 +14,7 @@ #ident "$Id$" +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "commonio.h" @@ -25,7 +26,7 @@ struct sgrp *sg; int i; - sg = (struct sgrp *) calloc (1, sizeof *sg); + sg = CALLOC (1, struct sgrp); if (NULL == sg) { return NULL; } @@ -49,7 +50,7 @@ for (i = 0; NULL != sgent->sg_adm[i]; i++); /*@-mustfreeonly@*/ - sg->sg_adm = (char **) mallocarray (i + 1, sizeof (char *)); + sg->sg_adm = MALLOCARRAY (i + 1, char *); /*@=mustfreeonly@*/ if (NULL == sg->sg_adm) { free (sg->sg_passwd); @@ -74,7 +75,7 @@ for (i = 0; NULL != sgent->sg_mem[i]; i++); /*@-mustfreeonly@*/ - sg->sg_mem = (char **) mallocarray (i + 1, sizeof (char *)); + sg->sg_mem = MALLOCARRAY (i + 1, char *); /*@=mustfreeonly@*/ if (NULL == sg->sg_mem) { for (i = 0; NULL != sg->sg_adm[i]; i++) { diff --git a/lib/shadowmem.c b/lib/shadowmem.c index 9e46d0ce..93bcb12d 100644 --- a/lib/shadowmem.c +++ b/lib/shadowmem.c @@ -16,13 +16,15 @@ #include "defines.h" #include #include + +#include "alloc.h" #include "shadowio.h" /*@null@*/ /*@only@*/struct spwd *__spw_dup (const struct spwd *spent) { struct spwd *sp; - sp = (struct spwd *) calloc (1, sizeof *sp); + sp = CALLOC (1, struct spwd); if (NULL == sp) { return NULL; } diff --git a/lib/sssd.c b/lib/sssd.c index 3727c8fd..2da920a8 100644 --- a/lib/sssd.c +++ b/lib/sssd.c @@ -6,6 +6,8 @@ #include #include #include + +#include "alloc.h" #include "exitcodes.h" #include "defines.h" #include "prototypes.h" @@ -24,7 +26,7 @@ int sssd_flush_cache (int dbflags) const char *spawnedEnv[] = {NULL}; int i = 0; - sss_cache_args = malloc(4); + sss_cache_args = MALLOCARRAY(4, char); if (sss_cache_args == NULL) { return -1; } diff --git a/lib/subordinateio.c b/lib/subordinateio.c index 7bb7c3b2..7fddf62f 100644 --- a/lib/subordinateio.c +++ b/lib/subordinateio.c @@ -17,6 +17,8 @@ #include #include +#include "alloc.h" + #define ID_SIZE 31 /* @@ -32,7 +34,7 @@ static /*@null@*/ /*@only@*/void *subordinate_dup (const void *ent) const struct subordinate_range *rangeent = ent; struct subordinate_range *range; - range = (struct subordinate_range *) malloc (sizeof *range); + range = MALLOC (struct subordinate_range); if (NULL == range) { return NULL; } @@ -314,12 +316,12 @@ static bool have_range(struct commonio_db *db, static bool append_range(struct subid_range **ranges, const struct subordinate_range *new, int n) { if (!*ranges) { - *ranges = malloc(sizeof(struct subid_range)); + *ranges = MALLOC(struct subid_range); if (!*ranges) return false; } else { struct subid_range *alloced; - alloced = reallocarray(*ranges, n + 1, sizeof(struct subid_range)); + alloced = REALLOCARRAY(*ranges, n + 1, struct subid_range); if (!alloced) return false; *ranges = alloced; @@ -911,7 +913,7 @@ static int append_uids(uid_t **uids, const char *owner, int n) return n; } - ret = reallocarray(*uids, n + 1, sizeof(uid_t)); + ret = REALLOCARRAY(*uids, n + 1, uid_t); if (!ret) { free(*uids); return -1; diff --git a/libmisc/addgrps.c b/libmisc/addgrps.c index 688e3e51..5440819b 100644 --- a/libmisc/addgrps.c +++ b/libmisc/addgrps.c @@ -17,6 +17,8 @@ #include #include #include + +#include "alloc.h" #include "shadowlog.h" #ident "$Id$" @@ -46,7 +48,7 @@ int add_groups (const char *list) i = 16; for (;;) { - grouplist = (gid_t *) mallocarray (i, sizeof (GETGROUPS_T)); + grouplist = MALLOCARRAY (i, GETGROUPS_T); if (NULL == grouplist) { return -1; } @@ -88,7 +90,7 @@ int add_groups (const char *list) fputs (_("Warning: too many groups\n"), shadow_logfd); break; } - grouplist = (gid_t *) reallocarrayf (grouplist, (size_t)ngroups + 1, sizeof (GETGROUPS_T)); + grouplist = REALLOCARRAYF(grouplist, (size_t) ngroups + 1, GETGROUPS_T); if (grouplist == NULL) { return -1; } diff --git a/libmisc/agetpass.c b/libmisc/agetpass.c index 8b45b15d..7895b3c5 100644 --- a/libmisc/agetpass.c +++ b/libmisc/agetpass.c @@ -15,6 +15,7 @@ #ident "$Id$" +#include "alloc.h" #include "prototypes.h" @@ -46,7 +47,7 @@ * through malloc(3). This makes the function thread-safe, and * also reduces the visibility of the buffer. * - * - agetpass() doesn't call realloc(3) internally. Some + * - agetpass() doesn't reallocate internally. Some * implementations of getpass(3), such as glibc, do that, as a * consequence of calling getline(3). That's a bug in glibc, * which allows leaking prefixes of passwords in freed memory. @@ -101,7 +102,7 @@ agetpass(const char *prompt) * Let's add one more byte, and if the password uses it, it * means the introduced password was longer than PASS_MAX. */ - pass = malloc(PASS_MAX + 2); + pass = MALLOCARRAY(PASS_MAX + 2, char); if (pass == NULL) return NULL; diff --git a/libmisc/copydir.c b/libmisc/copydir.c index 23fbd711..b6b9ee23 100644 --- a/libmisc/copydir.c +++ b/libmisc/copydir.c @@ -228,7 +228,7 @@ static /*@exposed@*/ /*@null@*/struct link_name *check_link (const char *name, c return NULL; } - lp = (struct link_name *) xmalloc (sizeof *lp); + lp = XMALLOC (struct link_name); src_len = strlen (src_orig); dst_len = strlen (dst_orig); name_len = strlen (name); @@ -236,7 +236,7 @@ static /*@exposed@*/ /*@null@*/struct link_name *check_link (const char *name, c lp->ln_ino = sb->st_ino; lp->ln_count = sb->st_nlink; len = name_len - src_len + dst_len + 1; - lp->ln_name = (char *) xmalloc (len); + lp->ln_name = XMALLOCARRAY (len, char); (void) snprintf (lp->ln_name, len, "%s%s", dst_orig, name + src_len); lp->ln_next = links; links = lp; @@ -326,8 +326,8 @@ static int copy_tree_impl (const struct path_info *src, const struct path_info * src_len += strlen (src->full_path); dst_len += strlen (dst->full_path); - src_name = (char *) malloc (src_len); - dst_name = (char *) malloc (dst_len); + src_name = MALLOCARRAY (src_len, char); + dst_name = MALLOCARRAY (dst_len, char); if ((NULL == src_name) || (NULL == dst_name)) { err = -1; @@ -561,7 +561,7 @@ static /*@null@*/char *readlink_malloc (const char *filename) while (true) { ssize_t nchars; - char *buffer = (char *) malloc (size); + char *buffer = MALLOCARRAY (size, char); if (NULL == buffer) { return NULL; } @@ -626,7 +626,7 @@ static int copy_symlink (const struct path_info *src, const struct path_info *ds */ if (strncmp (oldlink, src_orig, strlen (src_orig)) == 0) { size_t len = strlen (dst_orig) + strlen (oldlink) - strlen (src_orig) + 1; - char *dummy = (char *) xmalloc (len); + char *dummy = XMALLOCARRAY (len, char); (void) snprintf (dummy, len, "%s%s", dst_orig, oldlink + strlen (src_orig)); diff --git a/libmisc/env.c b/libmisc/env.c index 5b4eec13..75c7c8c6 100644 --- a/libmisc/env.c +++ b/libmisc/env.c @@ -60,7 +60,7 @@ static const char *const noslash[] = { */ void initenv (void) { - newenvp = (char **) xmallocarray (NEWENVP_STEP, sizeof (char *)); + newenvp = XMALLOCARRAY (NEWENVP_STEP, char *); *newenvp = NULL; } @@ -74,7 +74,7 @@ void addenv (const char *string, /*@null@*/const char *value) if (NULL != value) { size_t len = strlen (string) + strlen (value) + 2; int wlen; - newstring = xmalloc (len); + newstring = XMALLOCARRAY (len, char); wlen = snprintf (newstring, len, "%s=%s", string, value); assert (wlen == (int) len -1); } else { @@ -135,8 +135,7 @@ void addenv (const char *string, /*@null@*/const char *value) * happily go on, else print a message. */ - __newenvp = (char **) reallocarray (newenvp, newenvc + NEWENVP_STEP, - sizeof (char *)); + __newenvp = REALLOCARRAY(newenvp, newenvc + NEWENVP_STEP, char *); if (NULL != __newenvp) { /* diff --git a/libmisc/find_new_gid.c b/libmisc/find_new_gid.c index 808cd7ce..cfd56098 100644 --- a/libmisc/find_new_gid.c +++ b/libmisc/find_new_gid.c @@ -12,6 +12,7 @@ #include #include +#include "alloc.h" #include "prototypes.h" #include "groupio.h" #include "getdef.h" @@ -231,7 +232,7 @@ int find_new_gid (bool sys_group, */ /* Create an array to hold all of the discovered GIDs */ - used_gids = calloc (gid_max + 1, sizeof (bool)); + used_gids = CALLOC (gid_max + 1, bool); if (NULL == used_gids) { fprintf (log_get_logfd(), _("%s: failed to allocate memory: %s\n"), diff --git a/libmisc/find_new_uid.c b/libmisc/find_new_uid.c index 1be646f2..e107a6fb 100644 --- a/libmisc/find_new_uid.c +++ b/libmisc/find_new_uid.c @@ -12,6 +12,7 @@ #include #include +#include "alloc.h" #include "prototypes.h" #include "pwio.h" #include "getdef.h" @@ -231,7 +232,7 @@ int find_new_uid(bool sys_user, */ /* Create an array to hold all of the discovered UIDs */ - used_uids = mallocarray (uid_max + 1, sizeof (bool)); + used_uids = MALLOCARRAY (uid_max + 1, bool); if (NULL == used_uids) { fprintf (log_get_logfd(), _("%s: failed to allocate memory: %s\n"), diff --git a/libmisc/idmapping.c b/libmisc/idmapping.c index 1c6e719f..f6b4a8e7 100644 --- a/libmisc/idmapping.c +++ b/libmisc/idmapping.c @@ -11,6 +11,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "stpeprintf.h" #include "idmapping.h" @@ -44,7 +46,7 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv) return NULL; } - mappings = calloc(ranges, sizeof(*mappings)); + mappings = CALLOC(ranges, struct map_range); if (!mappings) { fprintf(log_get_logfd(), _( "%s: Memory allocation failure\n"), log_get_progname()); @@ -189,7 +191,7 @@ void write_mapping(int proc_dir_fd, int ranges, const struct map_range *mappings #endif bufsize = ranges * ((ULONG_DIGITS + 1) * 3); - pos = buf = xmalloc(bufsize); + pos = buf = XMALLOCARRAY(bufsize, char); end = buf + bufsize; /* Build the mapping command */ diff --git a/libmisc/list.c b/libmisc/list.c index 2b8f155a..ed76e8ff 100644 --- a/libmisc/list.c +++ b/libmisc/list.c @@ -11,6 +11,8 @@ #ident "$Id$" #include + +#include "alloc.h" #include "prototypes.h" #include "defines.h" /* @@ -44,7 +46,7 @@ * old entries, and the new entries as well. */ - tmp = (char **) xmallocarray (i + 2, sizeof member); + tmp = XMALLOCARRAY (i + 2, char *); /* * Copy the original list to the new list, then append the @@ -98,7 +100,7 @@ * old entries. */ - tmp = (char **) xmallocarray (j + 1, sizeof member); + tmp = XMALLOCARRAY (j + 1, char *); /* * Copy the original list except the deleted members to the @@ -133,7 +135,7 @@ for (i = 0; NULL != list[i]; i++); - tmp = (char **) xmallocarray (i + 1, sizeof (char *)); + tmp = XMALLOCARRAY (i + 1, char *); i = 0; while (NULL != *list) { @@ -210,7 +212,7 @@ bool is_on_list (char *const *list, const char *member) * Allocate the array we're going to store the pointers into. */ - array = (char **) xmallocarray (i, sizeof (char *)); + array = XMALLOCARRAY (i, char *); /* * Empty list is special - 0 members, not 1 empty member. --marekm diff --git a/libmisc/loginprompt.c b/libmisc/loginprompt.c index f39faf00..db1b7313 100644 --- a/libmisc/loginprompt.c +++ b/libmisc/loginprompt.c @@ -15,6 +15,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "getdef.h" @@ -130,7 +132,7 @@ void login_prompt (const char *prompt, char *name, int namesize) envp[envc] = nvar; } else { size_t len = strlen (nvar) + 32; - envp[envc] = xmalloc (len); + envp[envc] = XMALLOCARRAY (len, char); (void) snprintf (envp[envc], len, "L%d=%s", count++, nvar); } diff --git a/libmisc/mail.c b/libmisc/mail.c index 647f879c..c8af2ee3 100644 --- a/libmisc/mail.c +++ b/libmisc/mail.c @@ -15,6 +15,7 @@ #include #include +#include "alloc.h" #include "getdef.h" #ident "$Id$" @@ -38,7 +39,7 @@ void mailcheck (void) size_t len = strlen (mailbox) + 5; int wlen; - newmail = xmalloc (len); + newmail = XMALLOCARRAY (len, char); wlen = snprintf (newmail, len, "%s/new", mailbox); assert (wlen == (int) len - 1); diff --git a/libmisc/obscure.c b/libmisc/obscure.c index e7b185ec..90bfeb9b 100644 --- a/libmisc/obscure.c +++ b/libmisc/obscure.c @@ -21,6 +21,8 @@ */ #include #include + +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "getdef.h" @@ -158,7 +160,7 @@ static /*@observer@*//*@null@*/const char *password_check ( newmono = str_lower (xstrdup (new)); oldmono = str_lower (xstrdup (old)); - wrapped = xmalloc (strlen (oldmono) * 2 + 1); + wrapped = XMALLOCARRAY (strlen (oldmono) * 2 + 1, char); strcpy (wrapped, oldmono); strcat (wrapped, oldmono); diff --git a/libmisc/pam_pass_non_interactive.c b/libmisc/pam_pass_non_interactive.c index 46c41ef3..cd4d78e0 100644 --- a/libmisc/pam_pass_non_interactive.c +++ b/libmisc/pam_pass_non_interactive.c @@ -14,6 +14,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "shadowlog.h" @@ -43,7 +45,7 @@ static int ni_conv (int num_msg, return PAM_CONV_ERR; } - responses = (struct pam_response *) calloc (num_msg, sizeof (*responses)); + responses = CALLOC (num_msg, struct pam_response); if (NULL == responses) { return PAM_CONV_ERR; } diff --git a/libmisc/prefix_flag.c b/libmisc/prefix_flag.c index 243d00d4..56243f2e 100644 --- a/libmisc/prefix_flag.c +++ b/libmisc/prefix_flag.c @@ -11,7 +11,9 @@ #include #include + #include "defines.h" +#include "alloc.h" #include "prototypes.h" /*@-exitarg@*/ #include "exitcodes.h" @@ -95,18 +97,18 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char ** } size_t len; len = strlen(prefix) + strlen(PASSWD_FILE) + 2; - passwd_db_file = xmalloc(len); + passwd_db_file = XMALLOCARRAY(len, char); snprintf(passwd_db_file, len, "%s/%s", prefix, PASSWD_FILE); pw_setdbname(passwd_db_file); len = strlen(prefix) + strlen(GROUP_FILE) + 2; - group_db_file = xmalloc(len); + group_db_file = XMALLOCARRAY(len, char); snprintf(group_db_file, len, "%s/%s", prefix, GROUP_FILE); gr_setdbname(group_db_file); #ifdef SHADOWGRP len = strlen(prefix) + strlen(SGROUP_FILE) + 2; - sgroup_db_file = xmalloc(len); + sgroup_db_file = XMALLOCARRAY(len, char); snprintf(sgroup_db_file, len, "%s/%s", prefix, SGROUP_FILE); sgr_setdbname(sgroup_db_file); #endif @@ -115,18 +117,18 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char ** #endif len = strlen(prefix) + strlen(SHADOW_FILE) + 2; - spw_db_file = xmalloc(len); + spw_db_file = XMALLOCARRAY(len, char); snprintf(spw_db_file, len, "%s/%s", prefix, SHADOW_FILE); spw_setdbname(spw_db_file); #ifdef ENABLE_SUBIDS len = strlen(prefix) + strlen("/etc/subuid") + 2; - suid_db_file = xmalloc(len); + suid_db_file = XMALLOCARRAY(len, char); snprintf(suid_db_file, len, "%s/%s", prefix, "/etc/subuid"); sub_uid_setdbname(suid_db_file); len = strlen(prefix) + strlen("/etc/subgid") + 2; - sgid_db_file = xmalloc(len); + sgid_db_file = XMALLOCARRAY(len, char); snprintf(sgid_db_file, len, "%s/%s", prefix, "/etc/subgid"); sub_gid_setdbname(sgid_db_file); #endif @@ -135,7 +137,7 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char ** setdef_config_file(prefix); #else len = strlen(prefix) + strlen("/etc/login.defs") + 2; - def_conf_file = xmalloc(len); + def_conf_file = XMALLOCARRAY(len, char); snprintf(def_conf_file, len, "%s/%s", prefix, "/etc/login.defs"); setdef_config_file(def_conf_file); #endif diff --git a/libmisc/setupenv.c b/libmisc/setupenv.c index 5d7aefa2..f644dad3 100644 --- a/libmisc/setupenv.c +++ b/libmisc/setupenv.c @@ -20,6 +20,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include @@ -34,7 +36,7 @@ addenv_path (const char *varname, const char *dirname, const char *filename) size_t len = strlen (dirname) + strlen (filename) + 2; int wlen; - buf = xmalloc (len); + buf = XMALLOCARRAY (len, char); wlen = snprintf (buf, len, "%s/%s", dirname, filename); assert (wlen == (int) len - 1); diff --git a/libmisc/utmp.c b/libmisc/utmp.c index 1ae9fd54..ff6acee0 100644 --- a/libmisc/utmp.c +++ b/libmisc/utmp.c @@ -20,6 +20,8 @@ #include #include +#include "alloc.h" + #ident "$Id$" @@ -93,7 +95,7 @@ static bool is_my_tty (const char *tty) } if (NULL != ut) { - ret = (struct utmp *) xmalloc (sizeof (*ret)); + ret = XMALLOC (struct utmp); memcpy (ret, ut, sizeof (*ret)); } @@ -158,12 +160,12 @@ static void updwtmp (const char *filename, const struct utmp *ut) if ( (NULL != host) && ('\0' != host[0])) { - hostname = (char *) xmalloc (strlen (host) + 1); + hostname = XMALLOCARRAY (strlen (host) + 1, char); strcpy (hostname, host); #ifdef HAVE_STRUCT_UTMP_UT_HOST } else if ( (NULL != ut) && ('\0' != ut->ut_host[0])) { - hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1); + hostname = XMALLOCARRAY (sizeof (ut->ut_host) + 1, char); strncpy (hostname, ut->ut_host, sizeof (ut->ut_host)); hostname[sizeof (ut->ut_host)] = '\0'; #endif /* HAVE_STRUCT_UTMP_UT_HOST */ @@ -174,7 +176,7 @@ static void updwtmp (const char *filename, const struct utmp *ut) } - utent = (struct utmp *) xcalloc (1, sizeof (*utent)); + utent = XCALLOC (1, struct utmp); #ifdef HAVE_STRUCT_UTMP_UT_TYPE diff --git a/libmisc/xgetXXbyYY.c b/libmisc/xgetXXbyYY.c index 132e2cbc..e1bf70f6 100644 --- a/libmisc/xgetXXbyYY.c +++ b/libmisc/xgetXXbyYY.c @@ -30,6 +30,8 @@ #include #include #include + +#include "alloc.h" #include "prototypes.h" #include "shadowlog.h" @@ -50,7 +52,7 @@ /* we have to start with something */ size_t length = 0x100; - result = malloc(sizeof(LOOKUP_TYPE)); + result = MALLOC(LOOKUP_TYPE); if (NULL == result) { fprintf (log_get_logfd(), _("%s: out of memory\n"), "x" STRINGIZE(FUNCTION_NAME)); @@ -60,7 +62,7 @@ while (true) { int status; LOOKUP_TYPE *resbuf = NULL; - buffer = (char *)xreallocarray (buffer, length, sizeof(char)); + buffer = XREALLOCARRAY (buffer, length, char); status = REENTRANT_NAME(ARG_NAME, result, buffer, length, &resbuf); if ((0 == status) && (resbuf == result)) { diff --git a/src/gpasswd.c b/src/gpasswd.c index cb78c2aa..9da92d14 100644 --- a/src/gpasswd.c +++ b/src/gpasswd.c @@ -19,6 +19,8 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "groupio.h" #include "nscd.h" @@ -834,7 +836,7 @@ static void get_group (struct group *gr) sg->sg_mem = dup_list (gr->gr_mem); - sg->sg_adm = (char **) xmallocarray (2, sizeof (char *)); + sg->sg_adm = XMALLOCARRAY (2, char *); #ifdef FIRST_MEMBER_IS_ADMIN if (sg->sg_mem[0]) { sg->sg_adm[0] = xstrdup (sg->sg_mem[0]); diff --git a/src/groupmems.c b/src/groupmems.c index 50c5fc86..f241a5cc 100644 --- a/src/groupmems.c +++ b/src/groupmems.c @@ -18,6 +18,8 @@ #include "pam_defs.h" #endif /* USE_PAM */ #include + +#include "alloc.h" #include "defines.h" #include "prototypes.h" #include "groupio.h" @@ -125,7 +127,7 @@ static void add_user (const char *user, static struct sgrp sgrent; sgrent.sg_name = xstrdup (newgrp->gr_name); sgrent.sg_mem = dup_list (newgrp->gr_mem); - sgrent.sg_adm = (char **) xmalloc (sizeof (char *)); + sgrent.sg_adm = XMALLOC (char *); #ifdef FIRST_MEMBER_IS_ADMIN if (sgrent.sg_mem[0]) { sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]); @@ -208,7 +210,7 @@ static void remove_user (const char *user, static struct sgrp sgrent; sgrent.sg_name = xstrdup (newgrp->gr_name); sgrent.sg_mem = dup_list (newgrp->gr_mem); - sgrent.sg_adm = (char **) xmalloc (sizeof (char *)); + sgrent.sg_adm = XMALLOC (char *); #ifdef FIRST_MEMBER_IS_ADMIN if (sgrent.sg_mem[0]) { sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]); @@ -281,9 +283,9 @@ static void purge_members (const struct group *grp) /* Create a shadow group based on this group */ static struct sgrp sgrent; sgrent.sg_name = xstrdup (newgrp->gr_name); - sgrent.sg_mem = (char **) xmalloc (sizeof (char *)); + sgrent.sg_mem = XMALLOC (char *); sgrent.sg_mem[0] = NULL; - sgrent.sg_adm = (char **) xmalloc (sizeof (char *)); + sgrent.sg_adm = XMALLOC (char *); sgrent.sg_adm[0] = NULL; /* Move any password to gshadow */ diff --git a/src/groupmod.c b/src/groupmod.c index a2facfb8..a689d3f8 100644 --- a/src/groupmod.c +++ b/src/groupmod.c @@ -24,6 +24,8 @@ #include #endif /* USE_PAM */ #endif /* ACCT_TOOLS_SETUID */ + +#include "alloc.h" #include "chkname.h" #include "defines.h" #include "groupio.h" @@ -249,7 +251,7 @@ static void grp_update (void) // requested to replace the existing groups if (NULL != grp.gr_mem[0]) gr_free_members(&grp); - grp.gr_mem = (char **)xmalloc(sizeof(char *)); + grp.gr_mem = XMALLOC(char *); grp.gr_mem[0] = NULL; } else { // append to existing groups @@ -557,15 +559,15 @@ static void prepare_failure_reports (void) #endif info_passwd.name = group_name; - gr = xmalloc (512); + gr = XMALLOCARRAY(512, char); info_group.audit_msg = gr; gr_end = gr + 512; #ifdef SHADOWGRP - sgr = xmalloc (512); + sgr = XMALLOCARRAY(512, char); info_gshadow.audit_msg = sgr; sgr_end = sgr + 512; #endif - pw = xmalloc (512); + pw = XMALLOCARRAY(512, char); info_passwd.audit_msg = pw; pw_end = pw + 512; diff --git a/src/groups.c b/src/groups.c index bfa548fd..1d1c646e 100644 --- a/src/groups.c +++ b/src/groups.c @@ -14,9 +14,12 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "prototypes.h" #include "shadowlog.h" + /* * Global variables */ @@ -88,7 +91,7 @@ int main (int argc, char **argv) GETGROUPS_T *groups; sys_ngroups = sysconf (_SC_NGROUPS_MAX); - groups = (GETGROUPS_T *) mallocarray (sys_ngroups, sizeof (GETGROUPS_T)); + groups = MALLOCARRAY (sys_ngroups, GETGROUPS_T); (void) setlocale (LC_ALL, ""); (void) bindtextdomain (PACKAGE, LOCALEDIR); diff --git a/src/id.c b/src/id.c index e5a75f4a..3bc61444 100644 --- a/src/id.c +++ b/src/id.c @@ -23,7 +23,10 @@ #include #include #include + +#include "alloc.h" #include "defines.h" + /* local function prototypes */ static void usage (void); @@ -63,7 +66,7 @@ static void usage (void) * work if the system library is recompiled. */ sys_ngroups = sysconf (_SC_NGROUPS_MAX); - groups = (GETGROUPS_T *) mallocarray (sys_ngroups, sizeof (GETGROUPS_T)); + groups = MALLOCARRAY (sys_ngroups, GETGROUPS_T); /* * See if the -a flag has been given to print out the concurrent diff --git a/src/login.c b/src/login.c index 5f31a417..e5c6beff 100644 --- a/src/login.c +++ b/src/login.c @@ -22,6 +22,8 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "faillog.h" #include "failure.h" @@ -589,7 +591,7 @@ int main (int argc, char **argv) #ifdef RLOGIN if (rflg) { assert (NULL == username); - username = xmalloc (USER_NAME_MAX_LENGTH + 1); + username = XMALLOCARRAY (USER_NAME_MAX_LENGTH + 1, char); username[USER_NAME_MAX_LENGTH] = '\0'; if (do_rlogin (hostname, username, USER_NAME_MAX_LENGTH, term, sizeof term)) { preauth_flag = true; @@ -906,7 +908,7 @@ int main (int argc, char **argv) exit (1); } preauth_flag = false; - username = xmalloc (USER_NAME_MAX_LENGTH + 1); + username = XMALLOCARRAY (USER_NAME_MAX_LENGTH + 1, char); username[USER_NAME_MAX_LENGTH] = '\0'; login_prompt (_("\n%s login: "), username, USER_NAME_MAX_LENGTH); diff --git a/src/newgrp.c b/src/newgrp.c index 87fd7796..f8387f11 100644 --- a/src/newgrp.c +++ b/src/newgrp.c @@ -16,6 +16,8 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "getdef.h" #include "prototypes.h" @@ -531,7 +533,7 @@ int main (int argc, char **argv) /* don't use getgroups(0, 0) - it doesn't work on some systems */ i = 16; for (;;) { - grouplist = (GETGROUPS_T *) xmallocarray (i, sizeof (GETGROUPS_T)); + grouplist = XMALLOCARRAY (i, GETGROUPS_T); ngroups = getgroups (i, grouplist); if (i > ngroups && !(ngroups == -1 && errno == EINVAL)) { break; diff --git a/src/newusers.c b/src/newusers.c index 315ec3c6..dd6b4421 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -29,6 +29,8 @@ #include #include #include + +#include "alloc.h" #ifdef ACCT_TOOLS_SETUID #ifdef USE_PAM #include "pam_defs.h" @@ -1200,9 +1202,9 @@ int main (int argc, char **argv) #ifdef USE_PAM /* keep the list of user/password for later update by PAM */ nusers++; - lines = reallocf (lines, nusers, sizeof (lines[0])); - usernames = reallocf (usernames, nusers, sizeof (usernames[0])); - passwords = reallocf (passwords, nusers, sizeof (passwords[0])); + lines = REALLOCARRAYF(lines, nusers, int); + usernames = REALLOCARRAYF(usernames, nusers, char *); + passwords = REALLOCARRAYF(passwords, nusers, char *); if (lines == NULL || usernames == NULL || passwords == NULL) { fprintf (stderr, _("%s: line %d: %s\n"), diff --git a/src/passwd.c b/src/passwd.c index bf076673..ed95bff3 100644 --- a/src/passwd.c +++ b/src/passwd.c @@ -19,6 +19,8 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "getdef.h" #include "nscd.h" @@ -524,7 +526,7 @@ static char *update_crypt_pw (char *cp) } if (lflg && *cp != '!') { - char *newpw = xmalloc (strlen (cp) + 2); + char *newpw = XMALLOCARRAY (strlen (cp) + 2, char); strcpy (newpw, "!"); strcat (newpw, cp); diff --git a/src/su.c b/src/su.c index f7777964..9c134a9b 100644 --- a/src/su.c +++ b/src/su.c @@ -45,6 +45,8 @@ #include #include #endif /* !USE_PAM */ + +#include "alloc.h" #include "prototypes.h" #include "defines.h" #include "pwauth.h" @@ -238,7 +240,7 @@ static void execve_shell (const char *shellname, while (NULL != args[n_args]) { n_args++; } - targs = (char **) xmallocarray (n_args + 3, sizeof (args[0])); + targs = XMALLOCARRAY (n_args + 3, char *); targs[0] = "sh"; targs[1] = "-"; targs[2] = xstrdup (shellname); @@ -1176,7 +1178,7 @@ int main (int argc, char **argv) cp = Basename (shellstr); } - arg0 = xmalloc (strlen (cp) + 2); + arg0 = XMALLOCARRAY (strlen (cp) + 2, char); arg0[0] = '-'; strcpy (arg0 + 1, cp); cp = arg0; diff --git a/src/useradd.c b/src/useradd.c index b3698aa5..c0d8eda9 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -32,6 +32,8 @@ #include #include #include + +#include "alloc.h" #include "chkname.h" #include "defines.h" #include "faillog.h" @@ -355,7 +357,7 @@ static void get_defaults (void) int wlen; len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2; - default_file = malloc(len); + default_file = MALLOCARRAY(len, char); if (default_file == NULL) return; wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE); @@ -468,7 +470,7 @@ static void get_defaults (void) char* _def_template; /* avoid const warning */ len = strlen(prefix) + strlen(cp) + 2; - _def_template = xmalloc(len); + _def_template = XMALLOCARRAY(len, char); wlen = snprintf(_def_template, len, "%s/%s", prefix, cp); assert (wlen == (int) len -1); def_template = _def_template; @@ -492,7 +494,7 @@ static void get_defaults (void) char* _def_usrtemplate; /* avoid const warning */ len = strlen(prefix) + strlen(cp) + 2; - _def_usrtemplate = xmalloc(len); + _def_usrtemplate = XMALLOCARRAY(len, char); wlen = snprintf(_def_usrtemplate, len, "%s/%s", prefix, cp); assert (wlen == (int) len -1); def_usrtemplate = _def_usrtemplate; @@ -582,7 +584,7 @@ static int set_defaults (void) len = strlen(prefix) + strlen(NEW_USER_FILE) + 2; - new_file = malloc(len); + new_file = MALLOCARRAY(len, char); if (new_file == NULL) { fprintf (stderr, _("%s: cannot create new defaults file: %s\n"), @@ -594,7 +596,7 @@ static int set_defaults (void) if (prefix[0]) { len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2; - default_file = malloc(len); + default_file = MALLOCARRAY(len, char); if (default_file == NULL) { fprintf (stderr, _("%s: cannot create new defaults file: %s\n"), @@ -1610,7 +1612,7 @@ static void process_flags (int argc, char **argv) size_t len = strlen (def_home) + strlen (user_name) + 2; int wlen; - uh = xmalloc (len); + uh = XMALLOCARRAY (len, char); wlen = snprintf (uh, len, "%s/%s", def_home, user_name); assert (wlen == (int) len -1); @@ -1620,7 +1622,7 @@ static void process_flags (int argc, char **argv) size_t len = strlen(prefix) + strlen(user_home) + 2; int wlen; char* _prefix_user_home; /* to avoid const warning */ - _prefix_user_home = xmalloc(len); + _prefix_user_home = XMALLOCARRAY(len, char); wlen = snprintf(_prefix_user_home, len, "%s/%s", prefix, user_home); assert (wlen == (int) len -1); prefix_user_home = _prefix_user_home; @@ -2429,7 +2431,7 @@ static void create_mail (void) if (NULL == spool) { return; } - file = alloca (strlen (prefix) + strlen (spool) + strlen (user_name) + 3); + file = ALLOCARRAY (strlen (prefix) + strlen (spool) + strlen (user_name) + 3, char); if (prefix[0]) sprintf (file, "%s/%s/%s", prefix, spool, user_name); else @@ -2539,7 +2541,7 @@ int main (int argc, char **argv) #endif sys_ngroups = sysconf (_SC_NGROUPS_MAX); - user_groups = (char **) xmallocarray (1 + sys_ngroups, sizeof (char *)); + user_groups = XMALLOCARRAY (1 + sys_ngroups, char *); /* * Initialize the list to be empty */ diff --git a/src/userdel.c b/src/userdel.c index 2fa44934..52969249 100644 --- a/src/userdel.c +++ b/src/userdel.c @@ -19,6 +19,8 @@ #include #include #include + +#include "alloc.h" #ifdef ACCT_TOOLS_SETUID #ifdef USE_PAM #include "pam_defs.h" @@ -803,7 +805,7 @@ static int remove_mailbox (void) } len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 2; - mailfile = xmalloc (len); + mailfile = XMALLOCARRAY (len, char); if (prefix[0]) { (void) snprintf (mailfile, len, "%s/%s/%s", @@ -917,7 +919,7 @@ static int remove_tcbdir (const char *user_name, uid_t user_id) return 0; } - buf = malloc (buflen); + buf = MALLOCARRAY (buflen, char); if (NULL == buf) { fprintf (stderr, _("%s: Can't allocate memory, " "tcb entry for %s not removed.\n"), @@ -1129,7 +1131,7 @@ int main (int argc, char **argv) size_t len = strlen(prefix) + strlen(pwd->pw_dir) + 2; int wlen; - user_home = xmalloc(len); + user_home = XMALLOCARRAY(len, char); wlen = snprintf(user_home, len, "%s/%s", prefix, pwd->pw_dir); assert (wlen == (int) len -1); } diff --git a/src/usermod.c b/src/usermod.c index aa2d684f..17cfac91 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -28,6 +28,8 @@ #include #include #include + +#include "alloc.h" #include "chkname.h" #include "defines.h" #include "faillog.h" @@ -342,7 +344,7 @@ static int prepend_range(const char *str, struct ulong_range_list_entry **head) if (range.first > range.last) return 0; - entry = malloc(sizeof(*entry)); + entry = MALLOC(struct ulong_range_list_entry); if (!entry) { fprintf (stderr, _("%s: failed to allocate memory: %s\n"), @@ -415,7 +417,7 @@ usage (int status) static char *new_pw_passwd (char *pw_pass) { if (Lflg && ('!' != pw_pass[0])) { - char *buf = xmalloc (strlen (pw_pass) + 2); + char *buf = XMALLOCARRAY (strlen (pw_pass) + 2, char); #ifdef WITH_AUDIT audit_logger (AUDIT_USER_CHAUTHTOK, Prog, @@ -1258,12 +1260,12 @@ static void process_flags (int argc, char **argv) if (prefix[0]) { size_t len = strlen(prefix) + strlen(user_home) + 2; int wlen; - prefix_user_home = xmalloc(len); + prefix_user_home = XMALLOCARRAY(len, char); wlen = snprintf(prefix_user_home, len, "%s/%s", prefix, user_home); assert (wlen == (int) len -1); if (user_newhome) { len = strlen(prefix) + strlen(user_newhome) + 2; - prefix_user_newhome = xmalloc(len); + prefix_user_newhome = XMALLOCARRAY(len, char); wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome); assert (wlen == (int) len -1); } @@ -2038,7 +2040,7 @@ static void move_mailbox (void) return; } len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 2; - mailfile = alloca (len); + mailfile = ALLOCARRAY (len, char); /* * O_NONBLOCK is to make sure open won't hang on mandatory locks. @@ -2093,7 +2095,7 @@ static void move_mailbox (void) if (lflg) { len = strlen (prefix) + strlen (maildir) + strlen (user_newname) + 2; - newmailfile = alloca(len); + newmailfile = ALLOCARRAY(len, char); if (prefix[0]) { (void) snprintf (newmailfile, len, "%s/%s/%s", prefix, maildir, user_newname); @@ -2150,7 +2152,7 @@ int main (int argc, char **argv) #endif sys_ngroups = sysconf (_SC_NGROUPS_MAX); - user_groups = (char **) mallocarray (sys_ngroups + 1, sizeof (char *)); + user_groups = MALLOCARRAY (sys_ngroups + 1, char *); user_groups[0] = NULL; is_shadow_pwd = spw_file_present (); diff --git a/src/vipw.c b/src/vipw.c index 488a97d9..1c6357f9 100644 --- a/src/vipw.c +++ b/src/vipw.c @@ -26,6 +26,8 @@ #include #include #include + +#include "alloc.h" #include "defines.h" #include "groupio.h" #include "nscd.h" @@ -302,7 +304,7 @@ vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void)) continue; } - buf = (char *) malloc (strlen (editor) + strlen (fileedit) + 2); + buf = MALLOCARRAY(strlen(editor) + strlen(fileedit) + 2, char); snprintf (buf, strlen (editor) + strlen (fileedit) + 2, "%s %s", editor, fileedit); status = system (buf); @@ -418,7 +420,7 @@ vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void)) if (stat (file, &st1) != 0) { vipwexit (_("failed to stat edited file"), errno, 1); } - to_rename = malloc (strlen (file) + 2); + to_rename = MALLOCARRAY (strlen (file) + 2, char); if (NULL == to_rename) { vipwexit (_("failed to allocate memory"), errno, 1); } diff --git a/tests/libsubid/04_nss/libsubid_zzz.c b/tests/libsubid/04_nss/libsubid_zzz.c index 957e25e8..89200879 100644 --- a/tests/libsubid/04_nss/libsubid_zzz.c +++ b/tests/libsubid/04_nss/libsubid_zzz.c @@ -76,7 +76,7 @@ static uid_t getnamuid(const char *name) { } static int alloc_uid(uid_t **uids, uid_t id) { - *uids = malloc(sizeof(uid_t)); + *uids = MALLOC(uid_t); if (!*uids) return -1; *uids[0] = id; @@ -121,7 +121,7 @@ enum subid_status shadow_subid_list_owner_ranges(const char *owner, enum subid_t return SUBID_STATUS_SUCCESS; if (id_type == ID_TYPE_UID && strcmp(owner, "group1") == 0) return SUBID_STATUS_SUCCESS; - ranges = (struct subid_range *)malloc(sizeof(struct subid_range)); + ranges = MALLOC(struct subid_range); if (!ranges) return SUBID_STATUS_ERROR; if (strcmp(owner, "user1") == 0 || strcmp(owner, "group1") == 0) {