aboutsummaryrefslogtreecommitdiff
path: root/lib/krb5/principal.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/krb5/principal.c')
-rw-r--r--lib/krb5/principal.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/krb5/principal.c b/lib/krb5/principal.c
index 143dd6414b1e..23c459281e5e 100644
--- a/lib/krb5/principal.c
+++ b/lib/krb5/principal.c
@@ -1247,6 +1247,32 @@ krb5_principal_is_root_krbtgt(krb5_context context, krb5_const_principal p)
strcmp(p->name.name_string.val[1], p->realm) == 0;
}
+/**
+ * Returns true iff name is WELLKNOWN/ANONYMOUS
+ *
+ * @ingroup krb5_principal
+ */
+
+KRB5_LIB_FUNCTION krb5_boolean KRB5_LIB_CALL
+krb5_principal_is_anonymous(krb5_context context,
+ krb5_const_principal p,
+ unsigned int flags)
+{
+ int anon_realm;
+
+ if ((p->name.name_type != KRB5_NT_WELLKNOWN &&
+ p->name.name_type != KRB5_NT_UNKNOWN) ||
+ p->name.name_string.len != 2 ||
+ strcmp(p->name.name_string.val[0], KRB5_WELLKNOWN_NAME) != 0 ||
+ strcmp(p->name.name_string.val[1], KRB5_ANON_NAME) != 0)
+ return FALSE;
+
+ anon_realm = strcmp(p->realm, KRB5_ANON_REALM) == 0;
+
+ return ((flags & KRB5_ANON_MATCH_AUTHENTICATED) && !anon_realm) ||
+ ((flags & KRB5_ANON_MATCH_UNAUTHENTICATED) && anon_realm);
+}
+
static int
tolower_ascii(int c)
{