X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=sample%2Fserver.c;h=15c87d1d791b33fa916388902842470aa8ccbf2e;hb=0a0878a7050ca9fbcea4a17abfa7f2803838d80f;hp=0ba17a835edaaa7bd388eb5e7bf87b699703534a;hpb=8a6ebf445ca7de9dfa32e38f4bed4a8530c73d6c;p=cyrus-sasl.git diff --git a/sample/server.c b/sample/server.c index 0ba17a8..15c87d1 100644 --- a/sample/server.c +++ b/sample/server.c @@ -83,7 +83,9 @@ #include #include +#ifndef KRB5_HEIMDAL #include +#endif #include "common.h" @@ -185,7 +187,7 @@ int *listensock(const char *port, const int af) void usage(void) { - fprintf(stderr, "usage: server [-p port] [-s service] [-m mech]\n"); + fprintf(stderr, "usage: server [-C] [-h hostname] [-p port] [-s service] [-m mech]\n"); exit(EX_USAGE); } @@ -319,12 +321,26 @@ int main(int argc, char *argv[]) int c; char *port = "12345"; char *service = "rcmd"; + char *hostname = NULL; int *l, maxfd=0; int r, i; sasl_conn_t *conn; + int cb_flag = 0; - while ((c = getopt(argc, argv, "p:s:m:")) != EOF) { + while ((c = getopt(argc, argv, "Cch:p:s:m:")) != EOF) { switch(c) { + case 'C': + cb_flag = 2; /* channel bindings are critical */ + break; + + case 'c': + cb_flag = 1; /* channel bindings are present */ + break; + + case 'h': + hostname = optarg; + break; + case 'p': port = optarg; break; @@ -368,7 +384,7 @@ int main(int argc, char *argv[]) int nfds, fd = -1; FILE *in, *out; fd_set readfds; - sasl_channel_bindings cb; + sasl_channel_binding_t cb; FD_ZERO(&readfds); for (i = 1; i <= l[0]; i++) @@ -433,19 +449,23 @@ int main(int argc, char *argv[]) } snprintf(remoteaddr, sizeof(remoteaddr), "%s;%s", hbuf, pbuf); - r = gethostname(myhostname, sizeof(myhostname)-1); - if(r == -1) saslfail(r, "getting hostname"); + if (hostname == NULL) { + r = gethostname(myhostname, sizeof(myhostname)-1); + if(r == -1) saslfail(r, "getting hostname"); + hostname = myhostname; + } - r = sasl_server_new(service, myhostname, NULL, localaddr, remoteaddr, + r = sasl_server_new(service, hostname, NULL, localaddr, remoteaddr, NULL, 0, &conn); if (r != SASL_OK) saslfail(r, "allocating connection state"); - cb.type = "sasl-sample"; - cb.critical = 0; - cb.data = "this is a test of channel bindings"; - cb.len = strlen(cb.data); + cb.name = "sasl-sample"; + cb.critical = cb_flag > 1; + cb.data = "this is a test of channel binding"; + cb.len = strlen(cb.data); - sasl_setprop(conn, SASL_CHANNEL_BINDINGS, &cb); + if (cb_flag) + sasl_setprop(conn, SASL_CHANNEL_BINDING, &cb); /* set external properties here sasl_setprop(conn, SASL_SSF_EXTERNAL, &extprops); */