[dovecot/core] ad6c57: lib: strfuncs - string match length and prefix che...

GitHub noreply at github.com
Fri Jun 8 12:00:13 EEST 2018


  Branch: refs/heads/master-2.3
  Home:   https://github.com/dovecot/core
  Commit: ad6c57fafd2b92ee2f14bf9d167497b5ca428b52
      https://github.com/dovecot/core/commit/ad6c57fafd2b92ee2f14bf9d167497b5ca428b52
  Author: Phil Carmody <phil at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib/strfuncs.c
    M src/lib/strfuncs.h
    M src/lib/test-strfuncs.c

  Log Message:
  -----------
  lib: strfuncs - string match length and prefix checking helpers

strncmp(input, "literal", 7) is an idiom used everywhere, but leaves
room for human error in calculating the length.

strncmp(input, "literal", strlen("literal")) is an idiom also used
everywhere, but is both verbose and might be inefficient on some
legacy or ultralightweight compilers.

The old techniques are presumed to be optimal code-wise, but are
verbose (and, containing redundancy, they leave room for human error),
so make the macro fall back onto this operation, simply avoiding the
redundancy/verbosity.

The macro expansion does not multiply evaluate any of its parameters,
so should be safe even in the strangest of situations.

Signed-off-by: Phil Carmody <phil at dovecot.fi>


  Commit: 9be765076fd7ac8593b7f759d1ec7dcf96654a2a
      https://github.com/dovecot/core/commit/9be765076fd7ac8593b7f759d1ec7dcf96654a2a
  Author: Phil Carmody <phil at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/auth/auth-client-connection.c
    M src/auth/auth-master-connection.c
    M src/auth/auth-request.c
    M src/auth/auth-worker-server.c
    M src/auth/db-ldap.c
    M src/auth/db-oauth2.c
    M src/auth/main.c
    M src/auth/mech-oauth2.c
    M src/auth/mech-otp.c
    M src/auth/passdb-blocking.c
    M src/auth/passdb-bsdauth.c
    M src/auth/passdb-checkpassword.c
    M src/auth/passdb-lua.c
    M src/auth/passdb-pam.c
    M src/auth/passdb-vpopmail.c
    M src/auth/password-scheme-crypt.c
    M src/auth/password-scheme.c
    M src/auth/userdb-blocking.c
    M src/auth/userdb-checkpassword.c
    M src/auth/userdb-lua.c
    M src/auth/userdb-passwd-file.c
    M src/auth/userdb-vpopmail.c
    M src/config/config-connection.c
    M src/config/old-set-parser.c
    M src/config/sysinfo-get.c
    M src/director/login-connection.c
    M src/dns/dns-client.c
    M src/doveadm/client-connection-tcp.c
    M src/doveadm/doveadm-auth-server.c
    M src/doveadm/doveadm-auth.c
    M src/doveadm/doveadm-dsync.c
    M src/doveadm/doveadm-dump-dbox.c
    M src/doveadm/doveadm-mail-fetch.c
    M src/doveadm/doveadm-mail-mailbox-metadata.c
    M src/doveadm/doveadm-mail-server.c
    M src/doveadm/doveadm-oldstats.c
    M src/doveadm/doveadm-proxy.c
    M src/doveadm/doveadm-util.c
    M src/doveadm/doveadm-zlib.c
    M src/doveadm/server-connection.c
    M src/imap-hibernate/imap-client.c
    M src/imap-login/imap-proxy.c
    M src/imap-urlauth/imap-urlauth.c
    M src/imap/cmd-notify.c
    M src/imap/imap-fetch-body.c
    M src/imap/imap-sync.c
    M src/lib-auth/auth-client-request.c
    M src/lib-auth/auth-master.c
    M src/lib-auth/auth-server-connection.c
    M src/lib-dcrypt/dcrypt-openssl.c
    M src/lib-dict-backend/dict-sql-settings.c
    M src/lib-dict/dict-client.c
    M src/lib-dict/dict-memcached-ascii.c
    M src/lib-dict/dict-memcached.c
    M src/lib-dict/dict-redis.c
    M src/lib-dns/dns-lookup.c
    M src/lib-fs/fs-posix.c
    M src/lib-imap-storage/imap-msgpart.c
    M src/lib-imap/imap-base-subject.c
    M src/lib-index/mail-index.c
    M src/lib-mail/test-message-header-encode.c
    M src/lib-master/master-login-auth.c
    M src/lib-master/master-login.c
    M src/lib-master/master-service-settings-cache.c
    M src/lib-master/master-service-settings.c
    M src/lib-master/master-service.c
    M src/lib-program-client/program-client.c
    M src/lib-settings/settings-parser.c
    M src/lib-smtp/test-smtp-client-errors.c
    M src/lib-sql/driver-pgsql.c
    M src/lib-storage/index/imapc/imapc-mail-fetch.c
    M src/lib-storage/index/index-status.c
    M src/lib-storage/index/index-storage.c
    M src/lib-storage/index/maildir/maildir-sync-index.c
    M src/lib-storage/index/mbox/mbox-save.c
    M src/lib-storage/index/pop3c/pop3c-mail.c
    M src/lib-storage/index/pop3c/pop3c-storage.c
    M src/lib-storage/list/mailbox-list-fs-flags.c
    M src/lib-storage/list/mailbox-list-maildir-iter.c
    M src/lib-storage/mail-namespace.c
    M src/lib-storage/mail-search-register-imap.c
    M src/lib-storage/mail-storage-hooks.c
    M src/lib-storage/mail-storage-service.c
    M src/lib-storage/mail-storage-settings.c
    M src/lib-storage/mail-storage.c
    M src/lib-storage/mailbox-list.c
    M src/lib-storage/test-mail-storage.c
    M src/lib/iostream-rawlog.c
    M src/lib/module-dir.c
    M src/lib/test-str-sanitize.c
    M src/lib/unlink-directory.c
    M src/log/log-connection.c
    M src/login-common/client-common-auth.c
    M src/login-common/sasl-server.c
    M src/master/main.c
    M src/old-stats/client-export.c
    M src/old-stats/mail-session.c
    M src/plugins/acl/acl-backend-vfile.c
    M src/plugins/acl/acl-backend.c
    M src/plugins/fs-compress/fs-compress.c
    M src/plugins/fts-lucene/fts-lucene-plugin.c
    M src/plugins/fts-solr/fts-solr-plugin.c
    M src/plugins/fts-squat/fts-backend-squat.c
    M src/plugins/fts-squat/squat-test.c
    M src/plugins/fts/fts-build-mail.c
    M src/plugins/fts/fts-indexer.c
    M src/plugins/old-stats/mail-stats-fill.c
    M src/plugins/quota/quota-status.c
    M src/plugins/quota/quota-util.c
    M src/plugins/quota/quota.c
    M src/pop3-login/pop3-proxy.c
    M src/util/script.c

  Log Message:
  -----------
  global - migrate strncmp literals to str_begins

