diff options
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/input_cdda.c | 2 | ||||
-rw-r--r-- | src/input/input_dvb.c | 14 | ||||
-rw-r--r-- | src/input/input_file.c | 2 | ||||
-rw-r--r-- | src/input/input_net.c | 24 | ||||
-rw-r--r-- | src/input/input_pvr.c | 10 | ||||
-rw-r--r-- | src/input/input_stdin_fifo.c | 2 | ||||
-rw-r--r-- | src/input/input_v4l.c | 10 | ||||
-rw-r--r-- | src/input/input_vcd.c | 6 | ||||
-rw-r--r-- | src/input/media_helper.c | 2 |
9 files changed, 48 insertions, 24 deletions
diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index 2cc2bd49d..6342fb5eb 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -1938,7 +1938,7 @@ static int cdda_open(cdda_input_plugin_t *this_gen, /* We use O_NONBLOCK for when /proc/sys/dev/cdrom/check_media is at 1 on * Linux systems */ - fd = open (cdda_device, O_RDONLY | O_NONBLOCK); + fd = open_cloexec(cdda_device, O_RDONLY | O_NONBLOCK); if (fd == -1) { return -1; } diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index a045276d5..3667fbe43 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -592,7 +592,7 @@ static tuner_t *XINE_MALLOC tuner_init(xine_t * xine, int adapter) asprintf(&video_device,"/dev/dvb/adapter%i/video0",this->adapter_num); asprintf(&frontend_device,"/dev/dvb/adapter%i/frontend0",this->adapter_num); - if ((this->fd_frontend = open(frontend_device, O_RDWR)) < 0) { + if ((this->fd_frontend = open_cloexec(frontend_device, O_RDWR)) < 0) { xprintf(this->xine, XINE_VERBOSITY_DEBUG, "FRONTEND DEVICE: %s\n", strerror(errno)); tuner_dispose(this); this = NULL; @@ -608,7 +608,7 @@ static tuner_t *XINE_MALLOC tuner_init(xine_t * xine, int adapter) } for (x = 0; x < MAX_FILTERS; x++) { - this->fd_pidfilter[x] = open(this->demux_device, O_RDWR); + this->fd_pidfilter[x] = open_cloexec(this->demux_device, O_RDWR); if (this->fd_pidfilter[x] < 0) { xprintf(this->xine, XINE_VERBOSITY_DEBUG, "DEMUX DEVICE PIDfilter: %s\n", strerror(errno)); tuner_dispose(this); @@ -617,7 +617,7 @@ static tuner_t *XINE_MALLOC tuner_init(xine_t * xine, int adapter) } } for (x = 0; x < MAX_SUBTITLES; x++) { - this->fd_subfilter[x] = open(this->demux_device, O_RDWR); + this->fd_subfilter[x] = open_cloexec(this->demux_device, O_RDWR); if (this->fd_subfilter[x] < 0) { xprintf(this->xine, XINE_VERBOSITY_DEBUG, "DEMUX DEVICE Subtitle filter: %s\n", strerror(errno)); } @@ -2126,7 +2126,7 @@ static int switch_channel(dvb_input_plugin_t *this, int channel) { for (x = 0; x < MAX_FILTERS; x++) { close(this->tuner->fd_pidfilter[x]); - this->tuner->fd_pidfilter[x] = open(this->tuner->demux_device, O_RDWR); + this->tuner->fd_pidfilter[x] = open_cloexec(this->tuner->demux_device, O_RDWR); } if (!tuner_set_channel (this, &this->channels[channel])) { @@ -2160,7 +2160,7 @@ static int switch_channel(dvb_input_plugin_t *this, int channel) { this->channel = channel; - this->fd = open (this->tuner->dvr_device, O_RDONLY | O_NONBLOCK); + this->fd = open_cloexec(this->tuner->dvr_device, O_RDONLY | O_NONBLOCK); this->tuned_in = 1; pthread_mutex_unlock (&this->channel_change_mutex); @@ -2234,7 +2234,7 @@ static void do_record (dvb_input_plugin_t *this) { } /* start recording */ - this->record_fd = open (filename, O_CREAT | O_APPEND | O_WRONLY, 0644); + this->record_fd = create_cloexec(filename, O_APPEND | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); this->stream->osd_renderer->clear (this->rec_osd); @@ -2980,7 +2980,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) return 0; } - if ((this->fd = open(this->tuner->dvr_device, O_RDONLY |O_NONBLOCK)) < 0) { + if ((this->fd = open_cloexec(this->tuner->dvr_device, O_RDONLY |O_NONBLOCK)) < 0) { xprintf(this->class->xine, XINE_VERBOSITY_LOG, _("input_dvb: cannot open dvr device '%s'\n"), this->tuner->dvr_device); return 0; diff --git a/src/input/input_file.c b/src/input/input_file.c index ee8957894..f9232b389 100644 --- a/src/input/input_file.c +++ b/src/input/input_file.c @@ -359,7 +359,7 @@ static int file_plugin_open (input_plugin_t *this_gen ) { else filename = strdup(this->mrl); /* NEVER unescape plain file names! */ - this->fh = open (filename, O_RDONLY|O_BINARY); + this->fh = open_cloexec(filename, O_RDONLY|O_BINARY); if (this->fh == -1) { if (errno == EACCES) { diff --git a/src/input/input_net.c b/src/input/input_net.c index 5007b58a3..f44db8301 100644 --- a/src/input/input_net.c +++ b/src/input/input_net.c @@ -122,6 +122,18 @@ static int host_connect_attempt_ipv4(struct in_addr ia, int port, xine_t *xine) return -1; } +#ifndef WIN32 + if (fcntl(s, F_SETFD, FD_CLOEXEC) < 0) { + xine_log(xine, XINE_LOG_MSG, + _("input_net: Failed to make socket uninheritable (%s)\n"), + strerror(errno)); + } +#else + if (!SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0)) { + xine_log(xine, XINE_LOG_MSG, "Failed to make socket uninheritable\n"); + } +#endif + sin.sin_family = AF_INET; sin.sin_addr = ia; sin.sin_port = htons(port); @@ -153,6 +165,18 @@ static int host_connect_attempt(int family, struct sockaddr* sin, int addrlen, x } #ifndef WIN32 + if (fcntl(s, F_SETFD, FD_CLOEXEC) < 0) { + xine_log(xine, XINE_LOG_MSG, + _("input_net: Failed to make socket uninheritable (%s)\n"), + strerror(errno)); + } +#else + if (!SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0)) { + xine_log(xine, XINE_LOG_MSG, "Failed to make socket uninheritable\n"); + } +#endif + +#ifndef WIN32 if (connect(s, sin, addrlen)==-1 && errno != EINPROGRESS) #else if (connect(s, sin, addrlen)==-1 && WSAGetLastError() != WSAEINPROGRESS) diff --git a/src/input/input_pvr.c b/src/input/input_pvr.c index 288434c47..7e04c0bc9 100644 --- a/src/input/input_pvr.c +++ b/src/input/input_pvr.c @@ -584,7 +584,7 @@ static int pvr_break_rec_page (pvr_input_plugin_t *this) { lprintf("opening pvr file for writing (%s)\n", filename); - this->rec_fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0666 ); + this->rec_fd = create_cloexec(filename, O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if( this->rec_fd == -1 ) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("input_pvr: error creating pvr file (%s)\n"), filename); @@ -741,7 +741,7 @@ static int pvr_play_file(pvr_input_plugin_t *this, fifo_buffer_t *fifo, uint8_t lprintf("opening pvr file for reading (%s)\n", filename); - this->play_fd = open(filename, O_RDONLY ); + this->play_fd = open_cloexec(filename, O_RDONLY); if( this->play_fd == -1 ) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("input_pvr: error opening pvr file (%s)\n"), filename); @@ -1009,7 +1009,7 @@ static void pvr_event_handler (pvr_input_plugin_t *this) { /* as of ivtv 0.10.6: must close and reopen to set input */ close(this->dev_fd); - this->dev_fd = open (this->class->devname, O_RDWR); + this->dev_fd = open_cloexec(this->class->devname, O_RDWR); if (this->dev_fd < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_pvr: error opening device %s\n", this->class->devname ); @@ -1156,7 +1156,7 @@ static void pvr_event_handler (pvr_input_plugin_t *this) { /* how lame. we must close and reopen to change bitrate. */ close(this->dev_fd); - this->dev_fd = open (this->class->devname, O_RDWR); + this->dev_fd = open_cloexec(this->class->devname, O_RDWR); if (this->dev_fd == -1) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("input_pvr: error opening device %s\n"), this->class->devname ); @@ -1416,7 +1416,7 @@ static int pvr_plugin_open (input_plugin_t *this_gen ) { this->saved_id = 0; - this->dev_fd = open (this->class->devname, O_RDWR); + this->dev_fd = open_cloexec(this->class->devname, O_RDWR); if (this->dev_fd == -1) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("input_pvr: error opening device %s\n"), this->class->devname ); diff --git a/src/input/input_stdin_fifo.c b/src/input/input_stdin_fifo.c index 9d6f7059f..02c3d526a 100644 --- a/src/input/input_stdin_fifo.c +++ b/src/input/input_stdin_fifo.c @@ -254,7 +254,7 @@ static int stdin_plugin_open (input_plugin_t *this_gen ) { char *filename; filename = (char *) &this->mrl[5]; - this->fh = open (filename, FILE_FLAGS); + this->fh = open_cloexec(filename, FILE_FLAGS); lprintf("filename '%s'\n", filename); diff --git a/src/input/input_v4l.c b/src/input/input_v4l.c index 5d38cb4e4..3947e6ab4 100644 --- a/src/input/input_v4l.c +++ b/src/input/input_v4l.c @@ -822,7 +822,7 @@ static int open_radio_capture_device(v4l_input_plugin_t *this) entry = this->stream->xine->config->lookup_entry(this->stream->xine->config, "media.video4linux.radio_device"); - if((this->radio_fd = open(entry->str_value, O_RDWR)) < 0) { + if((this->radio_fd = open_cloexec(entry->str_value, O_RDWR)) < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, "input_v4l: error opening v4l device (%s): %s\n", entry->str_value, strerror(errno)); @@ -875,7 +875,7 @@ static int open_video_capture_device(v4l_input_plugin_t *this) "media.video4linux.video_device"); /* Try to open the video device */ - if((this->video_fd = open(entry->str_value, O_RDWR)) < 0) { + if((this->video_fd = open_cloexec(entry->str_value, O_RDWR)) < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, "input_v4l: error opening v4l device (%s): %s\n", entry->str_value, strerror(errno)); @@ -1568,7 +1568,7 @@ static void v4l_plugin_dispose (input_plugin_t *this_gen) { if (this->tuner_name) free(this->tuner_name); - /* Close video device only if device was openend */ + /* Close video device only if device was opened */ if (this->video_fd > 0) { /* Restore v4l audio volume */ @@ -1799,7 +1799,7 @@ static input_plugin_t *v4l_class_get_video_instance (input_class_t *cls_gen, "media.video4linux.video_device"); /* Try to open the video device */ - if((this->video_fd = open(entry->str_value, O_RDWR)) < 0) { + if((this->video_fd = open_cloexec(entry->str_value, O_RDWR)) < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, "input_v4l: error opening v4l device (%s): %s\n", entry->str_value, strerror(errno)); @@ -1862,7 +1862,7 @@ static input_plugin_t *v4l_class_get_radio_instance (input_class_t *cls_gen, entry = this->stream->xine->config->lookup_entry(this->stream->xine->config, "media.video4linux.radio_device"); - if((this->radio_fd = open(entry->str_value, O_RDWR)) < 0) { + if((this->radio_fd = open_cloexec(entry->str_value, O_RDWR)) < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, "input_v4l: error opening v4l device (%s): %s\n", entry->str_value, strerror(errno)); diff --git a/src/input/input_vcd.c b/src/input/input_vcd.c index 4f9c75cd2..35f76c042 100644 --- a/src/input/input_vcd.c +++ b/src/input/input_vcd.c @@ -832,7 +832,7 @@ static int vcd_plugin_open (input_plugin_t *this_gen) { char *filename; int fd; - fd = open (cls->device, O_RDONLY|O_EXCL); + fd = open_cloexec(cls->device, O_RDONLY|O_EXCL); if (fd == -1) { return 0; } @@ -966,7 +966,7 @@ static xine_mrl_t **vcd_class_get_dir (input_class_t *this_gen, const char *file return NULL; - fd = open (this->device, O_RDONLY|O_EXCL); + fd = open_cloexec(this->device, O_RDONLY|O_EXCL); if (fd == -1) { xprintf (this->xine, XINE_VERBOSITY_LOG, @@ -1028,7 +1028,7 @@ static char ** vcd_class_get_autoplay_list (input_class_t *this_gen, int *num_fi int i, fd; - fd = open (this->device, O_RDONLY|O_EXCL); + fd = open_cloexec(this->device, O_RDONLY|O_EXCL); if (fd == -1) { xprintf (this->xine, XINE_VERBOSITY_LOG, diff --git a/src/input/media_helper.c b/src/input/media_helper.c index e19ca63e6..616793499 100644 --- a/src/input/media_helper.c +++ b/src/input/media_helper.c @@ -99,7 +99,7 @@ int media_eject_media (xine_t *xine, const char *device) media_umount_media(device); /* printf("input_dvd: umount result: %s\n", strerror(errno)); */ - if ((fd = open (device, O_RDONLY|O_NONBLOCK)) > -1) { + if ((fd = open_cloexec(device, O_RDONLY|O_NONBLOCK)) > -1) { #if defined (__linux__) int ret, status; |