From 30997471e7826931717aaf26436e24568a4d7c3a Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Wed, 13 May 2015 06:31:20 +0200
Subject: Use getservbyname() on undetermined ports
---
ponymap.c | 39 ++++++++++++++++++++++-----------------
1 file changed, 22 insertions(+), 17 deletions(-)
diff --git a/ponymap.c b/ponymap.c
index 4f9485e..cb4abd5 100644
--- a/ponymap.c
+++ b/ponymap.c
@@ -1374,15 +1374,26 @@ target_dump_json (struct target *self, struct target_dump_data *data)
size_t block = 8 * sizeof *data->undetermined;
for (size_t i = 0; i < 65536 / block; i++)
- for (size_t k = 0; k < block; k++)
- {
- if (!(data->undetermined[i] & (1 << k)))
- continue;
+ for (size_t k = 0; k < block; k++)
+ {
+ if (!(data->undetermined[i] & (1 << k)))
+ continue;
- service = json_object ();
- json_object_set_new (service, "port", json_integer (i * block + k));
- json_array_append_new (undetermined, service);
- }
+ service = json_object ();
+ json_object_set_new (service, "port", json_integer (i * block + k));
+ json_array_append_new (undetermined, service);
+ }
+}
+
+static void
+target_dump_terminal_undetermined (uint16_t port_no, struct node ***tail)
+{
+ struct servent *serv = getservbyport (ntohs (port_no), "tcp");
+ struct node *port = **tail = node_new (serv
+ ? xstrdup_printf ("port %" PRIu16 " (%s)",
+ port_no, serv->s_name)
+ : xstrdup_printf ("port %" PRIu16, port_no));
+ *tail = &port->next;
}
static void
@@ -1436,15 +1447,9 @@ target_dump_terminal (struct target *self, struct target_dump_data *data)
size_t block = 8 * sizeof *data->undetermined;
for (size_t i = 0; i < 65536 / block; i++)
- for (size_t k = 0; k < block; k++)
- {
- if (!(data->undetermined[i] & (1 << k)))
- continue;
-
- port = *p_tail = node_new (xstrdup_printf
- ("port %" PRIu16, (uint16_t) (i * block + k)));
- p_tail = &port->next;
- }
+ for (size_t k = 0; k < block; k++)
+ if ((data->undetermined[i] & (1 << k)))
+ target_dump_terminal_undetermined (i * block + k, &p_tail);
}
node_print_tree (root);
--
cgit v1.2.3-70-g09d2