/* n.b., conn is available here, but do not hold onto the reference
* because it may be cleaned up if the originating connection goes
* down before the message is processed */
- mq_msg=tr_mq_msg_new(tmp_ctx, TR_MQMSG_MSG_RECEIVED, TR_MQ_PRIO_NORMAL);
+ mq_msg= tr_mq_msg_new(tmp_ctx, TR_MQMSG_MSG_RECEIVED);
if (mq_msg==NULL) {
return TRP_NOMEM;
}
if (trps_authorize_connection(trps, conn)!=TRP_SUCCESS)
goto cleanup;
- msg=tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPS_CONNECTED, TR_MQ_PRIO_HIGH);
+ msg= tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPS_CONNECTED);
tr_mq_msg_set_payload(msg, (void *)tr_dup_name(trp_connection_get_peer(conn)), tr_free_name_helper);
if (msg==NULL) {
tr_err("tr_trps_thread: error allocating TR_MQ_MSG");
trps_handle_connection(trps, conn);
cleanup:
- msg=tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPS_DISCONNECTED, TR_MQ_PRIO_HIGH);
+ msg= tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPS_DISCONNECTED);
tr_mq_msg_set_payload(msg, (void *)conn, NULL); /* do not pass a free routine */
if (msg==NULL)
tr_err("tr_trps_thread: error allocating TR_MQ_MSG");
s=tr_mq_msg_get_message(msg);
if (0==strcmp(s, TR_MQMSG_TRPS_CONNECTED)) {
TR_NAME *peer_gssname=(TR_NAME *)tr_mq_msg_get_payload(msg);
- peer=trps_get_peer_by_gssname(trps, peer_gssname); /* get the peer record */
- tmp = tr_name_strdup(peer_gssname); /* get the name as a null-terminated string */
- if (peer==NULL)
- tr_err("tr_trps_process_mq: incoming connection from unknown peer (%s) reported.", tmp);
- else {
- trp_peer_set_incoming_status(peer, PEER_CONNECTED);
- tr_notice("tr_trps_process_mq: incoming connection from %s established.", tmp);
+ if (NULL == peer_gssname) {
+ /* This should not happen, we should not be able to establish a connection if we do not
+ * know their GSS name */
+ tr_err("tr_trps_process_mq: incoming connection from unknown GSS name reported.");
+ } else {
+ peer = trps_get_peer_by_gssname(trps, peer_gssname); /* get the peer record */
+ tmp = tr_name_strdup(peer_gssname); /* get the name as a null-terminated string */
+ if (peer == NULL)
+ tr_err("tr_trps_process_mq: incoming connection from unknown peer (%s) reported.", tmp);
+ else {
+ trp_peer_set_incoming_status(peer, PEER_CONNECTED);
+ tr_info("tr_trps_process_mq: incoming connection from %s established.", tmp);
+ }
+ free(tmp);
}
- free(tmp);
}
else if (0==strcmp(s, TR_MQMSG_TRPS_DISCONNECTED)) {
TRP_CONNECTION *conn=talloc_get_type_abort(tr_mq_msg_get_payload(msg), TRP_CONNECTION);
TR_NAME *peer_gssname=trp_connection_get_peer(conn);
- peer=trps_get_peer_by_gssname(trps, peer_gssname); /* get the peer record */
- tmp = tr_name_strdup(peer_gssname); /* get the name as a null-terminated string */
- if (peer==NULL) {
- tr_err("tr_trps_process_mq: incoming connection from unknown peer (%.*s) lost.", tmp);
+
+ if (NULL == peer_gssname) {
+ /* If the GSS auth failed, then we don't know the peer's GSS name. */
+ tr_info("tr_trps_process_mq: incoming connection failed to auth.");
} else {
- trp_peer_set_incoming_status(peer, PEER_DISCONNECTED);
- tr_trps_cleanup_conn(trps, conn);
- tr_notice("tr_trps_process_mq: incoming connection from %s lost.", tmp);
+ /* We do know the peer's GSS name, see if we recognize it. */
+ peer = trps_get_peer_by_gssname(trps, peer_gssname); /* get the peer record */
+ tmp = tr_name_strdup(peer_gssname); /* get the name as a null-terminated string */
+ if (peer == NULL) {
+ tr_err("tr_trps_process_mq: incoming connection from unknown peer (%.*s) lost.", tmp);
+ } else {
+ trp_peer_set_incoming_status(peer, PEER_DISCONNECTED);
+ tr_trps_cleanup_conn(trps, conn);
+ tr_info("tr_trps_process_mq: incoming connection from %s lost.", tmp);
+ }
+ free(tmp);
}
- free(tmp);
}
else if (0==strcmp(s, TR_MQMSG_TRPC_CONNECTED)) {
TR_NAME *svcname=(TR_NAME *)tr_mq_msg_get_payload(msg);
- peer=trps_get_peer_by_servicename(trps, svcname);
- tmp = tr_name_strdup(svcname);
- if (peer==NULL)
- tr_err("tr_trps_process_mq: outgoing connection to unknown peer (%s) reported.", tmp);
- else {
- trp_peer_set_outgoing_status(peer, PEER_CONNECTED);
- tr_notice("tr_trps_process_mq: outgoing connection to %s established.", tmp);
+ if (NULL == svcname) {
+ /* This should not happen because we shouldn't be reporting a connection unless we were
+ * able to auth the service name. */
+ tr_err("tr_trps_process_mq: outgoing connection established to unknown GSS service name.");
+ } else {
+ peer = trps_get_peer_by_servicename(trps, svcname);
+ tmp = tr_name_strdup(svcname);
+ if (peer == NULL)
+ tr_err("tr_trps_process_mq: outgoing connection to unknown peer (%s) reported.", tmp);
+ else {
+ trp_peer_set_outgoing_status(peer, PEER_CONNECTED);
+ tr_info("tr_trps_process_mq: outgoing connection to %s established.", tmp);
+ }
+ free(tmp);
}
- free(tmp);
}
else if (0==strcmp(s, TR_MQMSG_TRPC_DISCONNECTED)) {
TRPC_INSTANCE *trpc=talloc_get_type_abort(tr_mq_msg_get_payload(msg), TRPC_INSTANCE);
TR_NAME *svcname=trpc_get_gssname(trpc);
- peer=trps_get_peer_by_servicename(trps, svcname);
- tmp = tr_name_strdup(svcname);
- if (peer==NULL)
- tr_err("tr_trps_process_mq: outgoing connection to unknown peer (%s) lost.", tmp);
- else {
- trp_peer_set_outgoing_status(peer, PEER_DISCONNECTED);
- tr_notice("tr_trps_process_mq: outgoing connection to %s lost.", tmp);
- tr_trps_cleanup_trpc(trps, trpc);
+ if (NULL == svcname) {
+ tr_info("tr_trps_process_mq: outgoing connection to unknown GSS service name lost.");
+ } else {
+ peer = trps_get_peer_by_servicename(trps, svcname);
+ tmp = tr_name_strdup(svcname);
+ if (peer == NULL)
+ tr_err("tr_trps_process_mq: outgoing connection to unknown peer (%s) lost.", tmp);
+ else {
+ trp_peer_set_outgoing_status(peer, PEER_DISCONNECTED);
+ tr_info("tr_trps_process_mq: outgoing connection to %s lost.", tmp);
+ tr_trps_cleanup_trpc(trps, trpc);
+ }
+ free(tmp);
}
- free(tmp);
}
else if (0==strcmp(s, TR_MQMSG_MSG_RECEIVED)) {
if (trps_handle_tr_msg(trps, tr_mq_msg_get_payload(msg))!=TRP_SUCCESS)
- tr_notice("tr_trps_process_mq: error handling message.");
+ tr_err("tr_trps_process_mq: error handling message.");
}
else
tr_notice("tr_trps_process_mq: unknown message '%s' received.", tr_mq_msg_get_message(msg));
tr_debug("tr_trpc_thread: connected to peer %.*s",
peer_gssname->len, peer_gssname->buf);
- msg=tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPC_CONNECTED, TR_MQ_PRIO_HIGH);
+ msg= tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPC_CONNECTED);
tr_mq_msg_set_payload(msg, (void *)tr_dup_name(peer_gssname), tr_free_name_helper);
if (msg==NULL) {
tr_err("tr_trpc_thread: error allocating TR_MQ_MSG");
}
/* Send a DISCONNECTED message to the main thread */
- tr_debug("tr_trpc_thread: notifying main thread of disconnection.");
- msg=tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPC_DISCONNECTED, TR_MQ_PRIO_NORMAL);
+ msg= tr_mq_msg_new(tmp_ctx, TR_MQMSG_TRPC_DISCONNECTED);
tr_mq_msg_set_payload(msg, (void *)trpc, NULL); /* do not pass a free routine */
if (msg==NULL) {
/* can't notify main thread */