From: Valerie Aurora Henson <vaur...@redhat.com> Non-critical changes to make auditing buffer lengths easier.
* Some buffers were the wrong (too big) size, some were used twice for different purposes. * Use sizeof(buf) instead of repeating the *MAX* define in functions that need to know the size of a statically allocated buffer. * Fix a compiler warning about discarding the const on a string. --- modules/lookup_ldap.c | 49 ++++++++++++++++++++++--------------------------- 1 files changed, 22 insertions(+), 27 deletions(-) diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c index 6ba80eb..c7aecf0 100644 --- a/modules/lookup_ldap.c +++ b/modules/lookup_ldap.c @@ -274,7 +274,7 @@ LDAP *init_ldap_connection(unsigned logopt, const char *uri, struct lookup_conte static int get_query_dn(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt, const char *class, const char *key) { - char buf[PARSE_MAX_BUF]; + char buf[MAX_ERR_BUF]; char *query, *dn, *qdn; LDAPMessage *result, *e; struct ldap_searchdn *sdns = NULL; @@ -298,7 +298,7 @@ static int get_query_dn(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt query = alloca(l); if (query == NULL) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + char *estr = strerror_r(errno, buf, sizeof(buf)); crit(logopt, MODPREFIX "alloca: %s", estr); return NSS_STATUS_UNAVAIL; } @@ -1073,7 +1073,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c } if (!tmp) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); return 0; } @@ -1095,7 +1095,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c tmp = malloc(l + 1); if (!tmp) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); crit(logopt, MODPREFIX "malloc: %s", estr); return 0; } @@ -1130,7 +1130,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c /* Isolate the server's name. */ if (!tmp) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); return 0; } @@ -1171,7 +1171,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c ctxt->mapname = map; else { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); if (ctxt->server) free(ctxt->server); @@ -1182,7 +1182,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c base = malloc(l + 1); if (!base) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); if (ctxt->server) free(ctxt->server); @@ -1196,7 +1196,7 @@ static int parse_server_string(unsigned logopt, const char *url, struct lookup_c char *map = malloc(l + 1); if (!map) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); if (ctxt->server) free(ctxt->server); @@ -1309,7 +1309,7 @@ int lookup_init(const char *mapfmt, int argc, const char *const *argv, void **co /* If we can't build a context, bail. */ ctxt = malloc(sizeof(struct lookup_context)); if (!ctxt) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + char *estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); return 1; } @@ -1410,8 +1410,9 @@ int lookup_read_master(struct master *master, time_t age, void *context) unsigned int timeout = master->default_timeout; unsigned int logging = master->default_logging; unsigned int logopt = master->logopt; - int rv, l, count, blen; - char buf[PARSE_MAX_BUF]; + int rv, l, count; + char buf[MAX_ERR_BUF]; + char parse_buf[PARSE_MAX_BUF]; char *query; LDAPMessage *result, *e; char *class, *info, *entry; @@ -1433,7 +1434,7 @@ int lookup_read_master(struct master *master, time_t age, void *context) query = alloca(l); if (query == NULL) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + char *estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "alloca: %s", estr); return NSS_STATUS_UNAVAIL; } @@ -1523,18 +1524,12 @@ int lookup_read_master(struct master *master, time_t age, void *context) goto next; } - blen = strlen(*keyValue) + 1 + strlen(*values) + 2; - if (blen > PARSE_MAX_BUF) { + if (snprintf(parse_buf, sizeof(parse_buf), "%s %s", + *keyValue, *values) >= sizeof(parse_buf)) { error(logopt, MODPREFIX "map entry too long"); ldap_value_free(values); goto next; } - memset(buf, 0, PARSE_MAX_BUF); - - strcpy(buf, *keyValue); - strcat(buf, " "); - strcat(buf, *values); - master_parse_entry(buf, timeout, logging, age); next: ldap_value_free(keyValue); @@ -1552,7 +1547,7 @@ static int get_percent_decoded_len(const char *name) { int escapes = 0; int escaped = 0; - char *tmp = name; + const char *tmp = name; int look_for_close = 0; while (*tmp) { @@ -2051,7 +2046,7 @@ static int do_get_entries(struct ldap_search_params *sp, struct map_source *sour mapent = malloc(v_len + 1); if (!mapent) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); ldap_value_free_len(bvValues); goto next; @@ -2071,7 +2066,7 @@ static int do_get_entries(struct ldap_search_params *sp, struct map_source *sour mapent_len = new_size; } else { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "realloc: %s", estr); } } @@ -2172,7 +2167,7 @@ static int read_one_map(struct autofs_point *ap, sp.query = alloca(l); if (sp.query == NULL) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + char *estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); return NSS_STATUS_UNAVAIL; } @@ -2326,7 +2321,7 @@ static int lookup_one(struct autofs_point *ap, query = alloca(l); if (query == NULL) { - char *estr = strerror_r(errno, buf, MAX_ERR_BUF); + char *estr = strerror_r(errno, buf, sizeof(buf)); crit(ap->logopt, MODPREFIX "malloc: %s", estr); if (enc_len1) { free(enc_key1); @@ -2498,7 +2493,7 @@ static int lookup_one(struct autofs_point *ap, mapent = malloc(v_len + 1); if (!mapent) { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "malloc: %s", estr); ldap_value_free_len(bvValues); goto next; @@ -2518,7 +2513,7 @@ static int lookup_one(struct autofs_point *ap, mapent_len = new_size; } else { char *estr; - estr = strerror_r(errno, buf, MAX_ERR_BUF); + estr = strerror_r(errno, buf, sizeof(buf)); logerr(MODPREFIX "realloc: %s", estr); } } _______________________________________________ autofs mailing list autofs@linux.kernel.org http://linux.kernel.org/mailman/listinfo/autofs