Simplify a bunch of strncmp(,,number) calls.

git ls-files \*.[ch] | xargs perl -p -i -e 's/strncmp\((.*?), ?(\".*?\"), ?(\d+)\) == 0/str_begins($1, $2)/g'
git ls-files \*.[ch] | xargs perl -p -i -e 's/strncmp\((.*?), ?(\".*?\"), ?(\d+)\) != 0/!str_begins($1, $2)/g'

I ran a longer script to verify that all of the string literals and
the length matched. They didn't:

$ git grep strncmp | perl -ne 'print if(m/strncmp\([^,]*,\s*"(.*?)",\s*(\d+)/ and ($s=$1,$t=$2,$s=~s/\\[tn]/#/g,length($s)) != $t)'
src/auth/db-oauth2.c:               if (strncmp(field, "oauth2:", 8) == 0 &&

With the new functions, that kind of typo is impossible.

Signed-off-by: Phil Carmody <phil at dovecot.fi>


  Commit: d026e2d2e010ae804a6984e0c28824e5824f9945
      https://github.com/dovecot/core/commit/d026e2d2e010ae804a6984e0c28824e5824f9945
  Author: Phil Carmody <phil at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/doveadm/doveadm-dict.c
    M src/imap-hibernate/imap-client.c
    M src/imap-login/imap-proxy.c
    M src/lib-dict-backend/dict-cdb.c
    M src/lib-dict-extra/dict-fs.c
    M src/lib-dict/dict-memcached-ascii.c
    M src/lib-dict/dict-memcached.c
    M src/lib-dict/dict-redis.c
    M src/lib-dict/dict.c
    M src/lib-fs/fs-metawrap.c
    M src/lib-fs/fs-posix.c
    M src/lib-imap-storage/imap-metadata.c
    M src/lib-storage/index/dbox-multi/mdbox-purge.c
    M src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c
    M src/lib-storage/index/index-search-mime.c
    M src/lib-storage/index/index-storage.c
    M src/lib-storage/index/mbox/mbox-storage.c
    M src/lib-storage/list/mailbox-list-delete.c
    M src/lib-storage/list/mailbox-list-fs.c
    M src/lib-storage/mail-storage-service.c
    M src/lib-storage/mailbox-attribute.c
    M src/lib-storage/mailbox-attribute.h
    M src/lib-storage/mailbox-list.c
    M src/lib/mempool-alloconly.c
    M src/lib/test-strfuncs.c
    M src/master/main.c
    M src/plugins/acl/acl-api.c
    M src/plugins/acl/acl-attributes.c
    M src/plugins/imap-acl/imap-acl-plugin.c

  Log Message:
  -----------
  global - migrate from strncmp to str_begins

Simplify a bunch of verbose strncmp(,,strlen()) calls.

--- 8< --- strncmp.cocci ---
@@
expression e1, e2;
@@

- strncmp(e1, e2, strlen(e2)) == 0
+ str_begins(e1, e2)

@@
expression e1, e2;
@@

- strncmp(e1, e2, strlen(e2)) != 0
+ !str_begins(e1, e2)

@@
expression e1, e2;
@@

- strncmp(e1, e2, strlen(e1)) == 0
+ str_begins(e2, e1)

@@
expression e1, e2;
@@

- strncmp(e1, e2, strlen(e1)) != 0
+ !str_begins(e2, e1)

--- 8< ---------------------

Signed-off-by: Phil Carmody <phil at dovecot.fi>


  Commit: 1367401f9fa34707050bd40f0154f11588c3d27e
      https://github.com/dovecot/core/commit/1367401f9fa34707050bd40f0154f11588c3d27e
  Author: Phil Carmody <phil at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/auth/auth-cache.c
    M src/config/old-set-parser.c
    M src/doveadm/doveadm-cmd.c
    M src/doveadm/doveadm-mail.c
    M src/doveadm/dsync/dsync-brain-mailbox-tree.c
    M src/imap/cmd-notify.c
    M src/imap/cmd-rename.c
    M src/imap/imap-notify.c
    M src/lib-storage/index/imapc/imapc-list.c
    M src/lib-storage/index/imapc/imapc-storage.c
    M src/lib-storage/index/index-search-mime.c
    M src/lib-storage/index/shared/shared-list.c
    M src/lib-storage/list/mailbox-list-fs-iter.c
    M src/lib-storage/list/mailbox-list-index-backend.c
    M src/lib-storage/list/mailbox-list-iter.c
    M src/lib-storage/mailbox-list.c

  Log Message:
  -----------
  global - migrate more complicated strncmp expressions to str_begins

Simplify a bunch of verbose var=strlen(); strncmp(,,var) calls.
Fortunately, all of these examples use the length variable, so no
"unused value" warnings occur.

--- 8< --- strncmp2.cocci ---
@@
expression e1, e2;
identifier i2;
@@

  i2 = strlen(e2)
  ...
- strncmp(e1, e2, i2) == 0
+ str_begins(e1, e2)

@@
expression e1, e2;
identifier i2;
@@

  i2 = strlen(e2)
  ...
- strncmp(e1, e2, i2) != 0
+ !str_begins(e1, e2)

@@
expression e1, e2;
identifier i1;
@@

  i1 = strlen(e1)
  ...
- strncmp(e1, e2, i1) == 0
+ str_begins(e2, e1)

@@
expression e1, e2;
identifier i1;
@@

  i1 = strlen(e1)
  ...
- strncmp(e1, e2, i1) != 0
+ !str_begins(e2, e1)

--- 8< ---------------------

Signed-off-by: Phil Carmody <phil at dovecot.fi>


  Commit: 7cf910e89a8334cf939caa81e3b35511fc0e21ae
      https://github.com/dovecot/core/commit/7cf910e89a8334cf939caa81e3b35511fc0e21ae
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login-auth.c

  Log Message:
  -----------
  lib-master: Add how long request took for "Internal auth failure" errors


  Commit: f37d91677c5aa12cb648ace8f02c2dc1a8731720
      https://github.com/dovecot/core/commit/f37d91677c5aa12cb648ace8f02c2dc1a8731720
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-auth.c

  Log Message:
  -----------
  lib-master: If connect() to backend UNIX socket is retried, log a warning

For example if imap-login process needs to retry before it successfully
connects to imap process's socket, a warning is logged. This warning is
important because it means that the imap-login process may have been
sleeping up to 0.5 seconds and causing all the other connections to hang
during it.

It would be better to make this retrying asynchronous, but before spending
time on doing that, lets see if this warning is ever even being logged.


  Commit: 54c4210100c22f12498fe187fe968a8251186da5
      https://github.com/dovecot/core/commit/54c4210100c22f12498fe187fe968a8251186da5
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login.c
    M src/lib-master/master-login.h

  Log Message:
  -----------
  lib-master: Keep linked list of master_login_clients per connection

This allows improving logging on connection errors.


  Commit: 082f6f24453542d93cf95b3c0895179e07895304
      https://github.com/dovecot/core/commit/082f6f24453542d93cf95b3c0895179e07895304
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login.c
    M src/lib-master/master-login.h

  Log Message:
  -----------
  lib-master: Improve error logging when master_login_connection gets disconnected


  Commit: e2250ad44c674212d1395dbac6fcf6e2566671f6
      https://github.com/dovecot/core/commit/e2250ad44c674212d1395dbac6fcf6e2566671f6
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login.c
    M src/lib-master/master-login.h

  Log Message:
  -----------
  lib-master: Improve error logging for post-login script failures


  Commit: 5da2d47ca42cd6402b90f9f83d55daafbfc195d4
      https://github.com/dovecot/core/commit/5da2d47ca42cd6402b90f9f83d55daafbfc195d4
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-auth.c

  Log Message:
  -----------
  lib-master: Improve error logging for master_auth_connection failures


  Commit: 207dcaf6978b6d48ea12390d92e1efaa115f2ac6
      https://github.com/dovecot/core/commit/207dcaf6978b6d48ea12390d92e1efaa115f2ac6
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login-auth.c

  Log Message:
  -----------
  lib-master: Use more exact timestamp in master_login_auth_request failures


  Commit: 9d00608a6ea0c8773edf15e0518d04931bd36ff3
      https://github.com/dovecot/core/commit/9d00608a6ea0c8773edf15e0518d04931bd36ff3
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login-auth.c

  Log Message:
  -----------
  lib-master: Add request time also for internal failure error messages


  Commit: e8cddebde141663852b9ca5638dbdc965ea08ca1
      https://github.com/dovecot/core/commit/e8cddebde141663852b9ca5638dbdc965ea08ca1
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login-auth.c

  Log Message:
  -----------
  lib-master: Add auth connect & handshake times to master_login_auth_request errors


  Commit: 4c7f044d8ad8581a91d8b9c45eb2a938be280351
      https://github.com/dovecot/core/commit/4c7f044d8ad8581a91d8b9c45eb2a938be280351
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/auth/auth-master-connection.c
    M src/auth/auth-master-connection.h
    M src/auth/auth-request-handler.c

  Log Message:
  -----------
  auth: Improve auth-master connections' error logging

Include connect and handshake times in the error message.


  Commit: 0db446f1363a519b65754c5c277ae4482dec1124
      https://github.com/dovecot/core/commit/0db446f1363a519b65754c5c277ae4482dec1124
  Author: Timo Sirainen <timo.sirainen at dovecot.fi>
  Date:   2018-06-08 (Fri, 08 Jun 2018)

  Changed paths:
    M src/lib-master/master-login.c

  Log Message:
  -----------
  lib-master: postlogin: Don't unreference already closed login-connection

If the login-connection was already closed, this caused too many
unreferences.

Fixes:
Panic: file master-login.c: line 544 (master_login_conn_unref): assertion failed: (conn->clients == NULL)


Compare: https://github.com/dovecot/core/compare/d7b27d1c7643...0db446f1363a
      **NOTE:** This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.


More information about the dovecot-cvs mailing list