s4-kdc: prevent segfault on bad trust strings
authorAndrew Tridgell <tridge@samba.org>
Thu, 16 Sep 2010 07:20:08 +0000 (17:20 +1000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 16 Sep 2010 11:09:17 +0000 (21:09 +1000)
Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/kdc/db-glue.c

index 8e311b439b00e7688cd4e2894e2aeea56144ee9d..68f1e4b88bafafee045bb8b78358dbf2cb6f4c98 100644 (file)
@@ -1041,7 +1041,6 @@ static krb5_error_code samba_kdc_fetch_krbtgt(krb5_context context,
        krb5_error_code ret;
        struct ldb_message *msg = NULL;
        struct ldb_dn *realm_dn = ldb_get_default_basedn(kdc_db_ctx->samdb);
-       const char *realm;
 
        krb5_principal alloc_principal = NULL;
        if (principal->name.name_string.len != 2
@@ -1109,6 +1108,7 @@ static krb5_error_code samba_kdc_fetch_krbtgt(krb5_context context,
 
        } else {
                enum trust_direction direction = UNKNOWN;
+               const char *realm = NULL;
 
                /* Either an inbound or outbound trust */
 
@@ -1116,12 +1116,16 @@ static krb5_error_code samba_kdc_fetch_krbtgt(krb5_context context,
                        /* look for inbound trust */
                        direction = INBOUND;
                        realm = principal->name.name_string.val[1];
-               }
-
-               if (strcasecmp(lpcfg_realm(lp_ctx), principal->name.name_string.val[1]) == 0) {
+               } else if (strcasecmp(lpcfg_realm(lp_ctx), principal->name.name_string.val[1]) == 0) {
                        /* look for outbound trust */
                        direction = OUTBOUND;
                        realm = principal->realm;
+               } else {
+                       krb5_warnx(context, "samba_kdc_fetch: not our realm for trusts ('%s', '%s')",
+                                  principal->realm, principal->name.name_string.val[1]);
+                       krb5_set_error_message(context, HDB_ERR_NOENTRY, "samba_kdc_fetch: not our realm for trusts ('%s', '%s')",
+                                              principal->realm, principal->name.name_string.val[1]);
+                       return HDB_ERR_NOENTRY;
                }
 
                /* Trusted domains are under CN=system */