summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorJohn Kohl <jtkohl@mit.edu>1991-02-18 16:38:54 +0000
committerJohn Kohl <jtkohl@mit.edu>1991-02-18 16:38:54 +0000
commit5f9be9ecf927d0e1ba01b4753c6cf449f2308f8f (patch)
tree21cc71d967e0b350e6de61b46eac802af8067e5d /src/lib
parentdb0d2f84354b7b189ce07c2c3c1675a42506876d (diff)
downloadkrb5-5f9be9ecf927d0e1ba01b4753c6cf449f2308f8f.tar.gz
krb5-5f9be9ecf927d0e1ba01b4753c6cf449f2308f8f.tar.xz
krb5-5f9be9ecf927d0e1ba01b4753c6cf449f2308f8f.zip
add KRB5_TC_MATCH_SRV_NAMEONLY
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1719 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/krb5/ccache/file/fcc_retrv.c21
-rw-r--r--src/lib/krb5/ccache/stdio/scc_retrv.c18
2 files changed, 37 insertions, 2 deletions
diff --git a/src/lib/krb5/ccache/file/fcc_retrv.c b/src/lib/krb5/ccache/file/fcc_retrv.c
index ac3791195..69c36c125 100644
--- a/src/lib/krb5/ccache/file/fcc_retrv.c
+++ b/src/lib/krb5/ccache/file/fcc_retrv.c
@@ -28,6 +28,10 @@ static krb5_boolean standard_fields_match
PROTOTYPE((const krb5_creds *,
const krb5_creds *));
+static krb5_boolean srvname_match
+ PROTOTYPE((const krb5_creds *,
+ const krb5_creds *));
+
static krb5_boolean authdata_match
PROTOTYPE ((krb5_authdata * const *, krb5_authdata * const *));
@@ -70,7 +74,9 @@ krb5_fcc_retrieve(id, whichfields, mcreds, creds)
return kret;
while ((kret = krb5_fcc_next_cred(id, &cursor, &fetchcreds)) == KRB5_OK) {
- if (standard_fields_match(mcreds, &fetchcreds)
+ if (((set(KRB5_TC_MATCH_SRV_NAMEONLY) &&
+ srvname_match(mcreds, &fetchcreds)) ||
+ standard_fields_match(mcreds, &fetchcreds))
&&
(! set(KRB5_TC_MATCH_IS_SKEY) ||
mcreds->is_skey == fetchcreds.is_skey)
@@ -129,6 +135,19 @@ register const krb5_creds *mcreds, *creds;
krb5_principal_compare(mcreds->server,creds->server));
}
+/* only match the server name portion, not the server realm portion */
+
+static krb5_boolean
+srvname_match(mcreds, creds)
+register const krb5_creds *mcreds, *creds;
+{
+ krb5_boolean retval;
+ retval = krb5_principal_compare(mcreds->client,creds->client);
+ if (retval != TRUE)
+ return retval;
+ return krb5_principal_compare(&(mcreds->server[1]),&(creds->server[1]));
+}
+
static krb5_boolean
authdata_match(mdata, data)
register krb5_authdata * const *mdata, * const *data;
diff --git a/src/lib/krb5/ccache/stdio/scc_retrv.c b/src/lib/krb5/ccache/stdio/scc_retrv.c
index 0eac3bbe7..f04ec1f11 100644
--- a/src/lib/krb5/ccache/stdio/scc_retrv.c
+++ b/src/lib/krb5/ccache/stdio/scc_retrv.c
@@ -56,6 +56,20 @@ register const krb5_creds *mcreds, *creds;
krb5_principal_compare(mcreds->server,creds->server));
}
+/* only match the server name portion, not the server realm portion */
+
+static krb5_boolean
+srvname_match(mcreds, creds)
+register const krb5_creds *mcreds, *creds;
+{
+ krb5_boolean retval;
+ retval = krb5_principal_compare(mcreds->client,creds->client);
+ if (retval != TRUE)
+ return retval;
+ return krb5_principal_compare(&(mcreds->server[1]),&(creds->server[1]));
+}
+
+
static krb5_boolean
authdata_match(mdata, data)
krb5_authdata *const *mdata, *const *data;
@@ -123,7 +137,9 @@ krb5_scc_retrieve(id, whichfields, mcreds, creds)
return kret;
while ((kret = krb5_scc_next_cred(id, &cursor, &fetchcreds)) == KRB5_OK) {
- if (standard_fields_match(mcreds, &fetchcreds)
+ if (((set(KRB5_TC_MATCH_SRV_NAMEONLY) &&
+ srvname_match(mcreds, &fetchcreds)) ||
+ standard_fields_match(mcreds, &fetchcreds))
&&
(! set(KRB5_TC_MATCH_IS_SKEY) ||
mcreds->is_skey == fetchcreds.is_skey)