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: security.h 21224 2007-06-20 10:15:13Z lha $ */ 35 36#ifndef __security_h__ 37#define __security_h__ 38 39enum protection_level { 40 prot_clear, 41 prot_safe, 42 prot_confidential, 43 prot_private 44}; 45 46struct 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 58struct 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 int (*session)(void*, char*); 74}; 75 76#define AUTH_OK 0 77#define AUTH_CONTINUE 1 78#define AUTH_ERROR 2 79 80extern int ftp_do_gss_bindings; 81extern int ftp_do_gss_delegate; 82#ifdef FTP_SERVER 83extern struct sec_server_mech krb4_server_mech, gss_server_mech; 84#else 85extern struct sec_client_mech krb4_client_mech, gss_client_mech; 86#endif 87 88extern int sec_complete; 89 90#ifdef FTP_SERVER 91extern char *ftp_command; 92void new_ftp_command(char*); 93void delete_ftp_command(void); 94#endif 95 96/* ---- */ 97 98 99int sec_fflush (FILE *); 100int sec_fprintf (FILE *, const char *, ...) 101 __attribute__ ((format (printf, 2,3))); 102int sec_getc (FILE *); 103int sec_putc (int, FILE *); 104int sec_read (int, void *, int); 105int sec_read_msg (char *, int); 106int sec_vfprintf (FILE *, const char *, va_list) 107 __attribute__ ((format (printf, 2,0))); 108int sec_fprintf2(FILE *f, const char *fmt, ...) 109 __attribute__ ((format (printf, 2,3))); 110int sec_vfprintf2(FILE *, const char *, va_list) 111 __attribute__ ((format (printf, 2,0))); 112int sec_write (int, char *, int); 113 114#ifdef FTP_SERVER 115void adat (char *); 116void auth (char *); 117void ccc (void); 118void mec (char *, enum protection_level); 119void pbsz (int); 120void prot (char *); 121void delete_ftp_command (void); 122void new_ftp_command (char *); 123int sec_userok (char *); 124int sec_session(char *); 125int secure_command (void); 126enum protection_level get_command_prot(void); 127#else 128void sec_end (void); 129int sec_login (char *); 130void sec_prot (int, char **); 131void sec_prot_command (int, char **); 132int sec_request_prot (char *); 133void sec_set_protection_level (void); 134void sec_status (void); 135 136enum protection_level set_command_prot(enum protection_level); 137 138#endif 139 140#endif /* __security_h__ */ 141