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