1 /* 2 * Copyright (c) 1998 - 2000 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 /* $Id: security.h,v 1.9.12.1 2003/08/20 16:41:53 lha Exp $ */ 35 36 #ifndef __security_h__ 37 #define __security_h__ 38 39 enum protection_level { 40 prot_clear, 41 prot_safe, 42 prot_confidential, 43 prot_private 44 }; 45 46 struct sec_client_mech { 47 char *name; 48 size_t size; 49 int (*init)(void *); 50 int (*auth)(void *, char*); 51 void (*end)(void *); 52 int (*check_prot)(void *, int); 53 int (*overhead)(void *, int, int); 54 int (*encode)(void *, void*, int, int, void**); 55 int (*decode)(void *, void*, int, int); 56 }; 57 58 struct sec_server_mech { 59 char *name; 60 size_t size; 61 int (*init)(void *); 62 void (*end)(void *); 63 int (*check_prot)(void *, int); 64 int (*overhead)(void *, int, int); 65 int (*encode)(void *, void*, int, int, void**); 66 int (*decode)(void *, void*, int, int); 67 68 int (*auth)(void *); 69 int (*adat)(void *, void*, size_t); 70 size_t (*pbsz)(void *, size_t); 71 int (*ccc)(void*); 72 int (*userok)(void*, char*); 73 }; 74 75 #define AUTH_OK 0 76 #define AUTH_CONTINUE 1 77 #define AUTH_ERROR 2 78 79 extern int ftp_do_gss_bindings; 80 #ifdef FTP_SERVER 81 extern struct sec_server_mech krb4_server_mech, gss_server_mech; 82 #else 83 extern struct sec_client_mech krb4_client_mech, gss_client_mech; 84 #endif 85 86 extern int sec_complete; 87 88 #ifdef FTP_SERVER 89 extern char *ftp_command; 90 void new_ftp_command(char*); 91 void delete_ftp_command(void); 92 #endif 93 94 /* ---- */ 95 96 97 int sec_fflush (FILE *); 98 int sec_fprintf (FILE *, const char *, ...) 99 __attribute__ ((format (printf, 2,3))); 100 int sec_getc (FILE *); 101 int sec_putc (int, FILE *); 102 int sec_read (int, void *, int); 103 int sec_read_msg (char *, int); 104 int sec_vfprintf (FILE *, const char *, va_list) 105 __attribute__ ((format (printf, 2,0))); 106 int sec_fprintf2(FILE *f, const char *fmt, ...) 107 __attribute__ ((format (printf, 2,3))); 108 int sec_vfprintf2(FILE *, const char *, va_list) 109 __attribute__ ((format (printf, 2,0))); 110 int sec_write (int, char *, int); 111 112 #ifdef FTP_SERVER 113 void adat (char *); 114 void auth (char *); 115 void ccc (void); 116 void mec (char *, enum protection_level); 117 void pbsz (int); 118 void prot (char *); 119 void delete_ftp_command (void); 120 void new_ftp_command (char *); 121 int sec_userok (char *); 122 int secure_command (void); 123 enum protection_level get_command_prot(void); 124 #else 125 void sec_end (void); 126 int sec_login (char *); 127 void sec_prot (int, char **); 128 int sec_request_prot (char *); 129 void sec_set_protection_level (void); 130 void sec_status (void); 131 132 enum protection_level set_command_prot(enum protection_level); 133 134 #endif 135 136 #endif /* __security_h__ */ 137