heimdal: lib/krb5: do not fail set_config_files due to parse error
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 16 Jun 2016 20:25:41 +0000 (16:25 -0400)
committerBjörn Baumbach <bbaumbach@samba.org>
Mon, 18 Jun 2018 11:01:11 +0000 (13:01 +0200)
Follow Apple's lead and do not fail krb5_set_config_files() simply
because one of the files in the profile list fails to parse correctly.
Doing so can lead to hard to find failures and could lead to an end
user shooting themselves in the foot and no longer be able to login
to their system to fix it.

Parse as many of the files as we can.  Only fail krb5_set_config_files()
if init_context_from_config_file() fails.

Change-Id: I122664c6d707a5f926643808ba414bf4f681f8b8

Cherry-pick of Heimdal commit b7cf5e7caf9b270f4d4151d2690177b11a7a1bdf

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11573

Signed-off-by: Björn Baumbach <bb@sernet.de>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
source4/heimdal/lib/krb5/config_file.c
source4/heimdal/lib/krb5/context.c

index 2748f481d66ceed3723db4cbd1eea85789f11e61..1f0446799811e0667cf32b635286c7a80c3533a1 100644 (file)
@@ -370,11 +370,11 @@ krb5_config_parse_debug (struct fileptr *f,
            b = NULL;
        } else if (*p == '}') {
            *err_message = "unmatched }";
-           return EINVAL;      /* XXX */
+           return KRB5_CONFIG_BADFORMAT;
        } else if(*p != '\0') {
            if (s == NULL) {
                *err_message = "binding before section";
-               return EINVAL;
+               return KRB5_CONFIG_BADFORMAT;
            }
            ret = parse_binding(f, lineno, p, &b, &s->u.list, err_message);
            if (ret)
index 23e3879d6dbee5b8f5044d6cad3193193289a4bc..770f01278a18dd655f6e50868efe96a6ad0239d0 100644 (file)
@@ -646,7 +646,8 @@ krb5_set_config_files(krb5_context context, char **filenames)
     krb5_config_binding *tmp = NULL;
     while(filenames != NULL && *filenames != NULL && **filenames != '\0') {
        ret = krb5_config_parse_file_multi(context, *filenames, &tmp);
-       if(ret != 0 && ret != ENOENT && ret != EACCES && ret != EPERM) {
+       if (ret != 0 && ret != ENOENT && ret != EACCES && ret != EPERM
+           && ret != KRB5_CONFIG_BADFORMAT) {
            krb5_config_file_free(context, tmp);
            return ret;
        }