summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorSam Hartman <hartmans@mit.edu>2003-01-08 23:49:33 +0000
committerSam Hartman <hartmans@mit.edu>2003-01-08 23:49:33 +0000
commitadafd55a957ecacfcd206e7f639cab9e06960a1c (patch)
tree9f2f683bb8ef7fba59d7ece90c3818a99ad5d0e1 /src/lib
parent1ca305117cccd8dd411cb939bb99e29e7b75a884 (diff)
downloadkrb5-adafd55a957ecacfcd206e7f639cab9e06960a1c.tar.gz
krb5-adafd55a957ecacfcd206e7f639cab9e06960a1c.tar.xz
krb5-adafd55a957ecacfcd206e7f639cab9e06960a1c.zip
Previously fwd_tgt_creds required either that the hostname be passed
in or that the principal be a host-based service. This means you cannot for example forward tickets to a GSSAPI user-based service. The requirement to get the hostname is only needed in cases where addressless tickets are not used. So when addressless tickets are used, do not require the hostname. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@15099 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/krb5/krb/ChangeLog4
-rw-r--r--src/lib/krb5/krb/fwd_tgt.c35
2 files changed, 25 insertions, 14 deletions
diff --git a/src/lib/krb5/krb/ChangeLog b/src/lib/krb5/krb/ChangeLog
index 932528a7d..826cdc08f 100644
--- a/src/lib/krb5/krb/ChangeLog
+++ b/src/lib/krb5/krb/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-08 Sam Hartman <hartmans@mit.edu>
+
+ * fwd_tgt.c (krb5_fwd_tgt_creds): Don't require hostname to be supplied unless you are using addresses in the ticket.
+
2003-01-07 Ken Raeburn <raeburn@mit.edu>
* appdefault.c (conf_yes, conf_no): Now const.
diff --git a/src/lib/krb5/krb/fwd_tgt.c b/src/lib/krb5/krb/fwd_tgt.c
index f8818d4fb..aa42f8cc1 100644
--- a/src/lib/krb5/krb/fwd_tgt.c
+++ b/src/lib/krb5/krb/fwd_tgt.c
@@ -60,20 +60,6 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context, char *r
memset((char *)&creds, 0, sizeof(creds));
memset((char *)&tgt, 0, sizeof(creds));
- if (rhost == NULL) {
- if (krb5_princ_type(context, server) != KRB5_NT_SRV_HST)
- return(KRB5_FWD_BAD_PRINCIPAL);
-
- if (krb5_princ_size(context, server) < 2)
- return (KRB5_CC_BADNAME);
-
- rhost = malloc(server->data[1].length+1);
- if (!rhost)
- return ENOMEM;
- free_rhost = 1;
- memcpy(rhost, server->data[1].data, server->data[1].length);
- rhost[server->data[1].length] = '\0';
- }
if (cc == 0) {
if ((retval = krb5int_cc_default(context, &cc)))
goto errout;
@@ -140,6 +126,27 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context, char *r
}
if (tgt.addresses && *tgt.addresses) {
+ if (rhost == NULL) {
+ if (krb5_princ_type(context, server) != KRB5_NT_SRV_HST) {
+retval = KRB5_FWD_BAD_PRINCIPAL;
+ goto errout;
+ }
+
+ if (krb5_princ_size(context, server) < 2){
+ retval = KRB5_CC_BADNAME;
+ goto errout;
+ }
+
+ rhost = malloc(server->data[1].length+1);
+ if (!rhost) {
+ retval = ENOMEM;
+ goto errout;
+ }
+ free_rhost = 1;
+ memcpy(rhost, server->data[1].data, server->data[1].length);
+ rhost[server->data[1].length] = '\0';
+ }
+
retval = krb5_os_hostaddr(context, rhost, &addrs);
if (retval)
goto errout;