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..83e11a9 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);
                                }
                        }
-- 
1.6.0.3

_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to