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)