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