54 #if defined(HAVE_SASL2) && defined(HAVE_THREADS) && (HAVE_SEMAPHORE_H)
63 #include <netinet/in.h>
64 #include <sys/types.h>
66 #include <sys/socket.h>
67 #include "ac/getopt.h"
69 #include <sasl/sasl.h>
72 #include "ac/pthread.h"
79 int sock = ((
int *)((
void **)arg)[0])[0];
80 struct mbdyn_sasl_t *mbdyn_sasl = ((
void **)arg)[1];
83 mbdyn_sasl_init(mbdyn_sasl);
85 if (mbdyn_sasl_auth(sock, NULL, mbdyn_sasl) == SASL_OK) {
86 printf(
"[server] OK\n");
88 printf(
"[server] FAIL\n");
97 main(
int argc,
char *argv[])
103 struct mbdyn_sasl_t mbdyn_sasl = MBDYN_SASL_INIT,
104 mbdyn_sasl_client = MBDYN_SASL_INIT,
105 mbdyn_sasl_server = MBDYN_SASL_INIT;
108 int opt =
getopt(argc, argv,
"s:" );
117 printf(
"UNKNOWN PARAMETER '%c'\n", opt);
123 printf(
"usage: %s [-s{ailmrsuw}=<value>]\n"
124 "\ta=<authz> client: authorization identity (optional)\n"
125 "\tf=<flag>[=<value>]\n"
126 "\ti=<remoteip> remote ip\n"
127 "\tl=<localip> local ip\n"
128 "\tm=<method> (list of) acceptable method(s)\n"
129 "\tr=<realm> client: user realm;\n"
130 "\t server: server realm\n"
132 "\ts={server|client} use SASL to negotiate auth \n"
133 "\t as server or client\n"
135 "\tu=<user> client: user identity\n"
136 "\tw=<cred> client: user credential\n", argv[0]);
142 mbdyn_sasl_server.use_sasl = MBDYN_SASL_SERVER;
143 mbdyn_sasl_server.sasl_mech = mbdyn_sasl.sasl_mech;
144 mbdyn_sasl_server.sasl_realm = mbdyn_sasl.sasl_realm;
146 if (mbdyn_sasl_validate(&mbdyn_sasl_server) != SASL_OK) {
147 fprintf(stderr,
"[server] SASL DATA DID NOT VALIDATE\n");
152 mbdyn_sasl_client = mbdyn_sasl;
153 mbdyn_sasl_client.use_sasl = MBDYN_SASL_CLIENT;
155 if (mbdyn_sasl_validate(&mbdyn_sasl_client) != SASL_OK) {
156 fprintf(stderr,
"[client] SASL DATA DID NOT VALIDATE\n");
161 rc = socketpair(PF_LOCAL, SOCK_STREAM, 0, sockp);
163 fprintf(stderr,
"[client] socketpair() failed\n");
169 sem_init(&sem, 0, 0);
171 arg[1] = &mbdyn_sasl_server;
172 rc = pthread_create(&th, NULL, server_f, (
void *)arg);
174 fprintf(stderr,
"[client] pthread_create() failed\n");
180 mbdyn_sasl_init(&mbdyn_sasl_client);
182 if (mbdyn_sasl_auth(sock, NULL, &mbdyn_sasl_client) == SASL_OK) {
183 printf(
"[client] OK\n");
185 printf(
"[client] FAIL\n");
203 printf(
"need sasl2, pthreads and semaphores\n");
int getopt(int argc, char *const argv[], const char *opts)