Use existing temporary variable conn.
[radsecproxy.git] / lib / packet.c
index 48fb55e..8e6f22d 100644 (file)
@@ -85,8 +85,8 @@ packet_do_send (struct rs_packet *pkt)
   {
     char host[80], serv[80];
 
-    getnameinfo (pkt->conn->active_peer->addr->ai_addr,
-                pkt->conn->active_peer->addr->ai_addrlen,
+    getnameinfo (pkt->conn->active_peer->addr_cache->ai_addr,
+                pkt->conn->active_peer->addr_cache->ai_addrlen,
                 host, sizeof(host), serv, sizeof(serv),
                 0 /* NI_NUMERICHOST|NI_NUMERICSERV*/);
     rs_debug (("%s: about to send this to %s:%s:\n", __func__, host, serv));
@@ -150,7 +150,7 @@ rs_packet_create_authn_request (struct rs_connection *conn,
                                const char *user_name, const char *user_pw)
 {
   struct rs_packet *pkt;
-  struct rs_attr *attr;
+  VALUE_PAIR *vp = NULL;
 
   if (rs_packet_create (conn, pkt_out))
     return -1;
@@ -159,26 +159,23 @@ rs_packet_create_authn_request (struct rs_connection *conn,
 
   if (user_name)
     {
-      if (rs_attr_create (conn, &attr, "User-Name", user_name))
-       return -1;
-      rs_packet_add_attr (pkt, attr);
-
-      if (user_pw)
-       {
-         if (rs_attr_create (conn, &attr, "User-Password", user_pw))
-           return -1;
-         rs_packet_add_attr (pkt, attr);
-       }
+      vp = pairmake ("User-Name", user_name, T_OP_EQ);
+      if (vp == NULL)
+       return rs_err_conn_push_fl (conn, RSE_FR, __FILE__, __LINE__,
+                                   "pairmake: %s", fr_strerror ());
+      pairadd (&pkt->rpkt->vps, vp);
     }
 
-  return RSE_OK;
-}
+  if (user_pw)
+    {
+      vp = pairmake ("User-Password", user_pw, T_OP_EQ);
+      if (vp == NULL)
+       return rs_err_conn_push_fl (conn, RSE_FR, __FILE__, __LINE__,
+                                   "pairmake: %s", fr_strerror ());
+      pairadd (&pkt->rpkt->vps, vp);
+    }
 
-void
-rs_packet_add_attr (struct rs_packet *pkt, struct rs_attr *attr)
-{
-  pairadd (&pkt->rpkt->vps, attr->vp);
-  attr->pkt = pkt;
+  return RSE_OK;
 }
 
 struct radius_packet *
@@ -191,11 +188,10 @@ rs_packet_frpkt (struct rs_packet *pkt)
 void
 rs_packet_destroy (struct rs_packet *pkt)
 {
-  if (pkt)
-    {
-      // FIXME: memory leak! TODO: free all attributes
-      rad_free (&pkt->rpkt);
-      rs_free (pkt->conn->ctx, pkt);
-    }
-}
+  assert (pkt);
+  assert (pkt->conn);
+  assert (pkt->conn->ctx);
 
+  rad_free (&pkt->rpkt); /* Note: This frees the VALUE_PAIR's too.  */
+  rs_free (pkt->conn->ctx, pkt);
+}