mysql: revoke permissions when dropping database
[hcoop/domtool2.git] / openssl / openssl_sml.c
CommitLineData
925c75a7 1#include <openssl/ossl_typ.h>
a62a739c
CE
2#include <openssl/ssl.h>
3#include <openssl/err.h>
4#include <openssl/asn1.h>
559e89e9 5
a62a739c 6#include <string.h>
3b267643
AC
7#include <sys/types.h>
8#include <sys/socket.h>
9#include <unistd.h>
10#include <netinet/in.h>
11
12void OpenSSL_SML_init() {
13 SSL_library_init();
559e89e9
AC
14}
15
16void OpenSSL_SML_load_error_strings() {
17 SSL_load_error_strings();
3b267643 18 ERR_load_X509_strings();
559e89e9
AC
19}
20
21void OpenSSL_SML_load_BIO_strings() {
22 ERR_load_BIO_strings();
23}
24
25int OpenSSL_SML_get_error() {
26 return ERR_get_error();
27}
28
64a44dc0
AC
29int OpenSSL_SML_should_retry(BIO *b) {
30 return BIO_should_retry(b);
31}
32
559e89e9
AC
33const char *OpenSSL_SML_lib_error_string(int err) {
34 return ERR_lib_error_string(err);
35}
36
37const char *OpenSSL_SML_func_error_string(int err) {
38 return ERR_func_error_string(err);
39}
40
41const char *OpenSSL_SML_reason_error_string(int err) {
42 return ERR_reason_error_string(err);
43}
44
07cc384c
AC
45int OpenSSL_SML_read(BIO *b, void *data, int len) {
46 return BIO_read(b, data, len);
47}
48
559e89e9
AC
49int OpenSSL_SML_write(BIO *b, const void *data, int len) {
50 return BIO_write(b, data, len);
51}
52
53BIO *OpenSSL_SML_new_connect(char *addr) {
54 return BIO_new_connect(addr);
55}
56
57void OpenSSL_SML_free_all(BIO *b) {
58 BIO_free_all(b);
59}
60
61int OpenSSL_SML_do_connect(BIO *b) {
62 return BIO_do_connect(b);
63}
07cc384c
AC
64
65int OpenSSL_SML_do_accept(BIO *b) {
66 return BIO_do_accept(b);
67}
3b267643 68
60534712
AC
69int OpenSSL_SML_do_handshake(BIO *b) {
70 return BIO_do_handshake(b);
71}
72
3b267643
AC
73SSL_CTX *OpenSSL_SML_CTX_new(SSL_METHOD *meth) {
74 SSL_CTX *ctx = SSL_CTX_new(meth);
75 SSL_CTX_set_verify(ctx,
76 SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
77 0);
2ee50226
AC
78 SSL_CTX_set_verify_depth(ctx,
79 2);
3b267643
AC
80 return ctx;
81}
82
83void OpenSSL_SML_CTX_free(SSL_CTX *ctx) {
84 return SSL_CTX_free(ctx);
85}
86
a62a739c 87const SSL_METHOD *OpenSSL_SML_SSLv23_method() {
3b267643
AC
88 return SSLv23_method();
89}
90
91int OpenSSL_SML_load_verify_locations(SSL_CTX *ctx, const char *trust, const char *certs) {
92 return SSL_CTX_load_verify_locations(ctx, trust, certs);
93}
94
95BIO *OpenSSL_SML_new_ssl_connect(SSL_CTX *ctx) {
96 BIO *bio = BIO_new_ssl_connect(ctx);
97 SSL *ssl;
98
99 BIO_get_ssl(bio, &ssl);
100 SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
101
102 return bio;
103}
104
60534712
AC
105BIO *OpenSSL_SML_new_ssl(SSL_CTX *ctx) {
106 BIO *bio = BIO_new_ssl_connect(ctx);
107 SSL *ssl;
108
109 BIO_get_ssl(bio, &ssl);
110 SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
111
112 return bio;
113}
114
115BIO *OpenSSL_SML_new_accept(SSL_CTX *ctx, char *port) {
116 BIO *sbio = BIO_new_ssl(ctx, 0);
117 BIO *acpt = BIO_new_accept(port);
118
119 BIO_set_accept_bios(acpt, sbio);
120
121 return acpt;
122}
3b267643
AC
123
124SSL *OpenSSL_SML_get_ssl(BIO *bio) {
125 SSL *ssl;
126
127 if (BIO_get_ssl(bio, &ssl) <= 0)
128 return NULL;
129 else
130 return ssl;
131}
132
133int OpenSSL_SML_set_conn_hostname(BIO *bio, char *hostname) {
134 BIO_set_conn_hostname(bio, hostname);
135}
136
137int OpenSSL_SML_set_accept_port(BIO *bio, char *port) {
138 BIO_set_accept_port(bio, port);
139}
140
141int OpenSSL_SML_tcp_listen(int port, int qsize) {
142 int sock;
143 struct sockaddr_in sin;
144 int val=1;
145
146 if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
147 return -1;
148
149 memset(&sin,0,sizeof(sin));
150 sin.sin_addr.s_addr=INADDR_ANY;
151 sin.sin_family=AF_INET;
152 sin.sin_port=htons(port);
153 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,
154 &val,sizeof(val));
155
156 if(bind(sock,(struct sockaddr *)&sin,
157 sizeof(sin))<0)
158 return -1;
159 listen(sock, qsize);
160
161 return sock;
162}
163
164int OpenSSL_SML_accept(int sock) {
165 return accept(sock, 0, 0);
166}
167
168BIO *OpenSSL_SML_new_socket(int sock) {
169 return BIO_new_socket(sock, BIO_NOCLOSE);
170}
171
172SSL *OpenSSL_SML_SSL_new(SSL_CTX *ctx) {
173 SSL *ssl = SSL_new(ctx);
174
175 return ssl;
176}
177
178int OpenSSL_SML_SSL_shutdown(SSL *ssl) {
179 return SSL_shutdown(ssl);
180}
181
182void OpenSSL_SML_shutdown(int sock) {
183 shutdown(sock, 1);
184}
185
186void OpenSSL_SML_SSL_set_bio(SSL *ssl, BIO *b1, BIO *b2) {
187 SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
188 SSL_set_bio(ssl, b1, b2);
60534712 189 BIO_set_ssl(b1, ssl, BIO_NOCLOSE);
3b267643
AC
190}
191
192int OpenSSL_SML_use_PrivateKey_file(SSL_CTX *ctx, char *keyfile) {
193 return SSL_CTX_use_PrivateKey_file(ctx,
194 keyfile,
195 SSL_FILETYPE_PEM);
196}
197
198int OpenSSL_SML_SSL_accept(SSL *ssl) {
199 return SSL_accept(ssl);
200}
201
202int OpenSSL_SML_use_certificate_chain_file(SSL_CTX *ctx, char *keyfile) {
203 return SSL_CTX_use_certificate_chain_file(ctx,
204 keyfile);
205}
206
3b267643
AC
207const char *OpenSSL_SML_get_peer_name(SSL *ssl) {
208 X509 *x = SSL_get_peer_certificate(ssl);
3b267643
AC
209
210 if (x) {
211 X509_NAME *name = X509_get_subject_name(x);
212
213 if (name) {
3b267643
AC
214 X509_NAME_ENTRY *ne;
215
51be7da6 216 ne = X509_NAME_get_entry(name, 0);
3b267643
AC
217
218 if (ne) {
219 ASN1_STRING *s = X509_NAME_ENTRY_get_data(ne);
220 static char ret[1024];
221
a62a739c 222 if (ASN1_STRING_length(s) >= sizeof ret)
3b267643
AC
223 return NULL;
224 else {
a62a739c
CE
225 memcpy(ret, ASN1_STRING_get0_data(s), ASN1_STRING_length(s));
226 ret[ASN1_STRING_length(s)] = 0;
3b267643
AC
227 return ret;
228 }
60534712
AC
229 } else {
230 printf("Null entry\n");
3b267643 231 return NULL;
60534712
AC
232 }
233 } else {
234 printf("Null name\n");
3b267643 235 return NULL;
60534712
AC
236 }
237 } else {
238 printf("Null certificate\n");
3b267643 239 return NULL;
60534712
AC
240 }
241}
242
243BIO *OpenSSL_SML_pop(BIO *b) {
244 return BIO_pop(b);
3b267643 245}
19f3c4e6
AC
246
247BIO *OpenSSL_SML_next(BIO *b) {
248 return BIO_next(b);
249}
36e42cb8
AC
250
251int OpenSSL_SML_puts(BIO *b, const char *buf) {
252 return BIO_puts(b, buf);
253}