From 1968d29447d28fdfd02d09896c12a0a0cdb8df41 Mon Sep 17 00:00:00 2001
From: Corey Farrell <git@cfware.com>
Date: Thu, 30 Jan 2014 20:28:40 +0000
Subject: [PATCH] res_rtp_asterisk & udptl: fix port selection to work with
 SELinux restrictions

ast_bind to a port reserved for another program by SELinux causes
errno == EACCES.  This caused random failures when binding rtp or
udptl sockets.  Treat EACCES as a non-fatal error, try next port.

(closes issue ASTERISK-23134)
Reported by: Corey Farrell
........

Merged revisions 406933 from http://svn.asterisk.org/svn/asterisk/branches/1.8


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@406934 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 main/udptl.c           | 2 +-
 res/res_rtp_asterisk.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/main/udptl.c b/main/udptl.c
index 772da03ee5..b5d1394345 100644
--- a/main/udptl.c
+++ b/main/udptl.c
@@ -1009,7 +1009,7 @@ struct ast_udptl *ast_udptl_new_with_bindaddr(struct ast_sched_context *sched, s
 		if (ast_bind(udptl->fd, &udptl->us) == 0) {
 			break;
 		}
-		if (errno != EADDRINUSE) {
+		if (errno != EADDRINUSE && errno != EACCES) {
 			ast_log(LOG_WARNING, "Unexpected bind error: %s\n", strerror(errno));
 			close(udptl->fd);
 			ast_free(udptl);
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 3d195d846f..5dde2ba55d 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -1823,7 +1823,7 @@ static int ast_rtp_new(struct ast_rtp_instance *instance,
 		}
 
 		/* See if we ran out of ports or if the bind actually failed because of something other than the address being in use */
-		if (x == startplace || errno != EADDRINUSE) {
+		if (x == startplace || (errno != EADDRINUSE && errno != EACCES)) {
 			ast_log(LOG_ERROR, "Oh dear... we couldn't allocate a port for RTP instance '%p'\n", instance);
 			close(rtp->s);
 			ast_free(rtp);
-- 
GitLab