X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=tid%2Ftids.c;h=c1c9bcbfada49f549545804dc8bd9e4f0b39063d;hb=2e19e2fc9c648e35aa96a52033c9129e2946c7cd;hp=2e226ef58fe991b3df43b4a720b289eb96c910e0;hpb=e9332953189a29c0c52f703e4a3717b6141306d9;p=trust_router.git diff --git a/tid/tids.c b/tid/tids.c index 2e226ef..c1c9bcb 100644 --- a/tid/tids.c +++ b/tid/tids.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -77,37 +78,12 @@ static TID_RESP *tids_create_response (TIDS_INSTANCE *tids, TID_REQ *req) cleanup: if ((!success) && (resp!=NULL)) { - if (resp->rp_realm!=NULL) - tr_free_name(resp->rp_realm); - if (resp->realm!=NULL) - tr_free_name(resp->realm); - if (resp->comm!=NULL) - tr_free_name(resp->comm); - if (resp->orig_coi!=NULL) - tr_free_name(resp->orig_coi); talloc_free(resp); resp=NULL; } return resp; } -static void tids_destroy_response(TIDS_INSTANCE *tids, TID_RESP *resp) -{ - if (resp) { - if (resp->err_msg) - tr_free_name(resp->err_msg); - if (resp->rp_realm) - tr_free_name(resp->rp_realm); - if (resp->realm) - tr_free_name(resp->realm); - if (resp->comm) - tr_free_name(resp->comm); - if (resp->orig_coi) - tr_free_name(resp->orig_coi); - talloc_free(resp); - } -} - static int tids_listen(TIDS_INSTANCE *tids, int port, int *fd_out, size_t max_fd) { int rc = 0; @@ -121,15 +97,17 @@ static int tids_listen(TIDS_INSTANCE *tids, int port, int *fd_out, size_t max_fd .ai_protocol=IPPROTO_TCP}; char *port_str=NULL; size_t n_opened=0; - + + tr_debug("tids_listen: started!"); port_str=talloc_asprintf(NULL, "%d", port); if (port_str==NULL) { tr_debug("tids_listen: unable to allocate port."); return -1; } - getaddrinfo(NULL, port_str, &hints, &ai_head); + tr_debug("getaddrinfo()=%d", getaddrinfo(NULL, port_str, &hints, &ai_head)); talloc_free(port_str); + tr_debug("tids_listen: got address info"); /* TODO: listen on all ports */ for (ai=ai_head,n_opened=0; (ai!=NULL)&&(n_openedai_next) { @@ -217,8 +195,11 @@ static int tids_auth_connection (TIDS_INSTANCE *inst, if (rc = gsscon_passive_authenticate(conn, nameBuffer, gssctx, tids_auth_cb, inst)) { tr_debug("tids_auth_connection: Error from gsscon_passive_authenticate(), rc = %d.", rc); + free(name); return -1; } + free(name); + nameBuffer.value=NULL; nameBuffer.length=0; if (rc = gsscon_authorize(*gssctx, &auth, &autherr)) { tr_debug("tids_auth_connection: Error from gsscon_authorize, rc = %d, autherr = %d.", @@ -314,7 +295,6 @@ int tids_send_err_response (TIDS_INSTANCE *tids, TID_REQ *req, const char *err_m tr_crit("tids_send_err_response: Can't create response."); return -1; } - /* mark this as an error response, and include the error message */ resp->result = TID_ERROR; @@ -323,7 +303,7 @@ int tids_send_err_response (TIDS_INSTANCE *tids, TID_REQ *req, const char *err_m rc = tids_send_response(tids, req, resp); - tids_destroy_response(tids, resp); + tid_resp_free(resp); return rc; } @@ -345,7 +325,7 @@ int tids_send_response (TIDS_INSTANCE *tids, TID_REQ *req, TID_RESP *resp) if (NULL == (resp_buf = tr_msg_encode(&mresp))) { - fprintf(stderr, "tids_send_response: Error encoding json response.\n"); + tr_err("tids_send_response: Error encoding json response."); tr_audit_req(req); return -1; @@ -425,22 +405,21 @@ static void tids_handle_connection (TIDS_INSTANCE *tids, int conn) /* Fall through to free the response, either way. */ } - tids_destroy_response(tids, resp); - tr_msg_free_decoded(mreq); + tr_msg_free_decoded(mreq); /* takes resp with it */ return; } } -TIDS_INSTANCE *tids_create (TALLOC_CTX *mem_ctx) +TIDS_INSTANCE *tids_create (void) { - return talloc_zero(mem_ctx, TIDS_INSTANCE); + return talloc_zero(NULL, TIDS_INSTANCE); } /* Get a listener for tids requests, returns its socket fd. Accept * connections with tids_accept() */ int tids_get_listener(TIDS_INSTANCE *tids, TIDS_REQ_FUNC *req_handler, - TIDS_AUTH_FUNC *auth_handler, + tids_auth_func *auth_handler, const char *hostname, unsigned int port, void *cookie, @@ -452,16 +431,16 @@ int tids_get_listener(TIDS_INSTANCE *tids, tids->tids_port = port; n_fd=tids_listen(tids, port, fd_out, max_fd); - if (n_fd==0) - tr_debug("tids_get_listener: Error opening port %d"); + if (n_fd<=0) + tr_err("tids_get_listener: Error opening port %d"); else { /* opening port succeeded */ - tr_debug("tids_get_listener: Opened port %d.", port); + tr_info("tids_get_listener: Opened port %d.", port); /* make this socket non-blocking */ for (ii=0; ii