1 /* $Id: kcglue_krb.c,v 1.3 2003/02/13 19:55:56 rjs3 Exp $
2 * Copyright (c) 1998-2003 Carnegie Mellon University. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
16 * 3. The name "Carnegie Mellon University" must not be used to
17 * endorse or promote products derived from this software without
18 * prior written permission. For permission or any other legal
19 * details, please contact
20 * Office of Technology Transfer
21 * Carnegie Mellon University
23 * Pittsburgh, PA 15213-3890
24 * (412) 268-4387, fax: (412) 268-7395
25 * tech-transfer@andrew.cmu.edu
27 * 4. Redistributions of any form whatsoever must retain the following
29 * "This product includes software developed by Computing Services
30 * at Carnegie Mellon University (http://www.cmu.edu/computing/)."
32 * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
33 * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
34 * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
35 * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
36 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
37 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
38 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
42 #include <kcglue_krb.h>
43 #include "macKClientPublic.h"
52 #define SOME_KRB_ERR_NUMBER (70)
53 #define MAX_KRB_ERRORS 256
55 const char *krb_err_txt[MAX_KRB_ERRORS]={
56 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
57 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
58 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
59 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
60 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
61 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
62 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
63 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
64 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
65 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
66 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
67 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
68 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
69 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
70 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
71 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
72 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
73 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
74 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
75 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
76 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
77 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
78 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
79 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
80 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
81 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
82 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
83 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
84 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
85 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
86 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err",
87 "krb err","krb err","krb err","krb err","krb err","krb err","krb err","krb err"
92 * given a service instance and realm, combine them to foo.bar@REALM
93 * return true upon success
95 static int implode_krb_user_info(char *dst,const char *service,const char *instance,const char *realm)
97 if(strlen(service)>=KCGLUE_ITEM_SIZE)
99 if(strlen(instance)>=KCGLUE_ITEM_SIZE)
101 if(strlen(realm)>=KCGLUE_ITEM_SIZE)
107 strcpy(dst,instance);
115 int kcglue_krb_mk_req(void *dat,int *len, const char *service, char *instance, char *realm,
121 char tkt_buf[KCGLUE_MAX_KTXT_LEN+20];
122 char user_id[KCGLUE_MAX_K_STR_LEN+1];
123 KClientSessionInfo ses;
124 int have_session=FALSE;
127 if(!implode_krb_user_info(user_id,service,instance,realm))
128 return SOME_KRB_ERR_NUMBER;
130 rc=KClientNewSession(&ses,0,0,0,0);
132 return SOME_KRB_ERR_NUMBER;
135 *len=sizeof(tkt_buf)-10;
136 rc=KClientGetTicketForServiceFull(&ses,user_id,tkt_buf,len,checksum);
138 memcpy(dat,tkt_buf+4,*len); /*kclient puts out a 4 byte length that mit doesnt*/
139 rc=KClientGetSessionKey(&ses,des_key);
142 rc=KClientGetUserName(pname);
145 KClientDisposeSession(&ses);
148 return SOME_KRB_ERR_NUMBER;