<div dir="ltr">Hi Daniel,<br><br><div class="gmail_quote">On Tue, Aug 26, 2008 at 10:05 PM, Daniel P. Berrange <span dir="ltr"><<a href="mailto:berrange@redhat.com">berrange@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
THis patch is intended to be committed to libvirt, so the config file rules<br>
are distributed alongside libvirt. I'm CC'ing augeas-devel for feedback on<br>
the lens itself.<br>
</blockquote><div><br>Very nice idea. This might have to be thought about for the future since so far we're only adding lenses to the Augeas repository.<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

===================================================================<br>
RCS file: qemud/libvirtd.aug<br>
diff -N qemud/libvirtd.aug<br>
--- /dev/null   1 Jan 1970 00:00:00 -0000<br>
+++ qemud/libvirtd.aug  26 Aug 2008 20:03:48 -0000<br>
@@ -0,0 +1,64 @@<br>
+(* /etc/libvirt/libvirtd.conf *)<br>
+<br>
+module Libvirtd =<br>
+   autoload xfm<br>
+<br>
+   let eol   = del /[ \t]*\n/ "\n"</blockquote><div><br>This is also Util.eol<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
+   let value_sep   = del /[ \t]*=[ \t]*/  " = "<br>
+   let prespace = del /[ \t]*/ ""<br>
+</blockquote><div><br>And this is Util.indent<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
+   let array_sep  = del /,[ \t\n]*/ ", "<br>
+   let array_start = del /\[[ \t\n]*/ "[ "<br>
+   let array_end = del /\]/ " ]"<br>
+<br>
+   let str_val = del /\"/ "\"" . store /[^\"]*/ . del /\"/ "\""<br>
+   let bool_val = store /0|1/<br>
+   let str_array_element = [ str_val ] . del /[ \t\n]*/ ""<br>
+   let str_array_val = array_start . ( str_array_element . ( array_sep . str_array_element ) * ) ? . array_end<br>
+<br>
+   let str_entry       (kw:string) = [ prespace . key kw . value_sep . str_val . eol ]<br>
+   let bool_entry      (kw:string) = [ prespace . key kw . value_sep . bool_val . eol ]<br>
+   let str_array_entry (kw:string) = [ prespace . key kw . value_sep . str_array_val . eol ]<br>
+<br>
+   let network_entry = bool_entry "listen_tls"<br>
+                     | bool_entry "listen_tcp"<br>
+                     | str_entry "tls_port"<br>
+                     | str_entry "tcp_port"<br>
+                     | str_entry "listen_addr"<br>
+                     | bool_entry "mdns_adv"<br>
+                     | str_entry "mdns_name"<br>
+</blockquote><div><br>While I can see why it is useful to gather these entries logically, it's not very optimised for the parser. Eventually, all this will be compiled into a huge regexp, so it's more efficient to regroup entries by type and feed the functions with regexps instead of strings, like<br>
<br>
let str_entry       (kw:regexp) = [ prespace . key kw . value_sep . str_val . eol ]<br>
let bool_entry      (kw:regexp) = [ prespace . key kw . value_sep . bool_val . eol ]<br>
let str_array_entry (kw:regexp) = [ prespace . key kw . value_sep . str_array_val . eol ]<br><br>let str_keys = "tls_port"<br>                  | "tcp_port"<br>                  | "listen_addr"<br>
                  | "mdns_name"<br>                  | etc.<br><br>let bool_keys = "listen_tls"<br>                     | "listen_tcp"<br>                     | "mdns_adv"<br>                     | etc.<br>
<br>let str_entries = str_entry str_keys<br>let bool_entries = bool_entry bool_keys<br><br><br>You get the point, each function is only evaluated once, with a single regexp (every string ets turned into a regexp, and so will str_keys and bool_keys).  The less you will call the *_entry functions, the faster your lens will be.<br>
<br></div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
+   let sock_acl_entry = str_entry "unix_sock_group"<br>
+                      | str_entry "unix_sock_ro_perms"<br>
+                      | str_entry "unix_sock_rw_perms"<br>
+<br>
+   let authentication_entry = str_entry "auth_unix_ro"<br>
+                            | str_entry "auth_unix_rw"<br>
+                            | str_entry "auth_tcp"<br>
+                            | str_entry "auth_tls"<br>
+<br>
+   let certificate_entry = str_entry "key_file"<br>
+                         | str_entry "cert_file"<br>
+                         | str_entry "ca_file"<br>
+                         | str_entry "crl_file"<br>
+<br>
+   let authorization_entry = bool_entry "tls_no_verify_certificate"<br>
+                           | str_array_entry "tls_allowed_dn_list"<br>
+                           | str_array_entry "sasl_allowed_username_list"<br>
+<br>
+   let entry = network_entry<br>
+                    | sock_acl_entry<br>
+             | authentication_entry<br>
+             | certificate_entry<br>
+             | authorization_entry<br>
+</blockquote><div><br>So here you would have something like<br><br>let entry = str_entries<br>             | bool_entries<br>             | etc.<br><br>gather entries by parser type. <br> <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
+   let comment = [ label "comment" . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]<br></blockquote><div><br>Some time ago, we thought that it would be good to map comments in "#comment" nodes to avoid confusion with possible "comment" nodes, especially when the lens allows a wide range of labels. Util.comment would fit your need here, and the new version of it would provide a "#comment" node.<br>
<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
+   let empty = [ label "empty" . del /[ \t]*\n/ "" ]</blockquote><div><br>Util.empty provides a definition of empty lines, too. Do you really need to map them with a label? I thought about doing that some time ago, but mapping them in "#empty" for the same reason that we map comments in "#comment". The useful application to this is to allow users to control empty lines in conffile from the augeas API. <br>
<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">+<br>
+   let lns = ( entry | comment | empty ) +<br></blockquote><div><br>Is an empty file not valid?<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

+<br>
+   let filter = incl "/etc/libvirt/libvirtd.conf"<br>
+              . Util.stdexcl<br>
+<br>
+   let xfm = transform lns filter<br>
+<br>
Index: qemud/test_libvirtd.aug<br>
===================================================================<br>
RCS file: qemud/test_libvirtd.aug<br>
diff -N qemud/test_libvirtd.aug<br>
--- /dev/null   1 Jan 1970 00:00:00 -0000<br>
+++ qemud/test_libvirtd.aug     26 Aug 2008 20:03:48 -0000<br>
@@ -0,0 +1,484 @@<br>
+module Test_libvirtd =<br>
+   let conf1 = "# Master libvirt daemon configuration file<br>
+#<br>
+# For further information consult <a href="http://libvirt.org/format.html" target="_blank">http://libvirt.org/format.html</a><br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# Network connectivity controls<br>
+#<br>
+<br>
+# Flag listening for secure TLS connections on the public TCP/IP port.<br>
+# NB, must pass the --listen flag to the libvirtd process for this to<br>
+# have any effect.<br>
+#<br>
+# It is necessary to setup a CA and issue server certificates before<br>
+# using this capability.<br>
+#<br>
+# This is enabled by default, uncomment this to disable it<br>
+listen_tls = 0<br>
+"<br>
+<br>
+   let conf = "# Master libvirt daemon configuration file<br>
+#<br>
+# For further information consult <a href="http://libvirt.org/format.html" target="_blank">http://libvirt.org/format.html</a><br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# Network connectivity controls<br>
+#<br>
+<br>
+# Flag listening for secure TLS connections on the public TCP/IP port.<br>
+# NB, must pass the --listen flag to the libvirtd process for this to<br>
+# have any effect.<br>
+#<br>
+# It is necessary to setup a CA and issue server certificates before<br>
+# using this capability.<br>
+#<br>
+# This is enabled by default, uncomment this to disable it<br>
+listen_tls = 0<br>
+<br>
+# Listen for unencrypted TCP connections on the public TCP/IP port.<br>
+# NB, must pass the --listen flag to the libvirtd process for this to<br>
+# have any effect.<br>
+#<br>
+# Using the TCP socket requires SASL authentication by default. Only<br>
+# SASL mechanisms which support data encryption are allowed. This is<br>
+# DIGEST_MD5 and GSSAPI (Kerberos5)<br>
+#<br>
+# This is disabled by default, uncomment this to enable it.<br>
+listen_tcp = 1<br>
+<br>
+<br>
+<br>
+# Override the port for accepting secure TLS connections<br>
+# This can be a port number, or service name<br>
+#<br>
+tls_port = \"16514\"<br>
+<br>
+# Override the port for accepting insecure TCP connections<br>
+# This can be a port number, or service name<br>
+#<br>
+tcp_port = \"16509\"<br>
+<br>
+<br>
+# Override the default configuration which binds to all network<br>
+# interfaces. This can be a numeric IPv4/6 address, or hostname<br>
+#<br>
+listen_addr = \"<a href="http://192.168.0.1" target="_blank">192.168.0.1</a>\"<br>
+<br>
+<br>
+# Flag toggling mDNS advertizement of the libvirt service.<br>
+#<br>
+# Alternatively can disable for all services on a host by<br>
+# stopping the Avahi daemon<br>
+#<br>
+# This is enabled by default, uncomment this to disable it<br>
+mdns_adv = 0<br>
+<br>
+# Override the default mDNS advertizement name. This must be<br>
+# unique on the immediate broadcast network.<br>
+#<br>
+# The default is \"Virtualization Host HOSTNAME\", where HOSTNAME<br>
+# is subsituted for the short hostname of the machine (without domain)<br>
+#<br>
+mdns_name = \"Virtualization Host Joe Demo\"<br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# UNIX socket access controls<br>
+#<br>
+<br>
+# Set the UNIX domain socket group ownership. This can be used to<br>
+# allow a 'trusted' set of users access to management capabilities<br>
+# without becoming root.<br>
+#<br>
+# This is restricted to 'root' by default.<br>
+unix_sock_group = \"libvirt\"<br>
+<br>
+# Set the UNIX socket permissions for the R/O socket. This is used<br>
+# for monitoring VM status only<br>
+#<br>
+# Default allows any user. If setting group ownership may want to<br>
+# restrict this to:<br>
+unix_sock_ro_perms = \"0777\"<br>
+<br>
+# Set the UNIX socket permissions for the R/W socket. This is used<br>
+# for full management of VMs<br>
+#<br>
+# Default allows only root. If PolicyKit is enabled on the socket,<br>
+# the default will change to allow everyone (eg, 0777)<br>
+#<br>
+# If not using PolicyKit and setting group ownership for access<br>
+# control then you may want to relax this to:<br>
+unix_sock_rw_perms = \"0770\"<br>
+<br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# Authentication.<br>
+#<br>
+#  - none: do not perform auth checks. If you can connect to the<br>
+#          socket you are allowed. This is suitable if there are<br>
+#          restrictions on connecting to the socket (eg, UNIX<br>
+#          socket permissions), or if there is a lower layer in<br>
+#          the network providing auth (eg, TLS/x509 certificates)<br>
+#<br>
+#  - sasl: use SASL infrastructure. The actual auth scheme is then<br>
+#          controlled from /etc/sasl2/libvirt.conf. For the TCP<br>
+#          socket only GSSAPI & DIGEST-MD5 mechanisms will be used.<br>
+#          For non-TCP or TLS sockets,  any scheme is allowed.<br>
+#<br>
+#  - polkit: use PolicyKit to authenticate. This is only suitable<br>
+#            for use on the UNIX sockets. The default policy will<br>
+#            require a user to supply their own password to gain<br>
+#            full read/write access (aka sudo like), while anyone<br>
+#            is allowed read/only access.<br>
+#<br>
+# Set an authentication scheme for UNIX read-only sockets<br>
+# By default socket permissions allow anyone to connect<br>
+#<br>
+# To restrict monitoring of domains you may wish to enable<br>
+# an authentication mechanism here<br>
+auth_unix_ro = \"none\"<br>
+<br>
+# Set an authentication scheme for UNIX read-write sockets<br>
+# By default socket permissions only allow root. If PolicyKit<br>
+# support was compiled into libvirt, the default will be to<br>
+# use 'polkit' auth.<br>
+#<br>
+# If the unix_sock_rw_perms are changed you may wish to enable<br>
+# an authentication mechanism here<br>
+auth_unix_rw = \"none\"<br>
+<br>
+# Change the authentication scheme for TCP sockets.<br>
+#<br>
+# If you don't enable SASL, then all TCP traffic is cleartext.<br>
+# Don't do this outside of a dev/test scenario. For real world<br>
+# use, always enable SASL and use the GSSAPI or DIGEST-MD5<br>
+# mechanism in /etc/sasl2/libvirt.conf<br>
+auth_tcp = \"sasl\"<br>
+<br>
+# Change the authentication scheme for TLS sockets.<br>
+#<br>
+# TLS sockets already have encryption provided by the TLS<br>
+# layer, and limited authentication is done by certificates<br>
+#<br>
+# It is possible to make use of any SASL authentication<br>
+# mechanism as well, by using 'sasl' for this option<br>
+auth_tls = \"none\"<br>
+<br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# TLS x509 certificate configuration<br>
+#<br>
+<br>
+<br>
+# Override the default server key file path<br>
+#<br>
+key_file = \"/etc/pki/libvirt/private/serverkey.pem\"<br>
+<br>
+# Override the default server certificate file path<br>
+#<br>
+cert_file = \"/etc/pki/libvirt/servercert.pem\"<br>
+<br>
+# Override the default CA certificate path<br>
+#<br>
+ca_file = \"/etc/pki/CA/cacert.pem\"<br>
+<br>
+# Specify a certificate revocation list.<br>
+#<br>
+# Defaults to not using a CRL, uncomment to enable it<br>
+crl_file = \"/etc/pki/CA/crl.pem\"<br>
+<br>
+<br>
+<br>
+#################################################################<br>
+#<br>
+# Authorization controls<br>
+#<br>
+<br>
+<br>
+# Flag to disable verification of client certificates<br>
+#<br>
+# Client certificate verification is the primary authentication mechanism.<br>
+# Any client which does not present a certificate signed by the CA<br>
+# will be rejected.<br>
+#<br>
+# Default is to always verify. Uncommenting this will disable<br>
+# verification - make sure an IP whitelist is set<br>
+tls_no_verify_certificate = 1<br>
+<br>
+<br>
+# A whitelist of allowed x509  Distinguished Names<br>
+# This list may contain wildcards such as<br>
+#<br>
+#    \"C=GB,ST=London,L=London,O=Red Hat,CN=*\"<br>
+#<br>
+# See the POSIX fnmatch function for the format of the wildcards.<br>
+#<br>
+# NB If this is an empty list, no client can connect, so comment out<br>
+# entirely rather than using empty list to disable these checks<br>
+#<br>
+# By default, no DN's are checked<br>
+   tls_allowed_dn_list = [\"DN1\", \"DN2\"]<br>
+<br>
+<br>
+# A whitelist of allowed SASL usernames. The format for usernames<br>
+# depends on the SASL authentication mechanism. Kerberos usernames<br>
+# look like username@REALM<br>
+#<br>
+# This list may contain wildcards such as<br>
+#<br>
+#    \"*@<a href="http://EXAMPLE.COM" target="_blank">EXAMPLE.COM</a>\"<br>
+#<br>
+# See the POSIX fnmatch function for the format of the wildcards.<br>
+#<br>
+# NB If this is an empty list, no client can connect, so comment out<br>
+# entirely rather than using empty list to disable these checks<br>
+#<br>
+# By default, no Username's are checked<br>
+sasl_allowed_username_list = [<br>
+  \"<a href="mailto:joe@EXAMPLE.COM">joe@EXAMPLE.COM</a>\",<br>
+  \"<a href="mailto:fred@EXAMPLE.COM">fred@EXAMPLE.COM</a>\"<br>
+]<br>
+"<br>
+<br>
+   test Libvirtd.lns get conf =<br>
+        { "comment" = "Master libvirt daemon configuration file" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "For further information consult <a href="http://libvirt.org/format.html" target="_blank">http://libvirt.org/format.html</a>" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "################################################################" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Network connectivity controls" }<br>
+        { "comment" = "" }<br>
+        { "empty" }<br>
+        { "comment" = "Flag listening for secure TLS connections on the public TCP/IP port." }<br>
+        { "comment" = "NB, must pass the --listen flag to the libvirtd process for this to" }<br>
+        { "comment" = "have any effect." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "It is necessary to setup a CA and issue server certificates before" }<br>
+        { "comment" = "using this capability." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "This is enabled by default, uncomment this to disable it" }<br>
+        { "listen_tls" = "0" }<br>
+        { "empty" }<br>
+        { "comment" = "Listen for unencrypted TCP connections on the public TCP/IP port." }<br>
+        { "comment" = "NB, must pass the --listen flag to the libvirtd process for this to" }<br>
+        { "comment" = "have any effect." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Using the TCP socket requires SASL authentication by default. Only" }<br>
+        { "comment" = "SASL mechanisms which support data encryption are allowed. This is" }<br>
+        { "comment" = "DIGEST_MD5 and GSSAPI (Kerberos5)" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "This is disabled by default, uncomment this to enable it." }<br>
+        { "listen_tcp" = "1" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the port for accepting secure TLS connections" }<br>
+        { "comment" = "This can be a port number, or service name" }<br>
+        { "comment" = "" }<br>
+        { "tls_port" = "16514" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the port for accepting insecure TCP connections" }<br>
+        { "comment" = "This can be a port number, or service name" }<br>
+        { "comment" = "" }<br>
+        { "tcp_port" = "16509" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the default configuration which binds to all network" }<br>
+        { "comment" = "interfaces. This can be a numeric IPv4/6 address, or hostname" }<br>
+        { "comment" = "" }<br>
+        { "listen_addr" = "<a href="http://192.168.0.1" target="_blank">192.168.0.1</a>" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "Flag toggling mDNS advertizement of the libvirt service." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Alternatively can disable for all services on a host by" }<br>
+        { "comment" = "stopping the Avahi daemon" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "This is enabled by default, uncomment this to disable it" }<br>
+        { "mdns_adv" = "0" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the default mDNS advertizement name. This must be" }<br>
+        { "comment" = "unique on the immediate broadcast network." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "The default is \"Virtualization Host HOSTNAME\", where HOSTNAME" }<br>
+        { "comment" = "is subsituted for the short hostname of the machine (without domain)" }<br>
+        { "comment" = "" }<br>
+        { "mdns_name" = "Virtualization Host Joe Demo" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "################################################################" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "UNIX socket access controls" }<br>
+        { "comment" = "" }<br>
+        { "empty" }<br>
+        { "comment" = "Set the UNIX domain socket group ownership. This can be used to" }<br>
+        { "comment" = "allow a 'trusted' set of users access to management capabilities" }<br>
+        { "comment" = "without becoming root." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "This is restricted to 'root' by default." }<br>
+        { "unix_sock_group" = "libvirt" }<br>
+        { "empty" }<br>
+        { "comment" = "Set the UNIX socket permissions for the R/O socket. This is used" }<br>
+        { "comment" = "for monitoring VM status only" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Default allows any user. If setting group ownership may want to" }<br>
+        { "comment" = "restrict this to:" }<br>
+        { "unix_sock_ro_perms" = "0777" }<br>
+        { "empty" }<br>
+        { "comment" = "Set the UNIX socket permissions for the R/W socket. This is used" }<br>
+        { "comment" = "for full management of VMs" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Default allows only root. If PolicyKit is enabled on the socket," }<br>
+        { "comment" = "the default will change to allow everyone (eg, 0777)" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "If not using PolicyKit and setting group ownership for access" }<br>
+        { "comment" = "control then you may want to relax this to:" }<br>
+        { "unix_sock_rw_perms" = "0770" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "################################################################" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Authentication." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "- none: do not perform auth checks. If you can connect to the" }<br>
+        { "comment" = "socket you are allowed. This is suitable if there are" }<br>
+        { "comment" = "restrictions on connecting to the socket (eg, UNIX" }<br>
+        { "comment" = "socket permissions), or if there is a lower layer in" }<br>
+        { "comment" = "the network providing auth (eg, TLS/x509 certificates)" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "- sasl: use SASL infrastructure. The actual auth scheme is then" }<br>
+        { "comment" = "controlled from /etc/sasl2/libvirt.conf. For the TCP" }<br>
+        { "comment" = "socket only GSSAPI & DIGEST-MD5 mechanisms will be used." }<br>
+        { "comment" = "For non-TCP or TLS sockets,  any scheme is allowed." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "- polkit: use PolicyKit to authenticate. This is only suitable" }<br>
+        { "comment" = "for use on the UNIX sockets. The default policy will" }<br>
+        { "comment" = "require a user to supply their own password to gain" }<br>
+        { "comment" = "full read/write access (aka sudo like), while anyone" }<br>
+        { "comment" = "is allowed read/only access." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Set an authentication scheme for UNIX read-only sockets" }<br>
+        { "comment" = "By default socket permissions allow anyone to connect" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "To restrict monitoring of domains you may wish to enable" }<br>
+        { "comment" = "an authentication mechanism here" }<br>
+        { "auth_unix_ro" = "none" }<br>
+        { "empty" }<br>
+        { "comment" = "Set an authentication scheme for UNIX read-write sockets" }<br>
+        { "comment" = "By default socket permissions only allow root. If PolicyKit" }<br>
+        { "comment" = "support was compiled into libvirt, the default will be to" }<br>
+        { "comment" = "use 'polkit' auth." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "If the unix_sock_rw_perms are changed you may wish to enable" }<br>
+        { "comment" = "an authentication mechanism here" }<br>
+        { "auth_unix_rw" = "none" }<br>
+        { "empty" }<br>
+        { "comment" = "Change the authentication scheme for TCP sockets." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "If you don't enable SASL, then all TCP traffic is cleartext." }<br>
+        { "comment" = "Don't do this outside of a dev/test scenario. For real world" }<br>
+        { "comment" = "use, always enable SASL and use the GSSAPI or DIGEST-MD5" }<br>
+        { "comment" = "mechanism in /etc/sasl2/libvirt.conf" }<br>
+        { "auth_tcp" = "sasl" }<br>
+        { "empty" }<br>
+        { "comment" = "Change the authentication scheme for TLS sockets." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "TLS sockets already have encryption provided by the TLS" }<br>
+        { "comment" = "layer, and limited authentication is done by certificates" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "It is possible to make use of any SASL authentication" }<br>
+        { "comment" = "mechanism as well, by using 'sasl' for this option" }<br>
+        { "auth_tls" = "none" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "################################################################" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "TLS x509 certificate configuration" }<br>
+        { "comment" = "" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the default server key file path" }<br>
+        { "comment" = "" }<br>
+        { "key_file" = "/etc/pki/libvirt/private/serverkey.pem" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the default server certificate file path" }<br>
+        { "comment" = "" }<br>
+        { "cert_file" = "/etc/pki/libvirt/servercert.pem" }<br>
+        { "empty" }<br>
+        { "comment" = "Override the default CA certificate path" }<br>
+        { "comment" = "" }<br>
+        { "ca_file" = "/etc/pki/CA/cacert.pem" }<br>
+        { "empty" }<br>
+        { "comment" = "Specify a certificate revocation list." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Defaults to not using a CRL, uncomment to enable it" }<br>
+        { "crl_file" = "/etc/pki/CA/crl.pem" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "################################################################" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Authorization controls" }<br>
+        { "comment" = "" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "Flag to disable verification of client certificates" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Client certificate verification is the primary authentication mechanism." }<br>
+        { "comment" = "Any client which does not present a certificate signed by the CA" }<br>
+        { "comment" = "will be rejected." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "Default is to always verify. Uncommenting this will disable" }<br>
+        { "comment" = "verification - make sure an IP whitelist is set" }<br>
+        { "tls_no_verify_certificate" = "1" }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "A whitelist of allowed x509  Distinguished Names" }<br>
+        { "comment" = "This list may contain wildcards such as" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "\"C=GB,ST=London,L=London,O=Red Hat,CN=*\"" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "See the POSIX fnmatch function for the format of the wildcards." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "NB If this is an empty list, no client can connect, so comment out" }<br>
+        { "comment" = "entirely rather than using empty list to disable these checks" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "By default, no DN's are checked" }<br>
+        { "tls_allowed_dn_list"<br>
+             { = "DN1"}<br>
+             { = "DN2"}<br>
+        }<br>
+        { "empty" }<br>
+        { "empty" }<br>
+        { "comment" = "A whitelist of allowed SASL usernames. The format for usernames" }<br>
+        { "comment" = "depends on the SASL authentication mechanism. Kerberos usernames" }<br>
+        { "comment" = "look like username@REALM" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "This list may contain wildcards such as" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "\"*@<a href="http://EXAMPLE.COM" target="_blank">EXAMPLE.COM</a>\"" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "See the POSIX fnmatch function for the format of the wildcards." }<br>
+        { "comment" = "" }<br>
+        { "comment" = "NB If this is an empty list, no client can connect, so comment out" }<br>
+        { "comment" = "entirely rather than using empty list to disable these checks" }<br>
+        { "comment" = "" }<br>
+        { "comment" = "By default, no Username's are checked" }<br>
+        { "sasl_allowed_username_list"<br>
+             { = "<a href="mailto:joe@EXAMPLE.COM">joe@EXAMPLE.COM</a>" }<br>
+             { = "<a href="mailto:fred@EXAMPLE.COM">fred@EXAMPLE.COM</a>" }<br>
+        }<br>
Index: <a href="http://libvirt.spec.in" target="_blank">libvirt.spec.in</a><br>
===================================================================<br>
RCS file: /data/cvs/libvirt/<a href="http://libvirt.spec.in" target="_blank">libvirt.spec.in</a>,v<br>
retrieving revision 1.91<br>
diff -u -p -r1.91 <a href="http://libvirt.spec.in" target="_blank">libvirt.spec.in</a><br>
--- <a href="http://libvirt.spec.in" target="_blank">libvirt.spec.in</a>     21 Aug 2008 09:28:54 -0000      1.91<br>
+++ <a href="http://libvirt.spec.in" target="_blank">libvirt.spec.in</a>     26 Aug 2008 20:04:24 -0000<br>
@@ -252,6 +252,8 @@ fi<br>
 %dir %{_localstatedir}/lib/libvirt/<br>
 %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/images/<br>
 %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/boot/<br>
+%{_datadir}/augeas/lenses/libvirtd.aug<br>
+%{_datadir}/augeas/lenses/tests/test_libvirtd.aug<br>
 %if %{with_polkit}<br>
 %{_datadir}/PolicyKit/policy/org.libvirt.unix.policy<br>
 %endif<br>
<br>
--<br>
|: Red Hat, Engineering, London   -o-   <a href="http://people.redhat.com/berrange/" target="_blank">http://people.redhat.com/berrange/</a> :|<br>
|: <a href="http://libvirt.org" target="_blank">http://libvirt.org</a>  -o-  <a href="http://virt-manager.org" target="_blank">http://virt-manager.org</a>  -o-  <a href="http://ovirt.org" target="_blank">http://ovirt.org</a> :|<br>

|: <a href="http://autobuild.org" target="_blank">http://autobuild.org</a>       -o-         <a href="http://search.cpan.org/%7Edanberr/" target="_blank">http://search.cpan.org/~danberr/</a> :|<br>
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|<br>
<br>
_______________________________________________<br>
augeas-devel mailing list<br>
<a href="mailto:augeas-devel@redhat.com">augeas-devel@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/augeas-devel" target="_blank">https://www.redhat.com/mailman/listinfo/augeas-devel</a><br>
</blockquote></div><br></div>