1 /* 2 * virnetsaslcontext.h: SASL encryption/auth handling 3 * 4 * Copyright (C) 2010-2011 Red Hat, Inc. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library. If not, see 18 * <http://www.gnu.org/licenses/>. 19 */ 20 21 #pragma once 22 23 #include "internal.h" 24 #include <sasl/sasl.h> 25 26 #include "virobject.h" 27 28 typedef struct _virNetSASLContext virNetSASLContext; 29 30 typedef struct _virNetSASLSession virNetSASLSession; 31 32 enum { 33 VIR_NET_SASL_COMPLETE, 34 VIR_NET_SASL_CONTINUE, 35 VIR_NET_SASL_INTERACT, 36 }; 37 38 virNetSASLContext *virNetSASLContextNewClient(void); 39 virNetSASLContext *virNetSASLContextNewServer(const char *const *usernameACL, 40 unsigned int min_ssf); 41 42 int virNetSASLContextCheckIdentity(virNetSASLContext *ctxt, 43 const char *identity); 44 45 unsigned int virNetSASLContextGetTCPMinSSF(virNetSASLContext *ctxt); 46 47 virNetSASLSession *virNetSASLSessionNewClient(virNetSASLContext *ctxt, 48 const char *service, 49 const char *hostname, 50 const char *localAddr, 51 const char *remoteAddr, 52 sasl_callback_t *cbs); 53 virNetSASLSession *virNetSASLSessionNewServer(virNetSASLContext *ctxt, 54 const char *service, 55 const char *localAddr, 56 const char *remoteAddr); 57 58 char *virNetSASLSessionListMechanisms(virNetSASLSession *sasl); 59 60 int virNetSASLSessionExtKeySize(virNetSASLSession *sasl, 61 int ssf); 62 63 int virNetSASLSessionGetKeySize(virNetSASLSession *sasl); 64 65 const char *virNetSASLSessionGetIdentity(virNetSASLSession *sasl); 66 67 int virNetSASLSessionSecProps(virNetSASLSession *sasl, 68 int minSSF, 69 int maxSSF, 70 bool allowAnonymous); 71 72 int virNetSASLSessionClientStart(virNetSASLSession *sasl, 73 const char *mechlist, 74 sasl_interact_t **prompt_need, 75 const char **clientout, 76 size_t *clientoutlen, 77 const char **mech); 78 79 int virNetSASLSessionClientStep(virNetSASLSession *sasl, 80 const char *serverin, 81 size_t serverinlen, 82 sasl_interact_t **prompt_need, 83 const char **clientout, 84 size_t *clientoutlen); 85 86 int virNetSASLSessionServerStart(virNetSASLSession *sasl, 87 const char *mechname, 88 const char *clientin, 89 size_t clientinlen, 90 const char **serverout, 91 size_t *serveroutlen); 92 93 int virNetSASLSessionServerStep(virNetSASLSession *sasl, 94 const char *clientin, 95 size_t clientinlen, 96 const char **serverout, 97 size_t *serveroutlen); 98 99 size_t virNetSASLSessionGetMaxBufSize(virNetSASLSession *sasl); 100 101 ssize_t virNetSASLSessionEncode(virNetSASLSession *sasl, 102 const char *input, 103 size_t inputLen, 104 const char **output, 105 size_t *outputlen); 106 107 ssize_t virNetSASLSessionDecode(virNetSASLSession *sasl, 108 const char *input, 109 size_t inputLen, 110 const char **output, 111 size_t *outputlen); 112