From fe31894df6d3f2bb19740cede1f5086d6605b766 Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Wed, 8 Aug 2018 01:39:59 +0300 Subject: [PATCH] reopenldap: fix gcc-8 warnings. Change-Id: I8ef2ace34122b9466ef886ae2589503fd2411904 --- clients/tools/ldapmodify.c | 2 +- .../check_password/check_password.c | 10 ++++------ libraries/libreldap/charray.c | 4 ++-- libraries/libreldap/schema.c | 2 +- servers/slapd/aclparse.c | 13 ++++-------- servers/slapd/ad.c | 2 +- servers/slapd/back-meta/config.c | 10 +++------- servers/slapd/config.c | 3 ++- servers/slapd/overlays/constraint.c | 2 +- servers/slapd/overlays/pcache.c | 11 +++++----- servers/slapd/saslauthz.c | 7 +++++-- tests/progs/slapd-mtread.c | 20 +++++++++---------- 12 files changed, 40 insertions(+), 46 deletions(-) diff --git a/clients/tools/ldapmodify.c b/clients/tools/ldapmodify.c index c583e99d7d..44be6e24e4 100644 --- a/clients/tools/ldapmodify.c +++ b/clients/tools/ldapmodify.c @@ -376,7 +376,7 @@ static int process_ldif_rec(char *rbuf, unsigned long linenum) { LDAPMod **pmods, *lm = NULL; int version; LDAPControl **pctrls; - int i, j, k, lines, idn, nmods; + int i, j, k, lines, idn = 0, nmods; struct berval *btype, *vals, **bvl, bv; char *freeval; unsigned char *mops = NULL; diff --git a/contrib/slapd-modules/check_password/check_password.c b/contrib/slapd-modules/check_password/check_password.c index 2f88309f53..f4df3ec95a 100644 --- a/contrib/slapd-modules/check_password/check_password.c +++ b/contrib/slapd-modules/check_password/check_password.c @@ -99,12 +99,10 @@ void dealloc_config_entries() { } char *chomp(char *s) { - char *t = ber_memalloc(strlen(s) + 1); - strncpy(t, s, strlen(s) + 1); - - if (t[strlen(t) - 1] == '\n') { - t[strlen(t) - 1] = '\0'; - } + char *t = ber_strdup(s); + if (t) + for (size_t len = strlen(s); len > 0 && t[len - 1] == '\n';) + t[--len] = '\0'; return t; } diff --git a/libraries/libreldap/charray.c b/libraries/libreldap/charray.c index 7618820a77..8251616b17 100644 --- a/libraries/libreldap/charray.c +++ b/libraries/libreldap/charray.c @@ -238,12 +238,12 @@ char *ldap_charray2str(char **a, const char *sep) { p = s; for (v = a; *v != NULL; v++) { if (v != a) { - strncpy(p, sep, slen); + memcpy(p, sep, slen); p += slen; } len = strlen(*v); - strncpy(p, *v, len); + memcpy(p, *v, len); p += len; } diff --git a/libraries/libreldap/schema.c b/libraries/libreldap/schema.c index 59920b57e7..73b3cbfa71 100644 --- a/libraries/libreldap/schema.c +++ b/libraries/libreldap/schema.c @@ -169,7 +169,7 @@ static int append_to_safe_string(safe_string *ss, char *s) { } ss->val = temp; } - strncpy(&ss->val[ss->pos], s, l); + memcpy(&ss->val[ss->pos], s, l + 1); ss->pos += l; if (ss->pos > 0 && LDAP_SPACE(ss->val[ss->pos - 1])) ss->at_whsp = 1; diff --git a/servers/slapd/aclparse.c b/servers/slapd/aclparse.c index ecc258f1c7..61fb1572a4 100644 --- a/servers/slapd/aclparse.c +++ b/servers/slapd/aclparse.c @@ -132,10 +132,8 @@ static void regtest(const char *fname, int lineno, char *pat) { } if ((e = regcomp(&re, buf, REG_EXTENDED | REG_ICASE))) { - char error[SLAP_TEXT_BUFLEN]; - + char error[sizeof(buf) - 64]; regerror(e, &re, error, sizeof(error)); - snprintf(buf, sizeof(buf), "regular expression \"%s\" bad because of %s", pat, error); Debug(LDAP_DEBUG_ANY, "%s: line %d: %s\n", fname, lineno, buf); @@ -279,7 +277,7 @@ static int check_scope(BackendDB *be, AccessControl *a) { int parse_acl(Backend *be, const char *fname, int lineno, int argc, char **argv, int pos) { int i; - char *left, *right, *style; + char *left, *right = NULL, *style; struct berval bv; AccessControl *a = NULL; Access *b = NULL; @@ -476,10 +474,8 @@ int parse_acl(Backend *be, const char *fname, int lineno, int argc, char **argv, int e = regcomp(&a->acl_attrval_re, bv.bv_val, REG_EXTENDED | REG_ICASE); if (e) { - char err[SLAP_TEXT_BUFLEN], buf[SLAP_TEXT_BUFLEN]; - + char buf[SLAP_TEXT_BUFLEN], err[sizeof(buf) - 64]; regerror(e, &a->acl_attrval_re, err, sizeof(err)); - snprintf(buf, sizeof(buf), "regular expression \"%s\" bad because of %s", right, err); @@ -617,8 +613,7 @@ int parse_acl(Backend *be, const char *fname, int lineno, int argc, char **argv, int e = regcomp(&a->acl_dn_re, a->acl_dn_pat.bv_val, REG_EXTENDED | REG_ICASE); if (e) { - char err[SLAP_TEXT_BUFLEN], buf[SLAP_TEXT_BUFLEN]; - + char buf[SLAP_TEXT_BUFLEN], err[sizeof(buf) - 64]; regerror(e, &a->acl_dn_re, err, sizeof(err)); snprintf(buf, sizeof(buf), "regular expression \"%s\" bad because of %s", right, err); diff --git a/servers/slapd/ad.c b/servers/slapd/ad.c index ebeb73ab07..07fde53aee 100644 --- a/servers/slapd/ad.c +++ b/servers/slapd/ad.c @@ -740,7 +740,7 @@ int slap_bv2undef_ad(struct berval *bv, AttributeDescription **ad, desc->ad_cname.bv_len = bv->bv_len; desc->ad_cname.bv_val = (char *)(desc + 1); - strncpy(desc->ad_cname.bv_val, bv->bv_val, bv->bv_len); + memcpy(desc->ad_cname.bv_val, bv->bv_val, bv->bv_len); desc->ad_cname.bv_val[bv->bv_len] = '\0'; /* canonical to upper case */ diff --git a/servers/slapd/back-meta/config.c b/servers/slapd/back-meta/config.c index 166663ae8a..167645b26e 100644 --- a/servers/slapd/back-meta/config.c +++ b/servers/slapd/back-meta/config.c @@ -848,14 +848,10 @@ static int meta_subtree_config(metatarget_t *mt, ConfigArgs *c) { break; case META_ST_REGEX: { - int rc; - - rc = regcomp(&ms->ms_regex, pattern, REG_EXTENDED | REG_ICASE); + int rc = regcomp(&ms->ms_regex, pattern, REG_EXTENDED | REG_ICASE); if (rc != 0) { - char regerr[SLAP_TEXT_BUFLEN]; - + char regerr[sizeof(c->cr_msg) - 64]; regerror(rc, &ms->ms_regex, regerr, sizeof(regerr)); - snprintf(c->cr_msg, sizeof(c->cr_msg), "regular expression \"%s\" bad because of %s", pattern, regerr); ch_free(ms); @@ -2139,7 +2135,7 @@ static int meta_back_cf_gen(ConfigArgs *c) { mf = ch_malloc(sizeof(metafilter_t)); rc = regcomp(&mf->mf_regex, c->argv[1], REG_EXTENDED); if (rc) { - char regerr[SLAP_TEXT_BUFLEN]; + char regerr[sizeof(c->cr_msg) - 64]; regerror(rc, &mf->mf_regex, regerr, sizeof(regerr)); snprintf(c->cr_msg, sizeof(c->cr_msg), "regular expression \"%s\" bad because of %s", c->argv[1], diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 6644df54fe..a5e8e57236 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -1038,7 +1038,8 @@ int config_verbmask2string(const slap_verbmasks *v, slap_mask_t m, char delim, return ARG_BAD_CONF; LDAP_ENSURE(value.bv_len < sizeof(c->log)); - strncpy(c->value_string = c->log, value.bv_val, sizeof(c->log)); + strncpy(c->value_string = c->log, value.bv_val, sizeof(c->log) - 1); + c->log[sizeof(c->log) - 1] = '\0'; ch_free(value.bv_val); return 0; } diff --git a/servers/slapd/overlays/constraint.c b/servers/slapd/overlays/constraint.c index f951392c98..b7cec85bc3 100644 --- a/servers/slapd/overlays/constraint.c +++ b/servers/slapd/overlays/constraint.c @@ -308,7 +308,7 @@ static int constraint_cf_gen(ConfigArgs *c) { ap.type = CONSTRAINT_REGEX; ap.re = ch_malloc(sizeof(regex_t)); if ((err = regcomp(ap.re, c->argv[3], REG_EXTENDED)) != 0) { - char errmsg[1024]; + char errmsg[sizeof(c->cr_msg) - 64]; regerror(err, ap.re, errmsg, sizeof(errmsg)); ch_free(ap.re); diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c index f357b38842..86ed2462dd 100644 --- a/servers/slapd/overlays/pcache.c +++ b/servers/slapd/overlays/pcache.c @@ -1066,11 +1066,12 @@ static int find_and_remove(struct berval *ber1, struct berval *ber2, } break; case 2: { - char *temp; - ber1->bv_val[ber1->bv_len] = '\0'; - temp = strstr(ber1->bv_val, ber2->bv_val); - if (temp) { - strcpy(temp, temp + ber2->bv_len); + char *const needle = + memmem(ber1->bv_val, ber1->bv_len, ber2->bv_val, ber2->bv_len); + if (needle) { + char *const haystack_end = ber1->bv_val + ber1->bv_len; + char *const needle_end = needle + ber2->bv_len; + memcpy(needle, needle_end, haystack_end - needle_end); ber1->bv_len -= ber2->bv_len; ret = 1; } diff --git a/servers/slapd/saslauthz.c b/servers/slapd/saslauthz.c index 2271526420..762efa1696 100644 --- a/servers/slapd/saslauthz.c +++ b/servers/slapd/saslauthz.c @@ -300,6 +300,7 @@ int authzValidate(Syntax *syntax, struct berval *in) { id.bv_len = in->bv_len; id.bv_val = buf; strncpy(buf, in->bv_val, sizeof(buf)); + buf[sizeof(buf) - 1] = '\0'; rc = slap_parse_user(&id, &user, &realm, &mech); if (rc != LDAP_SUCCESS) { @@ -593,7 +594,8 @@ static int authzPrettyNormal(struct berval *val, struct berval *normalized, id.bv_len = val->bv_len; id.bv_val = buf; - strncpy(buf, val->bv_val, sizeof(buf)); + strncpy(buf, val->bv_val, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; rc = slap_parse_user(&id, &user, &realm, &mech); if (rc != LDAP_SUCCESS) { @@ -991,7 +993,8 @@ static int slap_parseURI(Operation *op, struct berval *uri, struct berval *base, id.bv_len = uri->bv_len; id.bv_val = buf; - strncpy(buf, uri->bv_val, sizeof(buf)); + strncpy(buf, uri->bv_val, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; rc = slap_parse_user(&id, &user, &realm, &mech); if (rc != LDAP_SUCCESS) { diff --git a/tests/progs/slapd-mtread.c b/tests/progs/slapd-mtread.c index 6c2045b7a5..a4a5f0f84d 100644 --- a/tests/progs/slapd-mtread.c +++ b/tests/progs/slapd-mtread.c @@ -98,19 +98,19 @@ static void thread_error(int idx, char *string) { } static void thread_output(int idx, char *string) { - char thrstr[BUFSIZ]; - - snprintf(thrstr, BUFSIZ, "tidx: %d says: %s", idx, string); - tester_error(thrstr); + char buf[BUFSIZ]; + snprintf(buf, BUFSIZ, "tidx: %d says: %.*s", idx, (int)sizeof(buf) - 64, + string); + tester_error(buf); } static void thread_verbose(int idx, char *string) { - char thrstr[BUFSIZ]; - - if (!verbose) - return; - snprintf(thrstr, BUFSIZ, "tidx: %d says: %s", idx, string); - tester_error(thrstr); + if (verbose) { + char buf[BUFSIZ]; + snprintf(buf, BUFSIZ, "tidx: %d says: %.*s", idx, (int)sizeof(buf) - 64, + string); + tester_error(buf); + } } static void usage(char *name, char opt) {