From 2a86d5da2ebf9777e7543a9ebe7c5b4c91f563b6 Mon Sep 17 00:00:00 2001
From: Richard Fuchs <rfuchs@sipwise.com>
Date: Tue, 5 Jan 2021 11:47:12 -0500
Subject: [PATCH] TT#14008 fix possible pcap namespace issue

Change-Id: I8c759d74c8091dd302399c3e72939fa43688f655
---
 daemon/recording.c | 48 +++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

--- a/daemon/recording.c
+++ b/daemon/recording.c
@@ -24,7 +24,7 @@
 
 
 
-struct pcap_format {
+struct rec_pcap_format {
 	int linktype;
 	int headerlen;
 	void (*header)(unsigned char *, struct packet_stream *);
@@ -40,8 +40,8 @@ static int append_meta_chunk(struct reco
 	__attribute__((format(printf,4,5)));
 
 // pcap methods
-static int pcap_create_spool_dir(const char *dirpath);
-static void pcap_init(struct call *);
+static int rec_pcap_create_spool_dir(const char *dirpath);
+static void rec_pcap_init(struct call *);
 static void sdp_after_pcap(struct recording *, GString *str, struct call_monologue *, enum call_opmode opmode);
 static void dump_packet_pcap(struct media_packet *mp, const str *s);
 static void finish_pcap(struct call *);
@@ -59,7 +59,7 @@ static void setup_stream_proc(struct pac
 static void setup_media_proc(struct call_media *);
 static void kernel_info_proc(struct packet_stream *, struct rtpengine_target_info *);
 
-static void pcap_eth_header(unsigned char *, struct packet_stream *);
+static void rec_pcap_eth_header(unsigned char *, struct packet_stream *);
 
 #define append_meta_chunk_str(r, str, f...) append_meta_chunk(r, (str)->s, (str)->len, f)
 #define append_meta_chunk_s(r, str, f...) append_meta_chunk(r, (str), strlen(str), f)
@@ -70,8 +70,8 @@ static const struct recording_method met
 	{
 		.name = "pcap",
 		.kernel_support = 0,
-		.create_spool_dir = pcap_create_spool_dir,
-		.init_struct = pcap_init,
+		.create_spool_dir = rec_pcap_create_spool_dir,
+		.init_struct = rec_pcap_init,
 		.sdp_after = sdp_after_pcap,
 		.dump_packet = dump_packet_pcap,
 		.finish = finish_pcap,
@@ -94,14 +94,14 @@ static const struct recording_method met
 	},
 };
 
-static const struct pcap_format pcap_format_raw = {
+static const struct rec_pcap_format rec_pcap_format_raw = {
 	.linktype = DLT_RAW,
 	.headerlen = 0,
 };
-static const struct pcap_format pcap_format_eth = {
+static const struct rec_pcap_format rec_pcap_format_eth = {
 	.linktype = DLT_EN10MB,
 	.headerlen = 14,
-	.header = pcap_eth_header,
+	.header = rec_pcap_eth_header,
 };
 
 
@@ -109,7 +109,7 @@ static const struct pcap_format pcap_for
 static char *spooldir = NULL;
 
 const struct recording_method *selected_recording_method;
-static const struct pcap_format *pcap_format;
+static const struct rec_pcap_format *rec_pcap_format;
 
 
 
@@ -148,9 +148,9 @@ void recording_fs_init(const char *spool
 
 found:
 	if(!strcmp("raw", format_str))
-		pcap_format = &pcap_format_raw;
+		rec_pcap_format = &rec_pcap_format_raw;
 	else if(!strcmp("eth", format_str))
-		pcap_format = &pcap_format_eth;
+		rec_pcap_format = &rec_pcap_format_eth;
 	else {
 		ilog(LOG_ERR, "Invalid value for recording format \"%s\".", format_str);
 		exit(-1);
@@ -205,7 +205,7 @@ static int check_main_spool_dir(const ch
  *
  * Create the "metadata" and "pcaps" directories if they are not there.
  */
-static int pcap_create_spool_dir(const char *spoolpath) {
+static int rec_pcap_create_spool_dir(const char *spoolpath) {
 	int spool_good = TRUE;
 
 	if (!check_main_spool_dir(spoolpath))
@@ -352,7 +352,7 @@ void detect_setup_recording(struct call
 		ilog(LOG_INFO, "\"record-call\" flag "STR_FORMAT" is invalid flag.", STR_FMT(recordcall));
 }
 
-static void pcap_init(struct call *call) {
+static void rec_pcap_init(struct call *call) {
 	struct recording *recording = call->recording;
 
 	// Wireshark starts at packet index 1, so we start there, too
@@ -433,7 +433,7 @@ static void sdp_after_pcap(struct record
  * Writes metadata to metafile, closes file, and renames it to finished location.
  * Returns non-zero for failure.
  */
-static int pcap_meta_finish_file(struct call *call) {
+static int rec_pcap_meta_finish_file(struct call *call) {
 	// This should usually be called from a place that has the call->master_lock
 	struct recording *recording = call->recording;
 	int return_code = 0;
@@ -514,7 +514,7 @@ static char *recording_setup_file(struct
 	recording_path = file_path_str(recording->meta_prefix, "/pcaps/", ".pcap");
 	recording->u.pcap.recording_path = recording_path;
 
-	recording->u.pcap.recording_pd = pcap_open_dead(pcap_format->linktype, 65535);
+	recording->u.pcap.recording_pd = pcap_open_dead(rec_pcap_format->linktype, 65535);
 	recording->u.pcap.recording_pdumper = pcap_dump_open(recording->u.pcap.recording_pd, recording_path);
 	if (recording->u.pcap.recording_pdumper == NULL) {
 		pcap_close(recording->u.pcap.recording_pd);
@@ -530,7 +530,7 @@ static char *recording_setup_file(struct
 /**
  * Flushes PCAP file, closes the dumper and descriptors, and frees object memory.
  */
-static void pcap_recording_finish_file(struct recording *recording) {
+static void rec_pcap_recording_finish_file(struct recording *recording) {
 	if (recording->u.pcap.recording_pdumper != NULL) {
 		pcap_dump_flush(recording->u.pcap.recording_pdumper);
 		pcap_dump_close(recording->u.pcap.recording_pdumper);
@@ -557,7 +557,7 @@ static unsigned int fake_ip_header(unsig
 	return hdr_len + inp->len;
 }
 
-static void pcap_eth_header(unsigned char *pkt, struct packet_stream *stream) {
+static void rec_pcap_eth_header(unsigned char *pkt, struct packet_stream *stream) {
 	memset(pkt, 0, 14);
 	uint16_t *hdr16 = (void *) pkt;
 	hdr16[6] = htons(stream->selected_sfd->socket.local.address.family->ethertype);
@@ -572,10 +572,10 @@ static void stream_pcap_dump(struct medi
 	if (!pdumper)
 		return;
 
-	unsigned char pkt[s->len + MAX_PACKET_HEADER_LEN + pcap_format->headerlen];
-	unsigned int pkt_len = fake_ip_header(pkt + pcap_format->headerlen, mp, s) + pcap_format->headerlen;
-	if (pcap_format->header)
-		pcap_format->header(pkt, mp->stream);
+	unsigned char pkt[s->len + MAX_PACKET_HEADER_LEN + rec_pcap_format->headerlen];
+	unsigned int pkt_len = fake_ip_header(pkt + rec_pcap_format->headerlen, mp, s) + rec_pcap_format->headerlen;
+	if (rec_pcap_format->header)
+		rec_pcap_format->header(pkt, mp->stream);
 
 	// Set up PCAP packet header
 	struct pcap_pkthdr header;
@@ -598,8 +598,8 @@ static void dump_packet_pcap(struct medi
 }
 
 static void finish_pcap(struct call *call) {
-	pcap_recording_finish_file(call->recording);
-	pcap_meta_finish_file(call);
+	rec_pcap_recording_finish_file(call->recording);
+	rec_pcap_meta_finish_file(call);
 }
 
 static void response_pcap(struct recording *recording, bencode_item_t *output) {
