diff --git a/wireless-tools/ifrename.c b/wireless-tools/ifrename.c index 9a29d17..2d5c190 100644 --- a/wireless-tools/ifrename.c +++ b/wireless-tools/ifrename.c @@ -2045,6 +2045,7 @@ mapping_readfile(const char * filename) size_t linelen = 0; int linenum = 0; struct add_extra extrainfo; + int config_fd; /* Reset the list of filters */ bzero(selector_active, sizeof(selector_active)); @@ -2066,6 +2067,22 @@ mapping_readfile(const char * filename) filename, strerror(errno)); return(-1); } + + /* Open the config file for locking */ + if ((config_fd = open(filename, O_RDONLY)) == -1) + { + fprintf(stderr, "Error: Can't open configuration file `%s': %s\n", + filename, strerror(errno)); + return(-1); + } + + /* Lock config file */ + if (flock(config_fd, LOCK_EX) == -1) + { + fprintf(stderr, "Error: Can't lock configuration file `%s': %s\n", + filename, strerror(errno)); + return(-1); + } } /* Read each line of file