1/* 2 * Copyright (c) 1995 - 1999, 2003 Kungliga Tekniska Högskolan 3 * (Royal Institute of Technology, Stockholm, Sweden). 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of the Institute nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 */ 33 34#include "ftpd_locl.h" 35 36RCSID("$Id$"); 37 38#if defined(KRB5) 39 40int do_destroy_tickets = 1; 41char *k5ccname; 42 43#endif 44 45#ifdef KRB5 46 47static void 48dest_cc(void) 49{ 50 krb5_context context; 51 krb5_error_code ret; 52 krb5_ccache id; 53 54 ret = krb5_init_context(&context); 55 if (ret == 0) { 56 if (k5ccname) 57 ret = krb5_cc_resolve(context, k5ccname, &id); 58 else 59 ret = krb5_cc_default (context, &id); 60 if (ret) 61 krb5_free_context(context); 62 } 63 if (ret == 0) { 64 krb5_cc_destroy(context, id); 65 krb5_free_context (context); 66 } 67} 68#endif 69 70#if defined(KRB5) 71 72/* 73 * Only destroy if we created the tickets 74 */ 75 76void 77cond_kdestroy(void) 78{ 79 if (do_destroy_tickets) { 80#if KRB5 81 dest_cc(); 82#endif 83 do_destroy_tickets = 0; 84 } 85 afsunlog(); 86} 87 88void 89kdestroy(void) 90{ 91#if KRB5 92 dest_cc(); 93#endif 94 afsunlog(); 95 reply(200, "Tickets destroyed"); 96} 97 98 99void 100afslog(const char *cell, int quiet) 101{ 102 if(k_hasafs()) { 103#ifdef KRB5 104 krb5_context context; 105 krb5_error_code ret; 106 krb5_ccache id; 107 108 ret = krb5_init_context(&context); 109 if (ret == 0) { 110 if (k5ccname) 111 ret = krb5_cc_resolve(context, k5ccname, &id); 112 else 113 ret = krb5_cc_default(context, &id); 114 if (ret) 115 krb5_free_context(context); 116 } 117 if (ret == 0) { 118 krb5_afslog(context, id, cell, 0); 119 krb5_cc_close (context, id); 120 krb5_free_context (context); 121 } 122#endif 123 if (!quiet) 124 reply(200, "afslog done"); 125 } else { 126 if (!quiet) 127 reply(200, "no AFS present"); 128 } 129} 130 131void 132afsunlog(void) 133{ 134 if(k_hasafs()) 135 k_unlog(); 136} 137 138#else 139int ftpd_afslog_placeholder; 140#endif /* KRB5 */ 141