From ea65e4d44c9de6b67dba49f3ba1a3e6682bcf98e Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Thu, 30 Jan 2014 20:26:52 +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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@406933 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 00989b46ee..d874c23df9 100644 --- a/main/udptl.c +++ b/main/udptl.c @@ -968,7 +968,7 @@ struct ast_udptl *ast_udptl_new_with_bindaddr(struct sched_context *sched, struc 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 b0745ddca5..6c7f88c60b 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -596,7 +596,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);