X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=tid%2Ftid_req.c;h=002b7208a8ad6c8770f9f38bc6a61b9e80a8a590;hb=3feea37388d58efac91a7e10b85043bb52c8bf19;hp=a1a7a5a46502fa6e2585af11975a8cc5b20233e4;hpb=39c2dec6054da6fb692b40f6b5ac374795b17092;p=trust_router.git diff --git a/tid/tid_req.c b/tid/tid_req.c index a1a7a5a..002b720 100644 --- a/tid/tid_req.c +++ b/tid/tid_req.c @@ -33,6 +33,7 @@ */ #include +#include #include #include #include @@ -44,11 +45,26 @@ static int destroy_tid_req(TID_REQ *req) { - OM_uint32 minor; if (req->json_references) json_decref(req->json_references); - if (req->gssctx) - gss_delete_sec_context( &minor, &req->gssctx, NULL); + if (req->free_conn) { + if (req->conn) + close(req->conn); + if (req->gssctx) { + OM_uint32 minor; + gss_delete_sec_context( &minor, &req->gssctx, NULL); + } + } + if (req->rp_realm!=NULL) + tr_free_name(req->rp_realm); + if (req->realm!=NULL) + tr_free_name(req->realm); + if (req->comm!=NULL) + tr_free_name(req->comm); + if (req->orig_coi!=NULL) + tr_free_name(req->orig_coi); + if (req->request_id!=NULL) + tr_free_name(req->request_id); return 0; } @@ -61,6 +77,8 @@ TID_REQ *tid_req_new() req->json_references = json_array(); assert(req->json_references); req->conn = -1; + req->free_conn = 1; + req->request_id = NULL; return req; } @@ -149,11 +167,21 @@ TR_NAME *tid_req_get_orig_coi(TID_REQ *req) return(req->orig_coi); } -void tid_req_set_rp_orig_coi(TID_REQ *req, TR_NAME *orig_coi) +void tid_req_set_orig_coi(TID_REQ *req, TR_NAME *orig_coi) { req->orig_coi = orig_coi; } +void tid_req_set_request_id(TID_REQ *req, TR_NAME *request_id) +{ + req->request_id = request_id; +} + +TR_NAME *tid_req_get_request_id(TID_REQ *req) +{ + return(req->request_id); +} + TIDC_RESP_FUNC *tid_req_get_resp_func(TID_REQ *req) { return(req->resp_func); @@ -174,11 +202,12 @@ void tid_req_set_cookie(TID_REQ *req, void *cookie) req->cookie = cookie; } +/* struct is allocated in talloc null context */ TID_REQ *tid_dup_req (TID_REQ *orig_req) { TID_REQ *new_req = NULL; - if (NULL == (new_req = malloc(sizeof(TID_REQ)))) { + if (NULL == (new_req = talloc_zero(NULL, TID_REQ))) { tr_crit("tid_dup_req: Can't allocated duplicate request."); return NULL; } @@ -186,6 +215,7 @@ TID_REQ *tid_dup_req (TID_REQ *orig_req) /* Memcpy for flat fields, not valid until names are duped. */ memcpy(new_req, orig_req, sizeof(TID_REQ)); json_incref(new_req->json_references); + new_req->free_conn = 0; if ((NULL == (new_req->rp_realm = tr_dup_name(orig_req->rp_realm))) || (NULL == (new_req->realm = tr_dup_name(orig_req->realm))) || @@ -198,11 +228,20 @@ TID_REQ *tid_dup_req (TID_REQ *orig_req) tr_crit("tid_dup_req: Can't duplicate request (orig_coi)."); } } - + + if (orig_req->request_id) { + if (NULL == (new_req->request_id = tr_dup_name(orig_req->request_id))) { + tr_crit("tid_dup_req: Can't duplicate request (request_id)."); + } + } + return new_req; } +/* Adds the JSON object ref to req's list of objects to release when the + * req is freed. + */ void tid_req_cleanup_json( TID_REQ *req, json_t *ref) { (void) json_array_append_new(req->json_references, ref); @@ -237,8 +276,8 @@ void tid_srvr_get_address(const TID_SRVR_BLK *blk, assert(blk); sa = talloc_zero(blk, struct sockaddr_in); sa->sin_family = AF_INET; - sa->sin_addr = blk->aaa_server_addr; - sa->sin_port = htons(2083); + inet_aton(blk->aaa_server_addr, &(sa->sin_addr)); + sa->sin_port = htons(2083); /* radsec port */ *out_addr = (struct sockaddr *) sa; *out_len = sizeof( struct sockaddr_in); }