svn commit: r247767 - in stable/9: etc sbin/devd
Hiroki Sato
hrs at FreeBSD.org
Mon Mar 4 05:46:37 UTC 2013
Author: hrs
Date: Mon Mar 4 05:46:35 2013
New Revision: 247767
URL: http://svnweb.freebsd.org/changeset/base/247767
Log:
MFC r226775:
- Add support for a "!" character in regex matching in devd(8). It inverts
the logic (true/false) of the matching.
- Add "!usbus[0-9]+" to IFNET ATTACH notification handler in the default
devd.conf to prevent rc.d/netif from running when usbus[0-9]+ is attached.
Modified:
stable/9/etc/devd.conf
stable/9/sbin/devd/devd.cc
stable/9/sbin/devd/devd.conf.5
stable/9/sbin/devd/devd.hh
Directory Properties:
stable/9/etc/ (props changed)
stable/9/sbin/devd/ (props changed)
Modified: stable/9/etc/devd.conf
==============================================================================
--- stable/9/etc/devd.conf Mon Mar 4 05:26:09 2013 (r247766)
+++ stable/9/etc/devd.conf Mon Mar 4 05:46:35 2013 (r247767)
@@ -38,6 +38,7 @@ options {
#
notify 0 {
match "system" "IFNET";
+ match "subsystem" "!usbus[0-9]+";
match "type" "ATTACH";
action "/etc/pccard_ether $subsystem start";
};
Modified: stable/9/sbin/devd/devd.cc
==============================================================================
--- stable/9/sbin/devd/devd.cc Mon Mar 4 05:26:09 2013 (r247766)
+++ stable/9/sbin/devd/devd.cc Mon Mar 4 05:46:35 2013 (r247767)
@@ -251,7 +251,14 @@ action::do_action(config &c)
match::match(config &c, const char *var, const char *re)
: _var(var), _re("^")
{
- _re.append(c.expand_string(string(re)));
+ if (!c.expand_string(string(re)).empty() &&
+ c.expand_string(string(re)).at(0) == '!') {
+ _re.append(c.expand_string(string(re)).substr(1));
+ _inv = 1;
+ } else {
+ _re.append(c.expand_string(string(re)));
+ _inv = 0;
+ }
_re.append("$");
regcomp(&_regex, _re.c_str(), REG_EXTENDED | REG_NOSUB | REG_ICASE);
}
@@ -268,10 +275,13 @@ match::do_match(config &c)
bool retval;
if (Dflag)
- fprintf(stderr, "Testing %s=%s against %s\n", _var.c_str(),
- value.c_str(), _re.c_str());
+ fprintf(stderr, "Testing %s=%s against %s, invert=%d\n",
+ _var.c_str(), value.c_str(), _re.c_str(), _inv);
retval = (regexec(&_regex, value.c_str(), 0, NULL, 0) == 0);
+ if (_inv == 1)
+ retval = (retval == 0) ? 1 : 0;
+
return retval;
}
Modified: stable/9/sbin/devd/devd.conf.5
==============================================================================
--- stable/9/sbin/devd/devd.conf.5 Mon Mar 4 05:26:09 2013 (r247766)
+++ stable/9/sbin/devd/devd.conf.5 Mon Mar 4 05:46:35 2013 (r247767)
@@ -41,7 +41,7 @@
.\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
.\" SOFTWARE.
.\"
-.Dd March 8, 2009
+.Dd March 4, 2013
.Dt DEVD.CONF 5
.Os
.Sh NAME
@@ -121,6 +121,10 @@ Creates a regular expression and assigns
.Ar regexp-name .
The variable is available throughout the rest of
the configuration file.
+If the string begins with
+.Ql \&! ,
+it matches if the regular expression formed by the rest of the string
+does not match.
All regular expressions have an implicit
.Ql ^$
around them.
Modified: stable/9/sbin/devd/devd.hh
==============================================================================
--- stable/9/sbin/devd/devd.hh Mon Mar 4 05:26:09 2013 (r247766)
+++ stable/9/sbin/devd/devd.hh Mon Mar 4 05:46:35 2013 (r247767)
@@ -92,6 +92,7 @@ public:
private:
std::string _var;
std::string _re;
+ bool _inv;
regex_t _regex;
};
More information about the svn-src-stable-9
mailing list