+static int tid_resp_destructor(void *obj)
+{
+ TID_RESP *resp=talloc_get_type_abort(obj, TID_RESP);
+ if (resp->err_msg!=NULL)
+ tr_free_name(resp->err_msg);
+ 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);
+ if (resp->request_id!=NULL)
+ tr_free_name(resp->request_id);
+ return 0;
+}
+
+TID_RESP *tid_resp_new(TALLOC_CTX *mem_ctx)
+{
+ TID_RESP *resp=talloc(mem_ctx, TID_RESP);
+ if (resp!=NULL) {
+ resp->result=TID_ERROR;
+ resp->err_msg=NULL;
+ resp->rp_realm=NULL;
+ resp->realm=NULL;
+ resp->comm=NULL;
+ resp->cons=NULL;
+ resp->orig_coi=NULL;
+ resp->servers=NULL;
+ resp->request_id=NULL;
+ resp->error_path=NULL;
+ talloc_set_destructor((void *)resp, tid_resp_destructor);
+ }
+ return resp;
+}
+
+void tid_resp_free(TID_RESP *resp)
+{
+ if (resp)
+ talloc_free(resp);
+}
+
+/**
+ * Allocate a new copy of a TID_RESP
+ *
+ * @param mem_ctx
+ * @param resp
+ * @return
+ */
+TID_RESP *tid_resp_dup(TALLOC_CTX *mem_ctx, TID_RESP *resp)
+{
+ TID_RESP *newresp=NULL;
+
+ if (resp==NULL)
+ return NULL;
+
+ newresp=tid_resp_new(mem_ctx);
+
+ if (NULL!=newresp) {
+ tid_resp_cpy(newresp, resp);
+ }
+ return newresp;
+}
+
+/**
+ * Copy contents of one TID_RESP to an existing TID_RESP
+ *
+ * @param dst
+ * @param src
+ * @return TID_SUCCESS on success, error code on error
+ */
+TID_RC tid_resp_cpy(TID_RESP *dst, TID_RESP *src)
+{
+ tid_resp_set_result(dst, tid_resp_get_result(src));
+ tid_resp_set_err_msg(dst,
+ tr_dup_name(tid_resp_get_err_msg(src)));
+ tid_resp_set_rp_realm(dst,
+ tr_dup_name(tid_resp_get_rp_realm(src)));
+ tid_resp_set_realm(dst,
+ tr_dup_name(tid_resp_get_realm(src)));
+ tid_resp_set_comm(dst,
+ tr_dup_name(tid_resp_get_comm(src)));
+ tid_resp_set_cons(dst, src->cons);
+ tid_resp_set_orig_coi(dst,
+ tr_dup_name(tid_resp_get_orig_coi(src)));
+ dst->servers = tid_srvr_blk_dup(dst, src->servers);
+ tid_resp_set_error_path(dst, src->error_path);
+
+ return TID_SUCCESS;
+}
+