X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=sample%2Fserver.c;h=0fc478ce472efb69baf5b8a985fde6cf358100e4;hb=3f50108b1360d5a3761692163107305f58dec308;hp=6eaabd87770158135d02d40d05eee4102dac1426;hpb=d82929692e2112d795b22922b5cbdae4fbf7a13b;p=cyrus-sasl.git diff --git a/sample/server.c b/sample/server.c index 6eaabd8..0fc478c 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,18 +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.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); */ @@ -580,7 +601,9 @@ enumerateAttributes(OM_uint32 *minor, dumpAttribute(minor, name, &attrs->elements[i], noisy); } +#ifndef KRB5_HEIMDAL gss_release_oid(&tmp, &mech); +#endif gss_release_buffer_set(&tmp, &attrs); return major;