selinux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] python: improve format strings for proper localization
@ 2023-05-17 13:49 Petr Lautrbach
  2023-05-17 13:49 ` [PATCH 2/4] python/semanage: Drop hard formating from localized strings Petr Lautrbach
                   ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-05-17 13:49 UTC (permalink / raw)
  To: selinux; +Cc: Petr Lautrbach

If a string contains more than one unnamed argument it's hard for
translators to proper localize as they don't know which value is
represented by a unnamed argument. It also blocks them to use a
different order of arguments which would make better sense in other
languages.

Fixes:

    $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
    ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                 The translator cannot reorder the arguments.
                                 Please consider using a format string with named arguments,
                                 and a mapping instead of a tuple for the arguments.
    ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                           The translator cannot reorder the arguments.
                                           Please consider using a format string with named arguments,
                                           and a mapping instead of a tuple for the arguments.
    ...

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/chcat/chcat          |  2 +-
 python/semanage/seobject.py | 92 ++++++++++++++++++-------------------
 2 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/python/chcat/chcat b/python/chcat/chcat
index 68718ec5f102..ec34c05ffdfa 100755
--- a/python/chcat/chcat
+++ b/python/chcat/chcat
@@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
             else:
                 cat = ""
         else:
-            print(_("%s is not in %s") % (f, orig))
+            print(_("{target} is not in {category}").format(target=f, category=orig))
             continue
 
         if len(cat) == 0:
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index d82da4942987..8a891ca23bca 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query port %s/%s") % (proto, port))
+            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
 
         con = semanage_port_get_con(p)
 
@@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
+            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
         semanage_port_free(p)
@@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
         (k, proto_d, low, high) = self.__genkey(port, proto)
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, exists) = semanage_port_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
 
         rc = semanage_port_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
+            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
 
@@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
         return (k, subnet_prefix, low, high)
 
     def __add(self, pkey, subnet_prefix, serange, type):
@@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
         if exists:
-            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
         semanage_ibpkey_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_context_free(con)
         semanage_ibpkey_key_free(k)
@@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         con = semanage_ibpkey_get_con(p)
 
@@ -1508,13 +1508,13 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
 
@@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
 
         (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
         if rc < 0:
-            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
         return (k, ibdev_name, port)
 
     def __add(self, ibendport, ibdev_name, serange, type):
@@ -1638,9 +1638,9 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
         if exists:
-            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
+            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
 
         (rc, p) = semanage_ibendport_create(self.sh)
         if rc < 0:
@@ -1650,32 +1650,32 @@ class ibendportRecords(semanageRecords):
         semanage_ibendport_set_port(p, port)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
+                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_context_free(con)
         semanage_ibendport_key_free(k)
@@ -1702,9 +1702,9 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, p) = semanage_ibendport_query(self.sh, k)
         if rc < 0:
@@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
         semanage_ibendport_free(p)
@@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
             port = semanage_ibendport_get_port(ibendport)
             (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
             if rc < 0:
-                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
+                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
             rc = semanage_ibendport_del_local(self.sh, k)
             if rc < 0:
-                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
+                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
             semanage_ibendport_key_free(k)
 
         self.commit()
@@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
         (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         rc = semanage_ibendport_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 2/4] python/semanage: Drop hard formating from localized strings
  2023-05-17 13:49 [PATCH 1/4] python: improve format strings for proper localization Petr Lautrbach
@ 2023-05-17 13:49 ` Petr Lautrbach
  2023-06-06 15:20   ` Vit Mojzis
  2023-05-17 13:49 ` [PATCH 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-05-17 13:49 UTC (permalink / raw)
  To: selinux; +Cc: Petr Lautrbach

It confuses translators and new lines are dropped by parser module anyway.

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/audit2allow/audit2allow | 14 ++++++++---
 python/semanage/semanage       | 44 +++++++++++++---------------------
 2 files changed, 28 insertions(+), 30 deletions(-)

diff --git a/python/audit2allow/audit2allow b/python/audit2allow/audit2allow
index 5587a2dbb006..35b0b151ac86 100644
--- a/python/audit2allow/audit2allow
+++ b/python/audit2allow/audit2allow
@@ -234,9 +234,17 @@ class AuditToPolicy:
             print(e)
             sys.exit(1)
 
-        sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
-        sys.stdout.write((_("To make this policy package active, execute:" +
-                            "\n\nsemodule -i %s\n\n") % packagename))
+        sys.stdout.write(
+"""******************** {important} ***********************
+{text}
+
+semodule -i {packagename}
+
+""".format(
+    important=_("IMPORTANT"),
+    text=_("To make this policy package active, execute:"),
+    packagename=packagename
+))
 
     def __output_audit2why(self):
         import selinux
diff --git a/python/semanage/semanage b/python/semanage/semanage
index e0bd98a95c77..898df4b93c10 100644
--- a/python/semanage/semanage
+++ b/python/semanage/semanage
@@ -238,30 +238,22 @@ def parser_add_level(parser, name):
 
 
 def parser_add_range(parser, name):
-    parser.add_argument('-r', '--range', default='',
-                        help=_('''
-MLS/MCS Security Range (MLS/MCS Systems only)
-SELinux Range  for SELinux login mapping
-defaults to the SELinux user record range.
-SELinux Range for SELinux user defaults to s0.
-'''))
+    parser.add_argument('-r', '--range', default='', help=_(
+        "MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
+SELinux Range for SELinux user defaults to s0."
+    ))
 
 
 def parser_add_proto(parser, name):
-    parser.add_argument('-p', '--proto', help=_('''
-    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet protocol
-    version for the specified node (ipv4|ipv6).
-'''))
+    parser.add_argument('-p', '--proto', help=_(
+        "Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6)."
+    ))
 
 def parser_add_subnet_prefix(parser, name):
-    parser.add_argument('-x', '--subnet_prefix', help=_('''
-    Subnet prefix for  the specified infiniband ibpkey.
-'''))
+    parser.add_argument('-x', '--subnet_prefix', help=_('Subnet prefix for  the specified infiniband ibpkey.'))
 
 def parser_add_ibdev_name(parser, name):
-    parser.add_argument('-z', '--ibdev_name', help=_('''
-    Name for the specified infiniband end port.
-'''))
+    parser.add_argument('-z', '--ibdev_name', help=_("Name for the specified infiniband end port."))
 
 def parser_add_modify(parser, name):
     parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name)
@@ -372,10 +364,10 @@ If you do not specify a file type, the file type will default to "all files".
     parser_add_extract(fcontext_action, "fcontext")
     parser_add_deleteall(fcontext_action, "fcontext")
 
-    fcontextParser.add_argument('-e', '--equal', help=_('''Substitute  target  path with sourcepath when generating default
-                                                                  label.  This is used with fcontext. Requires source  and  target
-                                                                  path  arguments.  The context labeling for the target subtree is
-                                                                  made equivalent to that defined for the source.'''))
+    fcontextParser.add_argument('-e', '--equal', help=_(
+        "Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
+path arguments. The context labeling for the target subtree is made equivalent to that defined for the source."
+    ))
     fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help))
     parser_add_seuser(fcontextParser, "fcontext")
     parser_add_type(fcontextParser, "fcontext")
@@ -426,9 +418,7 @@ def setupUserParser(subparsers):
     parser_add_range(userParser, "user")
     userParser.add_argument('-R', '--roles', default=[],
                             action=CheckRole,
-                            help=_('''
-SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
-'''))
+                            help=_("SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times."))
     userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS)
     userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name'))
     userParser.set_defaults(func=handleUser)
@@ -901,9 +891,9 @@ def setupImportParser(subparsers):
 def createCommandParser():
     commandParser = seParser(prog='semanage',
                              formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-                             description='''semanage is used to configure certain elements
-                                                            of SELinux policy with-out requiring modification
-                                                            to or recompilation from policy source.''')
+                             description=_(
+            "semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source."
+                             ))
 
     #To add a new subcommand define the parser for it in a function above and call it here.
     subparsers = commandParser.add_subparsers(dest='subcommand')
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 3/4] semanage: Drop unnecessary import from seobject
  2023-05-17 13:49 [PATCH 1/4] python: improve format strings for proper localization Petr Lautrbach
  2023-05-17 13:49 ` [PATCH 2/4] python/semanage: Drop hard formating from localized strings Petr Lautrbach
@ 2023-05-17 13:49 ` Petr Lautrbach
  2023-05-17 13:49 ` [PATCH 4/4] python: update python.pot Petr Lautrbach
  2023-06-06 15:20 ` [PATCH 1/4] python: improve format strings for proper localization Vit Mojzis
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-05-17 13:49 UTC (permalink / raw)
  To: selinux; +Cc: Petr Lautrbach

sepolgen.module is not used for permissive domains

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/semanage/seobject.py | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index 8a891ca23bca..124bb431464e 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -504,11 +504,6 @@ class permissiveRecords(semanageRecords):
             print(t)
 
     def add(self, type):
-        try:
-            import sepolgen.module as module
-        except ImportError:
-            raise ValueError(_("The sepolgen python module is required to setup permissive domains.\nIn some distributions it is included in the policycoreutils-devel package.\n# yum install policycoreutils-devel\nOr similar for your distro."))
-
         name = "permissive_%s" % type
         modtxt = "(typepermissive %s)" % type
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH 4/4] python: update python.pot
  2023-05-17 13:49 [PATCH 1/4] python: improve format strings for proper localization Petr Lautrbach
  2023-05-17 13:49 ` [PATCH 2/4] python/semanage: Drop hard formating from localized strings Petr Lautrbach
  2023-05-17 13:49 ` [PATCH 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
@ 2023-05-17 13:49 ` Petr Lautrbach
  2023-06-06 15:20 ` [PATCH 1/4] python: improve format strings for proper localization Vit Mojzis
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-05-17 13:49 UTC (permalink / raw)
  To: selinux; +Cc: Petr Lautrbach

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/po/python.pot | 895 ++++++++++++++++++++++---------------------
 1 file changed, 458 insertions(+), 437 deletions(-)

diff --git a/python/po/python.pot b/python/po/python.pot
index 16d04eb0f18e..874495448404 100644
--- a/python/po/python.pot
+++ b/python/po/python.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-18 11:57+0100\n"
+"POT-Creation-Date: 2023-05-17 13:34+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,17 +17,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../audit2allow/audit2allow:239
-msgid "******************** IMPORTANT ***********************\n"
+#: ../audit2allow/audit2allow:244
+msgid "IMPORTANT"
 msgstr ""
 
-#: ../audit2allow/audit2allow:240
-#, python-format
-msgid ""
-"To make this policy package active, execute:\n"
-"\n"
-"semodule -i %s\n"
-"\n"
+#: ../audit2allow/audit2allow:245
+msgid "To make this policy package active, execute:"
 msgstr ""
 
 #: ../chcat/chcat:111 ../chcat/chcat:191
@@ -44,11 +39,16 @@ msgstr ""
 msgid "%s is already in %s"
 msgstr ""
 
-#: ../chcat/chcat:210 ../chcat/chcat:220
+#: ../chcat/chcat:210
 #, python-format
 msgid "%s is not in %s"
 msgstr ""
 
+#: ../chcat/chcat:220
+#, python-brace-format
+msgid "{target} is not in {category}"
+msgstr ""
+
 #: ../chcat/chcat:291 ../chcat/chcat:296
 msgid "Can not combine +/- with other types of categories"
 msgstr ""
@@ -152,218 +152,212 @@ msgstr ""
 
 #: ../semanage/semanage:242
 msgid ""
-"\n"
-"MLS/MCS Security Range (MLS/MCS Systems only)\n"
-"SELinux Range  for SELinux login mapping\n"
-"defaults to the SELinux user record range.\n"
-"SELinux Range for SELinux user defaults to s0.\n"
+"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
+"login mapping defaults to the SELinux user record range. SELinux Range for "
+"SELinux user defaults to s0."
 msgstr ""
 
-#: ../semanage/semanage:251
+#: ../semanage/semanage:249
 msgid ""
-"\n"
-"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
-"protocol\n"
-"    version for the specified node (ipv4|ipv6).\n"
+"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
+"version for the specified node (ipv4|ipv6)."
 msgstr ""
 
-#: ../semanage/semanage:257
-msgid ""
-"\n"
-"    Subnet prefix for  the specified infiniband ibpkey.\n"
+#: ../semanage/semanage:253
+msgid "Subnet prefix for  the specified infiniband ibpkey."
 msgstr ""
 
-#: ../semanage/semanage:262
-msgid ""
-"\n"
-"    Name for the specified infiniband end port.\n"
+#: ../semanage/semanage:256
+msgid "Name for the specified infiniband end port."
 msgstr ""
 
-#: ../semanage/semanage:267
+#: ../semanage/semanage:259
 #, python-format
 msgid "Modify a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:271
+#: ../semanage/semanage:263
 #, python-format
 msgid "List records of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:275
+#: ../semanage/semanage:267
 #, python-format
 msgid "Delete a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:279
+#: ../semanage/semanage:271
 msgid "Extract customizable commands, for use within a transaction"
 msgstr ""
 
-#: ../semanage/semanage:283
+#: ../semanage/semanage:275
 #, python-format
 msgid "Remove all %s objects local customizations"
 msgstr ""
 
-#: ../semanage/semanage:287
+#: ../semanage/semanage:279
 msgid "SELinux user name"
 msgstr ""
 
-#: ../semanage/semanage:292
+#: ../semanage/semanage:284
 msgid "Manage login mappings between linux users and SELinux confined users"
 msgstr ""
 
-#: ../semanage/semanage:309
+#: ../semanage/semanage:301
 #, python-format
 msgid "login_name | %%groupname"
 msgstr ""
 
-#: ../semanage/semanage:361
+#: ../semanage/semanage:353
 msgid "Manage file context mapping definitions"
 msgstr ""
 
-#: ../semanage/semanage:375
+#: ../semanage/semanage:368
 msgid ""
-"Substitute  target  path with sourcepath when generating default\n"
-"                                                                  label.  "
-"This is used with fcontext. Requires source  and  target\n"
-"                                                                  path  "
-"arguments.  The context labeling for the target subtree is\n"
-"                                                                  made "
-"equivalent to that defined for the source."
+"Substitute target path with sourcepath when generating default label. This "
+"is used with fcontext. Requires source and target path arguments. The "
+"context labeling for the target subtree is made equivalent to that defined "
+"for the source."
 msgstr ""
 
-#: ../semanage/semanage:383
+#: ../semanage/semanage:375
 msgid ""
 "Path to be labeled (may be in the form of a Perl compatible regular "
 "expression)"
 msgstr ""
 
-#: ../semanage/semanage:411
+#: ../semanage/semanage:403
 msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
 msgstr ""
 
-#: ../semanage/semanage:429
+#: ../semanage/semanage:421
 msgid ""
-"\n"
-"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
-"spaces. Or specify -R multiple times.\n"
+"SELinux Roles. You must enclose multiple roles within quotes, separate by "
+"spaces. Or specify -R multiple times."
 msgstr ""
 
-#: ../semanage/semanage:433
+#: ../semanage/semanage:423
 msgid "selinux_name"
 msgstr ""
 
-#: ../semanage/semanage:461
+#: ../semanage/semanage:451
 msgid "Manage network port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:477
+#: ../semanage/semanage:467
 msgid "port | port_range"
 msgstr ""
 
-#: ../semanage/semanage:506
+#: ../semanage/semanage:496
 msgid "Manage infiniband ibpkey type definitions"
 msgstr ""
 
-#: ../semanage/semanage:522
+#: ../semanage/semanage:512
 msgid "pkey | pkey_range"
 msgstr ""
 
-#: ../semanage/semanage:549
+#: ../semanage/semanage:539
 msgid "Manage infiniband end port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:565
+#: ../semanage/semanage:555
 msgid "ibendport"
 msgstr ""
 
-#: ../semanage/semanage:592
+#: ../semanage/semanage:582
 msgid "Manage network interface type definitions"
 msgstr ""
 
-#: ../semanage/semanage:607
+#: ../semanage/semanage:597
 msgid "interface_spec"
 msgstr ""
 
-#: ../semanage/semanage:631
+#: ../semanage/semanage:621
 msgid "Manage SELinux policy modules"
 msgstr ""
 
-#: ../semanage/semanage:642
+#: ../semanage/semanage:632
 msgid "Add a module"
 msgstr ""
 
-#: ../semanage/semanage:643
+#: ../semanage/semanage:633
 msgid "Remove a module"
 msgstr ""
 
-#: ../semanage/semanage:644
+#: ../semanage/semanage:634
 msgid "Disable a module"
 msgstr ""
 
-#: ../semanage/semanage:645
+#: ../semanage/semanage:635
 msgid "Enable a module"
 msgstr ""
 
-#: ../semanage/semanage:672
+#: ../semanage/semanage:662
 msgid "Manage network node type definitions"
 msgstr ""
 
-#: ../semanage/semanage:686
+#: ../semanage/semanage:676
 msgid "Network Mask"
 msgstr ""
 
-#: ../semanage/semanage:690
+#: ../semanage/semanage:680
 msgid "node"
 msgstr ""
 
-#: ../semanage/semanage:715
+#: ../semanage/semanage:705
 msgid "Manage booleans to selectively enable functionality"
 msgstr ""
 
-#: ../semanage/semanage:720
+#: ../semanage/semanage:710
 msgid "boolean"
 msgstr ""
 
-#: ../semanage/semanage:730
+#: ../semanage/semanage:720
 msgid "Enable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:731
+#: ../semanage/semanage:721
 msgid "Disable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:752
+#: ../semanage/semanage:742
 msgid "semanage permissive: error: the following argument is required: type\n"
 msgstr ""
 
-#: ../semanage/semanage:756
+#: ../semanage/semanage:746
 msgid "Manage process type enforcement mode"
 msgstr ""
 
-#: ../semanage/semanage:768 ../semanage/seobject.py:2677
+#: ../semanage/semanage:758 ../semanage/seobject.py:2672
 msgid "type"
 msgstr ""
 
-#: ../semanage/semanage:779
+#: ../semanage/semanage:769
 msgid "Disable/Enable dontaudit rules in policy"
 msgstr ""
 
-#: ../semanage/semanage:799
+#: ../semanage/semanage:789
 msgid "Output local customizations"
 msgstr ""
 
-#: ../semanage/semanage:801
+#: ../semanage/semanage:791
 msgid "Output file"
 msgstr ""
 
-#: ../semanage/semanage:894
+#: ../semanage/semanage:884
 msgid "Import local customizations"
 msgstr ""
 
-#: ../semanage/semanage:897
+#: ../semanage/semanage:887
 msgid "Input file"
 msgstr ""
 
+#: ../semanage/semanage:895
+msgid ""
+"semanage is used to configure certain elements of SELinux policy with-out "
+"requiring modification or recompilation from policy source."
+msgstr ""
+
 #: ../semanage/seobject.py:279
 msgid "Could not create semanage handle"
 msgstr ""
@@ -485,123 +479,115 @@ msgstr ""
 msgid "Customized Permissive Types"
 msgstr ""
 
-#: ../semanage/seobject.py:510
-msgid ""
-"The sepolgen python module is required to setup permissive domains.\n"
-"In some distributions it is included in the policycoreutils-devel package.\n"
-"# yum install policycoreutils-devel\n"
-"Or similar for your distro."
-msgstr ""
-
-#: ../semanage/seobject.py:520
+#: ../semanage/seobject.py:515
 #, python-format
 msgid "Could not set permissive domain %s (module installation failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:526
+#: ../semanage/seobject.py:521
 #, python-format
 msgid "Could not remove permissive domain %s (remove failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
-#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
-#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
-#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
-#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
-#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
-#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
+#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
+#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
+#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
+#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
+#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
+#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
+#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
 #, python-format
 msgid "Could not create a key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
-#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
+#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
+#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
 #, python-format
 msgid "Could not check if login mapping for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:569
+#: ../semanage/seobject.py:564
 #, python-format
 msgid "Login mapping for %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:574
+#: ../semanage/seobject.py:569
 #, python-format
 msgid "Linux Group %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:579
+#: ../semanage/seobject.py:574
 #, python-format
 msgid "Linux User %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:583
+#: ../semanage/seobject.py:578
 #, python-format
 msgid "Could not create login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
+#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
 #, python-format
 msgid "Could not set name for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
+#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
 #, python-format
 msgid "Could not set MLS range for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:596
+#: ../semanage/seobject.py:591
 #, python-format
 msgid "Could not set SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:600
+#: ../semanage/seobject.py:595
 #, python-format
 msgid "Could not add login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:616
+#: ../semanage/seobject.py:611
 msgid "Requires seuser or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
+#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
 #, python-format
 msgid "Login mapping for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:643
+#: ../semanage/seobject.py:638
 #, python-format
 msgid "Could not query seuser for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:658
+#: ../semanage/seobject.py:653
 #, python-format
 msgid "Could not modify login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:690
+#: ../semanage/seobject.py:685
 #, python-format
 msgid "Login mapping for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:694
+#: ../semanage/seobject.py:689
 #, python-format
 msgid "Could not delete login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
-#: ../semanage/seobject.py:991
+#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
+#: ../semanage/seobject.py:986
 msgid "Could not list login mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
 #: ../sepolicy/sepolicy/sepolicy.glade:1156
 #: ../sepolicy/sepolicy/sepolicy.glade:3138
 msgid "Login Name"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:1182
 #: ../sepolicy/sepolicy/sepolicy.glade:3156
 #: ../sepolicy/sepolicy/sepolicy.glade:3242
@@ -609,938 +595,973 @@ msgstr ""
 msgid "SELinux User"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "MLS/MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "Service"
 msgstr ""
 
-#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
-#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
-#: ../semanage/seobject.py:958
+#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
+#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
+#: ../semanage/seobject.py:953
 #, python-format
 msgid "Could not check if SELinux user %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
-#: ../semanage/seobject.py:964
+#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
+#: ../semanage/seobject.py:959
 #, python-format
 msgid "Could not query user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:823
+#: ../semanage/seobject.py:818
 #, python-format
 msgid "You must add at least one role for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:833
+#: ../semanage/seobject.py:828
 #, python-format
 msgid "SELinux user %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:837
+#: ../semanage/seobject.py:832
 #, python-format
 msgid "Could not create SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:846
+#: ../semanage/seobject.py:841
 #, python-format
 msgid "Could not add role %s for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:855
+#: ../semanage/seobject.py:850
 #, python-format
 msgid "Could not set MLS level for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:858
+#: ../semanage/seobject.py:853
 #, python-format
 msgid "Could not add prefix %s for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:861
+#: ../semanage/seobject.py:856
 #, python-format
 msgid "Could not extract key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:865
+#: ../semanage/seobject.py:860
 #, python-format
 msgid "Could not add SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:886
+#: ../semanage/seobject.py:881
 msgid "Requires prefix, roles, level or range"
 msgstr ""
 
-#: ../semanage/seobject.py:888
+#: ../semanage/seobject.py:883
 msgid "Requires prefix or roles"
 msgstr ""
 
-#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
+#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
 #, python-format
 msgid "SELinux user %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:927
+#: ../semanage/seobject.py:922
 #, python-format
 msgid "Could not modify SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:960
+#: ../semanage/seobject.py:955
 #, python-format
 msgid "SELinux user %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:971
+#: ../semanage/seobject.py:966
 #, python-format
 msgid "Could not delete SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1009
+#: ../semanage/seobject.py:1004
 msgid "Could not list SELinux users"
 msgstr ""
 
-#: ../semanage/seobject.py:1015
+#: ../semanage/seobject.py:1010
 #, python-format
 msgid "Could not list roles for user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "Labeling"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "MLS/"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Level"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:3262
 #: ../sepolicy/sepolicy/sepolicy.glade:5233
 #: ../sepolicy/sepolicy/sepolicy.glade:5382
 msgid "SELinux Roles"
 msgstr ""
 
-#: ../semanage/seobject.py:1071
+#: ../semanage/seobject.py:1066
 msgid "Protocol has to be one of udp, tcp, dccp or sctp"
 msgstr ""
 
-#: ../semanage/seobject.py:1073
+#: ../semanage/seobject.py:1068
 msgid "Port is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1087
+#: ../semanage/seobject.py:1082
 msgid "Invalid Port"
 msgstr ""
 
-#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
+#: ../semanage/seobject.py:1086
 #, python-format
 msgid "Could not create a key for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
-#: ../semanage/seobject.py:1631
+#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
+#: ../semanage/seobject.py:1626
 msgid "Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
+#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
 #, python-format
 msgid "Type %s is invalid, must be a port type"
 msgstr ""
 
-#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
-#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
+#: ../semanage/seobject.py:1108
 #, python-format
 msgid "Could not check if port %s/%s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1115
+#: ../semanage/seobject.py:1110
 #, python-format
 msgid "Port %s/%s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1119
+#: ../semanage/seobject.py:1114
 #, python-format
 msgid "Could not create port for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
-#: ../semanage/seobject.py:1653
+#: ../semanage/seobject.py:1120
 #, python-format
 msgid "Could not create context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1129
+#: ../semanage/seobject.py:1124
 #, python-format
 msgid "Could not set user in port context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1133
+#: ../semanage/seobject.py:1128
 #, python-format
 msgid "Could not set role in port context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1137
+#: ../semanage/seobject.py:1132
 #, python-format
 msgid "Could not set type in port context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1142
+#: ../semanage/seobject.py:1137
 #, python-format
 msgid "Could not set mls fields in port context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1146
+#: ../semanage/seobject.py:1141
 #, python-format
 msgid "Could not set port context for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1150
+#: ../semanage/seobject.py:1145
 #, python-format
 msgid "Could not add port %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
-#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
-#: ../semanage/seobject.py:2176
+#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
+#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
+#: ../semanage/seobject.py:2171
 msgid "Requires setype or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
-#: ../semanage/seobject.py:1694
+#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
+#: ../semanage/seobject.py:1689
 msgid "Requires setype"
 msgstr ""
 
-#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
-#, python-format
-msgid "Port %s/%s is not defined"
+#: ../semanage/seobject.py:1173 ../semanage/seobject.py:1239
+#: ../semanage/seobject.py:1245
+#, python-brace-format
+msgid "Could not check if port {proto}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1184
-#, python-format
-msgid "Could not query port %s/%s"
+#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
+#, python-brace-format
+msgid "Port {proto}/{port} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1198
-#, python-format
-msgid "Could not modify port %s/%s"
+#: ../semanage/seobject.py:1179
+#, python-brace-format
+msgid "Could not query port {proto}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1193
+#, python-brace-format
+msgid "Could not modify port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1213
+#: ../semanage/seobject.py:1208
 msgid "Could not list the ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1230
+#: ../semanage/seobject.py:1225
 #, python-format
 msgid "Could not delete the port %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1252
-#, python-format
-msgid "Port %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1247
+#, python-brace-format
+msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1256
-#, python-format
-msgid "Could not delete port %s/%s"
+#: ../semanage/seobject.py:1251
+#, python-brace-format
+msgid "Could not delete port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
+#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
 msgid "Could not list ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
+#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
 #: ../sepolicy/sepolicy/sepolicy.glade:2766
 #: ../sepolicy/sepolicy/sepolicy.glade:4630
 msgid "SELinux Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1329
+#: ../semanage/seobject.py:1324
 msgid "Proto"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
 #: ../sepolicy/sepolicy/sepolicy.glade:1407
 msgid "Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1351
+#: ../semanage/seobject.py:1346
 msgid "Subnet Prefix is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1361
+#: ../semanage/seobject.py:1356
 msgid "Invalid Pkey"
 msgstr ""
 
-#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
+#: ../semanage/seobject.py:1360
+#, python-brace-format
+msgid "Could not create a key for {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
 #, python-format
 msgid "Type %s is invalid, must be a ibpkey type"
 msgstr ""
 
-#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
-#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
-#, python-format
-msgid "Could not check if ibpkey %s/%s is defined"
+#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
+#: ../semanage/seobject.py:1506
+#, python-brace-format
+msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1389
-#, python-format
-msgid "ibpkey %s/%s already defined"
+#: ../semanage/seobject.py:1384
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1393
-#, python-format
-msgid "Could not create ibpkey for %s/%s"
+#: ../semanage/seobject.py:1388
+#, python-brace-format
+msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1403
-#, python-format
-msgid "Could not set user in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1394
+#, python-brace-format
+msgid "Could not create context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1407
-#, python-format
-msgid "Could not set role in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1398
+#, python-brace-format
+msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1411
-#, python-format
-msgid "Could not set type in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1402
+#, python-brace-format
+msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1416
-#, python-format
-msgid "Could not set mls fields in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1406
+#, python-brace-format
+msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1420
-#, python-format
-msgid "Could not set ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1411
+#, python-brace-format
+msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1424
-#, python-format
-msgid "Could not add ibpkey %s/%s"
+#: ../semanage/seobject.py:1415
+#, python-brace-format
+msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
-#, python-format
-msgid "ibpkey %s/%s is not defined"
+#: ../semanage/seobject.py:1419
+#, python-brace-format
+msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1457
-#, python-format
-msgid "Could not query ibpkey %s/%s"
+#: ../semanage/seobject.py:1448
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
+msgstr ""
+
+#: ../semanage/seobject.py:1452
+#, python-brace-format
+msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1468
+#: ../semanage/seobject.py:1463
 #, python-format
 msgid "Could not modify ibpkey %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1481
+#: ../semanage/seobject.py:1476
 msgid "Could not list the ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1496
+#: ../semanage/seobject.py:1491
 #, python-format
 msgid "Could not delete the ibpkey %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1513
+#: ../semanage/seobject.py:1500
 #, python-format
-msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
+msgid "Could not check if ibpkey %s/%s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1517
+#: ../semanage/seobject.py:1502
 #, python-format
-msgid "Could not delete ibpkey %s/%s"
+msgid "ibpkey %s/%s is not defined"
+msgstr ""
+
+#: ../semanage/seobject.py:1508
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
+msgstr ""
+
+#: ../semanage/seobject.py:1512
+#, python-brace-format
+msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
+#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
 msgid "Could not list ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "SELinux IB Pkey Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Subnet_Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Pkey Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1611
+#: ../semanage/seobject.py:1606
 msgid "IB device name is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1616
+#: ../semanage/seobject.py:1611
 msgid "Invalid Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1620
-#, python-format
-msgid "Could not create a key for ibendport %s/%s"
+#: ../semanage/seobject.py:1615
+#, python-brace-format
+msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
+#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
 #, python-format
 msgid "Type %s is invalid, must be an ibendport type"
 msgstr ""
 
-#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
-#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
-#, python-format
-msgid "Could not check if ibendport %s/%s is defined"
+#: ../semanage/seobject.py:1636
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1643
-#, python-format
-msgid "ibendport %s/%s already defined"
+#: ../semanage/seobject.py:1638
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1647
+#: ../semanage/seobject.py:1642
 #, python-format
 msgid "Could not create ibendport for %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1657
-#, python-format
-msgid "Could not set user in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1648
+#, python-brace-format
+msgid "Could not create context for {ibendport}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1661
-#, python-format
-msgid "Could not set role in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1652
+#, python-brace-format
+msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1656
+#, python-brace-format
+msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1660
+#, python-brace-format
+msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
 #: ../semanage/seobject.py:1665
-#, python-format
-msgid "Could not set type in ibendport context for %s/%s"
+#, python-brace-format
+msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1670
-#, python-format
-msgid "Could not set mls fields in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1669
+#, python-brace-format
+msgid "Could not set ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1674
-#, python-format
-msgid "Could not set ibendport context for %s/%s"
+#: ../semanage/seobject.py:1673
+#, python-brace-format
+msgid "Could not add ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1678
-#, python-format
-msgid "Could not add ibendport %s/%s"
+#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
+#: ../semanage/seobject.py:1758
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
-#, python-format
-msgid "ibendport %s/%s is not defined"
+#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{ibendport} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1711
+#: ../semanage/seobject.py:1706
 #, python-format
 msgid "Could not query ibendport %s/%s"
 msgstr ""
 
-#: ../semanage/seobject.py:1722
-#, python-format
-msgid "Could not modify ibendport %s/%s"
+#: ../semanage/seobject.py:1717
+#, python-brace-format
+msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1735
+#: ../semanage/seobject.py:1730
 msgid "Could not list the ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1744
-#, python-format
-msgid "Could not create a key for %s/%d"
+#: ../semanage/seobject.py:1739
+#, python-brace-format
+msgid "Could not create a key for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1748
-#, python-format
-msgid "Could not delete the ibendport %s/%d"
+#: ../semanage/seobject.py:1743
+#, python-brace-format
+msgid "Could not delete the ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1765
-#, python-format
-msgid "ibendport %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1760
+#, python-brace-format
+msgid ""
+"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1769
-#, python-format
-msgid "Could not delete ibendport %s/%s"
+#: ../semanage/seobject.py:1764
+#, python-brace-format
+msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
+#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
 msgid "Could not list ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "SELinux IB End Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "IB Device Name"
 msgstr ""
 
-#: ../semanage/seobject.py:1861
+#: ../semanage/seobject.py:1856
 msgid "Node Address is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
+#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
 msgid "Unknown or missing protocol"
 msgstr ""
 
-#: ../semanage/seobject.py:1899
+#: ../semanage/seobject.py:1894
 msgid "SELinux node type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
+#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
 #, python-format
 msgid "Type %s is invalid, must be a node type"
 msgstr ""
 
-#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
-#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
-#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
-#: ../semanage/seobject.py:2435
+#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
+#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
+#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
+#: ../semanage/seobject.py:2430
 #, python-format
 msgid "Could not create key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
-#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
+#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
+#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
 #, python-format
 msgid "Could not check if addr %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1914
+#: ../semanage/seobject.py:1909
 #, python-format
 msgid "Addr %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1918
+#: ../semanage/seobject.py:1913
 #, python-format
 msgid "Could not create addr for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
-#: ../semanage/seobject.py:2389
+#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2384
 #, python-format
 msgid "Could not create context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1928
+#: ../semanage/seobject.py:1923
 #, python-format
 msgid "Could not set mask for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1932
+#: ../semanage/seobject.py:1927
 #, python-format
 msgid "Could not set user in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1936
+#: ../semanage/seobject.py:1931
 #, python-format
 msgid "Could not set role in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1940
+#: ../semanage/seobject.py:1935
 #, python-format
 msgid "Could not set type in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1945
+#: ../semanage/seobject.py:1940
 #, python-format
 msgid "Could not set mls fields in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1949
+#: ../semanage/seobject.py:1944
 #, python-format
 msgid "Could not set addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1953
+#: ../semanage/seobject.py:1948
 #, python-format
 msgid "Could not add addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
+#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
 #, python-format
 msgid "Addr %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1989
+#: ../semanage/seobject.py:1984
 #, python-format
 msgid "Could not query addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1999
+#: ../semanage/seobject.py:1994
 #, python-format
 msgid "Could not modify addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2028
+#: ../semanage/seobject.py:2023
 #, python-format
 msgid "Addr %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2032
+#: ../semanage/seobject.py:2027
 #, python-format
 msgid "Could not delete addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2046
+#: ../semanage/seobject.py:2041
 msgid "Could not deleteall node mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2060
+#: ../semanage/seobject.py:2055
 msgid "Could not list addrs"
 msgstr ""
 
-#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
+#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
 msgid "SELinux Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
-#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
+#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
+#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
 #, python-format
 msgid "Could not check if interface %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2123
+#: ../semanage/seobject.py:2118
 #, python-format
 msgid "Interface %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2122
 #, python-format
 msgid "Could not create interface for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2136
+#: ../semanage/seobject.py:2131
 #, python-format
 msgid "Could not set user in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2140
+#: ../semanage/seobject.py:2135
 #, python-format
 msgid "Could not set role in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2144
+#: ../semanage/seobject.py:2139
 #, python-format
 msgid "Could not set type in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2149
+#: ../semanage/seobject.py:2144
 #, python-format
 msgid "Could not set mls fields in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2153
+#: ../semanage/seobject.py:2148
 #, python-format
 msgid "Could not set interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2157
+#: ../semanage/seobject.py:2152
 #, python-format
 msgid "Could not set message context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2161
+#: ../semanage/seobject.py:2156
 #, python-format
 msgid "Could not add interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
+#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
 #, python-format
 msgid "Interface %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2190
+#: ../semanage/seobject.py:2185
 #, python-format
 msgid "Could not query interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2201
+#: ../semanage/seobject.py:2196
 #, python-format
 msgid "Could not modify interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2228
+#: ../semanage/seobject.py:2223
 #, python-format
 msgid "Interface %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2232
+#: ../semanage/seobject.py:2227
 #, python-format
 msgid "Could not delete interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2246
+#: ../semanage/seobject.py:2241
 msgid "Could not delete all interface  mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2260
+#: ../semanage/seobject.py:2255
 msgid "Could not list interfaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2285
+#: ../semanage/seobject.py:2280
 msgid "SELinux Interface"
 msgstr ""
 
-#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
 msgid "Context"
 msgstr ""
 
-#: ../semanage/seobject.py:2355
+#: ../semanage/seobject.py:2350
 #, python-format
 msgid "Target %s is not valid. Target is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2358
+#: ../semanage/seobject.py:2353
 #, python-format
 msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2361
+#: ../semanage/seobject.py:2356
 #, python-format
 msgid "Equivalence class for %s already exists"
 msgstr ""
 
-#: ../semanage/seobject.py:2367
+#: ../semanage/seobject.py:2362
 #, python-format
 msgid "File spec %s conflicts with equivalency rule '%s %s'"
 msgstr ""
 
-#: ../semanage/seobject.py:2378
+#: ../semanage/seobject.py:2373
 #, python-format
 msgid "Equivalence class for %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:2395
+#: ../semanage/seobject.py:2390
 #, python-format
 msgid "Could not set user in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2399
+#: ../semanage/seobject.py:2394
 #, python-format
 msgid "Could not set role in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
+#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
 #, python-format
 msgid "Could not set mls fields in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2410
+#: ../semanage/seobject.py:2405
 msgid "Invalid file specification"
 msgstr ""
 
-#: ../semanage/seobject.py:2412
+#: ../semanage/seobject.py:2407
 msgid "File specification can not include spaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2417
+#: ../semanage/seobject.py:2412
 #, python-format
 msgid ""
 "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
 msgstr ""
 
-#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
+#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
 #, python-format
 msgid "Type %s is invalid, must be a file or device type"
 msgstr ""
 
-#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
-#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
-#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
+#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
+#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
+#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
 #, python-format
 msgid "Could not check if file context for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2447
+#: ../semanage/seobject.py:2442
 #, python-format
 msgid "File context for %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2451
+#: ../semanage/seobject.py:2446
 #, python-format
 msgid "Could not create file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2459
+#: ../semanage/seobject.py:2454
 #, python-format
 msgid "Could not set type in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
-#: ../semanage/seobject.py:2543
+#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
+#: ../semanage/seobject.py:2538
 #, python-format
 msgid "Could not set file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2473
+#: ../semanage/seobject.py:2468
 #, python-format
 msgid "Could not add file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2492
+#: ../semanage/seobject.py:2487
 msgid "Requires setype, serange or seuser"
 msgstr ""
 
-#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
+#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
 #, python-format
 msgid "Could not query file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
+#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
 #, python-format
 msgid "File context for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2547
+#: ../semanage/seobject.py:2542
 #, python-format
 msgid "Could not modify file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2565
+#: ../semanage/seobject.py:2560
 msgid "Could not list the file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2579
+#: ../semanage/seobject.py:2574
 #, python-format
 msgid "Could not delete the file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2609
+#: ../semanage/seobject.py:2604
 #, python-format
 msgid "File context for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2615
+#: ../semanage/seobject.py:2610
 #, python-format
 msgid "Could not delete file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2632
+#: ../semanage/seobject.py:2627
 msgid "Could not list file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2636
+#: ../semanage/seobject.py:2631
 msgid "Could not list file contexts for home directories"
 msgstr ""
 
-#: ../semanage/seobject.py:2640
+#: ../semanage/seobject.py:2635
 msgid "Could not list local file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2672
 msgid "SELinux fcontext"
 msgstr ""
 
-#: ../semanage/seobject.py:2690
+#: ../semanage/seobject.py:2685
 msgid ""
 "\n"
 "SELinux Distribution fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2695
+#: ../semanage/seobject.py:2690
 msgid ""
 "\n"
 "SELinux Local fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
-#: ../semanage/seobject.py:2790
+#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
+#: ../semanage/seobject.py:2785
 #, python-format
 msgid "Could not check if boolean %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
+#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
 #, python-format
 msgid "Boolean %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2739
+#: ../semanage/seobject.py:2734
 #, python-format
 msgid "Could not query file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2744
+#: ../semanage/seobject.py:2739
 #, python-format
 msgid "You must specify one of the following values: %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2749
+#: ../semanage/seobject.py:2744
 #, python-format
 msgid "Could not set active value of boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2752
+#: ../semanage/seobject.py:2747
 #, python-format
 msgid "Could not modify boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2768
+#: ../semanage/seobject.py:2763
 #, python-format
 msgid "Bad format %s: Record %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2792
+#: ../semanage/seobject.py:2787
 #, python-format
 msgid "Boolean %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2796
+#: ../semanage/seobject.py:2791
 #, python-format
 msgid "Could not delete boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
+#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
 msgid "Could not list booleans"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "off"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "on"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "SELinux boolean"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "State"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "Default"
 msgstr ""
 
-#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
+#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
 #: ../sepolicy/sepolicy/sepolicy.glade:2510
 #: ../sepolicy/sepolicy/sepolicy.glade:5099
 msgid "Description"
@@ -1555,151 +1576,151 @@ msgstr ""
 msgid "Missing interface definition for %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:140
+#: ../sepolicy/sepolicy/generate.py:138
 msgid "Standard Init Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:141
+#: ../sepolicy/sepolicy/generate.py:139
 msgid "DBUS System Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:142
+#: ../sepolicy/sepolicy/generate.py:140
 msgid "Internet Services Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:143
+#: ../sepolicy/sepolicy/generate.py:141
 msgid "Web Application/Script (CGI)"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:144
+#: ../sepolicy/sepolicy/generate.py:142
 msgid "Sandbox"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:145
+#: ../sepolicy/sepolicy/generate.py:143
 msgid "User Application"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:146
+#: ../sepolicy/sepolicy/generate.py:144
 msgid "Existing Domain Type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:147
+#: ../sepolicy/sepolicy/generate.py:145
 msgid "Minimal Terminal Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:148
+#: ../sepolicy/sepolicy/generate.py:146
 msgid "Minimal X Windows Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:149
+#: ../sepolicy/sepolicy/generate.py:147
 msgid "Desktop Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:150
+#: ../sepolicy/sepolicy/generate.py:148
 msgid "Administrator Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:151
+#: ../sepolicy/sepolicy/generate.py:149
 msgid "Confined Root Administrator Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:152
+#: ../sepolicy/sepolicy/generate.py:150
 msgid "Module information for a new type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:158
+#: ../sepolicy/sepolicy/generate.py:156
 msgid "Valid Types:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:193
+#: ../sepolicy/sepolicy/generate.py:191
 #, python-format
 msgid "Ports must be numbers or ranges of numbers from 1 to %d "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:205
+#: ../sepolicy/sepolicy/generate.py:203
 msgid "You must enter a valid policy type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:208
+#: ../sepolicy/sepolicy/generate.py:206
 #, python-format
 msgid "You must enter a name for your policy module for your '%s'."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:346
+#: ../sepolicy/sepolicy/generate.py:344
 msgid ""
 "Name must be alphanumeric with no spaces. Consider using option \"-n "
 "MODULENAME\""
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:438
+#: ../sepolicy/sepolicy/generate.py:436
 msgid "User Role types can not be assigned executables."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:444
+#: ../sepolicy/sepolicy/generate.py:442
 msgid "Only Daemon apps can use an init script."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:462
+#: ../sepolicy/sepolicy/generate.py:460
 msgid "use_resolve must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:468
+#: ../sepolicy/sepolicy/generate.py:466
 msgid "use_syslog must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:474
+#: ../sepolicy/sepolicy/generate.py:472
 msgid "use_kerberos must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:480
+#: ../sepolicy/sepolicy/generate.py:478
 msgid "manage_krb5_rcache must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:510
+#: ../sepolicy/sepolicy/generate.py:508
 msgid "USER Types automatically get a tmp type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:847
+#: ../sepolicy/sepolicy/generate.py:845
 #, python-format
 msgid "'%s' policy modules require existing domains"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:872
+#: ../sepolicy/sepolicy/generate.py:870
 msgid "Type field required"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:885
+#: ../sepolicy/sepolicy/generate.py:883
 #, python-format
 msgid ""
 "You need to define a new type which ends with: \n"
 " %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1113
+#: ../sepolicy/sepolicy/generate.py:1111
 msgid "You must enter the executable path for your confined process"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1378
+#: ../sepolicy/sepolicy/generate.py:1376
 msgid "Created the following files:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1379
+#: ../sepolicy/sepolicy/generate.py:1377
 msgid "Type Enforcement file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1380
+#: ../sepolicy/sepolicy/generate.py:1378
 msgid "Interface file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1381
+#: ../sepolicy/sepolicy/generate.py:1379
 msgid "File Contexts file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1383
+#: ../sepolicy/sepolicy/generate.py:1381
 msgid "Spec file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1384
+#: ../sepolicy/sepolicy/generate.py:1382
 msgid "Setup Script"
 msgstr ""
 
@@ -2367,29 +2388,29 @@ msgstr ""
 msgid "named pipe"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:148
+#: ../sepolicy/sepolicy/__init__.py:149
 msgid "No SELinux Policy installed"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:184
+#: ../sepolicy/sepolicy/__init__.py:185
 #, python-format
 msgid "Failed to read %s policy file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:470
+#: ../sepolicy/sepolicy/__init__.py:471
 #, python-format
 msgid "-- Allowed %s [ %s ]"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:896
+#: ../sepolicy/sepolicy/__init__.py:897
 msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1221
+#: ../sepolicy/sepolicy/__init__.py:1230
 msgid "unknown"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1230
+#: ../sepolicy/sepolicy/__init__.py:1239
 #, python-brace-format
 msgid "Allow {subject} to {rest}"
 msgstr ""
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH 1/4] python: improve format strings for proper localization
  2023-05-17 13:49 [PATCH 1/4] python: improve format strings for proper localization Petr Lautrbach
                   ` (2 preceding siblings ...)
  2023-05-17 13:49 ` [PATCH 4/4] python: update python.pot Petr Lautrbach
@ 2023-06-06 15:20 ` Vit Mojzis
  2023-06-12 16:21   ` Petr Lautrbach
  3 siblings, 1 reply; 26+ messages in thread
From: Vit Mojzis @ 2023-06-06 15:20 UTC (permalink / raw)
  To: Petr Lautrbach, selinux

On 5/17/23 15:49, Petr Lautrbach wrote:
> If a string contains more than one unnamed argument it's hard for
> translators to proper localize as they don't know which value is
> represented by a unnamed argument. It also blocks them to use a
> different order of arguments which would make better sense in other
> languages.
> 
> Fixes:
> 
>      $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
>      ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
>                                   The translator cannot reorder the arguments.
>                                   Please consider using a format string with named arguments,
>                                   and a mapping instead of a tuple for the arguments.
>      ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
>                                             The translator cannot reorder the arguments.
>                                             Please consider using a format string with named arguments,
>                                             and a mapping instead of a tuple for the arguments.
>      ...
> 
> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
> ---
>   python/chcat/chcat          |  2 +-
>   python/semanage/seobject.py | 92 ++++++++++++++++++-------------------
>   2 files changed, 47 insertions(+), 47 deletions(-)
> 
> diff --git a/python/chcat/chcat b/python/chcat/chcat
> index 68718ec5f102..ec34c05ffdfa 100755
> --- a/python/chcat/chcat
> +++ b/python/chcat/chcat
> @@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
>               else:
>                   cat = ""
>           else:
> -            print(_("%s is not in %s") % (f, orig))
> +            print(_("{target} is not in {category}").format(target=f, category=orig))
>               continue

The following (similar) string issues should also be fixed:
128: print(_("%s is already in %s") % (f, orig))
210: print(_("%s is not in %s") % (f, orig))


>   
>           if len(cat) == 0:
> diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
> index d82da4942987..8a891ca23bca 100644
> --- a/python/semanage/seobject.py
> +++ b/python/semanage/seobject.py
> @@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
>   
>           (rc, exists) = semanage_port_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
>   
>           (rc, p) = semanage_port_query(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not query port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
>   
>           con = semanage_port_get_con(p)
>   
> @@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
>   
>           rc = semanage_port_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
>   
>           semanage_port_key_free(k)
>           semanage_port_free(p)
> @@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
>           (k, proto_d, low, high) = self.__genkey(port, proto)
>           (rc, exists) = semanage_port_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
>   
>           (rc, exists) = semanage_port_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
>   
>           rc = semanage_port_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
>   
>           semanage_port_key_free(k)
>   
> @@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
>           if rc < 0:
> -            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           return (k, subnet_prefix, low, high)
>   
>       def __add(self, pkey, subnet_prefix, serange, type):
> @@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibpkey_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
>           if exists:
> -            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           (rc, p) = semanage_ibpkey_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
>           semanage_ibpkey_set_range(p, low, high)
>           (rc, con) = semanage_context_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_user(self.sh, con, "system_u")
>           if rc < 0:
> -            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_role(self.sh, con, "object_r")
>           if rc < 0:
> -            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_type(self.sh, con, type)
>           if rc < 0:
> -            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           if (is_mls_enabled == 1) and (serange != ""):
>               rc = semanage_context_set_mls(self.sh, con, serange)
>               if rc < 0:
> -                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_set_con(self.sh, p, con)
>           if rc < 0:
> -            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_context_free(con)
>           semanage_ibpkey_key_free(k)
> @@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibpkey_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           if not exists:
> -            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           (rc, p) = semanage_ibpkey_query(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           con = semanage_ibpkey_get_con(p)
>   
> @@ -1508,13 +1508,13 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           if not exists:
> -            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_ibpkey_key_free(k)
>   
> @@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
>           if rc < 0:
> -            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           return (k, ibdev_name, port)
>   
>       def __add(self, ibendport, ibdev_name, serange, type):
> @@ -1638,9 +1638,9 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
>           if exists:
> -            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
> +            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
>   
>           (rc, p) = semanage_ibendport_create(self.sh)
>           if rc < 0:
> @@ -1650,32 +1650,32 @@ class ibendportRecords(semanageRecords):
>           semanage_ibendport_set_port(p, port)
>           (rc, con) = semanage_context_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_user(self.sh, con, "system_u")
>           if rc < 0:
> -            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_role(self.sh, con, "object_r")
>           if rc < 0:
> -            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_type(self.sh, con, type)
>           if rc < 0:
> -            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           if (is_mls_enabled == 1) and (serange != ""):
>               rc = semanage_context_set_mls(self.sh, con, serange)
>               if rc < 0:
> -                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
> +                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_ibendport_set_con(self.sh, p, con)
>           if rc < 0:
> -            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_ibendport_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           semanage_context_free(con)
>           semanage_ibendport_key_free(k)
> @@ -1702,9 +1702,9 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           (rc, p) = semanage_ibendport_query(self.sh, k)
>           if rc < 0:
> @@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
>   
>           rc = semanage_ibendport_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           semanage_ibendport_key_free(k)
>           semanage_ibendport_free(p)
> @@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
>               port = semanage_ibendport_get_port(ibendport)
>               (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
>               if rc < 0:
> -                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
> +                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>               rc = semanage_ibendport_del_local(self.sh, k)
>               if rc < 0:
> -                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
> +                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>               semanage_ibendport_key_free(k)
>   
>           self.commit()
> @@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
>           (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           rc = semanage_ibendport_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           semanage_ibendport_key_free(k)
>   

Most of these will probably not help with localization since the order 
of the values should not change, but to keep the format consistent, the 
following lines should be changed as well:

841: raise ValueError(_("Could not add role %s for %s") % (r, name))
853: raise ValueError(_("Could not add prefix %s for %s") % (r, prefix))
1086: raise ValueError(_("Could not create a key for %s/%s") % (proto, 
port))
1114: raise ValueError(_("Could not create port for %s/%s") % (proto, port))
1120: raise ValueError(_("Could not create context for %s/%s") % (proto, 
port))
1124: raise ValueError(_("Could not set user in port context for %s/%s") 
% (proto, port))
1128: raise ValueError(_("Could not set role in port context for %s/%s") 
% (proto, port))
1132: raise ValueError(_("Could not set type in port context for %s/%s") 
% (proto, port))
1137: raise ValueError(_("Could not set mls fields in port context for 
%s/%s") % (proto, port))
1141: raise ValueError(_("Could not set port context for %s/%s") % 
(proto, port))
1145: raise ValueError(_("Could not add port %s/%s") % (proto, port))
1463: raise ValueError(_("Could not modify ibpkey %s/%s") % 
(subnet_prefix, pkey))
1642: raise ValueError(_("Could not create ibendport for %s/%s") % 
(ibdev_name, port))
1706: raise ValueError(_("Could not query ibendport %s/%s") % 
(ibdev_name, ibendport))
2763: raise ValueError(_("Bad format %s: Record %s" % (name, b)))

Otherwise LGTM.

Vit


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH 2/4] python/semanage: Drop hard formating from localized strings
  2023-05-17 13:49 ` [PATCH 2/4] python/semanage: Drop hard formating from localized strings Petr Lautrbach
@ 2023-06-06 15:20   ` Vit Mojzis
  0 siblings, 0 replies; 26+ messages in thread
From: Vit Mojzis @ 2023-06-06 15:20 UTC (permalink / raw)
  To: Petr Lautrbach, selinux

On 5/17/23 15:49, Petr Lautrbach wrote:
> It confuses translators and new lines are dropped by parser module anyway.
> 
> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
> ---
>   python/audit2allow/audit2allow | 14 ++++++++---
>   python/semanage/semanage       | 44 +++++++++++++---------------------
>   2 files changed, 28 insertions(+), 30 deletions(-)
> 
> diff --git a/python/audit2allow/audit2allow b/python/audit2allow/audit2allow
> index 5587a2dbb006..35b0b151ac86 100644
> --- a/python/audit2allow/audit2allow
> +++ b/python/audit2allow/audit2allow
> @@ -234,9 +234,17 @@ class AuditToPolicy:
>               print(e)
>               sys.exit(1)
>   
> -        sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
> -        sys.stdout.write((_("To make this policy package active, execute:" +
> -                            "\n\nsemodule -i %s\n\n") % packagename))
> +        sys.stdout.write(
> +"""******************** {important} ***********************
> +{text}
> +
> +semodule -i {packagename}
> +
> +""".format(
> +    important=_("IMPORTANT"),
> +    text=_("To make this policy package active, execute:"),
> +    packagename=packagename
> +))
>   
>       def __output_audit2why(self):
>           import selinux
> diff --git a/python/semanage/semanage b/python/semanage/semanage
> index e0bd98a95c77..898df4b93c10 100644
> --- a/python/semanage/semanage
> +++ b/python/semanage/semanage
> @@ -238,30 +238,22 @@ def parser_add_level(parser, name):
>   
>   
>   def parser_add_range(parser, name):
> -    parser.add_argument('-r', '--range', default='',
> -                        help=_('''
> -MLS/MCS Security Range (MLS/MCS Systems only)
> -SELinux Range  for SELinux login mapping
> -defaults to the SELinux user record range.
> -SELinux Range for SELinux user defaults to s0.
> -'''))
> +    parser.add_argument('-r', '--range', default='', help=_(
> +        "MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
> +SELinux Range for SELinux user defaults to s0."
> +    ))
>   
>   
>   def parser_add_proto(parser, name):
> -    parser.add_argument('-p', '--proto', help=_('''
> -    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet protocol
> -    version for the specified node (ipv4|ipv6).
> -'''))
> +    parser.add_argument('-p', '--proto', help=_(
> +        "Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6)."
> +    ))
>   
>   def parser_add_subnet_prefix(parser, name):
> -    parser.add_argument('-x', '--subnet_prefix', help=_('''
> -    Subnet prefix for  the specified infiniband ibpkey.
> -'''))
> +    parser.add_argument('-x', '--subnet_prefix', help=_('Subnet prefix for  the specified infiniband ibpkey.'))
>   
>   def parser_add_ibdev_name(parser, name):
> -    parser.add_argument('-z', '--ibdev_name', help=_('''
> -    Name for the specified infiniband end port.
> -'''))
> +    parser.add_argument('-z', '--ibdev_name', help=_("Name for the specified infiniband end port."))
>   
>   def parser_add_modify(parser, name):
>       parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name)
> @@ -372,10 +364,10 @@ If you do not specify a file type, the file type will default to "all files".
>       parser_add_extract(fcontext_action, "fcontext")
>       parser_add_deleteall(fcontext_action, "fcontext")
>   
> -    fcontextParser.add_argument('-e', '--equal', help=_('''Substitute  target  path with sourcepath when generating default
> -                                                                  label.  This is used with fcontext. Requires source  and  target
> -                                                                  path  arguments.  The context labeling for the target subtree is
> -                                                                  made equivalent to that defined for the source.'''))
> +    fcontextParser.add_argument('-e', '--equal', help=_(
> +        "Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
> +path arguments. The context labeling for the target subtree is made equivalent to that defined for the source."
> +    ))
>       fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help))
>       parser_add_seuser(fcontextParser, "fcontext")
>       parser_add_type(fcontextParser, "fcontext")
> @@ -426,9 +418,7 @@ def setupUserParser(subparsers):
>       parser_add_range(userParser, "user")
>       userParser.add_argument('-R', '--roles', default=[],
>                               action=CheckRole,
> -                            help=_('''
> -SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
> -'''))
> +                            help=_("SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times."))
>       userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS)
>       userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name'))
>       userParser.set_defaults(func=handleUser)
> @@ -901,9 +891,9 @@ def setupImportParser(subparsers):
>   def createCommandParser():
>       commandParser = seParser(prog='semanage',
>                                formatter_class=argparse.ArgumentDefaultsHelpFormatter,
> -                             description='''semanage is used to configure certain elements
> -                                                            of SELinux policy with-out requiring modification
> -                                                            to or recompilation from policy source.''')
> +                             description=_(
> +            "semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source."
> +                             ))
>   
>       #To add a new subcommand define the parser for it in a function above and call it here.
>       subparsers = commandParser.add_subparsers(dest='subcommand')


python/semanage/semanage 343: ftype_help = '''
could also use some improvements (multiple double/triple spaces and 
missing spaces after commas).

Nitpick: The patch header says "python/semanage", but the patch also 
touches python/audit2allow.

Otherwise LGTM.

Vit


^ permalink raw reply	[flat|nested] 26+ messages in thread

* (no subject)
  2023-06-06 15:20 ` [PATCH 1/4] python: improve format strings for proper localization Vit Mojzis
@ 2023-06-12 16:21   ` Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 1/4] python: improve format strings for proper localization Petr Lautrbach
                       ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-12 16:21 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis


Patch 1 and 2 updated based on Vits comments.

Patch 4 regenerated after changes in 1 and 2.


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 1/4] python: improve format strings for proper localization
  2023-06-12 16:21   ` Petr Lautrbach
@ 2023-06-12 16:21     ` Petr Lautrbach
  2023-06-13  9:30       ` Vit Mojzis
  2023-06-12 16:21     ` [PATCH v2 2/4] python: Drop hard formating from localized strings Petr Lautrbach
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-12 16:21 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

If a string contains more than one unnamed argument it's hard for
translators to proper localize as they don't know which value is
represented by a unnamed argument. It also blocks them to use a
different order of arguments which would make better sense in other
languages.

Fixes:

    $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
    ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                 The translator cannot reorder the arguments.
                                 Please consider using a format string with named arguments,
                                 and a mapping instead of a tuple for the arguments.
    ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                           The translator cannot reorder the arguments.
                                           Please consider using a format string with named arguments,
                                           and a mapping instead of a tuple for the arguments.
    ...

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/chcat/chcat          |   6 +-
 python/semanage/seobject.py | 130 ++++++++++++++++++------------------
 2 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/python/chcat/chcat b/python/chcat/chcat
index 68718ec5f102..3ff387d88c59 100755
--- a/python/chcat/chcat
+++ b/python/chcat/chcat
@@ -125,7 +125,7 @@ def chcat_add(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat in clist[1:]:
-                print(_("%s is already in %s") % (f, orig))
+                print(_("{target} is already in {category}").format(target=f, category=orig)
                 continue
             clist.append(cat)
             cats = clist[1:]
@@ -207,7 +207,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat not in clist[1:]:
-                print(_("%s is not in %s") % (f, orig))
+                print(_("{target} is not in {category}").format(target=f, category=orig))
                 continue
             clist.remove(cat)
             if len(clist) > 1:
@@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
             else:
                 cat = ""
         else:
-            print(_("%s is not in %s") % (f, orig))
+            print(_("{target} is not in {category}").format(target=f, category=orig))
             continue
 
         if len(cat) == 0:
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index d82da4942987..12b20af51f81 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -843,7 +843,7 @@ class seluserRecords(semanageRecords):
         for r in roles:
             rc = semanage_user_add_role(self.sh, u, r)
             if rc < 0:
-                raise ValueError(_("Could not add role %s for %s") % (r, name))
+                raise ValueError(_("Could not add role {role} for {name}").format(role=r, name=name))
 
         if is_mls_enabled == 1:
             rc = semanage_user_set_mlsrange(self.sh, u, serange)
@@ -855,7 +855,7 @@ class seluserRecords(semanageRecords):
                 raise ValueError(_("Could not set MLS level for %s") % name)
         rc = semanage_user_set_prefix(self.sh, u, prefix)
         if rc < 0:
-            raise ValueError(_("Could not add prefix %s for %s") % (r, prefix))
+            raise ValueError(_("Could not add prefix {prefix} for {role}").format(role=r, prefix=prefix))
         (rc, key) = semanage_user_key_extract(self.sh, u)
         if rc < 0:
             raise ValueError(_("Could not extract key for %s") % name)
@@ -1088,7 +1088,7 @@ class portRecords(semanageRecords):
 
         (rc, k) = semanage_port_key_create(self.sh, low, high, proto_d)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create a key for {proto}/{port}").format(prot=proto, port=port))
         return (k, proto_d, low, high)
 
     def __add(self, port, proto, serange, type):
@@ -1110,44 +1110,44 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(prot=proto, port=port))
         if exists:
-            raise ValueError(_("Port %s/%s already defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} already defined").format(prot=proto, port=port))
 
         (rc, p) = semanage_port_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create port for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create port for {proto}/{port}").format(prot=proto, port=port))
 
         semanage_port_set_proto(p, proto_d)
         semanage_port_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create context for {proto}/{port}").format(prot=proto, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set user in port context for {proto}/{port}").format(prot=proto, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set role in port context for {proto}/{port}").format(prot=proto, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set type in port context for {proto}/{port}").format(prot=proto, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in port context for %s/%s") % (proto, port))
+                raise ValueError(_("Could not set mls fields in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add port %s/%s") % (proto, port))
+            raise ValueError(_("Could not add port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_context_free(con)
         semanage_port_key_free(k)
@@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query port %s/%s") % (proto, port))
+            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
 
         con = semanage_port_get_con(p)
 
@@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
+            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
         semanage_port_free(p)
@@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
         (k, proto_d, low, high) = self.__genkey(port, proto)
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, exists) = semanage_port_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
 
         rc = semanage_port_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
+            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
 
@@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
         return (k, subnet_prefix, low, high)
 
     def __add(self, pkey, subnet_prefix, serange, type):
@@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
         if exists:
-            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
         semanage_ibpkey_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_context_free(con)
         semanage_ibpkey_key_free(k)
@@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         con = semanage_ibpkey_get_con(p)
 
@@ -1465,7 +1465,7 @@ class ibpkeyRecords(semanageRecords):
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not modify ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
         semanage_ibpkey_free(p)
@@ -1502,19 +1502,19 @@ class ibpkeyRecords(semanageRecords):
         (k, subnet_prefix, low, high) = self.__genkey(pkey, subnet_prefix)
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
 
@@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
 
         (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
         if rc < 0:
-            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
         return (k, ibdev_name, port)
 
     def __add(self, ibendport, ibdev_name, serange, type):
@@ -1638,44 +1638,44 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
         if exists:
-            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
+            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
 
         (rc, p) = semanage_ibendport_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibendport for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create ibendport for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_ibendport_set_ibdev_name(self.sh, p, ibdev_name)
         semanage_ibendport_set_port(p, port)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
+                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_context_free(con)
         semanage_ibendport_key_free(k)
@@ -1702,13 +1702,13 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, p) = semanage_ibendport_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not query ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         con = semanage_ibendport_get_con(p)
 
@@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
         semanage_ibendport_free(p)
@@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
             port = semanage_ibendport_get_port(ibendport)
             (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
             if rc < 0:
-                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
+                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
             rc = semanage_ibendport_del_local(self.sh, k)
             if rc < 0:
-                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
+                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
             semanage_ibendport_key_free(k)
 
         self.commit()
@@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
         (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         rc = semanage_ibendport_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
 
@@ -2765,7 +2765,7 @@ class booleanRecords(semanageRecords):
                 try:
                     boolname, val = b.split("=")
                 except ValueError:
-                    raise ValueError(_("Bad format %s: Record %s" % (name, b)))
+                    raise ValueError(_("Bad format {filename}: Record {record}").format(filename=name, record=b))
                 self.__mod(boolname.strip(), val.strip())
             fd.close()
         else:
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 2/4] python: Drop hard formating from localized strings
  2023-06-12 16:21   ` Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 1/4] python: improve format strings for proper localization Petr Lautrbach
@ 2023-06-12 16:21     ` Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-12 16:21 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

It confuses translators and new lines are dropped by parser module anyway.

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/audit2allow/audit2allow | 14 ++++++--
 python/semanage/semanage       | 60 +++++++++++++---------------------
 2 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/python/audit2allow/audit2allow b/python/audit2allow/audit2allow
index 5587a2dbb006..35b0b151ac86 100644
--- a/python/audit2allow/audit2allow
+++ b/python/audit2allow/audit2allow
@@ -234,9 +234,17 @@ class AuditToPolicy:
             print(e)
             sys.exit(1)
 
-        sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
-        sys.stdout.write((_("To make this policy package active, execute:" +
-                            "\n\nsemodule -i %s\n\n") % packagename))
+        sys.stdout.write(
+"""******************** {important} ***********************
+{text}
+
+semodule -i {packagename}
+
+""".format(
+    important=_("IMPORTANT"),
+    text=_("To make this policy package active, execute:"),
+    packagename=packagename
+))
 
     def __output_audit2why(self):
         import selinux
diff --git a/python/semanage/semanage b/python/semanage/semanage
index e0bd98a95c77..4fdb490f7df4 100644
--- a/python/semanage/semanage
+++ b/python/semanage/semanage
@@ -238,30 +238,22 @@ def parser_add_level(parser, name):
 
 
 def parser_add_range(parser, name):
-    parser.add_argument('-r', '--range', default='',
-                        help=_('''
-MLS/MCS Security Range (MLS/MCS Systems only)
-SELinux Range  for SELinux login mapping
-defaults to the SELinux user record range.
-SELinux Range for SELinux user defaults to s0.
-'''))
+    parser.add_argument('-r', '--range', default='', help=_(
+        "MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
+SELinux Range for SELinux user defaults to s0."
+    ))
 
 
 def parser_add_proto(parser, name):
-    parser.add_argument('-p', '--proto', help=_('''
-    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet protocol
-    version for the specified node (ipv4|ipv6).
-'''))
+    parser.add_argument('-p', '--proto', help=_(
+        "Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6)."
+    ))
 
 def parser_add_subnet_prefix(parser, name):
-    parser.add_argument('-x', '--subnet_prefix', help=_('''
-    Subnet prefix for  the specified infiniband ibpkey.
-'''))
+    parser.add_argument('-x', '--subnet_prefix', help=_('Subnet prefix for  the specified infiniband ibpkey.'))
 
 def parser_add_ibdev_name(parser, name):
-    parser.add_argument('-z', '--ibdev_name', help=_('''
-    Name for the specified infiniband end port.
-'''))
+    parser.add_argument('-z', '--ibdev_name', help=_("Name for the specified infiniband end port."))
 
 def parser_add_modify(parser, name):
     parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name)
@@ -348,15 +340,6 @@ def handleFcontext(args):
 
 
 def setupFcontextParser(subparsers):
-    ftype_help = '''
-File Type.   This is used with fcontext.  Requires a  file  type
-as  shown  in  the  mode  field by ls, e.g. use d to match only
-directories or f to match only regular files. The following
-file type options can be passed:
-f (regular file),d (directory),c (character device),
-b (block device),s (socket),l (symbolic link),p (named pipe)
-If you do not specify a file type, the file type will default to "all files".
-'''
     generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict)
     fcontextParser = subparsers.add_parser('fcontext', usage=generate_usage, help=_("Manage file context mapping definitions"))
     parser_add_locallist(fcontextParser, "fcontext")
@@ -372,11 +355,16 @@ If you do not specify a file type, the file type will default to "all files".
     parser_add_extract(fcontext_action, "fcontext")
     parser_add_deleteall(fcontext_action, "fcontext")
 
-    fcontextParser.add_argument('-e', '--equal', help=_('''Substitute  target  path with sourcepath when generating default
-                                                                  label.  This is used with fcontext. Requires source  and  target
-                                                                  path  arguments.  The context labeling for the target subtree is
-                                                                  made equivalent to that defined for the source.'''))
-    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help))
+    fcontextParser.add_argument('-e', '--equal', help=_(
+        'Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
+path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.'
+    ))
+    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(
+        'File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use d to match only \
+directories or f to match only regular files. The following file type options can be passed: f (regular file), d (directory), \
+c (character device), b (block device), s (socket), l (symbolic link), p (named pipe). \
+If you do not specify a file type, the file type will default to "all files".'
+    ))
     parser_add_seuser(fcontextParser, "fcontext")
     parser_add_type(fcontextParser, "fcontext")
     parser_add_range(fcontextParser, "fcontext")
@@ -426,9 +414,7 @@ def setupUserParser(subparsers):
     parser_add_range(userParser, "user")
     userParser.add_argument('-R', '--roles', default=[],
                             action=CheckRole,
-                            help=_('''
-SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
-'''))
+                            help=_("SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times."))
     userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS)
     userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name'))
     userParser.set_defaults(func=handleUser)
@@ -901,9 +887,9 @@ def setupImportParser(subparsers):
 def createCommandParser():
     commandParser = seParser(prog='semanage',
                              formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-                             description='''semanage is used to configure certain elements
-                                                            of SELinux policy with-out requiring modification
-                                                            to or recompilation from policy source.''')
+                             description=_(
+            "semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source."
+                             ))
 
     #To add a new subcommand define the parser for it in a function above and call it here.
     subparsers = commandParser.add_subparsers(dest='subcommand')
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 3/4] semanage: Drop unnecessary import from seobject
  2023-06-12 16:21   ` Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 1/4] python: improve format strings for proper localization Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 2/4] python: Drop hard formating from localized strings Petr Lautrbach
@ 2023-06-12 16:21     ` Petr Lautrbach
  2023-06-12 16:21     ` [PATCH v2 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-12 16:21 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

sepolgen.module is not used for permissive domains

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/semanage/seobject.py | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index 12b20af51f81..f150c9dd4e10 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -504,11 +504,6 @@ class permissiveRecords(semanageRecords):
             print(t)
 
     def add(self, type):
-        try:
-            import sepolgen.module as module
-        except ImportError:
-            raise ValueError(_("The sepolgen python module is required to setup permissive domains.\nIn some distributions it is included in the policycoreutils-devel package.\n# yum install policycoreutils-devel\nOr similar for your distro."))
-
         name = "permissive_%s" % type
         modtxt = "(typepermissive %s)" % type
 
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 4/4] python: update python.pot
  2023-06-12 16:21   ` Petr Lautrbach
                       ` (2 preceding siblings ...)
  2023-06-12 16:21     ` [PATCH v2 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
@ 2023-06-12 16:21     ` Petr Lautrbach
  2023-06-13  9:42       ` Petr Lautrbach
  3 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-12 16:21 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/po/python.pot | 963 ++++++++++++++++++++++---------------------
 1 file changed, 487 insertions(+), 476 deletions(-)

diff --git a/python/po/python.pot b/python/po/python.pot
index 16d04eb0f18e..435a1b764e34 100644
--- a/python/po/python.pot
+++ b/python/po/python.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-18 11:57+0100\n"
+"POT-Creation-Date: 2023-06-12 18:13+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,17 +17,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../audit2allow/audit2allow:239
-msgid "******************** IMPORTANT ***********************\n"
+#: ../audit2allow/audit2allow:244
+msgid "IMPORTANT"
 msgstr ""
 
-#: ../audit2allow/audit2allow:240
-#, python-format
-msgid ""
-"To make this policy package active, execute:\n"
-"\n"
-"semodule -i %s\n"
-"\n"
+#: ../audit2allow/audit2allow:245
+msgid "To make this policy package active, execute:"
 msgstr ""
 
 #: ../chcat/chcat:111 ../chcat/chcat:191
@@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
 msgstr ""
 
 #: ../chcat/chcat:128
-#, python-format
-msgid "%s is already in %s"
+#, python-brace-format
+msgid "{target} is already in {category}"
 msgstr ""
 
 #: ../chcat/chcat:210 ../chcat/chcat:220
-#, python-format
-msgid "%s is not in %s"
+#, python-brace-format
+msgid "{target} is not in {category}"
 msgstr ""
 
 #: ../chcat/chcat:291 ../chcat/chcat:296
@@ -152,218 +147,222 @@ msgstr ""
 
 #: ../semanage/semanage:242
 msgid ""
-"\n"
-"MLS/MCS Security Range (MLS/MCS Systems only)\n"
-"SELinux Range  for SELinux login mapping\n"
-"defaults to the SELinux user record range.\n"
-"SELinux Range for SELinux user defaults to s0.\n"
+"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
+"login mapping defaults to the SELinux user record range. SELinux Range for "
+"SELinux user defaults to s0."
 msgstr ""
 
-#: ../semanage/semanage:251
+#: ../semanage/semanage:249
 msgid ""
-"\n"
-"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
-"protocol\n"
-"    version for the specified node (ipv4|ipv6).\n"
+"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
+"version for the specified node (ipv4|ipv6)."
 msgstr ""
 
-#: ../semanage/semanage:257
-msgid ""
-"\n"
-"    Subnet prefix for  the specified infiniband ibpkey.\n"
+#: ../semanage/semanage:253
+msgid "Subnet prefix for  the specified infiniband ibpkey."
 msgstr ""
 
-#: ../semanage/semanage:262
-msgid ""
-"\n"
-"    Name for the specified infiniband end port.\n"
+#: ../semanage/semanage:256
+msgid "Name for the specified infiniband end port."
 msgstr ""
 
-#: ../semanage/semanage:267
+#: ../semanage/semanage:259
 #, python-format
 msgid "Modify a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:271
+#: ../semanage/semanage:263
 #, python-format
 msgid "List records of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:275
+#: ../semanage/semanage:267
 #, python-format
 msgid "Delete a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:279
+#: ../semanage/semanage:271
 msgid "Extract customizable commands, for use within a transaction"
 msgstr ""
 
-#: ../semanage/semanage:283
+#: ../semanage/semanage:275
 #, python-format
 msgid "Remove all %s objects local customizations"
 msgstr ""
 
-#: ../semanage/semanage:287
+#: ../semanage/semanage:279
 msgid "SELinux user name"
 msgstr ""
 
-#: ../semanage/semanage:292
+#: ../semanage/semanage:284
 msgid "Manage login mappings between linux users and SELinux confined users"
 msgstr ""
 
-#: ../semanage/semanage:309
+#: ../semanage/semanage:301
 #, python-format
 msgid "login_name | %%groupname"
 msgstr ""
 
-#: ../semanage/semanage:361
+#: ../semanage/semanage:344
 msgid "Manage file context mapping definitions"
 msgstr ""
 
-#: ../semanage/semanage:375
+#: ../semanage/semanage:359
+msgid ""
+"Substitute target path with sourcepath when generating default label. This "
+"is used with fcontext. Requires source and target path arguments. The "
+"context labeling for the target subtree is made equivalent to that defined "
+"for the source."
+msgstr ""
+
+#: ../semanage/semanage:363
 msgid ""
-"Substitute  target  path with sourcepath when generating default\n"
-"                                                                  label.  "
-"This is used with fcontext. Requires source  and  target\n"
-"                                                                  path  "
-"arguments.  The context labeling for the target subtree is\n"
-"                                                                  made "
-"equivalent to that defined for the source."
+"File Type. This is used with fcontext. Requires a file type as shown in the "
+"mode field by ls, e.g. use d to match only directories or f to match only "
+"regular files. The following file type options can be passed: f (regular "
+"file), d (directory), c (character device), b (block device), s (socket), l "
+"(symbolic link), p (named pipe). If you do not specify a file type, the file "
+"type will default to \"all files\"."
 msgstr ""
 
-#: ../semanage/semanage:383
+#: ../semanage/semanage:371
 msgid ""
 "Path to be labeled (may be in the form of a Perl compatible regular "
 "expression)"
 msgstr ""
 
-#: ../semanage/semanage:411
+#: ../semanage/semanage:399
 msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
 msgstr ""
 
-#: ../semanage/semanage:429
+#: ../semanage/semanage:417
 msgid ""
-"\n"
-"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
-"spaces. Or specify -R multiple times.\n"
+"SELinux Roles. You must enclose multiple roles within quotes, separate by "
+"spaces. Or specify -R multiple times."
 msgstr ""
 
-#: ../semanage/semanage:433
+#: ../semanage/semanage:419
 msgid "selinux_name"
 msgstr ""
 
-#: ../semanage/semanage:461
+#: ../semanage/semanage:447
 msgid "Manage network port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:477
+#: ../semanage/semanage:463
 msgid "port | port_range"
 msgstr ""
 
-#: ../semanage/semanage:506
+#: ../semanage/semanage:492
 msgid "Manage infiniband ibpkey type definitions"
 msgstr ""
 
-#: ../semanage/semanage:522
+#: ../semanage/semanage:508
 msgid "pkey | pkey_range"
 msgstr ""
 
-#: ../semanage/semanage:549
+#: ../semanage/semanage:535
 msgid "Manage infiniband end port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:565
+#: ../semanage/semanage:551
 msgid "ibendport"
 msgstr ""
 
-#: ../semanage/semanage:592
+#: ../semanage/semanage:578
 msgid "Manage network interface type definitions"
 msgstr ""
 
-#: ../semanage/semanage:607
+#: ../semanage/semanage:593
 msgid "interface_spec"
 msgstr ""
 
-#: ../semanage/semanage:631
+#: ../semanage/semanage:617
 msgid "Manage SELinux policy modules"
 msgstr ""
 
-#: ../semanage/semanage:642
+#: ../semanage/semanage:628
 msgid "Add a module"
 msgstr ""
 
-#: ../semanage/semanage:643
+#: ../semanage/semanage:629
 msgid "Remove a module"
 msgstr ""
 
-#: ../semanage/semanage:644
+#: ../semanage/semanage:630
 msgid "Disable a module"
 msgstr ""
 
-#: ../semanage/semanage:645
+#: ../semanage/semanage:631
 msgid "Enable a module"
 msgstr ""
 
-#: ../semanage/semanage:672
+#: ../semanage/semanage:658
 msgid "Manage network node type definitions"
 msgstr ""
 
-#: ../semanage/semanage:686
+#: ../semanage/semanage:672
 msgid "Network Mask"
 msgstr ""
 
-#: ../semanage/semanage:690
+#: ../semanage/semanage:676
 msgid "node"
 msgstr ""
 
-#: ../semanage/semanage:715
+#: ../semanage/semanage:701
 msgid "Manage booleans to selectively enable functionality"
 msgstr ""
 
-#: ../semanage/semanage:720
+#: ../semanage/semanage:706
 msgid "boolean"
 msgstr ""
 
-#: ../semanage/semanage:730
+#: ../semanage/semanage:716
 msgid "Enable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:731
+#: ../semanage/semanage:717
 msgid "Disable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:752
+#: ../semanage/semanage:738
 msgid "semanage permissive: error: the following argument is required: type\n"
 msgstr ""
 
-#: ../semanage/semanage:756
+#: ../semanage/semanage:742
 msgid "Manage process type enforcement mode"
 msgstr ""
 
-#: ../semanage/semanage:768 ../semanage/seobject.py:2677
+#: ../semanage/semanage:754 ../semanage/seobject.py:2672
 msgid "type"
 msgstr ""
 
-#: ../semanage/semanage:779
+#: ../semanage/semanage:765
 msgid "Disable/Enable dontaudit rules in policy"
 msgstr ""
 
-#: ../semanage/semanage:799
+#: ../semanage/semanage:785
 msgid "Output local customizations"
 msgstr ""
 
-#: ../semanage/semanage:801
+#: ../semanage/semanage:787
 msgid "Output file"
 msgstr ""
 
-#: ../semanage/semanage:894
+#: ../semanage/semanage:880
 msgid "Import local customizations"
 msgstr ""
 
-#: ../semanage/semanage:897
+#: ../semanage/semanage:883
 msgid "Input file"
 msgstr ""
 
+#: ../semanage/semanage:891
+msgid ""
+"semanage is used to configure certain elements of SELinux policy with-out "
+"requiring modification or recompilation from policy source."
+msgstr ""
+
 #: ../semanage/seobject.py:279
 msgid "Could not create semanage handle"
 msgstr ""
@@ -485,123 +484,115 @@ msgstr ""
 msgid "Customized Permissive Types"
 msgstr ""
 
-#: ../semanage/seobject.py:510
-msgid ""
-"The sepolgen python module is required to setup permissive domains.\n"
-"In some distributions it is included in the policycoreutils-devel package.\n"
-"# yum install policycoreutils-devel\n"
-"Or similar for your distro."
-msgstr ""
-
-#: ../semanage/seobject.py:520
+#: ../semanage/seobject.py:515
 #, python-format
 msgid "Could not set permissive domain %s (module installation failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:526
+#: ../semanage/seobject.py:521
 #, python-format
 msgid "Could not remove permissive domain %s (remove failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
-#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
-#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
-#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
-#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
-#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
-#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
+#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
+#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
+#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
+#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
+#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
+#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
+#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
 #, python-format
 msgid "Could not create a key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
-#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
+#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
+#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
 #, python-format
 msgid "Could not check if login mapping for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:569
+#: ../semanage/seobject.py:564
 #, python-format
 msgid "Login mapping for %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:574
+#: ../semanage/seobject.py:569
 #, python-format
 msgid "Linux Group %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:579
+#: ../semanage/seobject.py:574
 #, python-format
 msgid "Linux User %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:583
+#: ../semanage/seobject.py:578
 #, python-format
 msgid "Could not create login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
+#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
 #, python-format
 msgid "Could not set name for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
+#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
 #, python-format
 msgid "Could not set MLS range for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:596
+#: ../semanage/seobject.py:591
 #, python-format
 msgid "Could not set SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:600
+#: ../semanage/seobject.py:595
 #, python-format
 msgid "Could not add login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:616
+#: ../semanage/seobject.py:611
 msgid "Requires seuser or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
+#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
 #, python-format
 msgid "Login mapping for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:643
+#: ../semanage/seobject.py:638
 #, python-format
 msgid "Could not query seuser for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:658
+#: ../semanage/seobject.py:653
 #, python-format
 msgid "Could not modify login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:690
+#: ../semanage/seobject.py:685
 #, python-format
 msgid "Login mapping for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:694
+#: ../semanage/seobject.py:689
 #, python-format
 msgid "Could not delete login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
-#: ../semanage/seobject.py:991
+#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
+#: ../semanage/seobject.py:986
 msgid "Could not list login mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
 #: ../sepolicy/sepolicy/sepolicy.glade:1156
 #: ../sepolicy/sepolicy/sepolicy.glade:3138
 msgid "Login Name"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:1182
 #: ../sepolicy/sepolicy/sepolicy.glade:3156
 #: ../sepolicy/sepolicy/sepolicy.glade:3242
@@ -609,938 +600,958 @@ msgstr ""
 msgid "SELinux User"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "MLS/MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "Service"
 msgstr ""
 
-#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
-#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
-#: ../semanage/seobject.py:958
+#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
+#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
+#: ../semanage/seobject.py:953
 #, python-format
 msgid "Could not check if SELinux user %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
-#: ../semanage/seobject.py:964
+#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
+#: ../semanage/seobject.py:959
 #, python-format
 msgid "Could not query user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:823
+#: ../semanage/seobject.py:818
 #, python-format
 msgid "You must add at least one role for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:833
+#: ../semanage/seobject.py:828
 #, python-format
 msgid "SELinux user %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:837
+#: ../semanage/seobject.py:832
 #, python-format
 msgid "Could not create SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:846
-#, python-format
-msgid "Could not add role %s for %s"
+#: ../semanage/seobject.py:841
+#, python-brace-format
+msgid "Could not add role {role} for {name}"
 msgstr ""
 
-#: ../semanage/seobject.py:855
+#: ../semanage/seobject.py:850
 #, python-format
 msgid "Could not set MLS level for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:858
-#, python-format
-msgid "Could not add prefix %s for %s"
+#: ../semanage/seobject.py:853
+#, python-brace-format
+msgid "Could not add prefix {prefix} for {role}"
 msgstr ""
 
-#: ../semanage/seobject.py:861
+#: ../semanage/seobject.py:856
 #, python-format
 msgid "Could not extract key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:865
+#: ../semanage/seobject.py:860
 #, python-format
 msgid "Could not add SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:886
+#: ../semanage/seobject.py:881
 msgid "Requires prefix, roles, level or range"
 msgstr ""
 
-#: ../semanage/seobject.py:888
+#: ../semanage/seobject.py:883
 msgid "Requires prefix or roles"
 msgstr ""
 
-#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
+#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
 #, python-format
 msgid "SELinux user %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:927
+#: ../semanage/seobject.py:922
 #, python-format
 msgid "Could not modify SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:960
+#: ../semanage/seobject.py:955
 #, python-format
 msgid "SELinux user %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:971
+#: ../semanage/seobject.py:966
 #, python-format
 msgid "Could not delete SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1009
+#: ../semanage/seobject.py:1004
 msgid "Could not list SELinux users"
 msgstr ""
 
-#: ../semanage/seobject.py:1015
+#: ../semanage/seobject.py:1010
 #, python-format
 msgid "Could not list roles for user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "Labeling"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "MLS/"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Level"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:3262
 #: ../sepolicy/sepolicy/sepolicy.glade:5233
 #: ../sepolicy/sepolicy/sepolicy.glade:5382
 msgid "SELinux Roles"
 msgstr ""
 
-#: ../semanage/seobject.py:1071
+#: ../semanage/seobject.py:1066
 msgid "Protocol has to be one of udp, tcp, dccp or sctp"
 msgstr ""
 
-#: ../semanage/seobject.py:1073
+#: ../semanage/seobject.py:1068
 msgid "Port is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1087
+#: ../semanage/seobject.py:1082
 msgid "Invalid Port"
 msgstr ""
 
-#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
-#, python-format
-msgid "Could not create a key for %s/%s"
+#: ../semanage/seobject.py:1086
+#, python-brace-format
+msgid "Could not create a key for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
-#: ../semanage/seobject.py:1631
+#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
+#: ../semanage/seobject.py:1626
 msgid "Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
+#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
 #, python-format
 msgid "Type %s is invalid, must be a port type"
 msgstr ""
 
-#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
-#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
-#, python-format
-msgid "Could not check if port %s/%s is defined"
+#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
+#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
+#, python-brace-format
+msgid "Could not check if port {proto}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1115
-#, python-format
-msgid "Port %s/%s already defined"
+#: ../semanage/seobject.py:1110
+#, python-brace-format
+msgid "Port {proto}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1119
-#, python-format
-msgid "Could not create port for %s/%s"
+#: ../semanage/seobject.py:1114
+#, python-brace-format
+msgid "Could not create port for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
-#: ../semanage/seobject.py:1653
-#, python-format
-msgid "Could not create context for %s/%s"
+#: ../semanage/seobject.py:1120
+#, python-brace-format
+msgid "Could not create context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1129
-#, python-format
-msgid "Could not set user in port context for %s/%s"
+#: ../semanage/seobject.py:1124
+#, python-brace-format
+msgid "Could not set user in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1133
-#, python-format
-msgid "Could not set role in port context for %s/%s"
+#: ../semanage/seobject.py:1128
+#, python-brace-format
+msgid "Could not set role in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1137
-#, python-format
-msgid "Could not set type in port context for %s/%s"
+#: ../semanage/seobject.py:1132
+#, python-brace-format
+msgid "Could not set type in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1142
-#, python-format
-msgid "Could not set mls fields in port context for %s/%s"
+#: ../semanage/seobject.py:1137
+#, python-brace-format
+msgid "Could not set mls fields in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1146
-#, python-format
-msgid "Could not set port context for %s/%s"
+#: ../semanage/seobject.py:1141
+#, python-brace-format
+msgid "Could not set port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1150
-#, python-format
-msgid "Could not add port %s/%s"
+#: ../semanage/seobject.py:1145
+#, python-brace-format
+msgid "Could not add port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
-#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
-#: ../semanage/seobject.py:2176
+#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
+#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
+#: ../semanage/seobject.py:2171
 msgid "Requires setype or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
-#: ../semanage/seobject.py:1694
+#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
+#: ../semanage/seobject.py:1689
 msgid "Requires setype"
 msgstr ""
 
-#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
-#, python-format
-msgid "Port %s/%s is not defined"
+#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
+#, python-brace-format
+msgid "Port {proto}/{port} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1184
-#, python-format
-msgid "Could not query port %s/%s"
+#: ../semanage/seobject.py:1179
+#, python-brace-format
+msgid "Could not query port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1198
-#, python-format
-msgid "Could not modify port %s/%s"
+#: ../semanage/seobject.py:1193
+#, python-brace-format
+msgid "Could not modify port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1213
+#: ../semanage/seobject.py:1208
 msgid "Could not list the ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1230
+#: ../semanage/seobject.py:1225
 #, python-format
 msgid "Could not delete the port %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1252
-#, python-format
-msgid "Port %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1247
+#, python-brace-format
+msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1256
-#, python-format
-msgid "Could not delete port %s/%s"
+#: ../semanage/seobject.py:1251
+#, python-brace-format
+msgid "Could not delete port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
+#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
 msgid "Could not list ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
+#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
 #: ../sepolicy/sepolicy/sepolicy.glade:2766
 #: ../sepolicy/sepolicy/sepolicy.glade:4630
 msgid "SELinux Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1329
+#: ../semanage/seobject.py:1324
 msgid "Proto"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
 #: ../sepolicy/sepolicy/sepolicy.glade:1407
 msgid "Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1351
+#: ../semanage/seobject.py:1346
 msgid "Subnet Prefix is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1361
+#: ../semanage/seobject.py:1356
 msgid "Invalid Pkey"
 msgstr ""
 
-#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
+#: ../semanage/seobject.py:1360
+#, python-brace-format
+msgid "Could not create a key for {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
 #, python-format
 msgid "Type %s is invalid, must be a ibpkey type"
 msgstr ""
 
-#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
-#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
-#, python-format
-msgid "Could not check if ibpkey %s/%s is defined"
+#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
+#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
+#, python-brace-format
+msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1389
-#, python-format
-msgid "ibpkey %s/%s already defined"
+#: ../semanage/seobject.py:1384
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1393
-#, python-format
-msgid "Could not create ibpkey for %s/%s"
+#: ../semanage/seobject.py:1388
+#, python-brace-format
+msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1403
-#, python-format
-msgid "Could not set user in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1394
+#, python-brace-format
+msgid "Could not create context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1407
-#, python-format
-msgid "Could not set role in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1398
+#, python-brace-format
+msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1411
-#, python-format
-msgid "Could not set type in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1402
+#, python-brace-format
+msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1416
-#, python-format
-msgid "Could not set mls fields in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1406
+#, python-brace-format
+msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1420
-#, python-format
-msgid "Could not set ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1411
+#, python-brace-format
+msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1424
-#, python-format
-msgid "Could not add ibpkey %s/%s"
+#: ../semanage/seobject.py:1415
+#, python-brace-format
+msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
-#, python-format
-msgid "ibpkey %s/%s is not defined"
+#: ../semanage/seobject.py:1419
+#, python-brace-format
+msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1457
-#, python-format
-msgid "Could not query ibpkey %s/%s"
+#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1468
-#, python-format
-msgid "Could not modify ibpkey %s/%s"
+#: ../semanage/seobject.py:1452
+#, python-brace-format
+msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1481
+#: ../semanage/seobject.py:1463
+#, python-brace-format
+msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1476
 msgid "Could not list the ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1496
+#: ../semanage/seobject.py:1491
 #, python-format
 msgid "Could not delete the ibpkey %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1513
-#, python-format
-msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1508
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1517
-#, python-format
-msgid "Could not delete ibpkey %s/%s"
+#: ../semanage/seobject.py:1512
+#, python-brace-format
+msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
+#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
 msgid "Could not list ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "SELinux IB Pkey Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Subnet_Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Pkey Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1611
+#: ../semanage/seobject.py:1606
 msgid "IB device name is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1616
+#: ../semanage/seobject.py:1611
 msgid "Invalid Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1620
-#, python-format
-msgid "Could not create a key for ibendport %s/%s"
+#: ../semanage/seobject.py:1615
+#, python-brace-format
+msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
+#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
 #, python-format
 msgid "Type %s is invalid, must be an ibendport type"
 msgstr ""
 
-#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
-#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
-#, python-format
-msgid "Could not check if ibendport %s/%s is defined"
+#: ../semanage/seobject.py:1636
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1643
-#, python-format
-msgid "ibendport %s/%s already defined"
+#: ../semanage/seobject.py:1638
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1647
-#, python-format
-msgid "Could not create ibendport for %s/%s"
+#: ../semanage/seobject.py:1642
+#, python-brace-format
+msgid "Could not create ibendport for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1657
-#, python-format
-msgid "Could not set user in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1648
+#, python-brace-format
+msgid "Could not create context for {ibendport}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1661
-#, python-format
-msgid "Could not set role in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1652
+#, python-brace-format
+msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1656
+#, python-brace-format
+msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1660
+#, python-brace-format
+msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
 #: ../semanage/seobject.py:1665
-#, python-format
-msgid "Could not set type in ibendport context for %s/%s"
+#, python-brace-format
+msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1670
-#, python-format
-msgid "Could not set mls fields in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1669
+#, python-brace-format
+msgid "Could not set ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1674
-#, python-format
-msgid "Could not set ibendport context for %s/%s"
+#: ../semanage/seobject.py:1673
+#, python-brace-format
+msgid "Could not add ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1678
-#, python-format
-msgid "Could not add ibendport %s/%s"
+#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
+#: ../semanage/seobject.py:1758
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
-#, python-format
-msgid "ibendport %s/%s is not defined"
+#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{ibendport} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1711
-#, python-format
-msgid "Could not query ibendport %s/%s"
+#: ../semanage/seobject.py:1706
+#, python-brace-format
+msgid "Could not query ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1722
-#, python-format
-msgid "Could not modify ibendport %s/%s"
+#: ../semanage/seobject.py:1717
+#, python-brace-format
+msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1735
+#: ../semanage/seobject.py:1730
 msgid "Could not list the ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1744
-#, python-format
-msgid "Could not create a key for %s/%d"
+#: ../semanage/seobject.py:1739
+#, python-brace-format
+msgid "Could not create a key for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1748
-#, python-format
-msgid "Could not delete the ibendport %s/%d"
+#: ../semanage/seobject.py:1743
+#, python-brace-format
+msgid "Could not delete the ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1765
-#, python-format
-msgid "ibendport %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1760
+#, python-brace-format
+msgid ""
+"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1769
-#, python-format
-msgid "Could not delete ibendport %s/%s"
+#: ../semanage/seobject.py:1764
+#, python-brace-format
+msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
+#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
 msgid "Could not list ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "SELinux IB End Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "IB Device Name"
 msgstr ""
 
-#: ../semanage/seobject.py:1861
+#: ../semanage/seobject.py:1856
 msgid "Node Address is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
+#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
 msgid "Unknown or missing protocol"
 msgstr ""
 
-#: ../semanage/seobject.py:1899
+#: ../semanage/seobject.py:1894
 msgid "SELinux node type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
+#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
 #, python-format
 msgid "Type %s is invalid, must be a node type"
 msgstr ""
 
-#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
-#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
-#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
-#: ../semanage/seobject.py:2435
+#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
+#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
+#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
+#: ../semanage/seobject.py:2430
 #, python-format
 msgid "Could not create key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
-#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
+#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
+#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
 #, python-format
 msgid "Could not check if addr %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1914
+#: ../semanage/seobject.py:1909
 #, python-format
 msgid "Addr %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1918
+#: ../semanage/seobject.py:1913
 #, python-format
 msgid "Could not create addr for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
-#: ../semanage/seobject.py:2389
+#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2384
 #, python-format
 msgid "Could not create context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1928
+#: ../semanage/seobject.py:1923
 #, python-format
 msgid "Could not set mask for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1932
+#: ../semanage/seobject.py:1927
 #, python-format
 msgid "Could not set user in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1936
+#: ../semanage/seobject.py:1931
 #, python-format
 msgid "Could not set role in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1940
+#: ../semanage/seobject.py:1935
 #, python-format
 msgid "Could not set type in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1945
+#: ../semanage/seobject.py:1940
 #, python-format
 msgid "Could not set mls fields in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1949
+#: ../semanage/seobject.py:1944
 #, python-format
 msgid "Could not set addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1953
+#: ../semanage/seobject.py:1948
 #, python-format
 msgid "Could not add addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
+#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
 #, python-format
 msgid "Addr %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1989
+#: ../semanage/seobject.py:1984
 #, python-format
 msgid "Could not query addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1999
+#: ../semanage/seobject.py:1994
 #, python-format
 msgid "Could not modify addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2028
+#: ../semanage/seobject.py:2023
 #, python-format
 msgid "Addr %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2032
+#: ../semanage/seobject.py:2027
 #, python-format
 msgid "Could not delete addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2046
+#: ../semanage/seobject.py:2041
 msgid "Could not deleteall node mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2060
+#: ../semanage/seobject.py:2055
 msgid "Could not list addrs"
 msgstr ""
 
-#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
+#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
 msgid "SELinux Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
-#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
+#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
+#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
 #, python-format
 msgid "Could not check if interface %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2123
+#: ../semanage/seobject.py:2118
 #, python-format
 msgid "Interface %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2122
 #, python-format
 msgid "Could not create interface for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2136
+#: ../semanage/seobject.py:2131
 #, python-format
 msgid "Could not set user in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2140
+#: ../semanage/seobject.py:2135
 #, python-format
 msgid "Could not set role in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2144
+#: ../semanage/seobject.py:2139
 #, python-format
 msgid "Could not set type in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2149
+#: ../semanage/seobject.py:2144
 #, python-format
 msgid "Could not set mls fields in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2153
+#: ../semanage/seobject.py:2148
 #, python-format
 msgid "Could not set interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2157
+#: ../semanage/seobject.py:2152
 #, python-format
 msgid "Could not set message context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2161
+#: ../semanage/seobject.py:2156
 #, python-format
 msgid "Could not add interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
+#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
 #, python-format
 msgid "Interface %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2190
+#: ../semanage/seobject.py:2185
 #, python-format
 msgid "Could not query interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2201
+#: ../semanage/seobject.py:2196
 #, python-format
 msgid "Could not modify interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2228
+#: ../semanage/seobject.py:2223
 #, python-format
 msgid "Interface %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2232
+#: ../semanage/seobject.py:2227
 #, python-format
 msgid "Could not delete interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2246
+#: ../semanage/seobject.py:2241
 msgid "Could not delete all interface  mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2260
+#: ../semanage/seobject.py:2255
 msgid "Could not list interfaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2285
+#: ../semanage/seobject.py:2280
 msgid "SELinux Interface"
 msgstr ""
 
-#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
 msgid "Context"
 msgstr ""
 
-#: ../semanage/seobject.py:2355
+#: ../semanage/seobject.py:2350
 #, python-format
 msgid "Target %s is not valid. Target is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2358
+#: ../semanage/seobject.py:2353
 #, python-format
 msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2361
+#: ../semanage/seobject.py:2356
 #, python-format
 msgid "Equivalence class for %s already exists"
 msgstr ""
 
-#: ../semanage/seobject.py:2367
+#: ../semanage/seobject.py:2362
 #, python-format
 msgid "File spec %s conflicts with equivalency rule '%s %s'"
 msgstr ""
 
-#: ../semanage/seobject.py:2378
+#: ../semanage/seobject.py:2373
 #, python-format
 msgid "Equivalence class for %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:2395
+#: ../semanage/seobject.py:2390
 #, python-format
 msgid "Could not set user in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2399
+#: ../semanage/seobject.py:2394
 #, python-format
 msgid "Could not set role in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
+#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
 #, python-format
 msgid "Could not set mls fields in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2410
+#: ../semanage/seobject.py:2405
 msgid "Invalid file specification"
 msgstr ""
 
-#: ../semanage/seobject.py:2412
+#: ../semanage/seobject.py:2407
 msgid "File specification can not include spaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2417
+#: ../semanage/seobject.py:2412
 #, python-format
 msgid ""
 "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
 msgstr ""
 
-#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
+#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
 #, python-format
 msgid "Type %s is invalid, must be a file or device type"
 msgstr ""
 
-#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
-#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
-#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
+#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
+#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
+#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
 #, python-format
 msgid "Could not check if file context for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2447
+#: ../semanage/seobject.py:2442
 #, python-format
 msgid "File context for %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2451
+#: ../semanage/seobject.py:2446
 #, python-format
 msgid "Could not create file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2459
+#: ../semanage/seobject.py:2454
 #, python-format
 msgid "Could not set type in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
-#: ../semanage/seobject.py:2543
+#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
+#: ../semanage/seobject.py:2538
 #, python-format
 msgid "Could not set file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2473
+#: ../semanage/seobject.py:2468
 #, python-format
 msgid "Could not add file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2492
+#: ../semanage/seobject.py:2487
 msgid "Requires setype, serange or seuser"
 msgstr ""
 
-#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
+#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
 #, python-format
 msgid "Could not query file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
+#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
 #, python-format
 msgid "File context for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2547
+#: ../semanage/seobject.py:2542
 #, python-format
 msgid "Could not modify file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2565
+#: ../semanage/seobject.py:2560
 msgid "Could not list the file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2579
+#: ../semanage/seobject.py:2574
 #, python-format
 msgid "Could not delete the file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2609
+#: ../semanage/seobject.py:2604
 #, python-format
 msgid "File context for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2615
+#: ../semanage/seobject.py:2610
 #, python-format
 msgid "Could not delete file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2632
+#: ../semanage/seobject.py:2627
 msgid "Could not list file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2636
+#: ../semanage/seobject.py:2631
 msgid "Could not list file contexts for home directories"
 msgstr ""
 
-#: ../semanage/seobject.py:2640
+#: ../semanage/seobject.py:2635
 msgid "Could not list local file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2672
 msgid "SELinux fcontext"
 msgstr ""
 
-#: ../semanage/seobject.py:2690
+#: ../semanage/seobject.py:2685
 msgid ""
 "\n"
 "SELinux Distribution fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2695
+#: ../semanage/seobject.py:2690
 msgid ""
 "\n"
 "SELinux Local fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
-#: ../semanage/seobject.py:2790
+#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
+#: ../semanage/seobject.py:2785
 #, python-format
 msgid "Could not check if boolean %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
+#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
 #, python-format
 msgid "Boolean %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2739
+#: ../semanage/seobject.py:2734
 #, python-format
 msgid "Could not query file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2744
+#: ../semanage/seobject.py:2739
 #, python-format
 msgid "You must specify one of the following values: %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2749
+#: ../semanage/seobject.py:2744
 #, python-format
 msgid "Could not set active value of boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2752
+#: ../semanage/seobject.py:2747
 #, python-format
 msgid "Could not modify boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2768
-#, python-format
-msgid "Bad format %s: Record %s"
+#: ../semanage/seobject.py:2763
+#, python-brace-format
+msgid "Bad format {filename}: Record {record}"
 msgstr ""
 
-#: ../semanage/seobject.py:2792
+#: ../semanage/seobject.py:2787
 #, python-format
 msgid "Boolean %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2796
+#: ../semanage/seobject.py:2791
 #, python-format
 msgid "Could not delete boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
+#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
 msgid "Could not list booleans"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "off"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "on"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "SELinux boolean"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "State"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "Default"
 msgstr ""
 
-#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
+#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
 #: ../sepolicy/sepolicy/sepolicy.glade:2510
 #: ../sepolicy/sepolicy/sepolicy.glade:5099
 msgid "Description"
@@ -1555,151 +1566,151 @@ msgstr ""
 msgid "Missing interface definition for %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:140
+#: ../sepolicy/sepolicy/generate.py:138
 msgid "Standard Init Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:141
+#: ../sepolicy/sepolicy/generate.py:139
 msgid "DBUS System Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:142
+#: ../sepolicy/sepolicy/generate.py:140
 msgid "Internet Services Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:143
+#: ../sepolicy/sepolicy/generate.py:141
 msgid "Web Application/Script (CGI)"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:144
+#: ../sepolicy/sepolicy/generate.py:142
 msgid "Sandbox"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:145
+#: ../sepolicy/sepolicy/generate.py:143
 msgid "User Application"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:146
+#: ../sepolicy/sepolicy/generate.py:144
 msgid "Existing Domain Type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:147
+#: ../sepolicy/sepolicy/generate.py:145
 msgid "Minimal Terminal Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:148
+#: ../sepolicy/sepolicy/generate.py:146
 msgid "Minimal X Windows Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:149
+#: ../sepolicy/sepolicy/generate.py:147
 msgid "Desktop Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:150
+#: ../sepolicy/sepolicy/generate.py:148
 msgid "Administrator Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:151
+#: ../sepolicy/sepolicy/generate.py:149
 msgid "Confined Root Administrator Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:152
+#: ../sepolicy/sepolicy/generate.py:150
 msgid "Module information for a new type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:158
+#: ../sepolicy/sepolicy/generate.py:156
 msgid "Valid Types:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:193
+#: ../sepolicy/sepolicy/generate.py:191
 #, python-format
 msgid "Ports must be numbers or ranges of numbers from 1 to %d "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:205
+#: ../sepolicy/sepolicy/generate.py:203
 msgid "You must enter a valid policy type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:208
+#: ../sepolicy/sepolicy/generate.py:206
 #, python-format
 msgid "You must enter a name for your policy module for your '%s'."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:346
+#: ../sepolicy/sepolicy/generate.py:344
 msgid ""
 "Name must be alphanumeric with no spaces. Consider using option \"-n "
 "MODULENAME\""
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:438
+#: ../sepolicy/sepolicy/generate.py:436
 msgid "User Role types can not be assigned executables."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:444
+#: ../sepolicy/sepolicy/generate.py:442
 msgid "Only Daemon apps can use an init script."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:462
+#: ../sepolicy/sepolicy/generate.py:460
 msgid "use_resolve must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:468
+#: ../sepolicy/sepolicy/generate.py:466
 msgid "use_syslog must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:474
+#: ../sepolicy/sepolicy/generate.py:472
 msgid "use_kerberos must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:480
+#: ../sepolicy/sepolicy/generate.py:478
 msgid "manage_krb5_rcache must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:510
+#: ../sepolicy/sepolicy/generate.py:508
 msgid "USER Types automatically get a tmp type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:847
+#: ../sepolicy/sepolicy/generate.py:845
 #, python-format
 msgid "'%s' policy modules require existing domains"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:872
+#: ../sepolicy/sepolicy/generate.py:870
 msgid "Type field required"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:885
+#: ../sepolicy/sepolicy/generate.py:883
 #, python-format
 msgid ""
 "You need to define a new type which ends with: \n"
 " %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1113
+#: ../sepolicy/sepolicy/generate.py:1111
 msgid "You must enter the executable path for your confined process"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1378
+#: ../sepolicy/sepolicy/generate.py:1376
 msgid "Created the following files:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1379
+#: ../sepolicy/sepolicy/generate.py:1377
 msgid "Type Enforcement file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1380
+#: ../sepolicy/sepolicy/generate.py:1378
 msgid "Interface file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1381
+#: ../sepolicy/sepolicy/generate.py:1379
 msgid "File Contexts file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1383
+#: ../sepolicy/sepolicy/generate.py:1381
 msgid "Spec file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1384
+#: ../sepolicy/sepolicy/generate.py:1382
 msgid "Setup Script"
 msgstr ""
 
@@ -2367,29 +2378,29 @@ msgstr ""
 msgid "named pipe"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:148
+#: ../sepolicy/sepolicy/__init__.py:149
 msgid "No SELinux Policy installed"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:184
+#: ../sepolicy/sepolicy/__init__.py:185
 #, python-format
 msgid "Failed to read %s policy file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:470
+#: ../sepolicy/sepolicy/__init__.py:471
 #, python-format
 msgid "-- Allowed %s [ %s ]"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:896
+#: ../sepolicy/sepolicy/__init__.py:897
 msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1221
+#: ../sepolicy/sepolicy/__init__.py:1230
 msgid "unknown"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1230
+#: ../sepolicy/sepolicy/__init__.py:1239
 #, python-brace-format
 msgid "Allow {subject} to {rest}"
 msgstr ""
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH v2 1/4] python: improve format strings for proper localization
  2023-06-12 16:21     ` [PATCH v2 1/4] python: improve format strings for proper localization Petr Lautrbach
@ 2023-06-13  9:30       ` Vit Mojzis
  0 siblings, 0 replies; 26+ messages in thread
From: Vit Mojzis @ 2023-06-13  9:30 UTC (permalink / raw)
  To: Petr Lautrbach, selinux



On 6/12/23 18:21, Petr Lautrbach wrote:
> If a string contains more than one unnamed argument it's hard for
> translators to proper localize as they don't know which value is
> represented by a unnamed argument. It also blocks them to use a
> different order of arguments which would make better sense in other
> languages.
>
> Fixes:
>
>      $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
>      ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
>                                   The translator cannot reorder the arguments.
>                                   Please consider using a format string with named arguments,
>                                   and a mapping instead of a tuple for the arguments.
>      ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
>                                             The translator cannot reorder the arguments.
>                                             Please consider using a format string with named arguments,
>                                             and a mapping instead of a tuple for the arguments.
>      ...
>
> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
> ---
>   python/chcat/chcat          |   6 +-
>   python/semanage/seobject.py | 130 ++++++++++++++++++------------------
>   2 files changed, 68 insertions(+), 68 deletions(-)
>
> diff --git a/python/chcat/chcat b/python/chcat/chcat
> index 68718ec5f102..3ff387d88c59 100755
> --- a/python/chcat/chcat
> +++ b/python/chcat/chcat
> @@ -125,7 +125,7 @@ def chcat_add(orig, newcat, objects, login_ind):
>   
>           if len(clist) > 1:
>               if cat in clist[1:]:
> -                print(_("%s is already in %s") % (f, orig))
> +                print(_("{target} is already in {category}").format(target=f, category=orig)
>                   continue
>               clist.append(cat)
>               cats = clist[1:]
> @@ -207,7 +207,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
>   
>           if len(clist) > 1:
>               if cat not in clist[1:]:
> -                print(_("%s is not in %s") % (f, orig))
> +                print(_("{target} is not in {category}").format(target=f, category=orig))
>                   continue
>               clist.remove(cat)
>               if len(clist) > 1:
> @@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
>               else:
>                   cat = ""
>           else:
> -            print(_("%s is not in %s") % (f, orig))
> +            print(_("{target} is not in {category}").format(target=f, category=orig))
>               continue
>   
>           if len(cat) == 0:
> diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
> index d82da4942987..12b20af51f81 100644
> --- a/python/semanage/seobject.py
> +++ b/python/semanage/seobject.py
> @@ -843,7 +843,7 @@ class seluserRecords(semanageRecords):
>           for r in roles:
>               rc = semanage_user_add_role(self.sh, u, r)
>               if rc < 0:
> -                raise ValueError(_("Could not add role %s for %s") % (r, name))
> +                raise ValueError(_("Could not add role {role} for {name}").format(role=r, name=name))
>   
>           if is_mls_enabled == 1:
>               rc = semanage_user_set_mlsrange(self.sh, u, serange)
> @@ -855,7 +855,7 @@ class seluserRecords(semanageRecords):
>                   raise ValueError(_("Could not set MLS level for %s") % name)
>           rc = semanage_user_set_prefix(self.sh, u, prefix)
>           if rc < 0:
> -            raise ValueError(_("Could not add prefix %s for %s") % (r, prefix))
> +            raise ValueError(_("Could not add prefix {prefix} for {role}").format(role=r, prefix=prefix))
>           (rc, key) = semanage_user_key_extract(self.sh, u)
>           if rc < 0:
>               raise ValueError(_("Could not extract key for %s") % name)
> @@ -1088,7 +1088,7 @@ class portRecords(semanageRecords):
>   
>           (rc, k) = semanage_port_key_create(self.sh, low, high, proto_d)
>           if rc < 0:
> -            raise ValueError(_("Could not create a key for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not create a key for {proto}/{port}").format(prot=proto, port=port))

You seem to have added a typo (in all occurences of ".format(prot=proto, 
port=port)" ). This needs to be:
.format(proto=proto, port=port)

Vit

>           return (k, proto_d, low, high)
>   
>       def __add(self, port, proto, serange, type):
> @@ -1110,44 +1110,44 @@ class portRecords(semanageRecords):
>   
>           (rc, exists) = semanage_port_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(prot=proto, port=port))
>           if exists:
> -            raise ValueError(_("Port %s/%s already defined") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} already defined").format(prot=proto, port=port))
>   
>           (rc, p) = semanage_port_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create port for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not create port for {proto}/{port}").format(prot=proto, port=port))
>   
>           semanage_port_set_proto(p, proto_d)
>           semanage_port_set_range(p, low, high)
>           (rc, con) = semanage_context_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create context for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not create context for {proto}/{port}").format(prot=proto, port=port))
>   
>           rc = semanage_context_set_user(self.sh, con, "system_u")
>           if rc < 0:
> -            raise ValueError(_("Could not set user in port context for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not set user in port context for {proto}/{port}").format(prot=proto, port=port))
>   
>           rc = semanage_context_set_role(self.sh, con, "object_r")
>           if rc < 0:
> -            raise ValueError(_("Could not set role in port context for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not set role in port context for {proto}/{port}").format(prot=proto, port=port))
>   
>           rc = semanage_context_set_type(self.sh, con, type)
>           if rc < 0:
> -            raise ValueError(_("Could not set type in port context for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not set type in port context for {proto}/{port}").format(prot=proto, port=port))
>   
>           if (is_mls_enabled == 1) and (serange != ""):
>               rc = semanage_context_set_mls(self.sh, con, serange)
>               if rc < 0:
> -                raise ValueError(_("Could not set mls fields in port context for %s/%s") % (proto, port))
> +                raise ValueError(_("Could not set mls fields in port context for {proto}/{port}").format(proto=proto, port=port))
>   
>           rc = semanage_port_set_con(self.sh, p, con)
>           if rc < 0:
> -            raise ValueError(_("Could not set port context for %s/%s") % (proto, port))
> +            raise ValueError(_("Could not set port context for {proto}/{port}").format(proto=proto, port=port))
>   
>           rc = semanage_port_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not add port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not add port {proto}/{port}").format(proto=proto, port=port))
>   
>           semanage_context_free(con)
>           semanage_port_key_free(k)
> @@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
>   
>           (rc, exists) = semanage_port_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
>   
>           (rc, p) = semanage_port_query(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not query port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
>   
>           con = semanage_port_get_con(p)
>   
> @@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
>   
>           rc = semanage_port_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
>   
>           semanage_port_key_free(k)
>           semanage_port_free(p)
> @@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
>           (k, proto_d, low, high) = self.__genkey(port, proto)
>           (rc, exists) = semanage_port_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
>   
>           (rc, exists) = semanage_port_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
> +            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
>           if not exists:
> -            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
> +            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
>   
>           rc = semanage_port_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
> +            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
>   
>           semanage_port_key_free(k)
>   
> @@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
>           if rc < 0:
> -            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           return (k, subnet_prefix, low, high)
>   
>       def __add(self, pkey, subnet_prefix, serange, type):
> @@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibpkey_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
>           if exists:
> -            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           (rc, p) = semanage_ibpkey_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
>           semanage_ibpkey_set_range(p, low, high)
>           (rc, con) = semanage_context_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_user(self.sh, con, "system_u")
>           if rc < 0:
> -            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_role(self.sh, con, "object_r")
>           if rc < 0:
> -            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_context_set_type(self.sh, con, type)
>           if rc < 0:
> -            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           if (is_mls_enabled == 1) and (serange != ""):
>               rc = semanage_context_set_mls(self.sh, con, serange)
>               if rc < 0:
> -                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_set_con(self.sh, p, con)
>           if rc < 0:
> -            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_context_free(con)
>           semanage_ibpkey_key_free(k)
> @@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibpkey_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           if not exists:
> -            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           (rc, p) = semanage_ibpkey_query(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           con = semanage_ibpkey_get_con(p)
>   
> @@ -1465,7 +1465,7 @@ class ibpkeyRecords(semanageRecords):
>   
>           rc = semanage_ibpkey_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not modify ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not modify ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_ibpkey_key_free(k)
>           semanage_ibpkey_free(p)
> @@ -1502,19 +1502,19 @@ class ibpkeyRecords(semanageRecords):
>           (k, subnet_prefix, low, high) = self.__genkey(pkey, subnet_prefix)
>           (rc, exists) = semanage_ibpkey_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           if not exists:
> -            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
>           if not exists:
> -            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
> +            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           rc = semanage_ibpkey_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
> +            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
>   
>           semanage_ibpkey_key_free(k)
>   
> @@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
>           if rc < 0:
> -            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           return (k, ibdev_name, port)
>   
>       def __add(self, ibendport, ibdev_name, serange, type):
> @@ -1638,44 +1638,44 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
>           if exists:
> -            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
> +            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
>   
>           (rc, p) = semanage_ibendport_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create ibendport for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not create ibendport for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           semanage_ibendport_set_ibdev_name(self.sh, p, ibdev_name)
>           semanage_ibendport_set_port(p, port)
>           (rc, con) = semanage_context_create(self.sh)
>           if rc < 0:
> -            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_user(self.sh, con, "system_u")
>           if rc < 0:
> -            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_role(self.sh, con, "object_r")
>           if rc < 0:
> -            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_context_set_type(self.sh, con, type)
>           if rc < 0:
> -            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           if (is_mls_enabled == 1) and (serange != ""):
>               rc = semanage_context_set_mls(self.sh, con, serange)
>               if rc < 0:
> -                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
> +                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_ibendport_set_con(self.sh, p, con)
>           if rc < 0:
> -            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           rc = semanage_ibendport_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
> +            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>           semanage_context_free(con)
>           semanage_ibendport_key_free(k)
> @@ -1702,13 +1702,13 @@ class ibendportRecords(semanageRecords):
>   
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           (rc, p) = semanage_ibendport_query(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not query ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not query ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           con = semanage_ibendport_get_con(p)
>   
> @@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
>   
>           rc = semanage_ibendport_modify_local(self.sh, k, p)
>           if rc < 0:
> -            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           semanage_ibendport_key_free(k)
>           semanage_ibendport_free(p)
> @@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
>               port = semanage_ibendport_get_port(ibendport)
>               (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
>               if rc < 0:
> -                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
> +                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>   
>               rc = semanage_ibendport_del_local(self.sh, k)
>               if rc < 0:
> -                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
> +                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
>               semanage_ibendport_key_free(k)
>   
>           self.commit()
> @@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
>           (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
>           (rc, exists) = semanage_ibendport_exists(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
>           if not exists:
> -            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
> +            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           rc = semanage_ibendport_del_local(self.sh, k)
>           if rc < 0:
> -            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
> +            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
>   
>           semanage_ibendport_key_free(k)
>   
> @@ -2765,7 +2765,7 @@ class booleanRecords(semanageRecords):
>                   try:
>                       boolname, val = b.split("=")
>                   except ValueError:
> -                    raise ValueError(_("Bad format %s: Record %s" % (name, b)))
> +                    raise ValueError(_("Bad format {filename}: Record {record}").format(filename=name, record=b))
>                   self.__mod(boolname.strip(), val.strip())
>               fd.close()
>           else:


^ permalink raw reply	[flat|nested] 26+ messages in thread

* (no subject)
  2023-06-12 16:21     ` [PATCH v2 4/4] python: update python.pot Petr Lautrbach
@ 2023-06-13  9:42       ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 1/4] python: improve format strings for proper localization Petr Lautrbach
                           ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13  9:42 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis


Fixed typo in 1/4: prot=proto => proto=proto


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v3 1/4] python: improve format strings for proper localization
  2023-06-13  9:42       ` Petr Lautrbach
@ 2023-06-13  9:42         ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 2/4] python: Drop hard formating from localized strings Petr Lautrbach
                           ` (2 subsequent siblings)
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13  9:42 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

If a string contains more than one unnamed argument it's hard for
translators to proper localize as they don't know which value is
represented by a unnamed argument. It also blocks them to use a
different order of arguments which would make better sense in other
languages.

Fixes:

    $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
    ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                 The translator cannot reorder the arguments.
                                 Please consider using a format string with named arguments,
                                 and a mapping instead of a tuple for the arguments.
    ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                           The translator cannot reorder the arguments.
                                           Please consider using a format string with named arguments,
                                           and a mapping instead of a tuple for the arguments.
    ...

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/chcat/chcat          |   6 +-
 python/semanage/seobject.py | 130 ++++++++++++++++++------------------
 2 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/python/chcat/chcat b/python/chcat/chcat
index 68718ec5f102..3ff387d88c59 100755
--- a/python/chcat/chcat
+++ b/python/chcat/chcat
@@ -125,7 +125,7 @@ def chcat_add(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat in clist[1:]:
-                print(_("%s is already in %s") % (f, orig))
+                print(_("{target} is already in {category}").format(target=f, category=orig)
                 continue
             clist.append(cat)
             cats = clist[1:]
@@ -207,7 +207,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat not in clist[1:]:
-                print(_("%s is not in %s") % (f, orig))
+                print(_("{target} is not in {category}").format(target=f, category=orig))
                 continue
             clist.remove(cat)
             if len(clist) > 1:
@@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
             else:
                 cat = ""
         else:
-            print(_("%s is not in %s") % (f, orig))
+            print(_("{target} is not in {category}").format(target=f, category=orig))
             continue
 
         if len(cat) == 0:
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index d82da4942987..2b1eb44ce8a3 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -843,7 +843,7 @@ class seluserRecords(semanageRecords):
         for r in roles:
             rc = semanage_user_add_role(self.sh, u, r)
             if rc < 0:
-                raise ValueError(_("Could not add role %s for %s") % (r, name))
+                raise ValueError(_("Could not add role {role} for {name}").format(role=r, name=name))
 
         if is_mls_enabled == 1:
             rc = semanage_user_set_mlsrange(self.sh, u, serange)
@@ -855,7 +855,7 @@ class seluserRecords(semanageRecords):
                 raise ValueError(_("Could not set MLS level for %s") % name)
         rc = semanage_user_set_prefix(self.sh, u, prefix)
         if rc < 0:
-            raise ValueError(_("Could not add prefix %s for %s") % (r, prefix))
+            raise ValueError(_("Could not add prefix {prefix} for {role}").format(role=r, prefix=prefix))
         (rc, key) = semanage_user_key_extract(self.sh, u)
         if rc < 0:
             raise ValueError(_("Could not extract key for %s") % name)
@@ -1088,7 +1088,7 @@ class portRecords(semanageRecords):
 
         (rc, k) = semanage_port_key_create(self.sh, low, high, proto_d)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create a key for {proto}/{port}").format(proto=proto, port=port))
         return (k, proto_d, low, high)
 
     def __add(self, port, proto, serange, type):
@@ -1110,44 +1110,44 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if exists:
-            raise ValueError(_("Port %s/%s already defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} already defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create port for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create port for {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_set_proto(p, proto_d)
         semanage_port_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set user in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set role in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set type in port context for {proto}/{port}").format(proto=proto, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in port context for %s/%s") % (proto, port))
+                raise ValueError(_("Could not set mls fields in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add port %s/%s") % (proto, port))
+            raise ValueError(_("Could not add port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_context_free(con)
         semanage_port_key_free(k)
@@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query port %s/%s") % (proto, port))
+            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
 
         con = semanage_port_get_con(p)
 
@@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
+            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
         semanage_port_free(p)
@@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
         (k, proto_d, low, high) = self.__genkey(port, proto)
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, exists) = semanage_port_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
 
         rc = semanage_port_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
+            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
 
@@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
         return (k, subnet_prefix, low, high)
 
     def __add(self, pkey, subnet_prefix, serange, type):
@@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
         if exists:
-            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
         semanage_ibpkey_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_context_free(con)
         semanage_ibpkey_key_free(k)
@@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         con = semanage_ibpkey_get_con(p)
 
@@ -1465,7 +1465,7 @@ class ibpkeyRecords(semanageRecords):
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not modify ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
         semanage_ibpkey_free(p)
@@ -1502,19 +1502,19 @@ class ibpkeyRecords(semanageRecords):
         (k, subnet_prefix, low, high) = self.__genkey(pkey, subnet_prefix)
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
 
@@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
 
         (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
         if rc < 0:
-            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
         return (k, ibdev_name, port)
 
     def __add(self, ibendport, ibdev_name, serange, type):
@@ -1638,44 +1638,44 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
         if exists:
-            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
+            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
 
         (rc, p) = semanage_ibendport_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibendport for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create ibendport for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_ibendport_set_ibdev_name(self.sh, p, ibdev_name)
         semanage_ibendport_set_port(p, port)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
+                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_context_free(con)
         semanage_ibendport_key_free(k)
@@ -1702,13 +1702,13 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, p) = semanage_ibendport_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not query ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         con = semanage_ibendport_get_con(p)
 
@@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
         semanage_ibendport_free(p)
@@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
             port = semanage_ibendport_get_port(ibendport)
             (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
             if rc < 0:
-                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
+                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
             rc = semanage_ibendport_del_local(self.sh, k)
             if rc < 0:
-                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
+                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
             semanage_ibendport_key_free(k)
 
         self.commit()
@@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
         (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         rc = semanage_ibendport_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
 
@@ -2765,7 +2765,7 @@ class booleanRecords(semanageRecords):
                 try:
                     boolname, val = b.split("=")
                 except ValueError:
-                    raise ValueError(_("Bad format %s: Record %s" % (name, b)))
+                    raise ValueError(_("Bad format {filename}: Record {record}").format(filename=name, record=b))
                 self.__mod(boolname.strip(), val.strip())
             fd.close()
         else:
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 2/4] python: Drop hard formating from localized strings
  2023-06-13  9:42       ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 1/4] python: improve format strings for proper localization Petr Lautrbach
@ 2023-06-13  9:42         ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13  9:42 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

It confuses translators and new lines are dropped by parser module anyway.

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/audit2allow/audit2allow | 14 ++++++--
 python/semanage/semanage       | 60 +++++++++++++---------------------
 2 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/python/audit2allow/audit2allow b/python/audit2allow/audit2allow
index 5587a2dbb006..35b0b151ac86 100644
--- a/python/audit2allow/audit2allow
+++ b/python/audit2allow/audit2allow
@@ -234,9 +234,17 @@ class AuditToPolicy:
             print(e)
             sys.exit(1)
 
-        sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
-        sys.stdout.write((_("To make this policy package active, execute:" +
-                            "\n\nsemodule -i %s\n\n") % packagename))
+        sys.stdout.write(
+"""******************** {important} ***********************
+{text}
+
+semodule -i {packagename}
+
+""".format(
+    important=_("IMPORTANT"),
+    text=_("To make this policy package active, execute:"),
+    packagename=packagename
+))
 
     def __output_audit2why(self):
         import selinux
diff --git a/python/semanage/semanage b/python/semanage/semanage
index e0bd98a95c77..4fdb490f7df4 100644
--- a/python/semanage/semanage
+++ b/python/semanage/semanage
@@ -238,30 +238,22 @@ def parser_add_level(parser, name):
 
 
 def parser_add_range(parser, name):
-    parser.add_argument('-r', '--range', default='',
-                        help=_('''
-MLS/MCS Security Range (MLS/MCS Systems only)
-SELinux Range  for SELinux login mapping
-defaults to the SELinux user record range.
-SELinux Range for SELinux user defaults to s0.
-'''))
+    parser.add_argument('-r', '--range', default='', help=_(
+        "MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
+SELinux Range for SELinux user defaults to s0."
+    ))
 
 
 def parser_add_proto(parser, name):
-    parser.add_argument('-p', '--proto', help=_('''
-    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet protocol
-    version for the specified node (ipv4|ipv6).
-'''))
+    parser.add_argument('-p', '--proto', help=_(
+        "Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6)."
+    ))
 
 def parser_add_subnet_prefix(parser, name):
-    parser.add_argument('-x', '--subnet_prefix', help=_('''
-    Subnet prefix for  the specified infiniband ibpkey.
-'''))
+    parser.add_argument('-x', '--subnet_prefix', help=_('Subnet prefix for  the specified infiniband ibpkey.'))
 
 def parser_add_ibdev_name(parser, name):
-    parser.add_argument('-z', '--ibdev_name', help=_('''
-    Name for the specified infiniband end port.
-'''))
+    parser.add_argument('-z', '--ibdev_name', help=_("Name for the specified infiniband end port."))
 
 def parser_add_modify(parser, name):
     parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name)
@@ -348,15 +340,6 @@ def handleFcontext(args):
 
 
 def setupFcontextParser(subparsers):
-    ftype_help = '''
-File Type.   This is used with fcontext.  Requires a  file  type
-as  shown  in  the  mode  field by ls, e.g. use d to match only
-directories or f to match only regular files. The following
-file type options can be passed:
-f (regular file),d (directory),c (character device),
-b (block device),s (socket),l (symbolic link),p (named pipe)
-If you do not specify a file type, the file type will default to "all files".
-'''
     generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict)
     fcontextParser = subparsers.add_parser('fcontext', usage=generate_usage, help=_("Manage file context mapping definitions"))
     parser_add_locallist(fcontextParser, "fcontext")
@@ -372,11 +355,16 @@ If you do not specify a file type, the file type will default to "all files".
     parser_add_extract(fcontext_action, "fcontext")
     parser_add_deleteall(fcontext_action, "fcontext")
 
-    fcontextParser.add_argument('-e', '--equal', help=_('''Substitute  target  path with sourcepath when generating default
-                                                                  label.  This is used with fcontext. Requires source  and  target
-                                                                  path  arguments.  The context labeling for the target subtree is
-                                                                  made equivalent to that defined for the source.'''))
-    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help))
+    fcontextParser.add_argument('-e', '--equal', help=_(
+        'Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
+path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.'
+    ))
+    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(
+        'File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use d to match only \
+directories or f to match only regular files. The following file type options can be passed: f (regular file), d (directory), \
+c (character device), b (block device), s (socket), l (symbolic link), p (named pipe). \
+If you do not specify a file type, the file type will default to "all files".'
+    ))
     parser_add_seuser(fcontextParser, "fcontext")
     parser_add_type(fcontextParser, "fcontext")
     parser_add_range(fcontextParser, "fcontext")
@@ -426,9 +414,7 @@ def setupUserParser(subparsers):
     parser_add_range(userParser, "user")
     userParser.add_argument('-R', '--roles', default=[],
                             action=CheckRole,
-                            help=_('''
-SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
-'''))
+                            help=_("SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times."))
     userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS)
     userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name'))
     userParser.set_defaults(func=handleUser)
@@ -901,9 +887,9 @@ def setupImportParser(subparsers):
 def createCommandParser():
     commandParser = seParser(prog='semanage',
                              formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-                             description='''semanage is used to configure certain elements
-                                                            of SELinux policy with-out requiring modification
-                                                            to or recompilation from policy source.''')
+                             description=_(
+            "semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source."
+                             ))
 
     #To add a new subcommand define the parser for it in a function above and call it here.
     subparsers = commandParser.add_subparsers(dest='subcommand')
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 3/4] semanage: Drop unnecessary import from seobject
  2023-06-13  9:42       ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 1/4] python: improve format strings for proper localization Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 2/4] python: Drop hard formating from localized strings Petr Lautrbach
@ 2023-06-13  9:42         ` Petr Lautrbach
  2023-06-13  9:42         ` [PATCH v3 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13  9:42 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

sepolgen.module is not used for permissive domains

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/semanage/seobject.py | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index 2b1eb44ce8a3..361205d11c10 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -504,11 +504,6 @@ class permissiveRecords(semanageRecords):
             print(t)
 
     def add(self, type):
-        try:
-            import sepolgen.module as module
-        except ImportError:
-            raise ValueError(_("The sepolgen python module is required to setup permissive domains.\nIn some distributions it is included in the policycoreutils-devel package.\n# yum install policycoreutils-devel\nOr similar for your distro."))
-
         name = "permissive_%s" % type
         modtxt = "(typepermissive %s)" % type
 
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 4/4] python: update python.pot
  2023-06-13  9:42       ` Petr Lautrbach
                           ` (2 preceding siblings ...)
  2023-06-13  9:42         ` [PATCH v3 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
@ 2023-06-13  9:42         ` Petr Lautrbach
  2023-06-13 11:20           ` Petr Lautrbach
  3 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13  9:42 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/po/python.pot | 963 ++++++++++++++++++++++---------------------
 1 file changed, 487 insertions(+), 476 deletions(-)

diff --git a/python/po/python.pot b/python/po/python.pot
index 16d04eb0f18e..435a1b764e34 100644
--- a/python/po/python.pot
+++ b/python/po/python.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-18 11:57+0100\n"
+"POT-Creation-Date: 2023-06-12 18:13+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,17 +17,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../audit2allow/audit2allow:239
-msgid "******************** IMPORTANT ***********************\n"
+#: ../audit2allow/audit2allow:244
+msgid "IMPORTANT"
 msgstr ""
 
-#: ../audit2allow/audit2allow:240
-#, python-format
-msgid ""
-"To make this policy package active, execute:\n"
-"\n"
-"semodule -i %s\n"
-"\n"
+#: ../audit2allow/audit2allow:245
+msgid "To make this policy package active, execute:"
 msgstr ""
 
 #: ../chcat/chcat:111 ../chcat/chcat:191
@@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
 msgstr ""
 
 #: ../chcat/chcat:128
-#, python-format
-msgid "%s is already in %s"
+#, python-brace-format
+msgid "{target} is already in {category}"
 msgstr ""
 
 #: ../chcat/chcat:210 ../chcat/chcat:220
-#, python-format
-msgid "%s is not in %s"
+#, python-brace-format
+msgid "{target} is not in {category}"
 msgstr ""
 
 #: ../chcat/chcat:291 ../chcat/chcat:296
@@ -152,218 +147,222 @@ msgstr ""
 
 #: ../semanage/semanage:242
 msgid ""
-"\n"
-"MLS/MCS Security Range (MLS/MCS Systems only)\n"
-"SELinux Range  for SELinux login mapping\n"
-"defaults to the SELinux user record range.\n"
-"SELinux Range for SELinux user defaults to s0.\n"
+"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
+"login mapping defaults to the SELinux user record range. SELinux Range for "
+"SELinux user defaults to s0."
 msgstr ""
 
-#: ../semanage/semanage:251
+#: ../semanage/semanage:249
 msgid ""
-"\n"
-"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
-"protocol\n"
-"    version for the specified node (ipv4|ipv6).\n"
+"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
+"version for the specified node (ipv4|ipv6)."
 msgstr ""
 
-#: ../semanage/semanage:257
-msgid ""
-"\n"
-"    Subnet prefix for  the specified infiniband ibpkey.\n"
+#: ../semanage/semanage:253
+msgid "Subnet prefix for  the specified infiniband ibpkey."
 msgstr ""
 
-#: ../semanage/semanage:262
-msgid ""
-"\n"
-"    Name for the specified infiniband end port.\n"
+#: ../semanage/semanage:256
+msgid "Name for the specified infiniband end port."
 msgstr ""
 
-#: ../semanage/semanage:267
+#: ../semanage/semanage:259
 #, python-format
 msgid "Modify a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:271
+#: ../semanage/semanage:263
 #, python-format
 msgid "List records of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:275
+#: ../semanage/semanage:267
 #, python-format
 msgid "Delete a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:279
+#: ../semanage/semanage:271
 msgid "Extract customizable commands, for use within a transaction"
 msgstr ""
 
-#: ../semanage/semanage:283
+#: ../semanage/semanage:275
 #, python-format
 msgid "Remove all %s objects local customizations"
 msgstr ""
 
-#: ../semanage/semanage:287
+#: ../semanage/semanage:279
 msgid "SELinux user name"
 msgstr ""
 
-#: ../semanage/semanage:292
+#: ../semanage/semanage:284
 msgid "Manage login mappings between linux users and SELinux confined users"
 msgstr ""
 
-#: ../semanage/semanage:309
+#: ../semanage/semanage:301
 #, python-format
 msgid "login_name | %%groupname"
 msgstr ""
 
-#: ../semanage/semanage:361
+#: ../semanage/semanage:344
 msgid "Manage file context mapping definitions"
 msgstr ""
 
-#: ../semanage/semanage:375
+#: ../semanage/semanage:359
+msgid ""
+"Substitute target path with sourcepath when generating default label. This "
+"is used with fcontext. Requires source and target path arguments. The "
+"context labeling for the target subtree is made equivalent to that defined "
+"for the source."
+msgstr ""
+
+#: ../semanage/semanage:363
 msgid ""
-"Substitute  target  path with sourcepath when generating default\n"
-"                                                                  label.  "
-"This is used with fcontext. Requires source  and  target\n"
-"                                                                  path  "
-"arguments.  The context labeling for the target subtree is\n"
-"                                                                  made "
-"equivalent to that defined for the source."
+"File Type. This is used with fcontext. Requires a file type as shown in the "
+"mode field by ls, e.g. use d to match only directories or f to match only "
+"regular files. The following file type options can be passed: f (regular "
+"file), d (directory), c (character device), b (block device), s (socket), l "
+"(symbolic link), p (named pipe). If you do not specify a file type, the file "
+"type will default to \"all files\"."
 msgstr ""
 
-#: ../semanage/semanage:383
+#: ../semanage/semanage:371
 msgid ""
 "Path to be labeled (may be in the form of a Perl compatible regular "
 "expression)"
 msgstr ""
 
-#: ../semanage/semanage:411
+#: ../semanage/semanage:399
 msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
 msgstr ""
 
-#: ../semanage/semanage:429
+#: ../semanage/semanage:417
 msgid ""
-"\n"
-"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
-"spaces. Or specify -R multiple times.\n"
+"SELinux Roles. You must enclose multiple roles within quotes, separate by "
+"spaces. Or specify -R multiple times."
 msgstr ""
 
-#: ../semanage/semanage:433
+#: ../semanage/semanage:419
 msgid "selinux_name"
 msgstr ""
 
-#: ../semanage/semanage:461
+#: ../semanage/semanage:447
 msgid "Manage network port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:477
+#: ../semanage/semanage:463
 msgid "port | port_range"
 msgstr ""
 
-#: ../semanage/semanage:506
+#: ../semanage/semanage:492
 msgid "Manage infiniband ibpkey type definitions"
 msgstr ""
 
-#: ../semanage/semanage:522
+#: ../semanage/semanage:508
 msgid "pkey | pkey_range"
 msgstr ""
 
-#: ../semanage/semanage:549
+#: ../semanage/semanage:535
 msgid "Manage infiniband end port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:565
+#: ../semanage/semanage:551
 msgid "ibendport"
 msgstr ""
 
-#: ../semanage/semanage:592
+#: ../semanage/semanage:578
 msgid "Manage network interface type definitions"
 msgstr ""
 
-#: ../semanage/semanage:607
+#: ../semanage/semanage:593
 msgid "interface_spec"
 msgstr ""
 
-#: ../semanage/semanage:631
+#: ../semanage/semanage:617
 msgid "Manage SELinux policy modules"
 msgstr ""
 
-#: ../semanage/semanage:642
+#: ../semanage/semanage:628
 msgid "Add a module"
 msgstr ""
 
-#: ../semanage/semanage:643
+#: ../semanage/semanage:629
 msgid "Remove a module"
 msgstr ""
 
-#: ../semanage/semanage:644
+#: ../semanage/semanage:630
 msgid "Disable a module"
 msgstr ""
 
-#: ../semanage/semanage:645
+#: ../semanage/semanage:631
 msgid "Enable a module"
 msgstr ""
 
-#: ../semanage/semanage:672
+#: ../semanage/semanage:658
 msgid "Manage network node type definitions"
 msgstr ""
 
-#: ../semanage/semanage:686
+#: ../semanage/semanage:672
 msgid "Network Mask"
 msgstr ""
 
-#: ../semanage/semanage:690
+#: ../semanage/semanage:676
 msgid "node"
 msgstr ""
 
-#: ../semanage/semanage:715
+#: ../semanage/semanage:701
 msgid "Manage booleans to selectively enable functionality"
 msgstr ""
 
-#: ../semanage/semanage:720
+#: ../semanage/semanage:706
 msgid "boolean"
 msgstr ""
 
-#: ../semanage/semanage:730
+#: ../semanage/semanage:716
 msgid "Enable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:731
+#: ../semanage/semanage:717
 msgid "Disable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:752
+#: ../semanage/semanage:738
 msgid "semanage permissive: error: the following argument is required: type\n"
 msgstr ""
 
-#: ../semanage/semanage:756
+#: ../semanage/semanage:742
 msgid "Manage process type enforcement mode"
 msgstr ""
 
-#: ../semanage/semanage:768 ../semanage/seobject.py:2677
+#: ../semanage/semanage:754 ../semanage/seobject.py:2672
 msgid "type"
 msgstr ""
 
-#: ../semanage/semanage:779
+#: ../semanage/semanage:765
 msgid "Disable/Enable dontaudit rules in policy"
 msgstr ""
 
-#: ../semanage/semanage:799
+#: ../semanage/semanage:785
 msgid "Output local customizations"
 msgstr ""
 
-#: ../semanage/semanage:801
+#: ../semanage/semanage:787
 msgid "Output file"
 msgstr ""
 
-#: ../semanage/semanage:894
+#: ../semanage/semanage:880
 msgid "Import local customizations"
 msgstr ""
 
-#: ../semanage/semanage:897
+#: ../semanage/semanage:883
 msgid "Input file"
 msgstr ""
 
+#: ../semanage/semanage:891
+msgid ""
+"semanage is used to configure certain elements of SELinux policy with-out "
+"requiring modification or recompilation from policy source."
+msgstr ""
+
 #: ../semanage/seobject.py:279
 msgid "Could not create semanage handle"
 msgstr ""
@@ -485,123 +484,115 @@ msgstr ""
 msgid "Customized Permissive Types"
 msgstr ""
 
-#: ../semanage/seobject.py:510
-msgid ""
-"The sepolgen python module is required to setup permissive domains.\n"
-"In some distributions it is included in the policycoreutils-devel package.\n"
-"# yum install policycoreutils-devel\n"
-"Or similar for your distro."
-msgstr ""
-
-#: ../semanage/seobject.py:520
+#: ../semanage/seobject.py:515
 #, python-format
 msgid "Could not set permissive domain %s (module installation failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:526
+#: ../semanage/seobject.py:521
 #, python-format
 msgid "Could not remove permissive domain %s (remove failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
-#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
-#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
-#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
-#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
-#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
-#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
+#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
+#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
+#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
+#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
+#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
+#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
+#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
 #, python-format
 msgid "Could not create a key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
-#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
+#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
+#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
 #, python-format
 msgid "Could not check if login mapping for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:569
+#: ../semanage/seobject.py:564
 #, python-format
 msgid "Login mapping for %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:574
+#: ../semanage/seobject.py:569
 #, python-format
 msgid "Linux Group %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:579
+#: ../semanage/seobject.py:574
 #, python-format
 msgid "Linux User %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:583
+#: ../semanage/seobject.py:578
 #, python-format
 msgid "Could not create login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
+#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
 #, python-format
 msgid "Could not set name for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
+#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
 #, python-format
 msgid "Could not set MLS range for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:596
+#: ../semanage/seobject.py:591
 #, python-format
 msgid "Could not set SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:600
+#: ../semanage/seobject.py:595
 #, python-format
 msgid "Could not add login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:616
+#: ../semanage/seobject.py:611
 msgid "Requires seuser or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
+#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
 #, python-format
 msgid "Login mapping for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:643
+#: ../semanage/seobject.py:638
 #, python-format
 msgid "Could not query seuser for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:658
+#: ../semanage/seobject.py:653
 #, python-format
 msgid "Could not modify login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:690
+#: ../semanage/seobject.py:685
 #, python-format
 msgid "Login mapping for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:694
+#: ../semanage/seobject.py:689
 #, python-format
 msgid "Could not delete login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
-#: ../semanage/seobject.py:991
+#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
+#: ../semanage/seobject.py:986
 msgid "Could not list login mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
 #: ../sepolicy/sepolicy/sepolicy.glade:1156
 #: ../sepolicy/sepolicy/sepolicy.glade:3138
 msgid "Login Name"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:1182
 #: ../sepolicy/sepolicy/sepolicy.glade:3156
 #: ../sepolicy/sepolicy/sepolicy.glade:3242
@@ -609,938 +600,958 @@ msgstr ""
 msgid "SELinux User"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "MLS/MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "Service"
 msgstr ""
 
-#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
-#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
-#: ../semanage/seobject.py:958
+#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
+#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
+#: ../semanage/seobject.py:953
 #, python-format
 msgid "Could not check if SELinux user %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
-#: ../semanage/seobject.py:964
+#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
+#: ../semanage/seobject.py:959
 #, python-format
 msgid "Could not query user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:823
+#: ../semanage/seobject.py:818
 #, python-format
 msgid "You must add at least one role for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:833
+#: ../semanage/seobject.py:828
 #, python-format
 msgid "SELinux user %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:837
+#: ../semanage/seobject.py:832
 #, python-format
 msgid "Could not create SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:846
-#, python-format
-msgid "Could not add role %s for %s"
+#: ../semanage/seobject.py:841
+#, python-brace-format
+msgid "Could not add role {role} for {name}"
 msgstr ""
 
-#: ../semanage/seobject.py:855
+#: ../semanage/seobject.py:850
 #, python-format
 msgid "Could not set MLS level for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:858
-#, python-format
-msgid "Could not add prefix %s for %s"
+#: ../semanage/seobject.py:853
+#, python-brace-format
+msgid "Could not add prefix {prefix} for {role}"
 msgstr ""
 
-#: ../semanage/seobject.py:861
+#: ../semanage/seobject.py:856
 #, python-format
 msgid "Could not extract key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:865
+#: ../semanage/seobject.py:860
 #, python-format
 msgid "Could not add SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:886
+#: ../semanage/seobject.py:881
 msgid "Requires prefix, roles, level or range"
 msgstr ""
 
-#: ../semanage/seobject.py:888
+#: ../semanage/seobject.py:883
 msgid "Requires prefix or roles"
 msgstr ""
 
-#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
+#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
 #, python-format
 msgid "SELinux user %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:927
+#: ../semanage/seobject.py:922
 #, python-format
 msgid "Could not modify SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:960
+#: ../semanage/seobject.py:955
 #, python-format
 msgid "SELinux user %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:971
+#: ../semanage/seobject.py:966
 #, python-format
 msgid "Could not delete SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1009
+#: ../semanage/seobject.py:1004
 msgid "Could not list SELinux users"
 msgstr ""
 
-#: ../semanage/seobject.py:1015
+#: ../semanage/seobject.py:1010
 #, python-format
 msgid "Could not list roles for user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "Labeling"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "MLS/"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Level"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:3262
 #: ../sepolicy/sepolicy/sepolicy.glade:5233
 #: ../sepolicy/sepolicy/sepolicy.glade:5382
 msgid "SELinux Roles"
 msgstr ""
 
-#: ../semanage/seobject.py:1071
+#: ../semanage/seobject.py:1066
 msgid "Protocol has to be one of udp, tcp, dccp or sctp"
 msgstr ""
 
-#: ../semanage/seobject.py:1073
+#: ../semanage/seobject.py:1068
 msgid "Port is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1087
+#: ../semanage/seobject.py:1082
 msgid "Invalid Port"
 msgstr ""
 
-#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
-#, python-format
-msgid "Could not create a key for %s/%s"
+#: ../semanage/seobject.py:1086
+#, python-brace-format
+msgid "Could not create a key for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
-#: ../semanage/seobject.py:1631
+#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
+#: ../semanage/seobject.py:1626
 msgid "Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
+#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
 #, python-format
 msgid "Type %s is invalid, must be a port type"
 msgstr ""
 
-#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
-#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
-#, python-format
-msgid "Could not check if port %s/%s is defined"
+#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
+#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
+#, python-brace-format
+msgid "Could not check if port {proto}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1115
-#, python-format
-msgid "Port %s/%s already defined"
+#: ../semanage/seobject.py:1110
+#, python-brace-format
+msgid "Port {proto}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1119
-#, python-format
-msgid "Could not create port for %s/%s"
+#: ../semanage/seobject.py:1114
+#, python-brace-format
+msgid "Could not create port for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
-#: ../semanage/seobject.py:1653
-#, python-format
-msgid "Could not create context for %s/%s"
+#: ../semanage/seobject.py:1120
+#, python-brace-format
+msgid "Could not create context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1129
-#, python-format
-msgid "Could not set user in port context for %s/%s"
+#: ../semanage/seobject.py:1124
+#, python-brace-format
+msgid "Could not set user in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1133
-#, python-format
-msgid "Could not set role in port context for %s/%s"
+#: ../semanage/seobject.py:1128
+#, python-brace-format
+msgid "Could not set role in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1137
-#, python-format
-msgid "Could not set type in port context for %s/%s"
+#: ../semanage/seobject.py:1132
+#, python-brace-format
+msgid "Could not set type in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1142
-#, python-format
-msgid "Could not set mls fields in port context for %s/%s"
+#: ../semanage/seobject.py:1137
+#, python-brace-format
+msgid "Could not set mls fields in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1146
-#, python-format
-msgid "Could not set port context for %s/%s"
+#: ../semanage/seobject.py:1141
+#, python-brace-format
+msgid "Could not set port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1150
-#, python-format
-msgid "Could not add port %s/%s"
+#: ../semanage/seobject.py:1145
+#, python-brace-format
+msgid "Could not add port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
-#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
-#: ../semanage/seobject.py:2176
+#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
+#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
+#: ../semanage/seobject.py:2171
 msgid "Requires setype or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
-#: ../semanage/seobject.py:1694
+#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
+#: ../semanage/seobject.py:1689
 msgid "Requires setype"
 msgstr ""
 
-#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
-#, python-format
-msgid "Port %s/%s is not defined"
+#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
+#, python-brace-format
+msgid "Port {proto}/{port} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1184
-#, python-format
-msgid "Could not query port %s/%s"
+#: ../semanage/seobject.py:1179
+#, python-brace-format
+msgid "Could not query port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1198
-#, python-format
-msgid "Could not modify port %s/%s"
+#: ../semanage/seobject.py:1193
+#, python-brace-format
+msgid "Could not modify port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1213
+#: ../semanage/seobject.py:1208
 msgid "Could not list the ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1230
+#: ../semanage/seobject.py:1225
 #, python-format
 msgid "Could not delete the port %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1252
-#, python-format
-msgid "Port %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1247
+#, python-brace-format
+msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1256
-#, python-format
-msgid "Could not delete port %s/%s"
+#: ../semanage/seobject.py:1251
+#, python-brace-format
+msgid "Could not delete port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
+#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
 msgid "Could not list ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
+#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
 #: ../sepolicy/sepolicy/sepolicy.glade:2766
 #: ../sepolicy/sepolicy/sepolicy.glade:4630
 msgid "SELinux Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1329
+#: ../semanage/seobject.py:1324
 msgid "Proto"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
 #: ../sepolicy/sepolicy/sepolicy.glade:1407
 msgid "Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1351
+#: ../semanage/seobject.py:1346
 msgid "Subnet Prefix is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1361
+#: ../semanage/seobject.py:1356
 msgid "Invalid Pkey"
 msgstr ""
 
-#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
+#: ../semanage/seobject.py:1360
+#, python-brace-format
+msgid "Could not create a key for {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
 #, python-format
 msgid "Type %s is invalid, must be a ibpkey type"
 msgstr ""
 
-#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
-#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
-#, python-format
-msgid "Could not check if ibpkey %s/%s is defined"
+#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
+#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
+#, python-brace-format
+msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1389
-#, python-format
-msgid "ibpkey %s/%s already defined"
+#: ../semanage/seobject.py:1384
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1393
-#, python-format
-msgid "Could not create ibpkey for %s/%s"
+#: ../semanage/seobject.py:1388
+#, python-brace-format
+msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1403
-#, python-format
-msgid "Could not set user in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1394
+#, python-brace-format
+msgid "Could not create context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1407
-#, python-format
-msgid "Could not set role in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1398
+#, python-brace-format
+msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1411
-#, python-format
-msgid "Could not set type in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1402
+#, python-brace-format
+msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1416
-#, python-format
-msgid "Could not set mls fields in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1406
+#, python-brace-format
+msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1420
-#, python-format
-msgid "Could not set ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1411
+#, python-brace-format
+msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1424
-#, python-format
-msgid "Could not add ibpkey %s/%s"
+#: ../semanage/seobject.py:1415
+#, python-brace-format
+msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
-#, python-format
-msgid "ibpkey %s/%s is not defined"
+#: ../semanage/seobject.py:1419
+#, python-brace-format
+msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1457
-#, python-format
-msgid "Could not query ibpkey %s/%s"
+#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1468
-#, python-format
-msgid "Could not modify ibpkey %s/%s"
+#: ../semanage/seobject.py:1452
+#, python-brace-format
+msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1481
+#: ../semanage/seobject.py:1463
+#, python-brace-format
+msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1476
 msgid "Could not list the ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1496
+#: ../semanage/seobject.py:1491
 #, python-format
 msgid "Could not delete the ibpkey %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1513
-#, python-format
-msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1508
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1517
-#, python-format
-msgid "Could not delete ibpkey %s/%s"
+#: ../semanage/seobject.py:1512
+#, python-brace-format
+msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
+#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
 msgid "Could not list ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "SELinux IB Pkey Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Subnet_Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Pkey Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1611
+#: ../semanage/seobject.py:1606
 msgid "IB device name is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1616
+#: ../semanage/seobject.py:1611
 msgid "Invalid Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1620
-#, python-format
-msgid "Could not create a key for ibendport %s/%s"
+#: ../semanage/seobject.py:1615
+#, python-brace-format
+msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
+#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
 #, python-format
 msgid "Type %s is invalid, must be an ibendport type"
 msgstr ""
 
-#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
-#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
-#, python-format
-msgid "Could not check if ibendport %s/%s is defined"
+#: ../semanage/seobject.py:1636
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1643
-#, python-format
-msgid "ibendport %s/%s already defined"
+#: ../semanage/seobject.py:1638
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1647
-#, python-format
-msgid "Could not create ibendport for %s/%s"
+#: ../semanage/seobject.py:1642
+#, python-brace-format
+msgid "Could not create ibendport for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1657
-#, python-format
-msgid "Could not set user in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1648
+#, python-brace-format
+msgid "Could not create context for {ibendport}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1661
-#, python-format
-msgid "Could not set role in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1652
+#, python-brace-format
+msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1656
+#, python-brace-format
+msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1660
+#, python-brace-format
+msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
 #: ../semanage/seobject.py:1665
-#, python-format
-msgid "Could not set type in ibendport context for %s/%s"
+#, python-brace-format
+msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1670
-#, python-format
-msgid "Could not set mls fields in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1669
+#, python-brace-format
+msgid "Could not set ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1674
-#, python-format
-msgid "Could not set ibendport context for %s/%s"
+#: ../semanage/seobject.py:1673
+#, python-brace-format
+msgid "Could not add ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1678
-#, python-format
-msgid "Could not add ibendport %s/%s"
+#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
+#: ../semanage/seobject.py:1758
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
-#, python-format
-msgid "ibendport %s/%s is not defined"
+#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{ibendport} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1711
-#, python-format
-msgid "Could not query ibendport %s/%s"
+#: ../semanage/seobject.py:1706
+#, python-brace-format
+msgid "Could not query ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1722
-#, python-format
-msgid "Could not modify ibendport %s/%s"
+#: ../semanage/seobject.py:1717
+#, python-brace-format
+msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1735
+#: ../semanage/seobject.py:1730
 msgid "Could not list the ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1744
-#, python-format
-msgid "Could not create a key for %s/%d"
+#: ../semanage/seobject.py:1739
+#, python-brace-format
+msgid "Could not create a key for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1748
-#, python-format
-msgid "Could not delete the ibendport %s/%d"
+#: ../semanage/seobject.py:1743
+#, python-brace-format
+msgid "Could not delete the ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1765
-#, python-format
-msgid "ibendport %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1760
+#, python-brace-format
+msgid ""
+"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1769
-#, python-format
-msgid "Could not delete ibendport %s/%s"
+#: ../semanage/seobject.py:1764
+#, python-brace-format
+msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
+#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
 msgid "Could not list ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "SELinux IB End Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "IB Device Name"
 msgstr ""
 
-#: ../semanage/seobject.py:1861
+#: ../semanage/seobject.py:1856
 msgid "Node Address is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
+#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
 msgid "Unknown or missing protocol"
 msgstr ""
 
-#: ../semanage/seobject.py:1899
+#: ../semanage/seobject.py:1894
 msgid "SELinux node type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
+#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
 #, python-format
 msgid "Type %s is invalid, must be a node type"
 msgstr ""
 
-#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
-#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
-#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
-#: ../semanage/seobject.py:2435
+#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
+#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
+#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
+#: ../semanage/seobject.py:2430
 #, python-format
 msgid "Could not create key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
-#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
+#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
+#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
 #, python-format
 msgid "Could not check if addr %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1914
+#: ../semanage/seobject.py:1909
 #, python-format
 msgid "Addr %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1918
+#: ../semanage/seobject.py:1913
 #, python-format
 msgid "Could not create addr for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
-#: ../semanage/seobject.py:2389
+#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2384
 #, python-format
 msgid "Could not create context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1928
+#: ../semanage/seobject.py:1923
 #, python-format
 msgid "Could not set mask for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1932
+#: ../semanage/seobject.py:1927
 #, python-format
 msgid "Could not set user in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1936
+#: ../semanage/seobject.py:1931
 #, python-format
 msgid "Could not set role in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1940
+#: ../semanage/seobject.py:1935
 #, python-format
 msgid "Could not set type in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1945
+#: ../semanage/seobject.py:1940
 #, python-format
 msgid "Could not set mls fields in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1949
+#: ../semanage/seobject.py:1944
 #, python-format
 msgid "Could not set addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1953
+#: ../semanage/seobject.py:1948
 #, python-format
 msgid "Could not add addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
+#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
 #, python-format
 msgid "Addr %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1989
+#: ../semanage/seobject.py:1984
 #, python-format
 msgid "Could not query addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1999
+#: ../semanage/seobject.py:1994
 #, python-format
 msgid "Could not modify addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2028
+#: ../semanage/seobject.py:2023
 #, python-format
 msgid "Addr %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2032
+#: ../semanage/seobject.py:2027
 #, python-format
 msgid "Could not delete addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2046
+#: ../semanage/seobject.py:2041
 msgid "Could not deleteall node mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2060
+#: ../semanage/seobject.py:2055
 msgid "Could not list addrs"
 msgstr ""
 
-#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
+#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
 msgid "SELinux Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
-#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
+#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
+#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
 #, python-format
 msgid "Could not check if interface %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2123
+#: ../semanage/seobject.py:2118
 #, python-format
 msgid "Interface %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2122
 #, python-format
 msgid "Could not create interface for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2136
+#: ../semanage/seobject.py:2131
 #, python-format
 msgid "Could not set user in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2140
+#: ../semanage/seobject.py:2135
 #, python-format
 msgid "Could not set role in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2144
+#: ../semanage/seobject.py:2139
 #, python-format
 msgid "Could not set type in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2149
+#: ../semanage/seobject.py:2144
 #, python-format
 msgid "Could not set mls fields in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2153
+#: ../semanage/seobject.py:2148
 #, python-format
 msgid "Could not set interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2157
+#: ../semanage/seobject.py:2152
 #, python-format
 msgid "Could not set message context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2161
+#: ../semanage/seobject.py:2156
 #, python-format
 msgid "Could not add interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
+#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
 #, python-format
 msgid "Interface %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2190
+#: ../semanage/seobject.py:2185
 #, python-format
 msgid "Could not query interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2201
+#: ../semanage/seobject.py:2196
 #, python-format
 msgid "Could not modify interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2228
+#: ../semanage/seobject.py:2223
 #, python-format
 msgid "Interface %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2232
+#: ../semanage/seobject.py:2227
 #, python-format
 msgid "Could not delete interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2246
+#: ../semanage/seobject.py:2241
 msgid "Could not delete all interface  mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2260
+#: ../semanage/seobject.py:2255
 msgid "Could not list interfaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2285
+#: ../semanage/seobject.py:2280
 msgid "SELinux Interface"
 msgstr ""
 
-#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
 msgid "Context"
 msgstr ""
 
-#: ../semanage/seobject.py:2355
+#: ../semanage/seobject.py:2350
 #, python-format
 msgid "Target %s is not valid. Target is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2358
+#: ../semanage/seobject.py:2353
 #, python-format
 msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2361
+#: ../semanage/seobject.py:2356
 #, python-format
 msgid "Equivalence class for %s already exists"
 msgstr ""
 
-#: ../semanage/seobject.py:2367
+#: ../semanage/seobject.py:2362
 #, python-format
 msgid "File spec %s conflicts with equivalency rule '%s %s'"
 msgstr ""
 
-#: ../semanage/seobject.py:2378
+#: ../semanage/seobject.py:2373
 #, python-format
 msgid "Equivalence class for %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:2395
+#: ../semanage/seobject.py:2390
 #, python-format
 msgid "Could not set user in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2399
+#: ../semanage/seobject.py:2394
 #, python-format
 msgid "Could not set role in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
+#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
 #, python-format
 msgid "Could not set mls fields in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2410
+#: ../semanage/seobject.py:2405
 msgid "Invalid file specification"
 msgstr ""
 
-#: ../semanage/seobject.py:2412
+#: ../semanage/seobject.py:2407
 msgid "File specification can not include spaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2417
+#: ../semanage/seobject.py:2412
 #, python-format
 msgid ""
 "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
 msgstr ""
 
-#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
+#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
 #, python-format
 msgid "Type %s is invalid, must be a file or device type"
 msgstr ""
 
-#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
-#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
-#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
+#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
+#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
+#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
 #, python-format
 msgid "Could not check if file context for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2447
+#: ../semanage/seobject.py:2442
 #, python-format
 msgid "File context for %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2451
+#: ../semanage/seobject.py:2446
 #, python-format
 msgid "Could not create file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2459
+#: ../semanage/seobject.py:2454
 #, python-format
 msgid "Could not set type in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
-#: ../semanage/seobject.py:2543
+#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
+#: ../semanage/seobject.py:2538
 #, python-format
 msgid "Could not set file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2473
+#: ../semanage/seobject.py:2468
 #, python-format
 msgid "Could not add file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2492
+#: ../semanage/seobject.py:2487
 msgid "Requires setype, serange or seuser"
 msgstr ""
 
-#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
+#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
 #, python-format
 msgid "Could not query file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
+#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
 #, python-format
 msgid "File context for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2547
+#: ../semanage/seobject.py:2542
 #, python-format
 msgid "Could not modify file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2565
+#: ../semanage/seobject.py:2560
 msgid "Could not list the file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2579
+#: ../semanage/seobject.py:2574
 #, python-format
 msgid "Could not delete the file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2609
+#: ../semanage/seobject.py:2604
 #, python-format
 msgid "File context for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2615
+#: ../semanage/seobject.py:2610
 #, python-format
 msgid "Could not delete file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2632
+#: ../semanage/seobject.py:2627
 msgid "Could not list file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2636
+#: ../semanage/seobject.py:2631
 msgid "Could not list file contexts for home directories"
 msgstr ""
 
-#: ../semanage/seobject.py:2640
+#: ../semanage/seobject.py:2635
 msgid "Could not list local file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2672
 msgid "SELinux fcontext"
 msgstr ""
 
-#: ../semanage/seobject.py:2690
+#: ../semanage/seobject.py:2685
 msgid ""
 "\n"
 "SELinux Distribution fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2695
+#: ../semanage/seobject.py:2690
 msgid ""
 "\n"
 "SELinux Local fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
-#: ../semanage/seobject.py:2790
+#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
+#: ../semanage/seobject.py:2785
 #, python-format
 msgid "Could not check if boolean %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
+#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
 #, python-format
 msgid "Boolean %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2739
+#: ../semanage/seobject.py:2734
 #, python-format
 msgid "Could not query file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2744
+#: ../semanage/seobject.py:2739
 #, python-format
 msgid "You must specify one of the following values: %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2749
+#: ../semanage/seobject.py:2744
 #, python-format
 msgid "Could not set active value of boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2752
+#: ../semanage/seobject.py:2747
 #, python-format
 msgid "Could not modify boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2768
-#, python-format
-msgid "Bad format %s: Record %s"
+#: ../semanage/seobject.py:2763
+#, python-brace-format
+msgid "Bad format {filename}: Record {record}"
 msgstr ""
 
-#: ../semanage/seobject.py:2792
+#: ../semanage/seobject.py:2787
 #, python-format
 msgid "Boolean %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2796
+#: ../semanage/seobject.py:2791
 #, python-format
 msgid "Could not delete boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
+#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
 msgid "Could not list booleans"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "off"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "on"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "SELinux boolean"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "State"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "Default"
 msgstr ""
 
-#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
+#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
 #: ../sepolicy/sepolicy/sepolicy.glade:2510
 #: ../sepolicy/sepolicy/sepolicy.glade:5099
 msgid "Description"
@@ -1555,151 +1566,151 @@ msgstr ""
 msgid "Missing interface definition for %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:140
+#: ../sepolicy/sepolicy/generate.py:138
 msgid "Standard Init Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:141
+#: ../sepolicy/sepolicy/generate.py:139
 msgid "DBUS System Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:142
+#: ../sepolicy/sepolicy/generate.py:140
 msgid "Internet Services Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:143
+#: ../sepolicy/sepolicy/generate.py:141
 msgid "Web Application/Script (CGI)"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:144
+#: ../sepolicy/sepolicy/generate.py:142
 msgid "Sandbox"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:145
+#: ../sepolicy/sepolicy/generate.py:143
 msgid "User Application"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:146
+#: ../sepolicy/sepolicy/generate.py:144
 msgid "Existing Domain Type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:147
+#: ../sepolicy/sepolicy/generate.py:145
 msgid "Minimal Terminal Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:148
+#: ../sepolicy/sepolicy/generate.py:146
 msgid "Minimal X Windows Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:149
+#: ../sepolicy/sepolicy/generate.py:147
 msgid "Desktop Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:150
+#: ../sepolicy/sepolicy/generate.py:148
 msgid "Administrator Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:151
+#: ../sepolicy/sepolicy/generate.py:149
 msgid "Confined Root Administrator Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:152
+#: ../sepolicy/sepolicy/generate.py:150
 msgid "Module information for a new type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:158
+#: ../sepolicy/sepolicy/generate.py:156
 msgid "Valid Types:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:193
+#: ../sepolicy/sepolicy/generate.py:191
 #, python-format
 msgid "Ports must be numbers or ranges of numbers from 1 to %d "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:205
+#: ../sepolicy/sepolicy/generate.py:203
 msgid "You must enter a valid policy type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:208
+#: ../sepolicy/sepolicy/generate.py:206
 #, python-format
 msgid "You must enter a name for your policy module for your '%s'."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:346
+#: ../sepolicy/sepolicy/generate.py:344
 msgid ""
 "Name must be alphanumeric with no spaces. Consider using option \"-n "
 "MODULENAME\""
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:438
+#: ../sepolicy/sepolicy/generate.py:436
 msgid "User Role types can not be assigned executables."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:444
+#: ../sepolicy/sepolicy/generate.py:442
 msgid "Only Daemon apps can use an init script."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:462
+#: ../sepolicy/sepolicy/generate.py:460
 msgid "use_resolve must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:468
+#: ../sepolicy/sepolicy/generate.py:466
 msgid "use_syslog must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:474
+#: ../sepolicy/sepolicy/generate.py:472
 msgid "use_kerberos must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:480
+#: ../sepolicy/sepolicy/generate.py:478
 msgid "manage_krb5_rcache must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:510
+#: ../sepolicy/sepolicy/generate.py:508
 msgid "USER Types automatically get a tmp type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:847
+#: ../sepolicy/sepolicy/generate.py:845
 #, python-format
 msgid "'%s' policy modules require existing domains"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:872
+#: ../sepolicy/sepolicy/generate.py:870
 msgid "Type field required"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:885
+#: ../sepolicy/sepolicy/generate.py:883
 #, python-format
 msgid ""
 "You need to define a new type which ends with: \n"
 " %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1113
+#: ../sepolicy/sepolicy/generate.py:1111
 msgid "You must enter the executable path for your confined process"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1378
+#: ../sepolicy/sepolicy/generate.py:1376
 msgid "Created the following files:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1379
+#: ../sepolicy/sepolicy/generate.py:1377
 msgid "Type Enforcement file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1380
+#: ../sepolicy/sepolicy/generate.py:1378
 msgid "Interface file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1381
+#: ../sepolicy/sepolicy/generate.py:1379
 msgid "File Contexts file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1383
+#: ../sepolicy/sepolicy/generate.py:1381
 msgid "Spec file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1384
+#: ../sepolicy/sepolicy/generate.py:1382
 msgid "Setup Script"
 msgstr ""
 
@@ -2367,29 +2378,29 @@ msgstr ""
 msgid "named pipe"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:148
+#: ../sepolicy/sepolicy/__init__.py:149
 msgid "No SELinux Policy installed"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:184
+#: ../sepolicy/sepolicy/__init__.py:185
 #, python-format
 msgid "Failed to read %s policy file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:470
+#: ../sepolicy/sepolicy/__init__.py:471
 #, python-format
 msgid "-- Allowed %s [ %s ]"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:896
+#: ../sepolicy/sepolicy/__init__.py:897
 msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1221
+#: ../sepolicy/sepolicy/__init__.py:1230
 msgid "unknown"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1230
+#: ../sepolicy/sepolicy/__init__.py:1239
 #, python-brace-format
 msgid "Allow {subject} to {rest}"
 msgstr ""
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* (no subject)
  2023-06-13  9:42         ` [PATCH v3 4/4] python: update python.pot Petr Lautrbach
@ 2023-06-13 11:20           ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 1/4] python: improve format strings for proper localization Petr Lautrbach
                               ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13 11:20 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis


Fixed missing ')' in 1/4:

    python/chcat/chcat:125 print(_("{target} is already in {category}").format(target=f, category=orig)


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v4 1/4] python: improve format strings for proper localization
  2023-06-13 11:20           ` Petr Lautrbach
@ 2023-06-13 11:20             ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 2/4] python: Drop hard formating from localized strings Petr Lautrbach
                               ` (2 subsequent siblings)
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13 11:20 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

If a string contains more than one unnamed argument it's hard for
translators to proper localize as they don't know which value is
represented by a unnamed argument. It also blocks them to use a
different order of arguments which would make better sense in other
languages.

Fixes:

    $ xgettext --default-domain=python -L Python --keyword=_ --keyword=N_ ../audit2allow/audit2allow ../chcat/chcat ../semanage/semanage ../semanage/seobject.py ../sepolgen/src/sepolgen/interfaces.py ../sepolicy/sepolicy/generate.py ../sepolicy/sepolicy/gui.py ../sepolicy/sepolicy/__init__.py ../sepolicy/sepolicy/interface.py ../sepolicy/sepolicy.py
    ../chcat/chcat:220: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                 The translator cannot reorder the arguments.
                                 Please consider using a format string with named arguments,
                                 and a mapping instead of a tuple for the arguments.
    ../semanage/seobject.py:1178: warning: 'msgid' format string with unnamed arguments cannot be properly localized:
                                           The translator cannot reorder the arguments.
                                           Please consider using a format string with named arguments,
                                           and a mapping instead of a tuple for the arguments.
    ...

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/chcat/chcat          |   6 +-
 python/semanage/seobject.py | 130 ++++++++++++++++++------------------
 2 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/python/chcat/chcat b/python/chcat/chcat
index 68718ec5f102..c4f592291821 100755
--- a/python/chcat/chcat
+++ b/python/chcat/chcat
@@ -125,7 +125,7 @@ def chcat_add(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat in clist[1:]:
-                print(_("%s is already in %s") % (f, orig))
+                print(_("{target} is already in {category}").format(target=f, category=orig))
                 continue
             clist.append(cat)
             cats = clist[1:]
@@ -207,7 +207,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
 
         if len(clist) > 1:
             if cat not in clist[1:]:
-                print(_("%s is not in %s") % (f, orig))
+                print(_("{target} is not in {category}").format(target=f, category=orig))
                 continue
             clist.remove(cat)
             if len(clist) > 1:
@@ -217,7 +217,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
             else:
                 cat = ""
         else:
-            print(_("%s is not in %s") % (f, orig))
+            print(_("{target} is not in {category}").format(target=f, category=orig))
             continue
 
         if len(cat) == 0:
diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index d82da4942987..2b1eb44ce8a3 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -843,7 +843,7 @@ class seluserRecords(semanageRecords):
         for r in roles:
             rc = semanage_user_add_role(self.sh, u, r)
             if rc < 0:
-                raise ValueError(_("Could not add role %s for %s") % (r, name))
+                raise ValueError(_("Could not add role {role} for {name}").format(role=r, name=name))
 
         if is_mls_enabled == 1:
             rc = semanage_user_set_mlsrange(self.sh, u, serange)
@@ -855,7 +855,7 @@ class seluserRecords(semanageRecords):
                 raise ValueError(_("Could not set MLS level for %s") % name)
         rc = semanage_user_set_prefix(self.sh, u, prefix)
         if rc < 0:
-            raise ValueError(_("Could not add prefix %s for %s") % (r, prefix))
+            raise ValueError(_("Could not add prefix {prefix} for {role}").format(role=r, prefix=prefix))
         (rc, key) = semanage_user_key_extract(self.sh, u)
         if rc < 0:
             raise ValueError(_("Could not extract key for %s") % name)
@@ -1088,7 +1088,7 @@ class portRecords(semanageRecords):
 
         (rc, k) = semanage_port_key_create(self.sh, low, high, proto_d)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create a key for {proto}/{port}").format(proto=proto, port=port))
         return (k, proto_d, low, high)
 
     def __add(self, port, proto, serange, type):
@@ -1110,44 +1110,44 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if exists:
-            raise ValueError(_("Port %s/%s already defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} already defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create port for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create port for {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_set_proto(p, proto_d)
         semanage_port_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not create context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set user in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set role in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set type in port context for {proto}/{port}").format(proto=proto, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in port context for %s/%s") % (proto, port))
+                raise ValueError(_("Could not set mls fields in port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set port context for %s/%s") % (proto, port))
+            raise ValueError(_("Could not set port context for {proto}/{port}").format(proto=proto, port=port))
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add port %s/%s") % (proto, port))
+            raise ValueError(_("Could not add port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_context_free(con)
         semanage_port_key_free(k)
@@ -1175,13 +1175,13 @@ class portRecords(semanageRecords):
 
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, p) = semanage_port_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query port %s/%s") % (proto, port))
+            raise ValueError(_("Could not query port {proto}/{port}").format(proto=proto, port=port))
 
         con = semanage_port_get_con(p)
 
@@ -1195,7 +1195,7 @@ class portRecords(semanageRecords):
 
         rc = semanage_port_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify port %s/%s") % (proto, port))
+            raise ValueError(_("Could not modify port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
         semanage_port_free(p)
@@ -1241,19 +1241,19 @@ class portRecords(semanageRecords):
         (k, proto_d, low, high) = self.__genkey(port, proto)
         (rc, exists) = semanage_port_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is not defined") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is not defined").format(proto=proto, port=port))
 
         (rc, exists) = semanage_port_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if port %s/%s is defined") % (proto, port))
+            raise ValueError(_("Could not check if port {proto}/{port} is defined").format(proto=proto, port=port))
         if not exists:
-            raise ValueError(_("Port %s/%s is defined in policy, cannot be deleted") % (proto, port))
+            raise ValueError(_("Port {proto}/{port} is defined in policy, cannot be deleted").format(proto=proto, port=port))
 
         rc = semanage_port_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete port %s/%s") % (proto, port))
+            raise ValueError(_("Could not delete port {proto}/{port}").format(proto=proto, port=port))
 
         semanage_port_key_free(k)
 
@@ -1362,7 +1362,7 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, k) = semanage_ibpkey_key_create(self.sh, subnet_prefix, low, high)
         if rc < 0:
-            raise ValueError(_("Could not create a key for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create a key for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
         return (k, subnet_prefix, low, high)
 
     def __add(self, pkey, subnet_prefix, serange, type):
@@ -1384,44 +1384,44 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").formnat(subnet_prefix=subnet_prefix, pkey=pkey))
         if exists:
-            raise ValueError(_("ibpkey %s/%s already defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} already defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibpkey for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create ibpkey for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_set_subnet_prefix(self.sh, p, subnet_prefix)
         semanage_ibpkey_set_range(p, low, high)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not create context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set user in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set role in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set type in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibpkey context for %s/%s") % (subnet_prefix, pkey))
+                raise ValueError(_("Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibpkey context for %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not set ibpkey context for {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not add ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_context_free(con)
         semanage_ibpkey_key_free(k)
@@ -1448,13 +1448,13 @@ class ibpkeyRecords(semanageRecords):
 
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, p) = semanage_ibpkey_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not query ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         con = semanage_ibpkey_get_con(p)
 
@@ -1465,7 +1465,7 @@ class ibpkeyRecords(semanageRecords):
 
         rc = semanage_ibpkey_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not modify ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
         semanage_ibpkey_free(p)
@@ -1502,19 +1502,19 @@ class ibpkeyRecords(semanageRecords):
         (k, subnet_prefix, low, high) = self.__genkey(pkey, subnet_prefix)
         (rc, exists) = semanage_ibpkey_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is not defined") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is not defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         (rc, exists) = semanage_ibpkey_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibpkey %s/%s is defined") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not check if ibpkey {subnet_prefix}/{pkey} is defined").format(subnet_prefix=subnet_prefix, pkey=pkey))
         if not exists:
-            raise ValueError(_("ibpkey %s/%s is defined in policy, cannot be deleted") % (subnet_prefix, pkey))
+            raise ValueError(_("ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         rc = semanage_ibpkey_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibpkey %s/%s") % (subnet_prefix, pkey))
+            raise ValueError(_("Could not delete ibpkey {subnet_prefix}/{pkey}").format(subnet_prefix=subnet_prefix, pkey=pkey))
 
         semanage_ibpkey_key_free(k)
 
@@ -1617,7 +1617,7 @@ class ibendportRecords(semanageRecords):
 
         (rc, k) = semanage_ibendport_key_create(self.sh, ibdev_name, port)
         if rc < 0:
-            raise ValueError(_("Could not create a key for ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not create a key for ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
         return (k, ibdev_name, port)
 
     def __add(self, ibendport, ibdev_name, serange, type):
@@ -1638,44 +1638,44 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, port))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{port} is defined").format(ibdev_name=ibdev_name, port=port))
         if exists:
-            raise ValueError(_("ibendport %s/%s already defined") % (ibdev_name, port))
+            raise ValueError(_("ibendport {ibdev_name}/{port} already defined").format(ibdev_name=ibdev_name, port=port))
 
         (rc, p) = semanage_ibendport_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create ibendport for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create ibendport for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_ibendport_set_ibdev_name(self.sh, p, ibdev_name)
         semanage_ibendport_set_port(p, port)
         (rc, con) = semanage_context_create(self.sh)
         if rc < 0:
-            raise ValueError(_("Could not create context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not create context for {ibendport}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_user(self.sh, con, "system_u")
         if rc < 0:
-            raise ValueError(_("Could not set user in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set user in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_role(self.sh, con, "object_r")
         if rc < 0:
-            raise ValueError(_("Could not set role in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set role in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_context_set_type(self.sh, con, type)
         if rc < 0:
-            raise ValueError(_("Could not set type in ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set type in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         if (is_mls_enabled == 1) and (serange != ""):
             rc = semanage_context_set_mls(self.sh, con, serange)
             if rc < 0:
-                raise ValueError(_("Could not set mls fields in ibendport context for %s/%s") % (ibdev_name, port))
+                raise ValueError(_("Could not set mls fields in ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_set_con(self.sh, p, con)
         if rc < 0:
-            raise ValueError(_("Could not set ibendport context for %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not set ibendport context for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not add ibendport %s/%s") % (ibdev_name, port))
+            raise ValueError(_("Could not add ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
         semanage_context_free(con)
         semanage_ibendport_key_free(k)
@@ -1702,13 +1702,13 @@ class ibendportRecords(semanageRecords):
 
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, p) = semanage_ibendport_query(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not query ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not query ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         con = semanage_ibendport_get_con(p)
 
@@ -1719,7 +1719,7 @@ class ibendportRecords(semanageRecords):
 
         rc = semanage_ibendport_modify_local(self.sh, k, p)
         if rc < 0:
-            raise ValueError(_("Could not modify ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not modify ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
         semanage_ibendport_free(p)
@@ -1741,11 +1741,11 @@ class ibendportRecords(semanageRecords):
             port = semanage_ibendport_get_port(ibendport)
             (k, ibdev_name, port) = self.__genkey(str(port), ibdev_name)
             if rc < 0:
-                raise ValueError(_("Could not create a key for %s/%d") % (ibdevname, port))
+                raise ValueError(_("Could not create a key for {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
 
             rc = semanage_ibendport_del_local(self.sh, k)
             if rc < 0:
-                raise ValueError(_("Could not delete the ibendport %s/%d") % (ibdev_name, port))
+                raise ValueError(_("Could not delete the ibendport {ibdev_name}/{port}").format(ibdev_name=ibdev_name, port=port))
             semanage_ibendport_key_free(k)
 
         self.commit()
@@ -1754,19 +1754,19 @@ class ibendportRecords(semanageRecords):
         (k, ibdev_name, port) = self.__genkey(ibendport, ibdev_name)
         (rc, exists) = semanage_ibendport_exists(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is not defined") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is not defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         (rc, exists) = semanage_ibendport_exists_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not check if ibendport %s/%s is defined") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not check if ibendport {ibdev_name}/{ibendport} is defined").format(ibdev_name=ibdev_name, ibendport=ibendport))
         if not exists:
-            raise ValueError(_("ibendport %s/%s is defined in policy, cannot be deleted") % (ibdev_name, ibendport))
+            raise ValueError(_("ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         rc = semanage_ibendport_del_local(self.sh, k)
         if rc < 0:
-            raise ValueError(_("Could not delete ibendport %s/%s") % (ibdev_name, ibendport))
+            raise ValueError(_("Could not delete ibendport {ibdev_name}/{ibendport}").format(ibdev_name=ibdev_name, ibendport=ibendport))
 
         semanage_ibendport_key_free(k)
 
@@ -2765,7 +2765,7 @@ class booleanRecords(semanageRecords):
                 try:
                     boolname, val = b.split("=")
                 except ValueError:
-                    raise ValueError(_("Bad format %s: Record %s" % (name, b)))
+                    raise ValueError(_("Bad format {filename}: Record {record}").format(filename=name, record=b))
                 self.__mod(boolname.strip(), val.strip())
             fd.close()
         else:
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v4 2/4] python: Drop hard formating from localized strings
  2023-06-13 11:20           ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 1/4] python: improve format strings for proper localization Petr Lautrbach
@ 2023-06-13 11:20             ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13 11:20 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

It confuses translators and new lines are dropped by parser module anyway.

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/audit2allow/audit2allow | 14 ++++++--
 python/semanage/semanage       | 60 +++++++++++++---------------------
 2 files changed, 34 insertions(+), 40 deletions(-)

diff --git a/python/audit2allow/audit2allow b/python/audit2allow/audit2allow
index 5587a2dbb006..35b0b151ac86 100644
--- a/python/audit2allow/audit2allow
+++ b/python/audit2allow/audit2allow
@@ -234,9 +234,17 @@ class AuditToPolicy:
             print(e)
             sys.exit(1)
 
-        sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
-        sys.stdout.write((_("To make this policy package active, execute:" +
-                            "\n\nsemodule -i %s\n\n") % packagename))
+        sys.stdout.write(
+"""******************** {important} ***********************
+{text}
+
+semodule -i {packagename}
+
+""".format(
+    important=_("IMPORTANT"),
+    text=_("To make this policy package active, execute:"),
+    packagename=packagename
+))
 
     def __output_audit2why(self):
         import selinux
diff --git a/python/semanage/semanage b/python/semanage/semanage
index e0bd98a95c77..4fdb490f7df4 100644
--- a/python/semanage/semanage
+++ b/python/semanage/semanage
@@ -238,30 +238,22 @@ def parser_add_level(parser, name):
 
 
 def parser_add_range(parser, name):
-    parser.add_argument('-r', '--range', default='',
-                        help=_('''
-MLS/MCS Security Range (MLS/MCS Systems only)
-SELinux Range  for SELinux login mapping
-defaults to the SELinux user record range.
-SELinux Range for SELinux user defaults to s0.
-'''))
+    parser.add_argument('-r', '--range', default='', help=_(
+        "MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
+SELinux Range for SELinux user defaults to s0."
+    ))
 
 
 def parser_add_proto(parser, name):
-    parser.add_argument('-p', '--proto', help=_('''
-    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet protocol
-    version for the specified node (ipv4|ipv6).
-'''))
+    parser.add_argument('-p', '--proto', help=_(
+        "Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6)."
+    ))
 
 def parser_add_subnet_prefix(parser, name):
-    parser.add_argument('-x', '--subnet_prefix', help=_('''
-    Subnet prefix for  the specified infiniband ibpkey.
-'''))
+    parser.add_argument('-x', '--subnet_prefix', help=_('Subnet prefix for  the specified infiniband ibpkey.'))
 
 def parser_add_ibdev_name(parser, name):
-    parser.add_argument('-z', '--ibdev_name', help=_('''
-    Name for the specified infiniband end port.
-'''))
+    parser.add_argument('-z', '--ibdev_name', help=_("Name for the specified infiniband end port."))
 
 def parser_add_modify(parser, name):
     parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name)
@@ -348,15 +340,6 @@ def handleFcontext(args):
 
 
 def setupFcontextParser(subparsers):
-    ftype_help = '''
-File Type.   This is used with fcontext.  Requires a  file  type
-as  shown  in  the  mode  field by ls, e.g. use d to match only
-directories or f to match only regular files. The following
-file type options can be passed:
-f (regular file),d (directory),c (character device),
-b (block device),s (socket),l (symbolic link),p (named pipe)
-If you do not specify a file type, the file type will default to "all files".
-'''
     generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict)
     fcontextParser = subparsers.add_parser('fcontext', usage=generate_usage, help=_("Manage file context mapping definitions"))
     parser_add_locallist(fcontextParser, "fcontext")
@@ -372,11 +355,16 @@ If you do not specify a file type, the file type will default to "all files".
     parser_add_extract(fcontext_action, "fcontext")
     parser_add_deleteall(fcontext_action, "fcontext")
 
-    fcontextParser.add_argument('-e', '--equal', help=_('''Substitute  target  path with sourcepath when generating default
-                                                                  label.  This is used with fcontext. Requires source  and  target
-                                                                  path  arguments.  The context labeling for the target subtree is
-                                                                  made equivalent to that defined for the source.'''))
-    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help))
+    fcontextParser.add_argument('-e', '--equal', help=_(
+        'Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
+path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.'
+    ))
+    fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(
+        'File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use d to match only \
+directories or f to match only regular files. The following file type options can be passed: f (regular file), d (directory), \
+c (character device), b (block device), s (socket), l (symbolic link), p (named pipe). \
+If you do not specify a file type, the file type will default to "all files".'
+    ))
     parser_add_seuser(fcontextParser, "fcontext")
     parser_add_type(fcontextParser, "fcontext")
     parser_add_range(fcontextParser, "fcontext")
@@ -426,9 +414,7 @@ def setupUserParser(subparsers):
     parser_add_range(userParser, "user")
     userParser.add_argument('-R', '--roles', default=[],
                             action=CheckRole,
-                            help=_('''
-SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.
-'''))
+                            help=_("SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times."))
     userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS)
     userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name'))
     userParser.set_defaults(func=handleUser)
@@ -901,9 +887,9 @@ def setupImportParser(subparsers):
 def createCommandParser():
     commandParser = seParser(prog='semanage',
                              formatter_class=argparse.ArgumentDefaultsHelpFormatter,
-                             description='''semanage is used to configure certain elements
-                                                            of SELinux policy with-out requiring modification
-                                                            to or recompilation from policy source.''')
+                             description=_(
+            "semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source."
+                             ))
 
     #To add a new subcommand define the parser for it in a function above and call it here.
     subparsers = commandParser.add_subparsers(dest='subcommand')
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v4 3/4] semanage: Drop unnecessary import from seobject
  2023-06-13 11:20           ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 1/4] python: improve format strings for proper localization Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 2/4] python: Drop hard formating from localized strings Petr Lautrbach
@ 2023-06-13 11:20             ` Petr Lautrbach
  2023-06-13 11:20             ` [PATCH v4 4/4] python: update python.pot Petr Lautrbach
  3 siblings, 0 replies; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13 11:20 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

sepolgen.module is not used for permissive domains

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/semanage/seobject.py | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
index 2b1eb44ce8a3..361205d11c10 100644
--- a/python/semanage/seobject.py
+++ b/python/semanage/seobject.py
@@ -504,11 +504,6 @@ class permissiveRecords(semanageRecords):
             print(t)
 
     def add(self, type):
-        try:
-            import sepolgen.module as module
-        except ImportError:
-            raise ValueError(_("The sepolgen python module is required to setup permissive domains.\nIn some distributions it is included in the policycoreutils-devel package.\n# yum install policycoreutils-devel\nOr similar for your distro."))
-
         name = "permissive_%s" % type
         modtxt = "(typepermissive %s)" % type
 
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v4 4/4] python: update python.pot
  2023-06-13 11:20           ` Petr Lautrbach
                               ` (2 preceding siblings ...)
  2023-06-13 11:20             ` [PATCH v4 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
@ 2023-06-13 11:20             ` Petr Lautrbach
  2023-06-13 12:37               ` Vit Mojzis
  3 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-13 11:20 UTC (permalink / raw)
  To: selinux; +Cc: vmojzis, Petr Lautrbach

Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
---
 python/po/python.pot | 963 ++++++++++++++++++++++---------------------
 1 file changed, 487 insertions(+), 476 deletions(-)

diff --git a/python/po/python.pot b/python/po/python.pot
index 16d04eb0f18e..435a1b764e34 100644
--- a/python/po/python.pot
+++ b/python/po/python.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-18 11:57+0100\n"
+"POT-Creation-Date: 2023-06-12 18:13+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,17 +17,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../audit2allow/audit2allow:239
-msgid "******************** IMPORTANT ***********************\n"
+#: ../audit2allow/audit2allow:244
+msgid "IMPORTANT"
 msgstr ""
 
-#: ../audit2allow/audit2allow:240
-#, python-format
-msgid ""
-"To make this policy package active, execute:\n"
-"\n"
-"semodule -i %s\n"
-"\n"
+#: ../audit2allow/audit2allow:245
+msgid "To make this policy package active, execute:"
 msgstr ""
 
 #: ../chcat/chcat:111 ../chcat/chcat:191
@@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
 msgstr ""
 
 #: ../chcat/chcat:128
-#, python-format
-msgid "%s is already in %s"
+#, python-brace-format
+msgid "{target} is already in {category}"
 msgstr ""
 
 #: ../chcat/chcat:210 ../chcat/chcat:220
-#, python-format
-msgid "%s is not in %s"
+#, python-brace-format
+msgid "{target} is not in {category}"
 msgstr ""
 
 #: ../chcat/chcat:291 ../chcat/chcat:296
@@ -152,218 +147,222 @@ msgstr ""
 
 #: ../semanage/semanage:242
 msgid ""
-"\n"
-"MLS/MCS Security Range (MLS/MCS Systems only)\n"
-"SELinux Range  for SELinux login mapping\n"
-"defaults to the SELinux user record range.\n"
-"SELinux Range for SELinux user defaults to s0.\n"
+"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
+"login mapping defaults to the SELinux user record range. SELinux Range for "
+"SELinux user defaults to s0."
 msgstr ""
 
-#: ../semanage/semanage:251
+#: ../semanage/semanage:249
 msgid ""
-"\n"
-"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
-"protocol\n"
-"    version for the specified node (ipv4|ipv6).\n"
+"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
+"version for the specified node (ipv4|ipv6)."
 msgstr ""
 
-#: ../semanage/semanage:257
-msgid ""
-"\n"
-"    Subnet prefix for  the specified infiniband ibpkey.\n"
+#: ../semanage/semanage:253
+msgid "Subnet prefix for  the specified infiniband ibpkey."
 msgstr ""
 
-#: ../semanage/semanage:262
-msgid ""
-"\n"
-"    Name for the specified infiniband end port.\n"
+#: ../semanage/semanage:256
+msgid "Name for the specified infiniband end port."
 msgstr ""
 
-#: ../semanage/semanage:267
+#: ../semanage/semanage:259
 #, python-format
 msgid "Modify a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:271
+#: ../semanage/semanage:263
 #, python-format
 msgid "List records of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:275
+#: ../semanage/semanage:267
 #, python-format
 msgid "Delete a record of the %s object type"
 msgstr ""
 
-#: ../semanage/semanage:279
+#: ../semanage/semanage:271
 msgid "Extract customizable commands, for use within a transaction"
 msgstr ""
 
-#: ../semanage/semanage:283
+#: ../semanage/semanage:275
 #, python-format
 msgid "Remove all %s objects local customizations"
 msgstr ""
 
-#: ../semanage/semanage:287
+#: ../semanage/semanage:279
 msgid "SELinux user name"
 msgstr ""
 
-#: ../semanage/semanage:292
+#: ../semanage/semanage:284
 msgid "Manage login mappings between linux users and SELinux confined users"
 msgstr ""
 
-#: ../semanage/semanage:309
+#: ../semanage/semanage:301
 #, python-format
 msgid "login_name | %%groupname"
 msgstr ""
 
-#: ../semanage/semanage:361
+#: ../semanage/semanage:344
 msgid "Manage file context mapping definitions"
 msgstr ""
 
-#: ../semanage/semanage:375
+#: ../semanage/semanage:359
+msgid ""
+"Substitute target path with sourcepath when generating default label. This "
+"is used with fcontext. Requires source and target path arguments. The "
+"context labeling for the target subtree is made equivalent to that defined "
+"for the source."
+msgstr ""
+
+#: ../semanage/semanage:363
 msgid ""
-"Substitute  target  path with sourcepath when generating default\n"
-"                                                                  label.  "
-"This is used with fcontext. Requires source  and  target\n"
-"                                                                  path  "
-"arguments.  The context labeling for the target subtree is\n"
-"                                                                  made "
-"equivalent to that defined for the source."
+"File Type. This is used with fcontext. Requires a file type as shown in the "
+"mode field by ls, e.g. use d to match only directories or f to match only "
+"regular files. The following file type options can be passed: f (regular "
+"file), d (directory), c (character device), b (block device), s (socket), l "
+"(symbolic link), p (named pipe). If you do not specify a file type, the file "
+"type will default to \"all files\"."
 msgstr ""
 
-#: ../semanage/semanage:383
+#: ../semanage/semanage:371
 msgid ""
 "Path to be labeled (may be in the form of a Perl compatible regular "
 "expression)"
 msgstr ""
 
-#: ../semanage/semanage:411
+#: ../semanage/semanage:399
 msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
 msgstr ""
 
-#: ../semanage/semanage:429
+#: ../semanage/semanage:417
 msgid ""
-"\n"
-"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
-"spaces. Or specify -R multiple times.\n"
+"SELinux Roles. You must enclose multiple roles within quotes, separate by "
+"spaces. Or specify -R multiple times."
 msgstr ""
 
-#: ../semanage/semanage:433
+#: ../semanage/semanage:419
 msgid "selinux_name"
 msgstr ""
 
-#: ../semanage/semanage:461
+#: ../semanage/semanage:447
 msgid "Manage network port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:477
+#: ../semanage/semanage:463
 msgid "port | port_range"
 msgstr ""
 
-#: ../semanage/semanage:506
+#: ../semanage/semanage:492
 msgid "Manage infiniband ibpkey type definitions"
 msgstr ""
 
-#: ../semanage/semanage:522
+#: ../semanage/semanage:508
 msgid "pkey | pkey_range"
 msgstr ""
 
-#: ../semanage/semanage:549
+#: ../semanage/semanage:535
 msgid "Manage infiniband end port type definitions"
 msgstr ""
 
-#: ../semanage/semanage:565
+#: ../semanage/semanage:551
 msgid "ibendport"
 msgstr ""
 
-#: ../semanage/semanage:592
+#: ../semanage/semanage:578
 msgid "Manage network interface type definitions"
 msgstr ""
 
-#: ../semanage/semanage:607
+#: ../semanage/semanage:593
 msgid "interface_spec"
 msgstr ""
 
-#: ../semanage/semanage:631
+#: ../semanage/semanage:617
 msgid "Manage SELinux policy modules"
 msgstr ""
 
-#: ../semanage/semanage:642
+#: ../semanage/semanage:628
 msgid "Add a module"
 msgstr ""
 
-#: ../semanage/semanage:643
+#: ../semanage/semanage:629
 msgid "Remove a module"
 msgstr ""
 
-#: ../semanage/semanage:644
+#: ../semanage/semanage:630
 msgid "Disable a module"
 msgstr ""
 
-#: ../semanage/semanage:645
+#: ../semanage/semanage:631
 msgid "Enable a module"
 msgstr ""
 
-#: ../semanage/semanage:672
+#: ../semanage/semanage:658
 msgid "Manage network node type definitions"
 msgstr ""
 
-#: ../semanage/semanage:686
+#: ../semanage/semanage:672
 msgid "Network Mask"
 msgstr ""
 
-#: ../semanage/semanage:690
+#: ../semanage/semanage:676
 msgid "node"
 msgstr ""
 
-#: ../semanage/semanage:715
+#: ../semanage/semanage:701
 msgid "Manage booleans to selectively enable functionality"
 msgstr ""
 
-#: ../semanage/semanage:720
+#: ../semanage/semanage:706
 msgid "boolean"
 msgstr ""
 
-#: ../semanage/semanage:730
+#: ../semanage/semanage:716
 msgid "Enable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:731
+#: ../semanage/semanage:717
 msgid "Disable the boolean"
 msgstr ""
 
-#: ../semanage/semanage:752
+#: ../semanage/semanage:738
 msgid "semanage permissive: error: the following argument is required: type\n"
 msgstr ""
 
-#: ../semanage/semanage:756
+#: ../semanage/semanage:742
 msgid "Manage process type enforcement mode"
 msgstr ""
 
-#: ../semanage/semanage:768 ../semanage/seobject.py:2677
+#: ../semanage/semanage:754 ../semanage/seobject.py:2672
 msgid "type"
 msgstr ""
 
-#: ../semanage/semanage:779
+#: ../semanage/semanage:765
 msgid "Disable/Enable dontaudit rules in policy"
 msgstr ""
 
-#: ../semanage/semanage:799
+#: ../semanage/semanage:785
 msgid "Output local customizations"
 msgstr ""
 
-#: ../semanage/semanage:801
+#: ../semanage/semanage:787
 msgid "Output file"
 msgstr ""
 
-#: ../semanage/semanage:894
+#: ../semanage/semanage:880
 msgid "Import local customizations"
 msgstr ""
 
-#: ../semanage/semanage:897
+#: ../semanage/semanage:883
 msgid "Input file"
 msgstr ""
 
+#: ../semanage/semanage:891
+msgid ""
+"semanage is used to configure certain elements of SELinux policy with-out "
+"requiring modification or recompilation from policy source."
+msgstr ""
+
 #: ../semanage/seobject.py:279
 msgid "Could not create semanage handle"
 msgstr ""
@@ -485,123 +484,115 @@ msgstr ""
 msgid "Customized Permissive Types"
 msgstr ""
 
-#: ../semanage/seobject.py:510
-msgid ""
-"The sepolgen python module is required to setup permissive domains.\n"
-"In some distributions it is included in the policycoreutils-devel package.\n"
-"# yum install policycoreutils-devel\n"
-"Or similar for your distro."
-msgstr ""
-
-#: ../semanage/seobject.py:520
+#: ../semanage/seobject.py:515
 #, python-format
 msgid "Could not set permissive domain %s (module installation failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:526
+#: ../semanage/seobject.py:521
 #, python-format
 msgid "Could not remove permissive domain %s (remove failed)"
 msgstr ""
 
-#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
-#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
-#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
-#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
-#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
-#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
-#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
+#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
+#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
+#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
+#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
+#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
+#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
+#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
 #, python-format
 msgid "Could not create a key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
-#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
+#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
+#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
 #, python-format
 msgid "Could not check if login mapping for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:569
+#: ../semanage/seobject.py:564
 #, python-format
 msgid "Login mapping for %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:574
+#: ../semanage/seobject.py:569
 #, python-format
 msgid "Linux Group %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:579
+#: ../semanage/seobject.py:574
 #, python-format
 msgid "Linux User %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:583
+#: ../semanage/seobject.py:578
 #, python-format
 msgid "Could not create login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
+#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
 #, python-format
 msgid "Could not set name for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
+#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
 #, python-format
 msgid "Could not set MLS range for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:596
+#: ../semanage/seobject.py:591
 #, python-format
 msgid "Could not set SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:600
+#: ../semanage/seobject.py:595
 #, python-format
 msgid "Could not add login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:616
+#: ../semanage/seobject.py:611
 msgid "Requires seuser or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
+#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
 #, python-format
 msgid "Login mapping for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:643
+#: ../semanage/seobject.py:638
 #, python-format
 msgid "Could not query seuser for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:658
+#: ../semanage/seobject.py:653
 #, python-format
 msgid "Could not modify login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:690
+#: ../semanage/seobject.py:685
 #, python-format
 msgid "Login mapping for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:694
+#: ../semanage/seobject.py:689
 #, python-format
 msgid "Could not delete login mapping for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
-#: ../semanage/seobject.py:991
+#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
+#: ../semanage/seobject.py:986
 msgid "Could not list login mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
 #: ../sepolicy/sepolicy/sepolicy.glade:1156
 #: ../sepolicy/sepolicy/sepolicy.glade:3138
 msgid "Login Name"
 msgstr ""
 
-#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:1182
 #: ../sepolicy/sepolicy/sepolicy.glade:3156
 #: ../sepolicy/sepolicy/sepolicy.glade:3242
@@ -609,938 +600,958 @@ msgstr ""
 msgid "SELinux User"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "MLS/MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:772
+#: ../semanage/seobject.py:767
 msgid "Service"
 msgstr ""
 
-#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
-#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
-#: ../semanage/seobject.py:958
+#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
+#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
+#: ../semanage/seobject.py:953
 #, python-format
 msgid "Could not check if SELinux user %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
-#: ../semanage/seobject.py:964
+#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
+#: ../semanage/seobject.py:959
 #, python-format
 msgid "Could not query user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:823
+#: ../semanage/seobject.py:818
 #, python-format
 msgid "You must add at least one role for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:833
+#: ../semanage/seobject.py:828
 #, python-format
 msgid "SELinux user %s is already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:837
+#: ../semanage/seobject.py:832
 #, python-format
 msgid "Could not create SELinux user for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:846
-#, python-format
-msgid "Could not add role %s for %s"
+#: ../semanage/seobject.py:841
+#, python-brace-format
+msgid "Could not add role {role} for {name}"
 msgstr ""
 
-#: ../semanage/seobject.py:855
+#: ../semanage/seobject.py:850
 #, python-format
 msgid "Could not set MLS level for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:858
-#, python-format
-msgid "Could not add prefix %s for %s"
+#: ../semanage/seobject.py:853
+#, python-brace-format
+msgid "Could not add prefix {prefix} for {role}"
 msgstr ""
 
-#: ../semanage/seobject.py:861
+#: ../semanage/seobject.py:856
 #, python-format
 msgid "Could not extract key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:865
+#: ../semanage/seobject.py:860
 #, python-format
 msgid "Could not add SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:886
+#: ../semanage/seobject.py:881
 msgid "Requires prefix, roles, level or range"
 msgstr ""
 
-#: ../semanage/seobject.py:888
+#: ../semanage/seobject.py:883
 msgid "Requires prefix or roles"
 msgstr ""
 
-#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
+#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
 #, python-format
 msgid "SELinux user %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:927
+#: ../semanage/seobject.py:922
 #, python-format
 msgid "Could not modify SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:960
+#: ../semanage/seobject.py:955
 #, python-format
 msgid "SELinux user %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:971
+#: ../semanage/seobject.py:966
 #, python-format
 msgid "Could not delete SELinux user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1009
+#: ../semanage/seobject.py:1004
 msgid "Could not list SELinux users"
 msgstr ""
 
-#: ../semanage/seobject.py:1015
+#: ../semanage/seobject.py:1010
 #, python-format
 msgid "Could not list roles for user %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "Labeling"
 msgstr ""
 
-#: ../semanage/seobject.py:1040
+#: ../semanage/seobject.py:1035
 msgid "MLS/"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Level"
 msgstr ""
 
-#: ../semanage/seobject.py:1041
+#: ../semanage/seobject.py:1036
 msgid "MCS Range"
 msgstr ""
 
-#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
+#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
 #: ../sepolicy/sepolicy/sepolicy.glade:3262
 #: ../sepolicy/sepolicy/sepolicy.glade:5233
 #: ../sepolicy/sepolicy/sepolicy.glade:5382
 msgid "SELinux Roles"
 msgstr ""
 
-#: ../semanage/seobject.py:1071
+#: ../semanage/seobject.py:1066
 msgid "Protocol has to be one of udp, tcp, dccp or sctp"
 msgstr ""
 
-#: ../semanage/seobject.py:1073
+#: ../semanage/seobject.py:1068
 msgid "Port is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1087
+#: ../semanage/seobject.py:1082
 msgid "Invalid Port"
 msgstr ""
 
-#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
-#, python-format
-msgid "Could not create a key for %s/%s"
+#: ../semanage/seobject.py:1086
+#, python-brace-format
+msgid "Could not create a key for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
-#: ../semanage/seobject.py:1631
+#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
+#: ../semanage/seobject.py:1626
 msgid "Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
+#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
 #, python-format
 msgid "Type %s is invalid, must be a port type"
 msgstr ""
 
-#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
-#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
-#, python-format
-msgid "Could not check if port %s/%s is defined"
+#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
+#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
+#, python-brace-format
+msgid "Could not check if port {proto}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1115
-#, python-format
-msgid "Port %s/%s already defined"
+#: ../semanage/seobject.py:1110
+#, python-brace-format
+msgid "Port {proto}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1119
-#, python-format
-msgid "Could not create port for %s/%s"
+#: ../semanage/seobject.py:1114
+#, python-brace-format
+msgid "Could not create port for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
-#: ../semanage/seobject.py:1653
-#, python-format
-msgid "Could not create context for %s/%s"
+#: ../semanage/seobject.py:1120
+#, python-brace-format
+msgid "Could not create context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1129
-#, python-format
-msgid "Could not set user in port context for %s/%s"
+#: ../semanage/seobject.py:1124
+#, python-brace-format
+msgid "Could not set user in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1133
-#, python-format
-msgid "Could not set role in port context for %s/%s"
+#: ../semanage/seobject.py:1128
+#, python-brace-format
+msgid "Could not set role in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1137
-#, python-format
-msgid "Could not set type in port context for %s/%s"
+#: ../semanage/seobject.py:1132
+#, python-brace-format
+msgid "Could not set type in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1142
-#, python-format
-msgid "Could not set mls fields in port context for %s/%s"
+#: ../semanage/seobject.py:1137
+#, python-brace-format
+msgid "Could not set mls fields in port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1146
-#, python-format
-msgid "Could not set port context for %s/%s"
+#: ../semanage/seobject.py:1141
+#, python-brace-format
+msgid "Could not set port context for {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1150
-#, python-format
-msgid "Could not add port %s/%s"
+#: ../semanage/seobject.py:1145
+#, python-brace-format
+msgid "Could not add port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
-#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
-#: ../semanage/seobject.py:2176
+#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
+#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
+#: ../semanage/seobject.py:2171
 msgid "Requires setype or serange"
 msgstr ""
 
-#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
-#: ../semanage/seobject.py:1694
+#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
+#: ../semanage/seobject.py:1689
 msgid "Requires setype"
 msgstr ""
 
-#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
-#, python-format
-msgid "Port %s/%s is not defined"
+#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
+#, python-brace-format
+msgid "Port {proto}/{port} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1184
-#, python-format
-msgid "Could not query port %s/%s"
+#: ../semanage/seobject.py:1179
+#, python-brace-format
+msgid "Could not query port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1198
-#, python-format
-msgid "Could not modify port %s/%s"
+#: ../semanage/seobject.py:1193
+#, python-brace-format
+msgid "Could not modify port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1213
+#: ../semanage/seobject.py:1208
 msgid "Could not list the ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1230
+#: ../semanage/seobject.py:1225
 #, python-format
 msgid "Could not delete the port %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1252
-#, python-format
-msgid "Port %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1247
+#, python-brace-format
+msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1256
-#, python-format
-msgid "Could not delete port %s/%s"
+#: ../semanage/seobject.py:1251
+#, python-brace-format
+msgid "Could not delete port {proto}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
+#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
 msgid "Could not list ports"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
+#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
 #: ../sepolicy/sepolicy/sepolicy.glade:2766
 #: ../sepolicy/sepolicy/sepolicy.glade:4630
 msgid "SELinux Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1329
+#: ../semanage/seobject.py:1324
 msgid "Proto"
 msgstr ""
 
-#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
 #: ../sepolicy/sepolicy/sepolicy.glade:1407
 msgid "Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1351
+#: ../semanage/seobject.py:1346
 msgid "Subnet Prefix is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1361
+#: ../semanage/seobject.py:1356
 msgid "Invalid Pkey"
 msgstr ""
 
-#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
+#: ../semanage/seobject.py:1360
+#, python-brace-format
+msgid "Could not create a key for {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
 #, python-format
 msgid "Type %s is invalid, must be a ibpkey type"
 msgstr ""
 
-#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
-#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
-#, python-format
-msgid "Could not check if ibpkey %s/%s is defined"
+#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
+#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
+#, python-brace-format
+msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1389
-#, python-format
-msgid "ibpkey %s/%s already defined"
+#: ../semanage/seobject.py:1384
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1393
-#, python-format
-msgid "Could not create ibpkey for %s/%s"
+#: ../semanage/seobject.py:1388
+#, python-brace-format
+msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1403
-#, python-format
-msgid "Could not set user in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1394
+#, python-brace-format
+msgid "Could not create context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1407
-#, python-format
-msgid "Could not set role in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1398
+#, python-brace-format
+msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1411
-#, python-format
-msgid "Could not set type in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1402
+#, python-brace-format
+msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1416
-#, python-format
-msgid "Could not set mls fields in ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1406
+#, python-brace-format
+msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1420
-#, python-format
-msgid "Could not set ibpkey context for %s/%s"
+#: ../semanage/seobject.py:1411
+#, python-brace-format
+msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1424
-#, python-format
-msgid "Could not add ibpkey %s/%s"
+#: ../semanage/seobject.py:1415
+#, python-brace-format
+msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
-#, python-format
-msgid "ibpkey %s/%s is not defined"
+#: ../semanage/seobject.py:1419
+#, python-brace-format
+msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1457
-#, python-format
-msgid "Could not query ibpkey %s/%s"
+#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1468
-#, python-format
-msgid "Could not modify ibpkey %s/%s"
+#: ../semanage/seobject.py:1452
+#, python-brace-format
+msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1481
+#: ../semanage/seobject.py:1463
+#, python-brace-format
+msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
+msgstr ""
+
+#: ../semanage/seobject.py:1476
 msgid "Could not list the ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1496
+#: ../semanage/seobject.py:1491
 #, python-format
 msgid "Could not delete the ibpkey %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1513
-#, python-format
-msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1508
+#, python-brace-format
+msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1517
-#, python-format
-msgid "Could not delete ibpkey %s/%s"
+#: ../semanage/seobject.py:1512
+#, python-brace-format
+msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
 msgstr ""
 
-#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
+#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
 msgid "Could not list ibpkeys"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "SELinux IB Pkey Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Subnet_Prefix"
 msgstr ""
 
-#: ../semanage/seobject.py:1589
+#: ../semanage/seobject.py:1584
 msgid "Pkey Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1611
+#: ../semanage/seobject.py:1606
 msgid "IB device name is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1616
+#: ../semanage/seobject.py:1611
 msgid "Invalid Port Number"
 msgstr ""
 
-#: ../semanage/seobject.py:1620
-#, python-format
-msgid "Could not create a key for ibendport %s/%s"
+#: ../semanage/seobject.py:1615
+#, python-brace-format
+msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
+#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
 #, python-format
 msgid "Type %s is invalid, must be an ibendport type"
 msgstr ""
 
-#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
-#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
-#, python-format
-msgid "Could not check if ibendport %s/%s is defined"
+#: ../semanage/seobject.py:1636
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1643
-#, python-format
-msgid "ibendport %s/%s already defined"
+#: ../semanage/seobject.py:1638
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{port} already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1647
-#, python-format
-msgid "Could not create ibendport for %s/%s"
+#: ../semanage/seobject.py:1642
+#, python-brace-format
+msgid "Could not create ibendport for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1657
-#, python-format
-msgid "Could not set user in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1648
+#, python-brace-format
+msgid "Could not create context for {ibendport}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1661
-#, python-format
-msgid "Could not set role in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1652
+#, python-brace-format
+msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1656
+#, python-brace-format
+msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
+msgstr ""
+
+#: ../semanage/seobject.py:1660
+#, python-brace-format
+msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
 #: ../semanage/seobject.py:1665
-#, python-format
-msgid "Could not set type in ibendport context for %s/%s"
+#, python-brace-format
+msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1670
-#, python-format
-msgid "Could not set mls fields in ibendport context for %s/%s"
+#: ../semanage/seobject.py:1669
+#, python-brace-format
+msgid "Could not set ibendport context for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1674
-#, python-format
-msgid "Could not set ibendport context for %s/%s"
+#: ../semanage/seobject.py:1673
+#, python-brace-format
+msgid "Could not add ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1678
-#, python-format
-msgid "Could not add ibendport %s/%s"
+#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
+#: ../semanage/seobject.py:1758
+#, python-brace-format
+msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
-#, python-format
-msgid "ibendport %s/%s is not defined"
+#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
+#, python-brace-format
+msgid "ibendport {ibdev_name}/{ibendport} is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1711
-#, python-format
-msgid "Could not query ibendport %s/%s"
+#: ../semanage/seobject.py:1706
+#, python-brace-format
+msgid "Could not query ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1722
-#, python-format
-msgid "Could not modify ibendport %s/%s"
+#: ../semanage/seobject.py:1717
+#, python-brace-format
+msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1735
+#: ../semanage/seobject.py:1730
 msgid "Could not list the ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1744
-#, python-format
-msgid "Could not create a key for %s/%d"
+#: ../semanage/seobject.py:1739
+#, python-brace-format
+msgid "Could not create a key for {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1748
-#, python-format
-msgid "Could not delete the ibendport %s/%d"
+#: ../semanage/seobject.py:1743
+#, python-brace-format
+msgid "Could not delete the ibendport {ibdev_name}/{port}"
 msgstr ""
 
-#: ../semanage/seobject.py:1765
-#, python-format
-msgid "ibendport %s/%s is defined in policy, cannot be deleted"
+#: ../semanage/seobject.py:1760
+#, python-brace-format
+msgid ""
+"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:1769
-#, python-format
-msgid "Could not delete ibendport %s/%s"
+#: ../semanage/seobject.py:1764
+#, python-brace-format
+msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
 msgstr ""
 
-#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
+#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
 msgid "Could not list ibendports"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "SELinux IB End Port Type"
 msgstr ""
 
-#: ../semanage/seobject.py:1835
+#: ../semanage/seobject.py:1830
 msgid "IB Device Name"
 msgstr ""
 
-#: ../semanage/seobject.py:1861
+#: ../semanage/seobject.py:1856
 msgid "Node Address is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
+#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
 msgid "Unknown or missing protocol"
 msgstr ""
 
-#: ../semanage/seobject.py:1899
+#: ../semanage/seobject.py:1894
 msgid "SELinux node type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
+#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
 #, python-format
 msgid "Type %s is invalid, must be a node type"
 msgstr ""
 
-#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
-#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
-#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
-#: ../semanage/seobject.py:2435
+#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
+#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
+#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
+#: ../semanage/seobject.py:2430
 #, python-format
 msgid "Could not create key for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
-#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
+#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
+#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
 #, python-format
 msgid "Could not check if addr %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1914
+#: ../semanage/seobject.py:1909
 #, python-format
 msgid "Addr %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1918
+#: ../semanage/seobject.py:1913
 #, python-format
 msgid "Could not create addr for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
-#: ../semanage/seobject.py:2389
+#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2384
 #, python-format
 msgid "Could not create context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1928
+#: ../semanage/seobject.py:1923
 #, python-format
 msgid "Could not set mask for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1932
+#: ../semanage/seobject.py:1927
 #, python-format
 msgid "Could not set user in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1936
+#: ../semanage/seobject.py:1931
 #, python-format
 msgid "Could not set role in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1940
+#: ../semanage/seobject.py:1935
 #, python-format
 msgid "Could not set type in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1945
+#: ../semanage/seobject.py:1940
 #, python-format
 msgid "Could not set mls fields in addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1949
+#: ../semanage/seobject.py:1944
 #, python-format
 msgid "Could not set addr context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1953
+#: ../semanage/seobject.py:1948
 #, python-format
 msgid "Could not add addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
+#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
 #, python-format
 msgid "Addr %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:1989
+#: ../semanage/seobject.py:1984
 #, python-format
 msgid "Could not query addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:1999
+#: ../semanage/seobject.py:1994
 #, python-format
 msgid "Could not modify addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2028
+#: ../semanage/seobject.py:2023
 #, python-format
 msgid "Addr %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2032
+#: ../semanage/seobject.py:2027
 #, python-format
 msgid "Could not delete addr %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2046
+#: ../semanage/seobject.py:2041
 msgid "Could not deleteall node mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2060
+#: ../semanage/seobject.py:2055
 msgid "Could not list addrs"
 msgstr ""
 
-#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
+#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
 msgid "SELinux Type is required"
 msgstr ""
 
-#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
-#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
+#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
+#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
 #, python-format
 msgid "Could not check if interface %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2123
+#: ../semanage/seobject.py:2118
 #, python-format
 msgid "Interface %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2127
+#: ../semanage/seobject.py:2122
 #, python-format
 msgid "Could not create interface for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2136
+#: ../semanage/seobject.py:2131
 #, python-format
 msgid "Could not set user in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2140
+#: ../semanage/seobject.py:2135
 #, python-format
 msgid "Could not set role in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2144
+#: ../semanage/seobject.py:2139
 #, python-format
 msgid "Could not set type in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2149
+#: ../semanage/seobject.py:2144
 #, python-format
 msgid "Could not set mls fields in interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2153
+#: ../semanage/seobject.py:2148
 #, python-format
 msgid "Could not set interface context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2157
+#: ../semanage/seobject.py:2152
 #, python-format
 msgid "Could not set message context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2161
+#: ../semanage/seobject.py:2156
 #, python-format
 msgid "Could not add interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
+#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
 #, python-format
 msgid "Interface %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2190
+#: ../semanage/seobject.py:2185
 #, python-format
 msgid "Could not query interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2201
+#: ../semanage/seobject.py:2196
 #, python-format
 msgid "Could not modify interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2228
+#: ../semanage/seobject.py:2223
 #, python-format
 msgid "Interface %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2232
+#: ../semanage/seobject.py:2227
 #, python-format
 msgid "Could not delete interface %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2246
+#: ../semanage/seobject.py:2241
 msgid "Could not delete all interface  mappings"
 msgstr ""
 
-#: ../semanage/seobject.py:2260
+#: ../semanage/seobject.py:2255
 msgid "Could not list interfaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2285
+#: ../semanage/seobject.py:2280
 msgid "SELinux Interface"
 msgstr ""
 
-#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
 msgid "Context"
 msgstr ""
 
-#: ../semanage/seobject.py:2355
+#: ../semanage/seobject.py:2350
 #, python-format
 msgid "Target %s is not valid. Target is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2358
+#: ../semanage/seobject.py:2353
 #, python-format
 msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
 msgstr ""
 
-#: ../semanage/seobject.py:2361
+#: ../semanage/seobject.py:2356
 #, python-format
 msgid "Equivalence class for %s already exists"
 msgstr ""
 
-#: ../semanage/seobject.py:2367
+#: ../semanage/seobject.py:2362
 #, python-format
 msgid "File spec %s conflicts with equivalency rule '%s %s'"
 msgstr ""
 
-#: ../semanage/seobject.py:2378
+#: ../semanage/seobject.py:2373
 #, python-format
 msgid "Equivalence class for %s does not exist"
 msgstr ""
 
-#: ../semanage/seobject.py:2395
+#: ../semanage/seobject.py:2390
 #, python-format
 msgid "Could not set user in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2399
+#: ../semanage/seobject.py:2394
 #, python-format
 msgid "Could not set role in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
+#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
 #, python-format
 msgid "Could not set mls fields in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2410
+#: ../semanage/seobject.py:2405
 msgid "Invalid file specification"
 msgstr ""
 
-#: ../semanage/seobject.py:2412
+#: ../semanage/seobject.py:2407
 msgid "File specification can not include spaces"
 msgstr ""
 
-#: ../semanage/seobject.py:2417
+#: ../semanage/seobject.py:2412
 #, python-format
 msgid ""
 "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
 msgstr ""
 
-#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
+#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
 #, python-format
 msgid "Type %s is invalid, must be a file or device type"
 msgstr ""
 
-#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
-#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
-#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
+#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
+#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
+#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
 #, python-format
 msgid "Could not check if file context for %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2447
+#: ../semanage/seobject.py:2442
 #, python-format
 msgid "File context for %s already defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2451
+#: ../semanage/seobject.py:2446
 #, python-format
 msgid "Could not create file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2459
+#: ../semanage/seobject.py:2454
 #, python-format
 msgid "Could not set type in file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
-#: ../semanage/seobject.py:2543
+#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
+#: ../semanage/seobject.py:2538
 #, python-format
 msgid "Could not set file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2473
+#: ../semanage/seobject.py:2468
 #, python-format
 msgid "Could not add file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2492
+#: ../semanage/seobject.py:2487
 msgid "Requires setype, serange or seuser"
 msgstr ""
 
-#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
+#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
 #, python-format
 msgid "Could not query file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
+#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
 #, python-format
 msgid "File context for %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2547
+#: ../semanage/seobject.py:2542
 #, python-format
 msgid "Could not modify file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2565
+#: ../semanage/seobject.py:2560
 msgid "Could not list the file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2579
+#: ../semanage/seobject.py:2574
 #, python-format
 msgid "Could not delete the file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2609
+#: ../semanage/seobject.py:2604
 #, python-format
 msgid "File context for %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2615
+#: ../semanage/seobject.py:2610
 #, python-format
 msgid "Could not delete file context for %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2632
+#: ../semanage/seobject.py:2627
 msgid "Could not list file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2636
+#: ../semanage/seobject.py:2631
 msgid "Could not list file contexts for home directories"
 msgstr ""
 
-#: ../semanage/seobject.py:2640
+#: ../semanage/seobject.py:2635
 msgid "Could not list local file contexts"
 msgstr ""
 
-#: ../semanage/seobject.py:2677
+#: ../semanage/seobject.py:2672
 msgid "SELinux fcontext"
 msgstr ""
 
-#: ../semanage/seobject.py:2690
+#: ../semanage/seobject.py:2685
 msgid ""
 "\n"
 "SELinux Distribution fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2695
+#: ../semanage/seobject.py:2690
 msgid ""
 "\n"
 "SELinux Local fcontext Equivalence \n"
 msgstr ""
 
-#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
-#: ../semanage/seobject.py:2790
+#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
+#: ../semanage/seobject.py:2785
 #, python-format
 msgid "Could not check if boolean %s is defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
+#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
 #, python-format
 msgid "Boolean %s is not defined"
 msgstr ""
 
-#: ../semanage/seobject.py:2739
+#: ../semanage/seobject.py:2734
 #, python-format
 msgid "Could not query file context %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2744
+#: ../semanage/seobject.py:2739
 #, python-format
 msgid "You must specify one of the following values: %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2749
+#: ../semanage/seobject.py:2744
 #, python-format
 msgid "Could not set active value of boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2752
+#: ../semanage/seobject.py:2747
 #, python-format
 msgid "Could not modify boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2768
-#, python-format
-msgid "Bad format %s: Record %s"
+#: ../semanage/seobject.py:2763
+#, python-brace-format
+msgid "Bad format {filename}: Record {record}"
 msgstr ""
 
-#: ../semanage/seobject.py:2792
+#: ../semanage/seobject.py:2787
 #, python-format
 msgid "Boolean %s is defined in policy, cannot be deleted"
 msgstr ""
 
-#: ../semanage/seobject.py:2796
+#: ../semanage/seobject.py:2791
 #, python-format
 msgid "Could not delete boolean %s"
 msgstr ""
 
-#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
+#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
 msgid "Could not list booleans"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "off"
 msgstr ""
 
-#: ../semanage/seobject.py:2858
+#: ../semanage/seobject.py:2853
 msgid "on"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "SELinux boolean"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "State"
 msgstr ""
 
-#: ../semanage/seobject.py:2870
+#: ../semanage/seobject.py:2865
 msgid "Default"
 msgstr ""
 
-#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
+#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
 #: ../sepolicy/sepolicy/sepolicy.glade:2510
 #: ../sepolicy/sepolicy/sepolicy.glade:5099
 msgid "Description"
@@ -1555,151 +1566,151 @@ msgstr ""
 msgid "Missing interface definition for %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:140
+#: ../sepolicy/sepolicy/generate.py:138
 msgid "Standard Init Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:141
+#: ../sepolicy/sepolicy/generate.py:139
 msgid "DBUS System Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:142
+#: ../sepolicy/sepolicy/generate.py:140
 msgid "Internet Services Daemon"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:143
+#: ../sepolicy/sepolicy/generate.py:141
 msgid "Web Application/Script (CGI)"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:144
+#: ../sepolicy/sepolicy/generate.py:142
 msgid "Sandbox"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:145
+#: ../sepolicy/sepolicy/generate.py:143
 msgid "User Application"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:146
+#: ../sepolicy/sepolicy/generate.py:144
 msgid "Existing Domain Type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:147
+#: ../sepolicy/sepolicy/generate.py:145
 msgid "Minimal Terminal Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:148
+#: ../sepolicy/sepolicy/generate.py:146
 msgid "Minimal X Windows Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:149
+#: ../sepolicy/sepolicy/generate.py:147
 msgid "Desktop Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:150
+#: ../sepolicy/sepolicy/generate.py:148
 msgid "Administrator Login User Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:151
+#: ../sepolicy/sepolicy/generate.py:149
 msgid "Confined Root Administrator Role"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:152
+#: ../sepolicy/sepolicy/generate.py:150
 msgid "Module information for a new type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:158
+#: ../sepolicy/sepolicy/generate.py:156
 msgid "Valid Types:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:193
+#: ../sepolicy/sepolicy/generate.py:191
 #, python-format
 msgid "Ports must be numbers or ranges of numbers from 1 to %d "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:205
+#: ../sepolicy/sepolicy/generate.py:203
 msgid "You must enter a valid policy type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:208
+#: ../sepolicy/sepolicy/generate.py:206
 #, python-format
 msgid "You must enter a name for your policy module for your '%s'."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:346
+#: ../sepolicy/sepolicy/generate.py:344
 msgid ""
 "Name must be alphanumeric with no spaces. Consider using option \"-n "
 "MODULENAME\""
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:438
+#: ../sepolicy/sepolicy/generate.py:436
 msgid "User Role types can not be assigned executables."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:444
+#: ../sepolicy/sepolicy/generate.py:442
 msgid "Only Daemon apps can use an init script."
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:462
+#: ../sepolicy/sepolicy/generate.py:460
 msgid "use_resolve must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:468
+#: ../sepolicy/sepolicy/generate.py:466
 msgid "use_syslog must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:474
+#: ../sepolicy/sepolicy/generate.py:472
 msgid "use_kerberos must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:480
+#: ../sepolicy/sepolicy/generate.py:478
 msgid "manage_krb5_rcache must be a boolean value "
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:510
+#: ../sepolicy/sepolicy/generate.py:508
 msgid "USER Types automatically get a tmp type"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:847
+#: ../sepolicy/sepolicy/generate.py:845
 #, python-format
 msgid "'%s' policy modules require existing domains"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:872
+#: ../sepolicy/sepolicy/generate.py:870
 msgid "Type field required"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:885
+#: ../sepolicy/sepolicy/generate.py:883
 #, python-format
 msgid ""
 "You need to define a new type which ends with: \n"
 " %s"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1113
+#: ../sepolicy/sepolicy/generate.py:1111
 msgid "You must enter the executable path for your confined process"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1378
+#: ../sepolicy/sepolicy/generate.py:1376
 msgid "Created the following files:\n"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1379
+#: ../sepolicy/sepolicy/generate.py:1377
 msgid "Type Enforcement file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1380
+#: ../sepolicy/sepolicy/generate.py:1378
 msgid "Interface file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1381
+#: ../sepolicy/sepolicy/generate.py:1379
 msgid "File Contexts file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1383
+#: ../sepolicy/sepolicy/generate.py:1381
 msgid "Spec file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/generate.py:1384
+#: ../sepolicy/sepolicy/generate.py:1382
 msgid "Setup Script"
 msgstr ""
 
@@ -2367,29 +2378,29 @@ msgstr ""
 msgid "named pipe"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:148
+#: ../sepolicy/sepolicy/__init__.py:149
 msgid "No SELinux Policy installed"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:184
+#: ../sepolicy/sepolicy/__init__.py:185
 #, python-format
 msgid "Failed to read %s policy file"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:470
+#: ../sepolicy/sepolicy/__init__.py:471
 #, python-format
 msgid "-- Allowed %s [ %s ]"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:896
+#: ../sepolicy/sepolicy/__init__.py:897
 msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1221
+#: ../sepolicy/sepolicy/__init__.py:1230
 msgid "unknown"
 msgstr ""
 
-#: ../sepolicy/sepolicy/__init__.py:1230
+#: ../sepolicy/sepolicy/__init__.py:1239
 #, python-brace-format
 msgid "Allow {subject} to {rest}"
 msgstr ""
-- 
2.41.0.rc2


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH v4 4/4] python: update python.pot
  2023-06-13 11:20             ` [PATCH v4 4/4] python: update python.pot Petr Lautrbach
@ 2023-06-13 12:37               ` Vit Mojzis
  2023-06-27 13:55                 ` Petr Lautrbach
  0 siblings, 1 reply; 26+ messages in thread
From: Vit Mojzis @ 2023-06-13 12:37 UTC (permalink / raw)
  To: Petr Lautrbach, selinux

On 6/13/23 13:20, Petr Lautrbach wrote:
> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
> ---
>   python/po/python.pot | 963 ++++++++++++++++++++++---------------------
>   1 file changed, 487 insertions(+), 476 deletions(-)
> 
> diff --git a/python/po/python.pot b/python/po/python.pot
> index 16d04eb0f18e..435a1b764e34 100644
> --- a/python/po/python.pot
> +++ b/python/po/python.pot
> @@ -8,7 +8,7 @@ msgid ""
>   msgstr ""
>   "Project-Id-Version: PACKAGE VERSION\n"
>   "Report-Msgid-Bugs-To: \n"
> -"POT-Creation-Date: 2023-01-18 11:57+0100\n"
> +"POT-Creation-Date: 2023-06-12 18:13+0200\n"
>   "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
>   "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
>   "Language-Team: LANGUAGE <LL@li.org>\n"
> @@ -17,17 +17,12 @@ msgstr ""
>   "Content-Type: text/plain; charset=UTF-8\n"
>   "Content-Transfer-Encoding: 8bit\n"
>   
> -#: ../audit2allow/audit2allow:239
> -msgid "******************** IMPORTANT ***********************\n"
> +#: ../audit2allow/audit2allow:244
> +msgid "IMPORTANT"
>   msgstr ""
>   
> -#: ../audit2allow/audit2allow:240
> -#, python-format
> -msgid ""
> -"To make this policy package active, execute:\n"
> -"\n"
> -"semodule -i %s\n"
> -"\n"
> +#: ../audit2allow/audit2allow:245
> +msgid "To make this policy package active, execute:"
>   msgstr ""
>   
>   #: ../chcat/chcat:111 ../chcat/chcat:191
> @@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
>   msgstr ""
>   
>   #: ../chcat/chcat:128
> -#, python-format
> -msgid "%s is already in %s"
> +#, python-brace-format
> +msgid "{target} is already in {category}"
>   msgstr ""
>   
>   #: ../chcat/chcat:210 ../chcat/chcat:220
> -#, python-format
> -msgid "%s is not in %s"
> +#, python-brace-format
> +msgid "{target} is not in {category}"
>   msgstr ""
>   
>   #: ../chcat/chcat:291 ../chcat/chcat:296
> @@ -152,218 +147,222 @@ msgstr ""
>   
>   #: ../semanage/semanage:242
>   msgid ""
> -"\n"
> -"MLS/MCS Security Range (MLS/MCS Systems only)\n"
> -"SELinux Range  for SELinux login mapping\n"
> -"defaults to the SELinux user record range.\n"
> -"SELinux Range for SELinux user defaults to s0.\n"
> +"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
> +"login mapping defaults to the SELinux user record range. SELinux Range for "
> +"SELinux user defaults to s0."
>   msgstr ""
>   
> -#: ../semanage/semanage:251
> +#: ../semanage/semanage:249
>   msgid ""
> -"\n"
> -"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
> -"protocol\n"
> -"    version for the specified node (ipv4|ipv6).\n"
> +"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
> +"version for the specified node (ipv4|ipv6)."
>   msgstr ""
>   
> -#: ../semanage/semanage:257
> -msgid ""
> -"\n"
> -"    Subnet prefix for  the specified infiniband ibpkey.\n"
> +#: ../semanage/semanage:253
> +msgid "Subnet prefix for  the specified infiniband ibpkey."
>   msgstr ""
>   
> -#: ../semanage/semanage:262
> -msgid ""
> -"\n"
> -"    Name for the specified infiniband end port.\n"
> +#: ../semanage/semanage:256
> +msgid "Name for the specified infiniband end port."
>   msgstr ""
>   
> -#: ../semanage/semanage:267
> +#: ../semanage/semanage:259
>   #, python-format
>   msgid "Modify a record of the %s object type"
>   msgstr ""
>   
> -#: ../semanage/semanage:271
> +#: ../semanage/semanage:263
>   #, python-format
>   msgid "List records of the %s object type"
>   msgstr ""
>   
> -#: ../semanage/semanage:275
> +#: ../semanage/semanage:267
>   #, python-format
>   msgid "Delete a record of the %s object type"
>   msgstr ""
>   
> -#: ../semanage/semanage:279
> +#: ../semanage/semanage:271
>   msgid "Extract customizable commands, for use within a transaction"
>   msgstr ""
>   
> -#: ../semanage/semanage:283
> +#: ../semanage/semanage:275
>   #, python-format
>   msgid "Remove all %s objects local customizations"
>   msgstr ""
>   
> -#: ../semanage/semanage:287
> +#: ../semanage/semanage:279
>   msgid "SELinux user name"
>   msgstr ""
>   
> -#: ../semanage/semanage:292
> +#: ../semanage/semanage:284
>   msgid "Manage login mappings between linux users and SELinux confined users"
>   msgstr ""
>   
> -#: ../semanage/semanage:309
> +#: ../semanage/semanage:301
>   #, python-format
>   msgid "login_name | %%groupname"
>   msgstr ""
>   
> -#: ../semanage/semanage:361
> +#: ../semanage/semanage:344
>   msgid "Manage file context mapping definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:375
> +#: ../semanage/semanage:359
> +msgid ""
> +"Substitute target path with sourcepath when generating default label. This "
> +"is used with fcontext. Requires source and target path arguments. The "
> +"context labeling for the target subtree is made equivalent to that defined "
> +"for the source."
> +msgstr ""
> +
> +#: ../semanage/semanage:363
>   msgid ""
> -"Substitute  target  path with sourcepath when generating default\n"
> -"                                                                  label.  "
> -"This is used with fcontext. Requires source  and  target\n"
> -"                                                                  path  "
> -"arguments.  The context labeling for the target subtree is\n"
> -"                                                                  made "
> -"equivalent to that defined for the source."
> +"File Type. This is used with fcontext. Requires a file type as shown in the "
> +"mode field by ls, e.g. use d to match only directories or f to match only "
> +"regular files. The following file type options can be passed: f (regular "
> +"file), d (directory), c (character device), b (block device), s (socket), l "
> +"(symbolic link), p (named pipe). If you do not specify a file type, the file "
> +"type will default to \"all files\"."
>   msgstr ""
>   
> -#: ../semanage/semanage:383
> +#: ../semanage/semanage:371
>   msgid ""
>   "Path to be labeled (may be in the form of a Perl compatible regular "
>   "expression)"
>   msgstr ""
>   
> -#: ../semanage/semanage:411
> +#: ../semanage/semanage:399
>   msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
>   msgstr ""
>   
> -#: ../semanage/semanage:429
> +#: ../semanage/semanage:417
>   msgid ""
> -"\n"
> -"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
> -"spaces. Or specify -R multiple times.\n"
> +"SELinux Roles. You must enclose multiple roles within quotes, separate by "
> +"spaces. Or specify -R multiple times."
>   msgstr ""
>   
> -#: ../semanage/semanage:433
> +#: ../semanage/semanage:419
>   msgid "selinux_name"
>   msgstr ""
>   
> -#: ../semanage/semanage:461
> +#: ../semanage/semanage:447
>   msgid "Manage network port type definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:477
> +#: ../semanage/semanage:463
>   msgid "port | port_range"
>   msgstr ""
>   
> -#: ../semanage/semanage:506
> +#: ../semanage/semanage:492
>   msgid "Manage infiniband ibpkey type definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:522
> +#: ../semanage/semanage:508
>   msgid "pkey | pkey_range"
>   msgstr ""
>   
> -#: ../semanage/semanage:549
> +#: ../semanage/semanage:535
>   msgid "Manage infiniband end port type definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:565
> +#: ../semanage/semanage:551
>   msgid "ibendport"
>   msgstr ""
>   
> -#: ../semanage/semanage:592
> +#: ../semanage/semanage:578
>   msgid "Manage network interface type definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:607
> +#: ../semanage/semanage:593
>   msgid "interface_spec"
>   msgstr ""
>   
> -#: ../semanage/semanage:631
> +#: ../semanage/semanage:617
>   msgid "Manage SELinux policy modules"
>   msgstr ""
>   
> -#: ../semanage/semanage:642
> +#: ../semanage/semanage:628
>   msgid "Add a module"
>   msgstr ""
>   
> -#: ../semanage/semanage:643
> +#: ../semanage/semanage:629
>   msgid "Remove a module"
>   msgstr ""
>   
> -#: ../semanage/semanage:644
> +#: ../semanage/semanage:630
>   msgid "Disable a module"
>   msgstr ""
>   
> -#: ../semanage/semanage:645
> +#: ../semanage/semanage:631
>   msgid "Enable a module"
>   msgstr ""
>   
> -#: ../semanage/semanage:672
> +#: ../semanage/semanage:658
>   msgid "Manage network node type definitions"
>   msgstr ""
>   
> -#: ../semanage/semanage:686
> +#: ../semanage/semanage:672
>   msgid "Network Mask"
>   msgstr ""
>   
> -#: ../semanage/semanage:690
> +#: ../semanage/semanage:676
>   msgid "node"
>   msgstr ""
>   
> -#: ../semanage/semanage:715
> +#: ../semanage/semanage:701
>   msgid "Manage booleans to selectively enable functionality"
>   msgstr ""
>   
> -#: ../semanage/semanage:720
> +#: ../semanage/semanage:706
>   msgid "boolean"
>   msgstr ""
>   
> -#: ../semanage/semanage:730
> +#: ../semanage/semanage:716
>   msgid "Enable the boolean"
>   msgstr ""
>   
> -#: ../semanage/semanage:731
> +#: ../semanage/semanage:717
>   msgid "Disable the boolean"
>   msgstr ""
>   
> -#: ../semanage/semanage:752
> +#: ../semanage/semanage:738
>   msgid "semanage permissive: error: the following argument is required: type\n"
>   msgstr ""
>   
> -#: ../semanage/semanage:756
> +#: ../semanage/semanage:742
>   msgid "Manage process type enforcement mode"
>   msgstr ""
>   
> -#: ../semanage/semanage:768 ../semanage/seobject.py:2677
> +#: ../semanage/semanage:754 ../semanage/seobject.py:2672
>   msgid "type"
>   msgstr ""
>   
> -#: ../semanage/semanage:779
> +#: ../semanage/semanage:765
>   msgid "Disable/Enable dontaudit rules in policy"
>   msgstr ""
>   
> -#: ../semanage/semanage:799
> +#: ../semanage/semanage:785
>   msgid "Output local customizations"
>   msgstr ""
>   
> -#: ../semanage/semanage:801
> +#: ../semanage/semanage:787
>   msgid "Output file"
>   msgstr ""
>   
> -#: ../semanage/semanage:894
> +#: ../semanage/semanage:880
>   msgid "Import local customizations"
>   msgstr ""
>   
> -#: ../semanage/semanage:897
> +#: ../semanage/semanage:883
>   msgid "Input file"
>   msgstr ""
>   
> +#: ../semanage/semanage:891
> +msgid ""
> +"semanage is used to configure certain elements of SELinux policy with-out "
> +"requiring modification or recompilation from policy source."
> +msgstr ""
> +
>   #: ../semanage/seobject.py:279
>   msgid "Could not create semanage handle"
>   msgstr ""
> @@ -485,123 +484,115 @@ msgstr ""
>   msgid "Customized Permissive Types"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:510
> -msgid ""
> -"The sepolgen python module is required to setup permissive domains.\n"
> -"In some distributions it is included in the policycoreutils-devel package.\n"
> -"# yum install policycoreutils-devel\n"
> -"Or similar for your distro."
> -msgstr ""
> -
> -#: ../semanage/seobject.py:520
> +#: ../semanage/seobject.py:515
>   #, python-format
>   msgid "Could not set permissive domain %s (module installation failed)"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:526
> +#: ../semanage/seobject.py:521
>   #, python-format
>   msgid "Could not remove permissive domain %s (remove failed)"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
> -#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
> -#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
> -#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
> -#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
> -#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
> -#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
> +#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
> +#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
> +#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
> +#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
> +#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
> +#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
> +#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
>   #, python-format
>   msgid "Could not create a key for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
> -#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
> +#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
> +#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
>   #, python-format
>   msgid "Could not check if login mapping for %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:569
> +#: ../semanage/seobject.py:564
>   #, python-format
>   msgid "Login mapping for %s is already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:574
> +#: ../semanage/seobject.py:569
>   #, python-format
>   msgid "Linux Group %s does not exist"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:579
> +#: ../semanage/seobject.py:574
>   #, python-format
>   msgid "Linux User %s does not exist"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:583
> +#: ../semanage/seobject.py:578
>   #, python-format
>   msgid "Could not create login mapping for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
> +#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
>   #, python-format
>   msgid "Could not set name for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
> +#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
>   #, python-format
>   msgid "Could not set MLS range for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:596
> +#: ../semanage/seobject.py:591
>   #, python-format
>   msgid "Could not set SELinux user for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:600
> +#: ../semanage/seobject.py:595
>   #, python-format
>   msgid "Could not add login mapping for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:616
> +#: ../semanage/seobject.py:611
>   msgid "Requires seuser or serange"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
> +#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
>   #, python-format
>   msgid "Login mapping for %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:643
> +#: ../semanage/seobject.py:638
>   #, python-format
>   msgid "Could not query seuser for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:658
> +#: ../semanage/seobject.py:653
>   #, python-format
>   msgid "Could not modify login mapping for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:690
> +#: ../semanage/seobject.py:685
>   #, python-format
>   msgid "Login mapping for %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:694
> +#: ../semanage/seobject.py:689
>   #, python-format
>   msgid "Could not delete login mapping for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
> -#: ../semanage/seobject.py:991
> +#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
> +#: ../semanage/seobject.py:986
>   msgid "Could not list login mappings"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
>   #: ../sepolicy/sepolicy/sepolicy.glade:1156
>   #: ../sepolicy/sepolicy/sepolicy.glade:3138
>   msgid "Login Name"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
>   #: ../sepolicy/sepolicy/sepolicy.glade:1182
>   #: ../sepolicy/sepolicy/sepolicy.glade:3156
>   #: ../sepolicy/sepolicy/sepolicy.glade:3242
> @@ -609,938 +600,958 @@ msgstr ""
>   msgid "SELinux User"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:772
> +#: ../semanage/seobject.py:767
>   msgid "MLS/MCS Range"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:772
> +#: ../semanage/seobject.py:767
>   msgid "Service"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
> -#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
> -#: ../semanage/seobject.py:958
> +#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
> +#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
> +#: ../semanage/seobject.py:953
>   #, python-format
>   msgid "Could not check if SELinux user %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
> -#: ../semanage/seobject.py:964
> +#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
> +#: ../semanage/seobject.py:959
>   #, python-format
>   msgid "Could not query user for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:823
> +#: ../semanage/seobject.py:818
>   #, python-format
>   msgid "You must add at least one role for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:833
> +#: ../semanage/seobject.py:828
>   #, python-format
>   msgid "SELinux user %s is already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:837
> +#: ../semanage/seobject.py:832
>   #, python-format
>   msgid "Could not create SELinux user for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:846
> -#, python-format
> -msgid "Could not add role %s for %s"
> +#: ../semanage/seobject.py:841
> +#, python-brace-format
> +msgid "Could not add role {role} for {name}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:855
> +#: ../semanage/seobject.py:850
>   #, python-format
>   msgid "Could not set MLS level for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:858
> -#, python-format
> -msgid "Could not add prefix %s for %s"
> +#: ../semanage/seobject.py:853
> +#, python-brace-format
> +msgid "Could not add prefix {prefix} for {role}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:861
> +#: ../semanage/seobject.py:856
>   #, python-format
>   msgid "Could not extract key for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:865
> +#: ../semanage/seobject.py:860
>   #, python-format
>   msgid "Could not add SELinux user %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:886
> +#: ../semanage/seobject.py:881
>   msgid "Requires prefix, roles, level or range"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:888
> +#: ../semanage/seobject.py:883
>   msgid "Requires prefix or roles"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
> +#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
>   #, python-format
>   msgid "SELinux user %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:927
> +#: ../semanage/seobject.py:922
>   #, python-format
>   msgid "Could not modify SELinux user %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:960
> +#: ../semanage/seobject.py:955
>   #, python-format
>   msgid "SELinux user %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:971
> +#: ../semanage/seobject.py:966
>   #, python-format
>   msgid "Could not delete SELinux user %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1009
> +#: ../semanage/seobject.py:1004
>   msgid "Could not list SELinux users"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1015
> +#: ../semanage/seobject.py:1010
>   #, python-format
>   msgid "Could not list roles for user %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1040
> +#: ../semanage/seobject.py:1035
>   msgid "Labeling"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1040
> +#: ../semanage/seobject.py:1035
>   msgid "MLS/"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1041
> +#: ../semanage/seobject.py:1036
>   msgid "Prefix"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1041
> +#: ../semanage/seobject.py:1036
>   msgid "MCS Level"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1041
> +#: ../semanage/seobject.py:1036
>   msgid "MCS Range"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
>   #: ../sepolicy/sepolicy/sepolicy.glade:3262
>   #: ../sepolicy/sepolicy/sepolicy.glade:5233
>   #: ../sepolicy/sepolicy/sepolicy.glade:5382
>   msgid "SELinux Roles"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1071
> +#: ../semanage/seobject.py:1066
>   msgid "Protocol has to be one of udp, tcp, dccp or sctp"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1073
> +#: ../semanage/seobject.py:1068
>   msgid "Port is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1087
> +#: ../semanage/seobject.py:1082
>   msgid "Invalid Port"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
> -#, python-format
> -msgid "Could not create a key for %s/%s"
> +#: ../semanage/seobject.py:1086
> +#, python-brace-format
> +msgid "Could not create a key for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
> -#: ../semanage/seobject.py:1631
> +#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
> +#: ../semanage/seobject.py:1626
>   msgid "Type is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
> +#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
>   #, python-format
>   msgid "Type %s is invalid, must be a port type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
> -#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
> -#, python-format
> -msgid "Could not check if port %s/%s is defined"
> +#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
> +#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
> +#, python-brace-format
> +msgid "Could not check if port {proto}/{port} is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1115
> -#, python-format
> -msgid "Port %s/%s already defined"
> +#: ../semanage/seobject.py:1110
> +#, python-brace-format
> +msgid "Port {proto}/{port} already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1119
> -#, python-format
> -msgid "Could not create port for %s/%s"
> +#: ../semanage/seobject.py:1114
> +#, python-brace-format
> +msgid "Could not create port for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
> -#: ../semanage/seobject.py:1653
> -#, python-format
> -msgid "Could not create context for %s/%s"
> +#: ../semanage/seobject.py:1120
> +#, python-brace-format
> +msgid "Could not create context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1129
> -#, python-format
> -msgid "Could not set user in port context for %s/%s"
> +#: ../semanage/seobject.py:1124
> +#, python-brace-format
> +msgid "Could not set user in port context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1133
> -#, python-format
> -msgid "Could not set role in port context for %s/%s"
> +#: ../semanage/seobject.py:1128
> +#, python-brace-format
> +msgid "Could not set role in port context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1137
> -#, python-format
> -msgid "Could not set type in port context for %s/%s"
> +#: ../semanage/seobject.py:1132
> +#, python-brace-format
> +msgid "Could not set type in port context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1142
> -#, python-format
> -msgid "Could not set mls fields in port context for %s/%s"
> +#: ../semanage/seobject.py:1137
> +#, python-brace-format
> +msgid "Could not set mls fields in port context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1146
> -#, python-format
> -msgid "Could not set port context for %s/%s"
> +#: ../semanage/seobject.py:1141
> +#, python-brace-format
> +msgid "Could not set port context for {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1150
> -#, python-format
> -msgid "Could not add port %s/%s"
> +#: ../semanage/seobject.py:1145
> +#, python-brace-format
> +msgid "Could not add port {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
> -#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
> -#: ../semanage/seobject.py:2176
> +#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
> +#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
> +#: ../semanage/seobject.py:2171
>   msgid "Requires setype or serange"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
> -#: ../semanage/seobject.py:1694
> +#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
> +#: ../semanage/seobject.py:1689
>   msgid "Requires setype"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
> -#, python-format
> -msgid "Port %s/%s is not defined"
> +#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
> +#, python-brace-format
> +msgid "Port {proto}/{port} is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1184
> -#, python-format
> -msgid "Could not query port %s/%s"
> +#: ../semanage/seobject.py:1179
> +#, python-brace-format
> +msgid "Could not query port {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1198
> -#, python-format
> -msgid "Could not modify port %s/%s"
> +#: ../semanage/seobject.py:1193
> +#, python-brace-format
> +msgid "Could not modify port {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1213
> +#: ../semanage/seobject.py:1208
>   msgid "Could not list the ports"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1230
> +#: ../semanage/seobject.py:1225
>   #, python-format
>   msgid "Could not delete the port %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1252
> -#, python-format
> -msgid "Port %s/%s is defined in policy, cannot be deleted"
> +#: ../semanage/seobject.py:1247
> +#, python-brace-format
> +msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1256
> -#, python-format
> -msgid "Could not delete port %s/%s"
> +#: ../semanage/seobject.py:1251
> +#, python-brace-format
> +msgid "Could not delete port {proto}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
> +#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
>   msgid "Could not list ports"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
> +#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
>   #: ../sepolicy/sepolicy/sepolicy.glade:2766
>   #: ../sepolicy/sepolicy/sepolicy.glade:4630
>   msgid "SELinux Port Type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1329
> +#: ../semanage/seobject.py:1324
>   msgid "Proto"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
> +#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
>   #: ../sepolicy/sepolicy/sepolicy.glade:1407
>   msgid "Port Number"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1351
> +#: ../semanage/seobject.py:1346
>   msgid "Subnet Prefix is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1361
> +#: ../semanage/seobject.py:1356
>   msgid "Invalid Pkey"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
> +#: ../semanage/seobject.py:1360
> +#, python-brace-format
> +msgid "Could not create a key for {subnet_prefix}/{pkey}"
> +msgstr ""
> +
> +#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
>   #, python-format
>   msgid "Type %s is invalid, must be a ibpkey type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
> -#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
> -#, python-format
> -msgid "Could not check if ibpkey %s/%s is defined"
> +#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
> +#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
> +#, python-brace-format
> +msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1389
> -#, python-format
> -msgid "ibpkey %s/%s already defined"
> +#: ../semanage/seobject.py:1384
> +#, python-brace-format
> +msgid "ibpkey {subnet_prefix}/{pkey} already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1393
> -#, python-format
> -msgid "Could not create ibpkey for %s/%s"
> +#: ../semanage/seobject.py:1388
> +#, python-brace-format
> +msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1403
> -#, python-format
> -msgid "Could not set user in ibpkey context for %s/%s"
> +#: ../semanage/seobject.py:1394
> +#, python-brace-format
> +msgid "Could not create context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1407
> -#, python-format
> -msgid "Could not set role in ibpkey context for %s/%s"
> +#: ../semanage/seobject.py:1398
> +#, python-brace-format
> +msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1411
> -#, python-format
> -msgid "Could not set type in ibpkey context for %s/%s"
> +#: ../semanage/seobject.py:1402
> +#, python-brace-format
> +msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1416
> -#, python-format
> -msgid "Could not set mls fields in ibpkey context for %s/%s"
> +#: ../semanage/seobject.py:1406
> +#, python-brace-format
> +msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1420
> -#, python-format
> -msgid "Could not set ibpkey context for %s/%s"
> +#: ../semanage/seobject.py:1411
> +#, python-brace-format
> +msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1424
> -#, python-format
> -msgid "Could not add ibpkey %s/%s"
> +#: ../semanage/seobject.py:1415
> +#, python-brace-format
> +msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
> -#, python-format
> -msgid "ibpkey %s/%s is not defined"
> +#: ../semanage/seobject.py:1419
> +#, python-brace-format
> +msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1457
> -#, python-format
> -msgid "Could not query ibpkey %s/%s"
> +#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
> +#, python-brace-format
> +msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1468
> -#, python-format
> -msgid "Could not modify ibpkey %s/%s"
> +#: ../semanage/seobject.py:1452
> +#, python-brace-format
> +msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1481
> +#: ../semanage/seobject.py:1463
> +#, python-brace-format
> +msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
> +msgstr ""
> +
> +#: ../semanage/seobject.py:1476
>   msgid "Could not list the ibpkeys"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1496
> +#: ../semanage/seobject.py:1491
>   #, python-format
>   msgid "Could not delete the ibpkey %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1513
> -#, python-format
> -msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
> +#: ../semanage/seobject.py:1508
> +#, python-brace-format
> +msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1517
> -#, python-format
> -msgid "Could not delete ibpkey %s/%s"
> +#: ../semanage/seobject.py:1512
> +#, python-brace-format
> +msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
> +#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
>   msgid "Could not list ibpkeys"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1589
> +#: ../semanage/seobject.py:1584
>   msgid "SELinux IB Pkey Type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1589
> +#: ../semanage/seobject.py:1584
>   msgid "Subnet_Prefix"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1589
> +#: ../semanage/seobject.py:1584
>   msgid "Pkey Number"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1611
> +#: ../semanage/seobject.py:1606
>   msgid "IB device name is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1616
> +#: ../semanage/seobject.py:1611
>   msgid "Invalid Port Number"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1620
> -#, python-format
> -msgid "Could not create a key for ibendport %s/%s"
> +#: ../semanage/seobject.py:1615
> +#, python-brace-format
> +msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
> +#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
>   #, python-format
>   msgid "Type %s is invalid, must be an ibendport type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
> -#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
> -#, python-format
> -msgid "Could not check if ibendport %s/%s is defined"
> +#: ../semanage/seobject.py:1636
> +#, python-brace-format
> +msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1643
> -#, python-format
> -msgid "ibendport %s/%s already defined"
> +#: ../semanage/seobject.py:1638
> +#, python-brace-format
> +msgid "ibendport {ibdev_name}/{port} already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1647
> -#, python-format
> -msgid "Could not create ibendport for %s/%s"
> +#: ../semanage/seobject.py:1642
> +#, python-brace-format
> +msgid "Could not create ibendport for {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1657
> -#, python-format
> -msgid "Could not set user in ibendport context for %s/%s"
> +#: ../semanage/seobject.py:1648
> +#, python-brace-format
> +msgid "Could not create context for {ibendport}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1661
> -#, python-format
> -msgid "Could not set role in ibendport context for %s/%s"
> +#: ../semanage/seobject.py:1652
> +#, python-brace-format
> +msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
> +msgstr ""
> +
> +#: ../semanage/seobject.py:1656
> +#, python-brace-format
> +msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
> +msgstr ""
> +
> +#: ../semanage/seobject.py:1660
> +#, python-brace-format
> +msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
>   msgstr ""
>   
>   #: ../semanage/seobject.py:1665
> -#, python-format
> -msgid "Could not set type in ibendport context for %s/%s"
> +#, python-brace-format
> +msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1670
> -#, python-format
> -msgid "Could not set mls fields in ibendport context for %s/%s"
> +#: ../semanage/seobject.py:1669
> +#, python-brace-format
> +msgid "Could not set ibendport context for {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1674
> -#, python-format
> -msgid "Could not set ibendport context for %s/%s"
> +#: ../semanage/seobject.py:1673
> +#, python-brace-format
> +msgid "Could not add ibendport {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1678
> -#, python-format
> -msgid "Could not add ibendport %s/%s"
> +#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
> +#: ../semanage/seobject.py:1758
> +#, python-brace-format
> +msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
> -#, python-format
> -msgid "ibendport %s/%s is not defined"
> +#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
> +#, python-brace-format
> +msgid "ibendport {ibdev_name}/{ibendport} is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1711
> -#, python-format
> -msgid "Could not query ibendport %s/%s"
> +#: ../semanage/seobject.py:1706
> +#, python-brace-format
> +msgid "Could not query ibendport {ibdev_name}/{ibendport}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1722
> -#, python-format
> -msgid "Could not modify ibendport %s/%s"
> +#: ../semanage/seobject.py:1717
> +#, python-brace-format
> +msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1735
> +#: ../semanage/seobject.py:1730
>   msgid "Could not list the ibendports"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1744
> -#, python-format
> -msgid "Could not create a key for %s/%d"
> +#: ../semanage/seobject.py:1739
> +#, python-brace-format
> +msgid "Could not create a key for {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1748
> -#, python-format
> -msgid "Could not delete the ibendport %s/%d"
> +#: ../semanage/seobject.py:1743
> +#, python-brace-format
> +msgid "Could not delete the ibendport {ibdev_name}/{port}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1765
> -#, python-format
> -msgid "ibendport %s/%s is defined in policy, cannot be deleted"
> +#: ../semanage/seobject.py:1760
> +#, python-brace-format
> +msgid ""
> +"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1769
> -#, python-format
> -msgid "Could not delete ibendport %s/%s"
> +#: ../semanage/seobject.py:1764
> +#, python-brace-format
> +msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
> +#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
>   msgid "Could not list ibendports"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1835
> +#: ../semanage/seobject.py:1830
>   msgid "SELinux IB End Port Type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1835
> +#: ../semanage/seobject.py:1830
>   msgid "IB Device Name"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1861
> +#: ../semanage/seobject.py:1856
>   msgid "Node Address is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
> +#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
>   msgid "Unknown or missing protocol"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1899
> +#: ../semanage/seobject.py:1894
>   msgid "SELinux node type is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
> +#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
>   #, python-format
>   msgid "Type %s is invalid, must be a node type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
> -#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
> -#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
> -#: ../semanage/seobject.py:2435
> +#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
> +#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
> +#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
> +#: ../semanage/seobject.py:2430
>   #, python-format
>   msgid "Could not create key for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
> -#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
> +#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
> +#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
>   #, python-format
>   msgid "Could not check if addr %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1914
> +#: ../semanage/seobject.py:1909
>   #, python-format
>   msgid "Addr %s already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1918
> +#: ../semanage/seobject.py:1913
>   #, python-format
>   msgid "Could not create addr for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
> -#: ../semanage/seobject.py:2389
> +#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
> +#: ../semanage/seobject.py:2384
>   #, python-format
>   msgid "Could not create context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1928
> +#: ../semanage/seobject.py:1923
>   #, python-format
>   msgid "Could not set mask for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1932
> +#: ../semanage/seobject.py:1927
>   #, python-format
>   msgid "Could not set user in addr context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1936
> +#: ../semanage/seobject.py:1931
>   #, python-format
>   msgid "Could not set role in addr context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1940
> +#: ../semanage/seobject.py:1935
>   #, python-format
>   msgid "Could not set type in addr context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1945
> +#: ../semanage/seobject.py:1940
>   #, python-format
>   msgid "Could not set mls fields in addr context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1949
> +#: ../semanage/seobject.py:1944
>   #, python-format
>   msgid "Could not set addr context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1953
> +#: ../semanage/seobject.py:1948
>   #, python-format
>   msgid "Could not add addr %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
> +#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
>   #, python-format
>   msgid "Addr %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1989
> +#: ../semanage/seobject.py:1984
>   #, python-format
>   msgid "Could not query addr %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:1999
> +#: ../semanage/seobject.py:1994
>   #, python-format
>   msgid "Could not modify addr %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2028
> +#: ../semanage/seobject.py:2023
>   #, python-format
>   msgid "Addr %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2032
> +#: ../semanage/seobject.py:2027
>   #, python-format
>   msgid "Could not delete addr %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2046
> +#: ../semanage/seobject.py:2041
>   msgid "Could not deleteall node mappings"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2060
> +#: ../semanage/seobject.py:2055
>   msgid "Could not list addrs"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
> +#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
>   msgid "SELinux Type is required"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
> -#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
> +#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
> +#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
>   #, python-format
>   msgid "Could not check if interface %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2123
> +#: ../semanage/seobject.py:2118
>   #, python-format
>   msgid "Interface %s already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2127
> +#: ../semanage/seobject.py:2122
>   #, python-format
>   msgid "Could not create interface for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2136
> +#: ../semanage/seobject.py:2131
>   #, python-format
>   msgid "Could not set user in interface context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2140
> +#: ../semanage/seobject.py:2135
>   #, python-format
>   msgid "Could not set role in interface context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2144
> +#: ../semanage/seobject.py:2139
>   #, python-format
>   msgid "Could not set type in interface context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2149
> +#: ../semanage/seobject.py:2144
>   #, python-format
>   msgid "Could not set mls fields in interface context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2153
> +#: ../semanage/seobject.py:2148
>   #, python-format
>   msgid "Could not set interface context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2157
> +#: ../semanage/seobject.py:2152
>   #, python-format
>   msgid "Could not set message context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2161
> +#: ../semanage/seobject.py:2156
>   #, python-format
>   msgid "Could not add interface %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
> +#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
>   #, python-format
>   msgid "Interface %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2190
> +#: ../semanage/seobject.py:2185
>   #, python-format
>   msgid "Could not query interface %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2201
> +#: ../semanage/seobject.py:2196
>   #, python-format
>   msgid "Could not modify interface %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2228
> +#: ../semanage/seobject.py:2223
>   #, python-format
>   msgid "Interface %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2232
> +#: ../semanage/seobject.py:2227
>   #, python-format
>   msgid "Could not delete interface %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2246
> +#: ../semanage/seobject.py:2241
>   msgid "Could not delete all interface  mappings"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2260
> +#: ../semanage/seobject.py:2255
>   msgid "Could not list interfaces"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2285
> +#: ../semanage/seobject.py:2280
>   msgid "SELinux Interface"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
> +#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
>   msgid "Context"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2355
> +#: ../semanage/seobject.py:2350
>   #, python-format
>   msgid "Target %s is not valid. Target is not allowed to end with '/'"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2358
> +#: ../semanage/seobject.py:2353
>   #, python-format
>   msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2361
> +#: ../semanage/seobject.py:2356
>   #, python-format
>   msgid "Equivalence class for %s already exists"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2367
> +#: ../semanage/seobject.py:2362
>   #, python-format
>   msgid "File spec %s conflicts with equivalency rule '%s %s'"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2378
> +#: ../semanage/seobject.py:2373
>   #, python-format
>   msgid "Equivalence class for %s does not exist"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2395
> +#: ../semanage/seobject.py:2390
>   #, python-format
>   msgid "Could not set user in file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2399
> +#: ../semanage/seobject.py:2394
>   #, python-format
>   msgid "Could not set role in file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
> +#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
>   #, python-format
>   msgid "Could not set mls fields in file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2410
> +#: ../semanage/seobject.py:2405
>   msgid "Invalid file specification"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2412
> +#: ../semanage/seobject.py:2407
>   msgid "File specification can not include spaces"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2417
> +#: ../semanage/seobject.py:2412
>   #, python-format
>   msgid ""
>   "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
> +#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
>   #, python-format
>   msgid "Type %s is invalid, must be a file or device type"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
> -#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
> -#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
> +#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
> +#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
> +#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
>   #, python-format
>   msgid "Could not check if file context for %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2447
> +#: ../semanage/seobject.py:2442
>   #, python-format
>   msgid "File context for %s already defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2451
> +#: ../semanage/seobject.py:2446
>   #, python-format
>   msgid "Could not create file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2459
> +#: ../semanage/seobject.py:2454
>   #, python-format
>   msgid "Could not set type in file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
> -#: ../semanage/seobject.py:2543
> +#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
> +#: ../semanage/seobject.py:2538
>   #, python-format
>   msgid "Could not set file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2473
> +#: ../semanage/seobject.py:2468
>   #, python-format
>   msgid "Could not add file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2492
> +#: ../semanage/seobject.py:2487
>   msgid "Requires setype, serange or seuser"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
> +#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
>   #, python-format
>   msgid "Could not query file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
> +#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
>   #, python-format
>   msgid "File context for %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2547
> +#: ../semanage/seobject.py:2542
>   #, python-format
>   msgid "Could not modify file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2565
> +#: ../semanage/seobject.py:2560
>   msgid "Could not list the file contexts"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2579
> +#: ../semanage/seobject.py:2574
>   #, python-format
>   msgid "Could not delete the file context %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2609
> +#: ../semanage/seobject.py:2604
>   #, python-format
>   msgid "File context for %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2615
> +#: ../semanage/seobject.py:2610
>   #, python-format
>   msgid "Could not delete file context for %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2632
> +#: ../semanage/seobject.py:2627
>   msgid "Could not list file contexts"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2636
> +#: ../semanage/seobject.py:2631
>   msgid "Could not list file contexts for home directories"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2640
> +#: ../semanage/seobject.py:2635
>   msgid "Could not list local file contexts"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2677
> +#: ../semanage/seobject.py:2672
>   msgid "SELinux fcontext"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2690
> +#: ../semanage/seobject.py:2685
>   msgid ""
>   "\n"
>   "SELinux Distribution fcontext Equivalence \n"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2695
> +#: ../semanage/seobject.py:2690
>   msgid ""
>   "\n"
>   "SELinux Local fcontext Equivalence \n"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
> -#: ../semanage/seobject.py:2790
> +#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
> +#: ../semanage/seobject.py:2785
>   #, python-format
>   msgid "Could not check if boolean %s is defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
> +#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
>   #, python-format
>   msgid "Boolean %s is not defined"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2739
> +#: ../semanage/seobject.py:2734
>   #, python-format
>   msgid "Could not query file context %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2744
> +#: ../semanage/seobject.py:2739
>   #, python-format
>   msgid "You must specify one of the following values: %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2749
> +#: ../semanage/seobject.py:2744
>   #, python-format
>   msgid "Could not set active value of boolean %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2752
> +#: ../semanage/seobject.py:2747
>   #, python-format
>   msgid "Could not modify boolean %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2768
> -#, python-format
> -msgid "Bad format %s: Record %s"
> +#: ../semanage/seobject.py:2763
> +#, python-brace-format
> +msgid "Bad format {filename}: Record {record}"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2792
> +#: ../semanage/seobject.py:2787
>   #, python-format
>   msgid "Boolean %s is defined in policy, cannot be deleted"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2796
> +#: ../semanage/seobject.py:2791
>   #, python-format
>   msgid "Could not delete boolean %s"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
> +#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
>   msgid "Could not list booleans"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2858
> +#: ../semanage/seobject.py:2853
>   msgid "off"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2858
> +#: ../semanage/seobject.py:2853
>   msgid "on"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2870
> +#: ../semanage/seobject.py:2865
>   msgid "SELinux boolean"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2870
> +#: ../semanage/seobject.py:2865
>   msgid "State"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2870
> +#: ../semanage/seobject.py:2865
>   msgid "Default"
>   msgstr ""
>   
> -#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
> +#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
>   #: ../sepolicy/sepolicy/sepolicy.glade:2510
>   #: ../sepolicy/sepolicy/sepolicy.glade:5099
>   msgid "Description"
> @@ -1555,151 +1566,151 @@ msgstr ""
>   msgid "Missing interface definition for %s"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:140
> +#: ../sepolicy/sepolicy/generate.py:138
>   msgid "Standard Init Daemon"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:141
> +#: ../sepolicy/sepolicy/generate.py:139
>   msgid "DBUS System Daemon"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:142
> +#: ../sepolicy/sepolicy/generate.py:140
>   msgid "Internet Services Daemon"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:143
> +#: ../sepolicy/sepolicy/generate.py:141
>   msgid "Web Application/Script (CGI)"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:144
> +#: ../sepolicy/sepolicy/generate.py:142
>   msgid "Sandbox"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:145
> +#: ../sepolicy/sepolicy/generate.py:143
>   msgid "User Application"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:146
> +#: ../sepolicy/sepolicy/generate.py:144
>   msgid "Existing Domain Type"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:147
> +#: ../sepolicy/sepolicy/generate.py:145
>   msgid "Minimal Terminal Login User Role"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:148
> +#: ../sepolicy/sepolicy/generate.py:146
>   msgid "Minimal X Windows Login User Role"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:149
> +#: ../sepolicy/sepolicy/generate.py:147
>   msgid "Desktop Login User Role"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:150
> +#: ../sepolicy/sepolicy/generate.py:148
>   msgid "Administrator Login User Role"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:151
> +#: ../sepolicy/sepolicy/generate.py:149
>   msgid "Confined Root Administrator Role"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:152
> +#: ../sepolicy/sepolicy/generate.py:150
>   msgid "Module information for a new type"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:158
> +#: ../sepolicy/sepolicy/generate.py:156
>   msgid "Valid Types:\n"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:193
> +#: ../sepolicy/sepolicy/generate.py:191
>   #, python-format
>   msgid "Ports must be numbers or ranges of numbers from 1 to %d "
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:205
> +#: ../sepolicy/sepolicy/generate.py:203
>   msgid "You must enter a valid policy type"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:208
> +#: ../sepolicy/sepolicy/generate.py:206
>   #, python-format
>   msgid "You must enter a name for your policy module for your '%s'."
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:346
> +#: ../sepolicy/sepolicy/generate.py:344
>   msgid ""
>   "Name must be alphanumeric with no spaces. Consider using option \"-n "
>   "MODULENAME\""
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:438
> +#: ../sepolicy/sepolicy/generate.py:436
>   msgid "User Role types can not be assigned executables."
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:444
> +#: ../sepolicy/sepolicy/generate.py:442
>   msgid "Only Daemon apps can use an init script."
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:462
> +#: ../sepolicy/sepolicy/generate.py:460
>   msgid "use_resolve must be a boolean value "
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:468
> +#: ../sepolicy/sepolicy/generate.py:466
>   msgid "use_syslog must be a boolean value "
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:474
> +#: ../sepolicy/sepolicy/generate.py:472
>   msgid "use_kerberos must be a boolean value "
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:480
> +#: ../sepolicy/sepolicy/generate.py:478
>   msgid "manage_krb5_rcache must be a boolean value "
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:510
> +#: ../sepolicy/sepolicy/generate.py:508
>   msgid "USER Types automatically get a tmp type"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:847
> +#: ../sepolicy/sepolicy/generate.py:845
>   #, python-format
>   msgid "'%s' policy modules require existing domains"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:872
> +#: ../sepolicy/sepolicy/generate.py:870
>   msgid "Type field required"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:885
> +#: ../sepolicy/sepolicy/generate.py:883
>   #, python-format
>   msgid ""
>   "You need to define a new type which ends with: \n"
>   " %s"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1113
> +#: ../sepolicy/sepolicy/generate.py:1111
>   msgid "You must enter the executable path for your confined process"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1378
> +#: ../sepolicy/sepolicy/generate.py:1376
>   msgid "Created the following files:\n"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1379
> +#: ../sepolicy/sepolicy/generate.py:1377
>   msgid "Type Enforcement file"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1380
> +#: ../sepolicy/sepolicy/generate.py:1378
>   msgid "Interface file"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1381
> +#: ../sepolicy/sepolicy/generate.py:1379
>   msgid "File Contexts file"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1383
> +#: ../sepolicy/sepolicy/generate.py:1381
>   msgid "Spec file"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/generate.py:1384
> +#: ../sepolicy/sepolicy/generate.py:1382
>   msgid "Setup Script"
>   msgstr ""
>   
> @@ -2367,29 +2378,29 @@ msgstr ""
>   msgid "named pipe"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:148
> +#: ../sepolicy/sepolicy/__init__.py:149
>   msgid "No SELinux Policy installed"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:184
> +#: ../sepolicy/sepolicy/__init__.py:185
>   #, python-format
>   msgid "Failed to read %s policy file"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:470
> +#: ../sepolicy/sepolicy/__init__.py:471
>   #, python-format
>   msgid "-- Allowed %s [ %s ]"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:896
> +#: ../sepolicy/sepolicy/__init__.py:897
>   msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:1221
> +#: ../sepolicy/sepolicy/__init__.py:1230
>   msgid "unknown"
>   msgstr ""
>   
> -#: ../sepolicy/sepolicy/__init__.py:1230
> +#: ../sepolicy/sepolicy/__init__.py:1239
>   #, python-brace-format
>   msgid "Allow {subject} to {rest}"
>   msgstr ""

For all four patches:
Reviewed-by: Vit Mojzis <vmojzis@redhat.com>


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v4 4/4] python: update python.pot
  2023-06-13 12:37               ` Vit Mojzis
@ 2023-06-27 13:55                 ` Petr Lautrbach
  2023-07-06 13:39                   ` James Carter
  0 siblings, 1 reply; 26+ messages in thread
From: Petr Lautrbach @ 2023-06-27 13:55 UTC (permalink / raw)
  To: Vit Mojzis, selinux

Vit Mojzis <vmojzis@redhat.com> writes:

> On 6/13/23 13:20, Petr Lautrbach wrote:
>> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>

> For all four patches:
> Reviewed-by: Vit Mojzis <vmojzis@redhat.com>

Thanks.


If there's no objection I'd like to merge this soon.


>> ---
>>   python/po/python.pot | 963 ++++++++++++++++++++++---------------------
>>   1 file changed, 487 insertions(+), 476 deletions(-)
>> 
>> diff --git a/python/po/python.pot b/python/po/python.pot
>> index 16d04eb0f18e..435a1b764e34 100644
>> --- a/python/po/python.pot
>> +++ b/python/po/python.pot
>> @@ -8,7 +8,7 @@ msgid ""
>>   msgstr ""
>>   "Project-Id-Version: PACKAGE VERSION\n"
>>   "Report-Msgid-Bugs-To: \n"
>> -"POT-Creation-Date: 2023-01-18 11:57+0100\n"
>> +"POT-Creation-Date: 2023-06-12 18:13+0200\n"
>>   "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
>>   "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
>>   "Language-Team: LANGUAGE <LL@li.org>\n"
>> @@ -17,17 +17,12 @@ msgstr ""
>>   "Content-Type: text/plain; charset=UTF-8\n"
>>   "Content-Transfer-Encoding: 8bit\n"
>>   
>> -#: ../audit2allow/audit2allow:239
>> -msgid "******************** IMPORTANT ***********************\n"
>> +#: ../audit2allow/audit2allow:244
>> +msgid "IMPORTANT"
>>   msgstr ""
>>   
>> -#: ../audit2allow/audit2allow:240
>> -#, python-format
>> -msgid ""
>> -"To make this policy package active, execute:\n"
>> -"\n"
>> -"semodule -i %s\n"
>> -"\n"
>> +#: ../audit2allow/audit2allow:245
>> +msgid "To make this policy package active, execute:"
>>   msgstr ""
>>   
>>   #: ../chcat/chcat:111 ../chcat/chcat:191
>> @@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
>>   msgstr ""
>>   
>>   #: ../chcat/chcat:128
>> -#, python-format
>> -msgid "%s is already in %s"
>> +#, python-brace-format
>> +msgid "{target} is already in {category}"
>>   msgstr ""
>>   
>>   #: ../chcat/chcat:210 ../chcat/chcat:220
>> -#, python-format
>> -msgid "%s is not in %s"
>> +#, python-brace-format
>> +msgid "{target} is not in {category}"
>>   msgstr ""
>>   
>>   #: ../chcat/chcat:291 ../chcat/chcat:296
>> @@ -152,218 +147,222 @@ msgstr ""
>>   
>>   #: ../semanage/semanage:242
>>   msgid ""
>> -"\n"
>> -"MLS/MCS Security Range (MLS/MCS Systems only)\n"
>> -"SELinux Range  for SELinux login mapping\n"
>> -"defaults to the SELinux user record range.\n"
>> -"SELinux Range for SELinux user defaults to s0.\n"
>> +"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
>> +"login mapping defaults to the SELinux user record range. SELinux Range for "
>> +"SELinux user defaults to s0."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:251
>> +#: ../semanage/semanage:249
>>   msgid ""
>> -"\n"
>> -"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
>> -"protocol\n"
>> -"    version for the specified node (ipv4|ipv6).\n"
>> +"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
>> +"version for the specified node (ipv4|ipv6)."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:257
>> -msgid ""
>> -"\n"
>> -"    Subnet prefix for  the specified infiniband ibpkey.\n"
>> +#: ../semanage/semanage:253
>> +msgid "Subnet prefix for  the specified infiniband ibpkey."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:262
>> -msgid ""
>> -"\n"
>> -"    Name for the specified infiniband end port.\n"
>> +#: ../semanage/semanage:256
>> +msgid "Name for the specified infiniband end port."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:267
>> +#: ../semanage/semanage:259
>>   #, python-format
>>   msgid "Modify a record of the %s object type"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:271
>> +#: ../semanage/semanage:263
>>   #, python-format
>>   msgid "List records of the %s object type"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:275
>> +#: ../semanage/semanage:267
>>   #, python-format
>>   msgid "Delete a record of the %s object type"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:279
>> +#: ../semanage/semanage:271
>>   msgid "Extract customizable commands, for use within a transaction"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:283
>> +#: ../semanage/semanage:275
>>   #, python-format
>>   msgid "Remove all %s objects local customizations"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:287
>> +#: ../semanage/semanage:279
>>   msgid "SELinux user name"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:292
>> +#: ../semanage/semanage:284
>>   msgid "Manage login mappings between linux users and SELinux confined users"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:309
>> +#: ../semanage/semanage:301
>>   #, python-format
>>   msgid "login_name | %%groupname"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:361
>> +#: ../semanage/semanage:344
>>   msgid "Manage file context mapping definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:375
>> +#: ../semanage/semanage:359
>> +msgid ""
>> +"Substitute target path with sourcepath when generating default label. This "
>> +"is used with fcontext. Requires source and target path arguments. The "
>> +"context labeling for the target subtree is made equivalent to that defined "
>> +"for the source."
>> +msgstr ""
>> +
>> +#: ../semanage/semanage:363
>>   msgid ""
>> -"Substitute  target  path with sourcepath when generating default\n"
>> -"                                                                  label.  "
>> -"This is used with fcontext. Requires source  and  target\n"
>> -"                                                                  path  "
>> -"arguments.  The context labeling for the target subtree is\n"
>> -"                                                                  made "
>> -"equivalent to that defined for the source."
>> +"File Type. This is used with fcontext. Requires a file type as shown in the "
>> +"mode field by ls, e.g. use d to match only directories or f to match only "
>> +"regular files. The following file type options can be passed: f (regular "
>> +"file), d (directory), c (character device), b (block device), s (socket), l "
>> +"(symbolic link), p (named pipe). If you do not specify a file type, the file "
>> +"type will default to \"all files\"."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:383
>> +#: ../semanage/semanage:371
>>   msgid ""
>>   "Path to be labeled (may be in the form of a Perl compatible regular "
>>   "expression)"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:411
>> +#: ../semanage/semanage:399
>>   msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:429
>> +#: ../semanage/semanage:417
>>   msgid ""
>> -"\n"
>> -"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
>> -"spaces. Or specify -R multiple times.\n"
>> +"SELinux Roles. You must enclose multiple roles within quotes, separate by "
>> +"spaces. Or specify -R multiple times."
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:433
>> +#: ../semanage/semanage:419
>>   msgid "selinux_name"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:461
>> +#: ../semanage/semanage:447
>>   msgid "Manage network port type definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:477
>> +#: ../semanage/semanage:463
>>   msgid "port | port_range"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:506
>> +#: ../semanage/semanage:492
>>   msgid "Manage infiniband ibpkey type definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:522
>> +#: ../semanage/semanage:508
>>   msgid "pkey | pkey_range"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:549
>> +#: ../semanage/semanage:535
>>   msgid "Manage infiniband end port type definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:565
>> +#: ../semanage/semanage:551
>>   msgid "ibendport"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:592
>> +#: ../semanage/semanage:578
>>   msgid "Manage network interface type definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:607
>> +#: ../semanage/semanage:593
>>   msgid "interface_spec"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:631
>> +#: ../semanage/semanage:617
>>   msgid "Manage SELinux policy modules"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:642
>> +#: ../semanage/semanage:628
>>   msgid "Add a module"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:643
>> +#: ../semanage/semanage:629
>>   msgid "Remove a module"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:644
>> +#: ../semanage/semanage:630
>>   msgid "Disable a module"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:645
>> +#: ../semanage/semanage:631
>>   msgid "Enable a module"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:672
>> +#: ../semanage/semanage:658
>>   msgid "Manage network node type definitions"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:686
>> +#: ../semanage/semanage:672
>>   msgid "Network Mask"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:690
>> +#: ../semanage/semanage:676
>>   msgid "node"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:715
>> +#: ../semanage/semanage:701
>>   msgid "Manage booleans to selectively enable functionality"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:720
>> +#: ../semanage/semanage:706
>>   msgid "boolean"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:730
>> +#: ../semanage/semanage:716
>>   msgid "Enable the boolean"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:731
>> +#: ../semanage/semanage:717
>>   msgid "Disable the boolean"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:752
>> +#: ../semanage/semanage:738
>>   msgid "semanage permissive: error: the following argument is required: type\n"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:756
>> +#: ../semanage/semanage:742
>>   msgid "Manage process type enforcement mode"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:768 ../semanage/seobject.py:2677
>> +#: ../semanage/semanage:754 ../semanage/seobject.py:2672
>>   msgid "type"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:779
>> +#: ../semanage/semanage:765
>>   msgid "Disable/Enable dontaudit rules in policy"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:799
>> +#: ../semanage/semanage:785
>>   msgid "Output local customizations"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:801
>> +#: ../semanage/semanage:787
>>   msgid "Output file"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:894
>> +#: ../semanage/semanage:880
>>   msgid "Import local customizations"
>>   msgstr ""
>>   
>> -#: ../semanage/semanage:897
>> +#: ../semanage/semanage:883
>>   msgid "Input file"
>>   msgstr ""
>>   
>> +#: ../semanage/semanage:891
>> +msgid ""
>> +"semanage is used to configure certain elements of SELinux policy with-out "
>> +"requiring modification or recompilation from policy source."
>> +msgstr ""
>> +
>>   #: ../semanage/seobject.py:279
>>   msgid "Could not create semanage handle"
>>   msgstr ""
>> @@ -485,123 +484,115 @@ msgstr ""
>>   msgid "Customized Permissive Types"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:510
>> -msgid ""
>> -"The sepolgen python module is required to setup permissive domains.\n"
>> -"In some distributions it is included in the policycoreutils-devel package.\n"
>> -"# yum install policycoreutils-devel\n"
>> -"Or similar for your distro."
>> -msgstr ""
>> -
>> -#: ../semanage/seobject.py:520
>> +#: ../semanage/seobject.py:515
>>   #, python-format
>>   msgid "Could not set permissive domain %s (module installation failed)"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:526
>> +#: ../semanage/seobject.py:521
>>   #, python-format
>>   msgid "Could not remove permissive domain %s (remove failed)"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
>> -#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
>> -#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
>> -#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
>> -#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
>> -#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
>> -#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
>> +#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
>> +#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
>> +#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
>> +#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
>> +#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
>> +#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
>> +#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
>>   #, python-format
>>   msgid "Could not create a key for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
>> -#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
>> +#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
>> +#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
>>   #, python-format
>>   msgid "Could not check if login mapping for %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:569
>> +#: ../semanage/seobject.py:564
>>   #, python-format
>>   msgid "Login mapping for %s is already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:574
>> +#: ../semanage/seobject.py:569
>>   #, python-format
>>   msgid "Linux Group %s does not exist"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:579
>> +#: ../semanage/seobject.py:574
>>   #, python-format
>>   msgid "Linux User %s does not exist"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:583
>> +#: ../semanage/seobject.py:578
>>   #, python-format
>>   msgid "Could not create login mapping for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
>> +#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
>>   #, python-format
>>   msgid "Could not set name for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
>> +#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
>>   #, python-format
>>   msgid "Could not set MLS range for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:596
>> +#: ../semanage/seobject.py:591
>>   #, python-format
>>   msgid "Could not set SELinux user for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:600
>> +#: ../semanage/seobject.py:595
>>   #, python-format
>>   msgid "Could not add login mapping for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:616
>> +#: ../semanage/seobject.py:611
>>   msgid "Requires seuser or serange"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
>> +#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
>>   #, python-format
>>   msgid "Login mapping for %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:643
>> +#: ../semanage/seobject.py:638
>>   #, python-format
>>   msgid "Could not query seuser for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:658
>> +#: ../semanage/seobject.py:653
>>   #, python-format
>>   msgid "Could not modify login mapping for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:690
>> +#: ../semanage/seobject.py:685
>>   #, python-format
>>   msgid "Login mapping for %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:694
>> +#: ../semanage/seobject.py:689
>>   #, python-format
>>   msgid "Could not delete login mapping for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
>> -#: ../semanage/seobject.py:991
>> +#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
>> +#: ../semanage/seobject.py:986
>>   msgid "Could not list login mappings"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
>> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
>>   #: ../sepolicy/sepolicy/sepolicy.glade:1156
>>   #: ../sepolicy/sepolicy/sepolicy.glade:3138
>>   msgid "Login Name"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
>> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
>> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
>> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
>>   #: ../sepolicy/sepolicy/sepolicy.glade:1182
>>   #: ../sepolicy/sepolicy/sepolicy.glade:3156
>>   #: ../sepolicy/sepolicy/sepolicy.glade:3242
>> @@ -609,938 +600,958 @@ msgstr ""
>>   msgid "SELinux User"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:772
>> +#: ../semanage/seobject.py:767
>>   msgid "MLS/MCS Range"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:772
>> +#: ../semanage/seobject.py:767
>>   msgid "Service"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
>> -#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
>> -#: ../semanage/seobject.py:958
>> +#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
>> +#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
>> +#: ../semanage/seobject.py:953
>>   #, python-format
>>   msgid "Could not check if SELinux user %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
>> -#: ../semanage/seobject.py:964
>> +#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
>> +#: ../semanage/seobject.py:959
>>   #, python-format
>>   msgid "Could not query user for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:823
>> +#: ../semanage/seobject.py:818
>>   #, python-format
>>   msgid "You must add at least one role for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:833
>> +#: ../semanage/seobject.py:828
>>   #, python-format
>>   msgid "SELinux user %s is already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:837
>> +#: ../semanage/seobject.py:832
>>   #, python-format
>>   msgid "Could not create SELinux user for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:846
>> -#, python-format
>> -msgid "Could not add role %s for %s"
>> +#: ../semanage/seobject.py:841
>> +#, python-brace-format
>> +msgid "Could not add role {role} for {name}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:855
>> +#: ../semanage/seobject.py:850
>>   #, python-format
>>   msgid "Could not set MLS level for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:858
>> -#, python-format
>> -msgid "Could not add prefix %s for %s"
>> +#: ../semanage/seobject.py:853
>> +#, python-brace-format
>> +msgid "Could not add prefix {prefix} for {role}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:861
>> +#: ../semanage/seobject.py:856
>>   #, python-format
>>   msgid "Could not extract key for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:865
>> +#: ../semanage/seobject.py:860
>>   #, python-format
>>   msgid "Could not add SELinux user %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:886
>> +#: ../semanage/seobject.py:881
>>   msgid "Requires prefix, roles, level or range"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:888
>> +#: ../semanage/seobject.py:883
>>   msgid "Requires prefix or roles"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
>> +#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
>>   #, python-format
>>   msgid "SELinux user %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:927
>> +#: ../semanage/seobject.py:922
>>   #, python-format
>>   msgid "Could not modify SELinux user %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:960
>> +#: ../semanage/seobject.py:955
>>   #, python-format
>>   msgid "SELinux user %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:971
>> +#: ../semanage/seobject.py:966
>>   #, python-format
>>   msgid "Could not delete SELinux user %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1009
>> +#: ../semanage/seobject.py:1004
>>   msgid "Could not list SELinux users"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1015
>> +#: ../semanage/seobject.py:1010
>>   #, python-format
>>   msgid "Could not list roles for user %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1040
>> +#: ../semanage/seobject.py:1035
>>   msgid "Labeling"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1040
>> +#: ../semanage/seobject.py:1035
>>   msgid "MLS/"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1041
>> +#: ../semanage/seobject.py:1036
>>   msgid "Prefix"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1041
>> +#: ../semanage/seobject.py:1036
>>   msgid "MCS Level"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1041
>> +#: ../semanage/seobject.py:1036
>>   msgid "MCS Range"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
>> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
>>   #: ../sepolicy/sepolicy/sepolicy.glade:3262
>>   #: ../sepolicy/sepolicy/sepolicy.glade:5233
>>   #: ../sepolicy/sepolicy/sepolicy.glade:5382
>>   msgid "SELinux Roles"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1071
>> +#: ../semanage/seobject.py:1066
>>   msgid "Protocol has to be one of udp, tcp, dccp or sctp"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1073
>> +#: ../semanage/seobject.py:1068
>>   msgid "Port is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1087
>> +#: ../semanage/seobject.py:1082
>>   msgid "Invalid Port"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
>> -#, python-format
>> -msgid "Could not create a key for %s/%s"
>> +#: ../semanage/seobject.py:1086
>> +#, python-brace-format
>> +msgid "Could not create a key for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
>> -#: ../semanage/seobject.py:1631
>> +#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
>> +#: ../semanage/seobject.py:1626
>>   msgid "Type is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
>> +#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
>>   #, python-format
>>   msgid "Type %s is invalid, must be a port type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
>> -#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
>> -#, python-format
>> -msgid "Could not check if port %s/%s is defined"
>> +#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
>> +#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
>> +#, python-brace-format
>> +msgid "Could not check if port {proto}/{port} is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1115
>> -#, python-format
>> -msgid "Port %s/%s already defined"
>> +#: ../semanage/seobject.py:1110
>> +#, python-brace-format
>> +msgid "Port {proto}/{port} already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1119
>> -#, python-format
>> -msgid "Could not create port for %s/%s"
>> +#: ../semanage/seobject.py:1114
>> +#, python-brace-format
>> +msgid "Could not create port for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
>> -#: ../semanage/seobject.py:1653
>> -#, python-format
>> -msgid "Could not create context for %s/%s"
>> +#: ../semanage/seobject.py:1120
>> +#, python-brace-format
>> +msgid "Could not create context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1129
>> -#, python-format
>> -msgid "Could not set user in port context for %s/%s"
>> +#: ../semanage/seobject.py:1124
>> +#, python-brace-format
>> +msgid "Could not set user in port context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1133
>> -#, python-format
>> -msgid "Could not set role in port context for %s/%s"
>> +#: ../semanage/seobject.py:1128
>> +#, python-brace-format
>> +msgid "Could not set role in port context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1137
>> -#, python-format
>> -msgid "Could not set type in port context for %s/%s"
>> +#: ../semanage/seobject.py:1132
>> +#, python-brace-format
>> +msgid "Could not set type in port context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1142
>> -#, python-format
>> -msgid "Could not set mls fields in port context for %s/%s"
>> +#: ../semanage/seobject.py:1137
>> +#, python-brace-format
>> +msgid "Could not set mls fields in port context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1146
>> -#, python-format
>> -msgid "Could not set port context for %s/%s"
>> +#: ../semanage/seobject.py:1141
>> +#, python-brace-format
>> +msgid "Could not set port context for {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1150
>> -#, python-format
>> -msgid "Could not add port %s/%s"
>> +#: ../semanage/seobject.py:1145
>> +#, python-brace-format
>> +msgid "Could not add port {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
>> -#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
>> -#: ../semanage/seobject.py:2176
>> +#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
>> +#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
>> +#: ../semanage/seobject.py:2171
>>   msgid "Requires setype or serange"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
>> -#: ../semanage/seobject.py:1694
>> +#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
>> +#: ../semanage/seobject.py:1689
>>   msgid "Requires setype"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
>> -#, python-format
>> -msgid "Port %s/%s is not defined"
>> +#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
>> +#, python-brace-format
>> +msgid "Port {proto}/{port} is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1184
>> -#, python-format
>> -msgid "Could not query port %s/%s"
>> +#: ../semanage/seobject.py:1179
>> +#, python-brace-format
>> +msgid "Could not query port {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1198
>> -#, python-format
>> -msgid "Could not modify port %s/%s"
>> +#: ../semanage/seobject.py:1193
>> +#, python-brace-format
>> +msgid "Could not modify port {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1213
>> +#: ../semanage/seobject.py:1208
>>   msgid "Could not list the ports"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1230
>> +#: ../semanage/seobject.py:1225
>>   #, python-format
>>   msgid "Could not delete the port %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1252
>> -#, python-format
>> -msgid "Port %s/%s is defined in policy, cannot be deleted"
>> +#: ../semanage/seobject.py:1247
>> +#, python-brace-format
>> +msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1256
>> -#, python-format
>> -msgid "Could not delete port %s/%s"
>> +#: ../semanage/seobject.py:1251
>> +#, python-brace-format
>> +msgid "Could not delete port {proto}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
>> +#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
>>   msgid "Could not list ports"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
>> +#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
>>   #: ../sepolicy/sepolicy/sepolicy.glade:2766
>>   #: ../sepolicy/sepolicy/sepolicy.glade:4630
>>   msgid "SELinux Port Type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1329
>> +#: ../semanage/seobject.py:1324
>>   msgid "Proto"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
>> +#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
>>   #: ../sepolicy/sepolicy/sepolicy.glade:1407
>>   msgid "Port Number"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1351
>> +#: ../semanage/seobject.py:1346
>>   msgid "Subnet Prefix is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1361
>> +#: ../semanage/seobject.py:1356
>>   msgid "Invalid Pkey"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
>> +#: ../semanage/seobject.py:1360
>> +#, python-brace-format
>> +msgid "Could not create a key for {subnet_prefix}/{pkey}"
>> +msgstr ""
>> +
>> +#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
>>   #, python-format
>>   msgid "Type %s is invalid, must be a ibpkey type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
>> -#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
>> -#, python-format
>> -msgid "Could not check if ibpkey %s/%s is defined"
>> +#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
>> +#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
>> +#, python-brace-format
>> +msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1389
>> -#, python-format
>> -msgid "ibpkey %s/%s already defined"
>> +#: ../semanage/seobject.py:1384
>> +#, python-brace-format
>> +msgid "ibpkey {subnet_prefix}/{pkey} already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1393
>> -#, python-format
>> -msgid "Could not create ibpkey for %s/%s"
>> +#: ../semanage/seobject.py:1388
>> +#, python-brace-format
>> +msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1403
>> -#, python-format
>> -msgid "Could not set user in ibpkey context for %s/%s"
>> +#: ../semanage/seobject.py:1394
>> +#, python-brace-format
>> +msgid "Could not create context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1407
>> -#, python-format
>> -msgid "Could not set role in ibpkey context for %s/%s"
>> +#: ../semanage/seobject.py:1398
>> +#, python-brace-format
>> +msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1411
>> -#, python-format
>> -msgid "Could not set type in ibpkey context for %s/%s"
>> +#: ../semanage/seobject.py:1402
>> +#, python-brace-format
>> +msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1416
>> -#, python-format
>> -msgid "Could not set mls fields in ibpkey context for %s/%s"
>> +#: ../semanage/seobject.py:1406
>> +#, python-brace-format
>> +msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1420
>> -#, python-format
>> -msgid "Could not set ibpkey context for %s/%s"
>> +#: ../semanage/seobject.py:1411
>> +#, python-brace-format
>> +msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1424
>> -#, python-format
>> -msgid "Could not add ibpkey %s/%s"
>> +#: ../semanage/seobject.py:1415
>> +#, python-brace-format
>> +msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
>> -#, python-format
>> -msgid "ibpkey %s/%s is not defined"
>> +#: ../semanage/seobject.py:1419
>> +#, python-brace-format
>> +msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1457
>> -#, python-format
>> -msgid "Could not query ibpkey %s/%s"
>> +#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
>> +#, python-brace-format
>> +msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1468
>> -#, python-format
>> -msgid "Could not modify ibpkey %s/%s"
>> +#: ../semanage/seobject.py:1452
>> +#, python-brace-format
>> +msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1481
>> +#: ../semanage/seobject.py:1463
>> +#, python-brace-format
>> +msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
>> +msgstr ""
>> +
>> +#: ../semanage/seobject.py:1476
>>   msgid "Could not list the ibpkeys"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1496
>> +#: ../semanage/seobject.py:1491
>>   #, python-format
>>   msgid "Could not delete the ibpkey %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1513
>> -#, python-format
>> -msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
>> +#: ../semanage/seobject.py:1508
>> +#, python-brace-format
>> +msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1517
>> -#, python-format
>> -msgid "Could not delete ibpkey %s/%s"
>> +#: ../semanage/seobject.py:1512
>> +#, python-brace-format
>> +msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
>> +#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
>>   msgid "Could not list ibpkeys"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1589
>> +#: ../semanage/seobject.py:1584
>>   msgid "SELinux IB Pkey Type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1589
>> +#: ../semanage/seobject.py:1584
>>   msgid "Subnet_Prefix"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1589
>> +#: ../semanage/seobject.py:1584
>>   msgid "Pkey Number"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1611
>> +#: ../semanage/seobject.py:1606
>>   msgid "IB device name is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1616
>> +#: ../semanage/seobject.py:1611
>>   msgid "Invalid Port Number"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1620
>> -#, python-format
>> -msgid "Could not create a key for ibendport %s/%s"
>> +#: ../semanage/seobject.py:1615
>> +#, python-brace-format
>> +msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
>> +#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
>>   #, python-format
>>   msgid "Type %s is invalid, must be an ibendport type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
>> -#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
>> -#, python-format
>> -msgid "Could not check if ibendport %s/%s is defined"
>> +#: ../semanage/seobject.py:1636
>> +#, python-brace-format
>> +msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1643
>> -#, python-format
>> -msgid "ibendport %s/%s already defined"
>> +#: ../semanage/seobject.py:1638
>> +#, python-brace-format
>> +msgid "ibendport {ibdev_name}/{port} already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1647
>> -#, python-format
>> -msgid "Could not create ibendport for %s/%s"
>> +#: ../semanage/seobject.py:1642
>> +#, python-brace-format
>> +msgid "Could not create ibendport for {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1657
>> -#, python-format
>> -msgid "Could not set user in ibendport context for %s/%s"
>> +#: ../semanage/seobject.py:1648
>> +#, python-brace-format
>> +msgid "Could not create context for {ibendport}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1661
>> -#, python-format
>> -msgid "Could not set role in ibendport context for %s/%s"
>> +#: ../semanage/seobject.py:1652
>> +#, python-brace-format
>> +msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
>> +msgstr ""
>> +
>> +#: ../semanage/seobject.py:1656
>> +#, python-brace-format
>> +msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
>> +msgstr ""
>> +
>> +#: ../semanage/seobject.py:1660
>> +#, python-brace-format
>> +msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
>>   msgstr ""
>>   
>>   #: ../semanage/seobject.py:1665
>> -#, python-format
>> -msgid "Could not set type in ibendport context for %s/%s"
>> +#, python-brace-format
>> +msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1670
>> -#, python-format
>> -msgid "Could not set mls fields in ibendport context for %s/%s"
>> +#: ../semanage/seobject.py:1669
>> +#, python-brace-format
>> +msgid "Could not set ibendport context for {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1674
>> -#, python-format
>> -msgid "Could not set ibendport context for %s/%s"
>> +#: ../semanage/seobject.py:1673
>> +#, python-brace-format
>> +msgid "Could not add ibendport {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1678
>> -#, python-format
>> -msgid "Could not add ibendport %s/%s"
>> +#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
>> +#: ../semanage/seobject.py:1758
>> +#, python-brace-format
>> +msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
>> -#, python-format
>> -msgid "ibendport %s/%s is not defined"
>> +#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
>> +#, python-brace-format
>> +msgid "ibendport {ibdev_name}/{ibendport} is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1711
>> -#, python-format
>> -msgid "Could not query ibendport %s/%s"
>> +#: ../semanage/seobject.py:1706
>> +#, python-brace-format
>> +msgid "Could not query ibendport {ibdev_name}/{ibendport}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1722
>> -#, python-format
>> -msgid "Could not modify ibendport %s/%s"
>> +#: ../semanage/seobject.py:1717
>> +#, python-brace-format
>> +msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1735
>> +#: ../semanage/seobject.py:1730
>>   msgid "Could not list the ibendports"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1744
>> -#, python-format
>> -msgid "Could not create a key for %s/%d"
>> +#: ../semanage/seobject.py:1739
>> +#, python-brace-format
>> +msgid "Could not create a key for {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1748
>> -#, python-format
>> -msgid "Could not delete the ibendport %s/%d"
>> +#: ../semanage/seobject.py:1743
>> +#, python-brace-format
>> +msgid "Could not delete the ibendport {ibdev_name}/{port}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1765
>> -#, python-format
>> -msgid "ibendport %s/%s is defined in policy, cannot be deleted"
>> +#: ../semanage/seobject.py:1760
>> +#, python-brace-format
>> +msgid ""
>> +"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1769
>> -#, python-format
>> -msgid "Could not delete ibendport %s/%s"
>> +#: ../semanage/seobject.py:1764
>> +#, python-brace-format
>> +msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
>> +#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
>>   msgid "Could not list ibendports"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1835
>> +#: ../semanage/seobject.py:1830
>>   msgid "SELinux IB End Port Type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1835
>> +#: ../semanage/seobject.py:1830
>>   msgid "IB Device Name"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1861
>> +#: ../semanage/seobject.py:1856
>>   msgid "Node Address is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
>> +#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
>>   msgid "Unknown or missing protocol"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1899
>> +#: ../semanage/seobject.py:1894
>>   msgid "SELinux node type is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
>> +#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
>>   #, python-format
>>   msgid "Type %s is invalid, must be a node type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
>> -#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
>> -#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
>> -#: ../semanage/seobject.py:2435
>> +#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
>> +#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
>> +#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
>> +#: ../semanage/seobject.py:2430
>>   #, python-format
>>   msgid "Could not create key for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
>> -#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
>> +#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
>> +#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
>>   #, python-format
>>   msgid "Could not check if addr %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1914
>> +#: ../semanage/seobject.py:1909
>>   #, python-format
>>   msgid "Addr %s already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1918
>> +#: ../semanage/seobject.py:1913
>>   #, python-format
>>   msgid "Could not create addr for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
>> -#: ../semanage/seobject.py:2389
>> +#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
>> +#: ../semanage/seobject.py:2384
>>   #, python-format
>>   msgid "Could not create context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1928
>> +#: ../semanage/seobject.py:1923
>>   #, python-format
>>   msgid "Could not set mask for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1932
>> +#: ../semanage/seobject.py:1927
>>   #, python-format
>>   msgid "Could not set user in addr context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1936
>> +#: ../semanage/seobject.py:1931
>>   #, python-format
>>   msgid "Could not set role in addr context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1940
>> +#: ../semanage/seobject.py:1935
>>   #, python-format
>>   msgid "Could not set type in addr context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1945
>> +#: ../semanage/seobject.py:1940
>>   #, python-format
>>   msgid "Could not set mls fields in addr context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1949
>> +#: ../semanage/seobject.py:1944
>>   #, python-format
>>   msgid "Could not set addr context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1953
>> +#: ../semanage/seobject.py:1948
>>   #, python-format
>>   msgid "Could not add addr %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
>> +#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
>>   #, python-format
>>   msgid "Addr %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1989
>> +#: ../semanage/seobject.py:1984
>>   #, python-format
>>   msgid "Could not query addr %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:1999
>> +#: ../semanage/seobject.py:1994
>>   #, python-format
>>   msgid "Could not modify addr %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2028
>> +#: ../semanage/seobject.py:2023
>>   #, python-format
>>   msgid "Addr %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2032
>> +#: ../semanage/seobject.py:2027
>>   #, python-format
>>   msgid "Could not delete addr %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2046
>> +#: ../semanage/seobject.py:2041
>>   msgid "Could not deleteall node mappings"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2060
>> +#: ../semanage/seobject.py:2055
>>   msgid "Could not list addrs"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
>> +#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
>>   msgid "SELinux Type is required"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
>> -#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
>> +#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
>> +#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
>>   #, python-format
>>   msgid "Could not check if interface %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2123
>> +#: ../semanage/seobject.py:2118
>>   #, python-format
>>   msgid "Interface %s already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2127
>> +#: ../semanage/seobject.py:2122
>>   #, python-format
>>   msgid "Could not create interface for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2136
>> +#: ../semanage/seobject.py:2131
>>   #, python-format
>>   msgid "Could not set user in interface context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2140
>> +#: ../semanage/seobject.py:2135
>>   #, python-format
>>   msgid "Could not set role in interface context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2144
>> +#: ../semanage/seobject.py:2139
>>   #, python-format
>>   msgid "Could not set type in interface context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2149
>> +#: ../semanage/seobject.py:2144
>>   #, python-format
>>   msgid "Could not set mls fields in interface context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2153
>> +#: ../semanage/seobject.py:2148
>>   #, python-format
>>   msgid "Could not set interface context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2157
>> +#: ../semanage/seobject.py:2152
>>   #, python-format
>>   msgid "Could not set message context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2161
>> +#: ../semanage/seobject.py:2156
>>   #, python-format
>>   msgid "Could not add interface %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
>> +#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
>>   #, python-format
>>   msgid "Interface %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2190
>> +#: ../semanage/seobject.py:2185
>>   #, python-format
>>   msgid "Could not query interface %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2201
>> +#: ../semanage/seobject.py:2196
>>   #, python-format
>>   msgid "Could not modify interface %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2228
>> +#: ../semanage/seobject.py:2223
>>   #, python-format
>>   msgid "Interface %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2232
>> +#: ../semanage/seobject.py:2227
>>   #, python-format
>>   msgid "Could not delete interface %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2246
>> +#: ../semanage/seobject.py:2241
>>   msgid "Could not delete all interface  mappings"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2260
>> +#: ../semanage/seobject.py:2255
>>   msgid "Could not list interfaces"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2285
>> +#: ../semanage/seobject.py:2280
>>   msgid "SELinux Interface"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
>> +#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
>>   msgid "Context"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2355
>> +#: ../semanage/seobject.py:2350
>>   #, python-format
>>   msgid "Target %s is not valid. Target is not allowed to end with '/'"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2358
>> +#: ../semanage/seobject.py:2353
>>   #, python-format
>>   msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2361
>> +#: ../semanage/seobject.py:2356
>>   #, python-format
>>   msgid "Equivalence class for %s already exists"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2367
>> +#: ../semanage/seobject.py:2362
>>   #, python-format
>>   msgid "File spec %s conflicts with equivalency rule '%s %s'"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2378
>> +#: ../semanage/seobject.py:2373
>>   #, python-format
>>   msgid "Equivalence class for %s does not exist"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2395
>> +#: ../semanage/seobject.py:2390
>>   #, python-format
>>   msgid "Could not set user in file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2399
>> +#: ../semanage/seobject.py:2394
>>   #, python-format
>>   msgid "Could not set role in file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
>> +#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
>>   #, python-format
>>   msgid "Could not set mls fields in file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2410
>> +#: ../semanage/seobject.py:2405
>>   msgid "Invalid file specification"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2412
>> +#: ../semanage/seobject.py:2407
>>   msgid "File specification can not include spaces"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2417
>> +#: ../semanage/seobject.py:2412
>>   #, python-format
>>   msgid ""
>>   "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
>> +#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
>>   #, python-format
>>   msgid "Type %s is invalid, must be a file or device type"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
>> -#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
>> -#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
>> +#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
>> +#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
>> +#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
>>   #, python-format
>>   msgid "Could not check if file context for %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2447
>> +#: ../semanage/seobject.py:2442
>>   #, python-format
>>   msgid "File context for %s already defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2451
>> +#: ../semanage/seobject.py:2446
>>   #, python-format
>>   msgid "Could not create file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2459
>> +#: ../semanage/seobject.py:2454
>>   #, python-format
>>   msgid "Could not set type in file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
>> -#: ../semanage/seobject.py:2543
>> +#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
>> +#: ../semanage/seobject.py:2538
>>   #, python-format
>>   msgid "Could not set file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2473
>> +#: ../semanage/seobject.py:2468
>>   #, python-format
>>   msgid "Could not add file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2492
>> +#: ../semanage/seobject.py:2487
>>   msgid "Requires setype, serange or seuser"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
>> +#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
>>   #, python-format
>>   msgid "Could not query file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
>> +#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
>>   #, python-format
>>   msgid "File context for %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2547
>> +#: ../semanage/seobject.py:2542
>>   #, python-format
>>   msgid "Could not modify file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2565
>> +#: ../semanage/seobject.py:2560
>>   msgid "Could not list the file contexts"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2579
>> +#: ../semanage/seobject.py:2574
>>   #, python-format
>>   msgid "Could not delete the file context %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2609
>> +#: ../semanage/seobject.py:2604
>>   #, python-format
>>   msgid "File context for %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2615
>> +#: ../semanage/seobject.py:2610
>>   #, python-format
>>   msgid "Could not delete file context for %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2632
>> +#: ../semanage/seobject.py:2627
>>   msgid "Could not list file contexts"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2636
>> +#: ../semanage/seobject.py:2631
>>   msgid "Could not list file contexts for home directories"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2640
>> +#: ../semanage/seobject.py:2635
>>   msgid "Could not list local file contexts"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2677
>> +#: ../semanage/seobject.py:2672
>>   msgid "SELinux fcontext"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2690
>> +#: ../semanage/seobject.py:2685
>>   msgid ""
>>   "\n"
>>   "SELinux Distribution fcontext Equivalence \n"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2695
>> +#: ../semanage/seobject.py:2690
>>   msgid ""
>>   "\n"
>>   "SELinux Local fcontext Equivalence \n"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
>> -#: ../semanage/seobject.py:2790
>> +#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
>> +#: ../semanage/seobject.py:2785
>>   #, python-format
>>   msgid "Could not check if boolean %s is defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
>> +#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
>>   #, python-format
>>   msgid "Boolean %s is not defined"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2739
>> +#: ../semanage/seobject.py:2734
>>   #, python-format
>>   msgid "Could not query file context %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2744
>> +#: ../semanage/seobject.py:2739
>>   #, python-format
>>   msgid "You must specify one of the following values: %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2749
>> +#: ../semanage/seobject.py:2744
>>   #, python-format
>>   msgid "Could not set active value of boolean %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2752
>> +#: ../semanage/seobject.py:2747
>>   #, python-format
>>   msgid "Could not modify boolean %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2768
>> -#, python-format
>> -msgid "Bad format %s: Record %s"
>> +#: ../semanage/seobject.py:2763
>> +#, python-brace-format
>> +msgid "Bad format {filename}: Record {record}"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2792
>> +#: ../semanage/seobject.py:2787
>>   #, python-format
>>   msgid "Boolean %s is defined in policy, cannot be deleted"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2796
>> +#: ../semanage/seobject.py:2791
>>   #, python-format
>>   msgid "Could not delete boolean %s"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
>> +#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
>>   msgid "Could not list booleans"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2858
>> +#: ../semanage/seobject.py:2853
>>   msgid "off"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2858
>> +#: ../semanage/seobject.py:2853
>>   msgid "on"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2870
>> +#: ../semanage/seobject.py:2865
>>   msgid "SELinux boolean"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2870
>> +#: ../semanage/seobject.py:2865
>>   msgid "State"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2870
>> +#: ../semanage/seobject.py:2865
>>   msgid "Default"
>>   msgstr ""
>>   
>> -#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
>> +#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
>>   #: ../sepolicy/sepolicy/sepolicy.glade:2510
>>   #: ../sepolicy/sepolicy/sepolicy.glade:5099
>>   msgid "Description"
>> @@ -1555,151 +1566,151 @@ msgstr ""
>>   msgid "Missing interface definition for %s"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:140
>> +#: ../sepolicy/sepolicy/generate.py:138
>>   msgid "Standard Init Daemon"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:141
>> +#: ../sepolicy/sepolicy/generate.py:139
>>   msgid "DBUS System Daemon"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:142
>> +#: ../sepolicy/sepolicy/generate.py:140
>>   msgid "Internet Services Daemon"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:143
>> +#: ../sepolicy/sepolicy/generate.py:141
>>   msgid "Web Application/Script (CGI)"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:144
>> +#: ../sepolicy/sepolicy/generate.py:142
>>   msgid "Sandbox"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:145
>> +#: ../sepolicy/sepolicy/generate.py:143
>>   msgid "User Application"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:146
>> +#: ../sepolicy/sepolicy/generate.py:144
>>   msgid "Existing Domain Type"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:147
>> +#: ../sepolicy/sepolicy/generate.py:145
>>   msgid "Minimal Terminal Login User Role"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:148
>> +#: ../sepolicy/sepolicy/generate.py:146
>>   msgid "Minimal X Windows Login User Role"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:149
>> +#: ../sepolicy/sepolicy/generate.py:147
>>   msgid "Desktop Login User Role"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:150
>> +#: ../sepolicy/sepolicy/generate.py:148
>>   msgid "Administrator Login User Role"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:151
>> +#: ../sepolicy/sepolicy/generate.py:149
>>   msgid "Confined Root Administrator Role"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:152
>> +#: ../sepolicy/sepolicy/generate.py:150
>>   msgid "Module information for a new type"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:158
>> +#: ../sepolicy/sepolicy/generate.py:156
>>   msgid "Valid Types:\n"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:193
>> +#: ../sepolicy/sepolicy/generate.py:191
>>   #, python-format
>>   msgid "Ports must be numbers or ranges of numbers from 1 to %d "
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:205
>> +#: ../sepolicy/sepolicy/generate.py:203
>>   msgid "You must enter a valid policy type"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:208
>> +#: ../sepolicy/sepolicy/generate.py:206
>>   #, python-format
>>   msgid "You must enter a name for your policy module for your '%s'."
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:346
>> +#: ../sepolicy/sepolicy/generate.py:344
>>   msgid ""
>>   "Name must be alphanumeric with no spaces. Consider using option \"-n "
>>   "MODULENAME\""
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:438
>> +#: ../sepolicy/sepolicy/generate.py:436
>>   msgid "User Role types can not be assigned executables."
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:444
>> +#: ../sepolicy/sepolicy/generate.py:442
>>   msgid "Only Daemon apps can use an init script."
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:462
>> +#: ../sepolicy/sepolicy/generate.py:460
>>   msgid "use_resolve must be a boolean value "
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:468
>> +#: ../sepolicy/sepolicy/generate.py:466
>>   msgid "use_syslog must be a boolean value "
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:474
>> +#: ../sepolicy/sepolicy/generate.py:472
>>   msgid "use_kerberos must be a boolean value "
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:480
>> +#: ../sepolicy/sepolicy/generate.py:478
>>   msgid "manage_krb5_rcache must be a boolean value "
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:510
>> +#: ../sepolicy/sepolicy/generate.py:508
>>   msgid "USER Types automatically get a tmp type"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:847
>> +#: ../sepolicy/sepolicy/generate.py:845
>>   #, python-format
>>   msgid "'%s' policy modules require existing domains"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:872
>> +#: ../sepolicy/sepolicy/generate.py:870
>>   msgid "Type field required"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:885
>> +#: ../sepolicy/sepolicy/generate.py:883
>>   #, python-format
>>   msgid ""
>>   "You need to define a new type which ends with: \n"
>>   " %s"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1113
>> +#: ../sepolicy/sepolicy/generate.py:1111
>>   msgid "You must enter the executable path for your confined process"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1378
>> +#: ../sepolicy/sepolicy/generate.py:1376
>>   msgid "Created the following files:\n"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1379
>> +#: ../sepolicy/sepolicy/generate.py:1377
>>   msgid "Type Enforcement file"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1380
>> +#: ../sepolicy/sepolicy/generate.py:1378
>>   msgid "Interface file"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1381
>> +#: ../sepolicy/sepolicy/generate.py:1379
>>   msgid "File Contexts file"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1383
>> +#: ../sepolicy/sepolicy/generate.py:1381
>>   msgid "Spec file"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/generate.py:1384
>> +#: ../sepolicy/sepolicy/generate.py:1382
>>   msgid "Setup Script"
>>   msgstr ""
>>   
>> @@ -2367,29 +2378,29 @@ msgstr ""
>>   msgid "named pipe"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:148
>> +#: ../sepolicy/sepolicy/__init__.py:149
>>   msgid "No SELinux Policy installed"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:184
>> +#: ../sepolicy/sepolicy/__init__.py:185
>>   #, python-format
>>   msgid "Failed to read %s policy file"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:470
>> +#: ../sepolicy/sepolicy/__init__.py:471
>>   #, python-format
>>   msgid "-- Allowed %s [ %s ]"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:896
>> +#: ../sepolicy/sepolicy/__init__.py:897
>>   msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:1221
>> +#: ../sepolicy/sepolicy/__init__.py:1230
>>   msgid "unknown"
>>   msgstr ""
>>   
>> -#: ../sepolicy/sepolicy/__init__.py:1230
>> +#: ../sepolicy/sepolicy/__init__.py:1239
>>   #, python-brace-format
>>   msgid "Allow {subject} to {rest}"
>>   msgstr ""
>


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v4 4/4] python: update python.pot
  2023-06-27 13:55                 ` Petr Lautrbach
@ 2023-07-06 13:39                   ` James Carter
  2023-07-12 17:33                     ` James Carter
  0 siblings, 1 reply; 26+ messages in thread
From: James Carter @ 2023-07-06 13:39 UTC (permalink / raw)
  To: Petr Lautrbach; +Cc: Vit Mojzis, selinux

On Tue, Jun 27, 2023 at 10:12 AM Petr Lautrbach <lautrbach@redhat.com> wrote:
>
> Vit Mojzis <vmojzis@redhat.com> writes:
>
> > On 6/13/23 13:20, Petr Lautrbach wrote:
> >> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
>
> > For all four patches:
> > Reviewed-by: Vit Mojzis <vmojzis@redhat.com>
>
> Thanks.
>
>
> If there's no objection I'd like to merge this soon.
>

I have no objections.
For these four patches,
Acked-by: James Carter <jwcart2@gmail.com>

>
> >> ---
> >>   python/po/python.pot | 963 ++++++++++++++++++++++---------------------
> >>   1 file changed, 487 insertions(+), 476 deletions(-)
> >>
> >> diff --git a/python/po/python.pot b/python/po/python.pot
> >> index 16d04eb0f18e..435a1b764e34 100644
> >> --- a/python/po/python.pot
> >> +++ b/python/po/python.pot
> >> @@ -8,7 +8,7 @@ msgid ""
> >>   msgstr ""
> >>   "Project-Id-Version: PACKAGE VERSION\n"
> >>   "Report-Msgid-Bugs-To: \n"
> >> -"POT-Creation-Date: 2023-01-18 11:57+0100\n"
> >> +"POT-Creation-Date: 2023-06-12 18:13+0200\n"
> >>   "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
> >>   "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
> >>   "Language-Team: LANGUAGE <LL@li.org>\n"
> >> @@ -17,17 +17,12 @@ msgstr ""
> >>   "Content-Type: text/plain; charset=UTF-8\n"
> >>   "Content-Transfer-Encoding: 8bit\n"
> >>
> >> -#: ../audit2allow/audit2allow:239
> >> -msgid "******************** IMPORTANT ***********************\n"
> >> +#: ../audit2allow/audit2allow:244
> >> +msgid "IMPORTANT"
> >>   msgstr ""
> >>
> >> -#: ../audit2allow/audit2allow:240
> >> -#, python-format
> >> -msgid ""
> >> -"To make this policy package active, execute:\n"
> >> -"\n"
> >> -"semodule -i %s\n"
> >> -"\n"
> >> +#: ../audit2allow/audit2allow:245
> >> +msgid "To make this policy package active, execute:"
> >>   msgstr ""
> >>
> >>   #: ../chcat/chcat:111 ../chcat/chcat:191
> >> @@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
> >>   msgstr ""
> >>
> >>   #: ../chcat/chcat:128
> >> -#, python-format
> >> -msgid "%s is already in %s"
> >> +#, python-brace-format
> >> +msgid "{target} is already in {category}"
> >>   msgstr ""
> >>
> >>   #: ../chcat/chcat:210 ../chcat/chcat:220
> >> -#, python-format
> >> -msgid "%s is not in %s"
> >> +#, python-brace-format
> >> +msgid "{target} is not in {category}"
> >>   msgstr ""
> >>
> >>   #: ../chcat/chcat:291 ../chcat/chcat:296
> >> @@ -152,218 +147,222 @@ msgstr ""
> >>
> >>   #: ../semanage/semanage:242
> >>   msgid ""
> >> -"\n"
> >> -"MLS/MCS Security Range (MLS/MCS Systems only)\n"
> >> -"SELinux Range  for SELinux login mapping\n"
> >> -"defaults to the SELinux user record range.\n"
> >> -"SELinux Range for SELinux user defaults to s0.\n"
> >> +"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
> >> +"login mapping defaults to the SELinux user record range. SELinux Range for "
> >> +"SELinux user defaults to s0."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:251
> >> +#: ../semanage/semanage:249
> >>   msgid ""
> >> -"\n"
> >> -"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
> >> -"protocol\n"
> >> -"    version for the specified node (ipv4|ipv6).\n"
> >> +"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
> >> +"version for the specified node (ipv4|ipv6)."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:257
> >> -msgid ""
> >> -"\n"
> >> -"    Subnet prefix for  the specified infiniband ibpkey.\n"
> >> +#: ../semanage/semanage:253
> >> +msgid "Subnet prefix for  the specified infiniband ibpkey."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:262
> >> -msgid ""
> >> -"\n"
> >> -"    Name for the specified infiniband end port.\n"
> >> +#: ../semanage/semanage:256
> >> +msgid "Name for the specified infiniband end port."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:267
> >> +#: ../semanage/semanage:259
> >>   #, python-format
> >>   msgid "Modify a record of the %s object type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:271
> >> +#: ../semanage/semanage:263
> >>   #, python-format
> >>   msgid "List records of the %s object type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:275
> >> +#: ../semanage/semanage:267
> >>   #, python-format
> >>   msgid "Delete a record of the %s object type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:279
> >> +#: ../semanage/semanage:271
> >>   msgid "Extract customizable commands, for use within a transaction"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:283
> >> +#: ../semanage/semanage:275
> >>   #, python-format
> >>   msgid "Remove all %s objects local customizations"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:287
> >> +#: ../semanage/semanage:279
> >>   msgid "SELinux user name"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:292
> >> +#: ../semanage/semanage:284
> >>   msgid "Manage login mappings between linux users and SELinux confined users"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:309
> >> +#: ../semanage/semanage:301
> >>   #, python-format
> >>   msgid "login_name | %%groupname"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:361
> >> +#: ../semanage/semanage:344
> >>   msgid "Manage file context mapping definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:375
> >> +#: ../semanage/semanage:359
> >> +msgid ""
> >> +"Substitute target path with sourcepath when generating default label. This "
> >> +"is used with fcontext. Requires source and target path arguments. The "
> >> +"context labeling for the target subtree is made equivalent to that defined "
> >> +"for the source."
> >> +msgstr ""
> >> +
> >> +#: ../semanage/semanage:363
> >>   msgid ""
> >> -"Substitute  target  path with sourcepath when generating default\n"
> >> -"                                                                  label.  "
> >> -"This is used with fcontext. Requires source  and  target\n"
> >> -"                                                                  path  "
> >> -"arguments.  The context labeling for the target subtree is\n"
> >> -"                                                                  made "
> >> -"equivalent to that defined for the source."
> >> +"File Type. This is used with fcontext. Requires a file type as shown in the "
> >> +"mode field by ls, e.g. use d to match only directories or f to match only "
> >> +"regular files. The following file type options can be passed: f (regular "
> >> +"file), d (directory), c (character device), b (block device), s (socket), l "
> >> +"(symbolic link), p (named pipe). If you do not specify a file type, the file "
> >> +"type will default to \"all files\"."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:383
> >> +#: ../semanage/semanage:371
> >>   msgid ""
> >>   "Path to be labeled (may be in the form of a Perl compatible regular "
> >>   "expression)"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:411
> >> +#: ../semanage/semanage:399
> >>   msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:429
> >> +#: ../semanage/semanage:417
> >>   msgid ""
> >> -"\n"
> >> -"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
> >> -"spaces. Or specify -R multiple times.\n"
> >> +"SELinux Roles. You must enclose multiple roles within quotes, separate by "
> >> +"spaces. Or specify -R multiple times."
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:433
> >> +#: ../semanage/semanage:419
> >>   msgid "selinux_name"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:461
> >> +#: ../semanage/semanage:447
> >>   msgid "Manage network port type definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:477
> >> +#: ../semanage/semanage:463
> >>   msgid "port | port_range"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:506
> >> +#: ../semanage/semanage:492
> >>   msgid "Manage infiniband ibpkey type definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:522
> >> +#: ../semanage/semanage:508
> >>   msgid "pkey | pkey_range"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:549
> >> +#: ../semanage/semanage:535
> >>   msgid "Manage infiniband end port type definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:565
> >> +#: ../semanage/semanage:551
> >>   msgid "ibendport"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:592
> >> +#: ../semanage/semanage:578
> >>   msgid "Manage network interface type definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:607
> >> +#: ../semanage/semanage:593
> >>   msgid "interface_spec"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:631
> >> +#: ../semanage/semanage:617
> >>   msgid "Manage SELinux policy modules"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:642
> >> +#: ../semanage/semanage:628
> >>   msgid "Add a module"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:643
> >> +#: ../semanage/semanage:629
> >>   msgid "Remove a module"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:644
> >> +#: ../semanage/semanage:630
> >>   msgid "Disable a module"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:645
> >> +#: ../semanage/semanage:631
> >>   msgid "Enable a module"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:672
> >> +#: ../semanage/semanage:658
> >>   msgid "Manage network node type definitions"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:686
> >> +#: ../semanage/semanage:672
> >>   msgid "Network Mask"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:690
> >> +#: ../semanage/semanage:676
> >>   msgid "node"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:715
> >> +#: ../semanage/semanage:701
> >>   msgid "Manage booleans to selectively enable functionality"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:720
> >> +#: ../semanage/semanage:706
> >>   msgid "boolean"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:730
> >> +#: ../semanage/semanage:716
> >>   msgid "Enable the boolean"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:731
> >> +#: ../semanage/semanage:717
> >>   msgid "Disable the boolean"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:752
> >> +#: ../semanage/semanage:738
> >>   msgid "semanage permissive: error: the following argument is required: type\n"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:756
> >> +#: ../semanage/semanage:742
> >>   msgid "Manage process type enforcement mode"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:768 ../semanage/seobject.py:2677
> >> +#: ../semanage/semanage:754 ../semanage/seobject.py:2672
> >>   msgid "type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:779
> >> +#: ../semanage/semanage:765
> >>   msgid "Disable/Enable dontaudit rules in policy"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:799
> >> +#: ../semanage/semanage:785
> >>   msgid "Output local customizations"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:801
> >> +#: ../semanage/semanage:787
> >>   msgid "Output file"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:894
> >> +#: ../semanage/semanage:880
> >>   msgid "Import local customizations"
> >>   msgstr ""
> >>
> >> -#: ../semanage/semanage:897
> >> +#: ../semanage/semanage:883
> >>   msgid "Input file"
> >>   msgstr ""
> >>
> >> +#: ../semanage/semanage:891
> >> +msgid ""
> >> +"semanage is used to configure certain elements of SELinux policy with-out "
> >> +"requiring modification or recompilation from policy source."
> >> +msgstr ""
> >> +
> >>   #: ../semanage/seobject.py:279
> >>   msgid "Could not create semanage handle"
> >>   msgstr ""
> >> @@ -485,123 +484,115 @@ msgstr ""
> >>   msgid "Customized Permissive Types"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:510
> >> -msgid ""
> >> -"The sepolgen python module is required to setup permissive domains.\n"
> >> -"In some distributions it is included in the policycoreutils-devel package.\n"
> >> -"# yum install policycoreutils-devel\n"
> >> -"Or similar for your distro."
> >> -msgstr ""
> >> -
> >> -#: ../semanage/seobject.py:520
> >> +#: ../semanage/seobject.py:515
> >>   #, python-format
> >>   msgid "Could not set permissive domain %s (module installation failed)"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:526
> >> +#: ../semanage/seobject.py:521
> >>   #, python-format
> >>   msgid "Could not remove permissive domain %s (remove failed)"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
> >> -#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
> >> -#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
> >> -#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
> >> -#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
> >> -#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
> >> -#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
> >> +#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
> >> +#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
> >> +#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
> >> +#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
> >> +#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
> >> +#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
> >> +#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
> >>   #, python-format
> >>   msgid "Could not create a key for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
> >> -#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
> >> +#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
> >> +#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
> >>   #, python-format
> >>   msgid "Could not check if login mapping for %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:569
> >> +#: ../semanage/seobject.py:564
> >>   #, python-format
> >>   msgid "Login mapping for %s is already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:574
> >> +#: ../semanage/seobject.py:569
> >>   #, python-format
> >>   msgid "Linux Group %s does not exist"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:579
> >> +#: ../semanage/seobject.py:574
> >>   #, python-format
> >>   msgid "Linux User %s does not exist"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:583
> >> +#: ../semanage/seobject.py:578
> >>   #, python-format
> >>   msgid "Could not create login mapping for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
> >> +#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
> >>   #, python-format
> >>   msgid "Could not set name for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
> >> +#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
> >>   #, python-format
> >>   msgid "Could not set MLS range for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:596
> >> +#: ../semanage/seobject.py:591
> >>   #, python-format
> >>   msgid "Could not set SELinux user for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:600
> >> +#: ../semanage/seobject.py:595
> >>   #, python-format
> >>   msgid "Could not add login mapping for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:616
> >> +#: ../semanage/seobject.py:611
> >>   msgid "Requires seuser or serange"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
> >> +#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
> >>   #, python-format
> >>   msgid "Login mapping for %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:643
> >> +#: ../semanage/seobject.py:638
> >>   #, python-format
> >>   msgid "Could not query seuser for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:658
> >> +#: ../semanage/seobject.py:653
> >>   #, python-format
> >>   msgid "Could not modify login mapping for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:690
> >> +#: ../semanage/seobject.py:685
> >>   #, python-format
> >>   msgid "Login mapping for %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:694
> >> +#: ../semanage/seobject.py:689
> >>   #, python-format
> >>   msgid "Could not delete login mapping for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
> >> -#: ../semanage/seobject.py:991
> >> +#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
> >> +#: ../semanage/seobject.py:986
> >>   msgid "Could not list login mappings"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> >> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:1156
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:3138
> >>   msgid "Login Name"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> >> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> >> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
> >> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:1182
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:3156
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:3242
> >> @@ -609,938 +600,958 @@ msgstr ""
> >>   msgid "SELinux User"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:772
> >> +#: ../semanage/seobject.py:767
> >>   msgid "MLS/MCS Range"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:772
> >> +#: ../semanage/seobject.py:767
> >>   msgid "Service"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
> >> -#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
> >> -#: ../semanage/seobject.py:958
> >> +#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
> >> +#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
> >> +#: ../semanage/seobject.py:953
> >>   #, python-format
> >>   msgid "Could not check if SELinux user %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
> >> -#: ../semanage/seobject.py:964
> >> +#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
> >> +#: ../semanage/seobject.py:959
> >>   #, python-format
> >>   msgid "Could not query user for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:823
> >> +#: ../semanage/seobject.py:818
> >>   #, python-format
> >>   msgid "You must add at least one role for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:833
> >> +#: ../semanage/seobject.py:828
> >>   #, python-format
> >>   msgid "SELinux user %s is already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:837
> >> +#: ../semanage/seobject.py:832
> >>   #, python-format
> >>   msgid "Could not create SELinux user for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:846
> >> -#, python-format
> >> -msgid "Could not add role %s for %s"
> >> +#: ../semanage/seobject.py:841
> >> +#, python-brace-format
> >> +msgid "Could not add role {role} for {name}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:855
> >> +#: ../semanage/seobject.py:850
> >>   #, python-format
> >>   msgid "Could not set MLS level for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:858
> >> -#, python-format
> >> -msgid "Could not add prefix %s for %s"
> >> +#: ../semanage/seobject.py:853
> >> +#, python-brace-format
> >> +msgid "Could not add prefix {prefix} for {role}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:861
> >> +#: ../semanage/seobject.py:856
> >>   #, python-format
> >>   msgid "Could not extract key for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:865
> >> +#: ../semanage/seobject.py:860
> >>   #, python-format
> >>   msgid "Could not add SELinux user %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:886
> >> +#: ../semanage/seobject.py:881
> >>   msgid "Requires prefix, roles, level or range"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:888
> >> +#: ../semanage/seobject.py:883
> >>   msgid "Requires prefix or roles"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
> >> +#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
> >>   #, python-format
> >>   msgid "SELinux user %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:927
> >> +#: ../semanage/seobject.py:922
> >>   #, python-format
> >>   msgid "Could not modify SELinux user %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:960
> >> +#: ../semanage/seobject.py:955
> >>   #, python-format
> >>   msgid "SELinux user %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:971
> >> +#: ../semanage/seobject.py:966
> >>   #, python-format
> >>   msgid "Could not delete SELinux user %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1009
> >> +#: ../semanage/seobject.py:1004
> >>   msgid "Could not list SELinux users"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1015
> >> +#: ../semanage/seobject.py:1010
> >>   #, python-format
> >>   msgid "Could not list roles for user %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1040
> >> +#: ../semanage/seobject.py:1035
> >>   msgid "Labeling"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1040
> >> +#: ../semanage/seobject.py:1035
> >>   msgid "MLS/"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1041
> >> +#: ../semanage/seobject.py:1036
> >>   msgid "Prefix"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1041
> >> +#: ../semanage/seobject.py:1036
> >>   msgid "MCS Level"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1041
> >> +#: ../semanage/seobject.py:1036
> >>   msgid "MCS Range"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> >> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:3262
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:5233
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:5382
> >>   msgid "SELinux Roles"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1071
> >> +#: ../semanage/seobject.py:1066
> >>   msgid "Protocol has to be one of udp, tcp, dccp or sctp"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1073
> >> +#: ../semanage/seobject.py:1068
> >>   msgid "Port is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1087
> >> +#: ../semanage/seobject.py:1082
> >>   msgid "Invalid Port"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
> >> -#, python-format
> >> -msgid "Could not create a key for %s/%s"
> >> +#: ../semanage/seobject.py:1086
> >> +#, python-brace-format
> >> +msgid "Could not create a key for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
> >> -#: ../semanage/seobject.py:1631
> >> +#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
> >> +#: ../semanage/seobject.py:1626
> >>   msgid "Type is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
> >> +#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
> >>   #, python-format
> >>   msgid "Type %s is invalid, must be a port type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
> >> -#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
> >> -#, python-format
> >> -msgid "Could not check if port %s/%s is defined"
> >> +#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
> >> +#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
> >> +#, python-brace-format
> >> +msgid "Could not check if port {proto}/{port} is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1115
> >> -#, python-format
> >> -msgid "Port %s/%s already defined"
> >> +#: ../semanage/seobject.py:1110
> >> +#, python-brace-format
> >> +msgid "Port {proto}/{port} already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1119
> >> -#, python-format
> >> -msgid "Could not create port for %s/%s"
> >> +#: ../semanage/seobject.py:1114
> >> +#, python-brace-format
> >> +msgid "Could not create port for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
> >> -#: ../semanage/seobject.py:1653
> >> -#, python-format
> >> -msgid "Could not create context for %s/%s"
> >> +#: ../semanage/seobject.py:1120
> >> +#, python-brace-format
> >> +msgid "Could not create context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1129
> >> -#, python-format
> >> -msgid "Could not set user in port context for %s/%s"
> >> +#: ../semanage/seobject.py:1124
> >> +#, python-brace-format
> >> +msgid "Could not set user in port context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1133
> >> -#, python-format
> >> -msgid "Could not set role in port context for %s/%s"
> >> +#: ../semanage/seobject.py:1128
> >> +#, python-brace-format
> >> +msgid "Could not set role in port context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1137
> >> -#, python-format
> >> -msgid "Could not set type in port context for %s/%s"
> >> +#: ../semanage/seobject.py:1132
> >> +#, python-brace-format
> >> +msgid "Could not set type in port context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1142
> >> -#, python-format
> >> -msgid "Could not set mls fields in port context for %s/%s"
> >> +#: ../semanage/seobject.py:1137
> >> +#, python-brace-format
> >> +msgid "Could not set mls fields in port context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1146
> >> -#, python-format
> >> -msgid "Could not set port context for %s/%s"
> >> +#: ../semanage/seobject.py:1141
> >> +#, python-brace-format
> >> +msgid "Could not set port context for {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1150
> >> -#, python-format
> >> -msgid "Could not add port %s/%s"
> >> +#: ../semanage/seobject.py:1145
> >> +#, python-brace-format
> >> +msgid "Could not add port {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
> >> -#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
> >> -#: ../semanage/seobject.py:2176
> >> +#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
> >> +#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
> >> +#: ../semanage/seobject.py:2171
> >>   msgid "Requires setype or serange"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
> >> -#: ../semanage/seobject.py:1694
> >> +#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
> >> +#: ../semanage/seobject.py:1689
> >>   msgid "Requires setype"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
> >> -#, python-format
> >> -msgid "Port %s/%s is not defined"
> >> +#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
> >> +#, python-brace-format
> >> +msgid "Port {proto}/{port} is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1184
> >> -#, python-format
> >> -msgid "Could not query port %s/%s"
> >> +#: ../semanage/seobject.py:1179
> >> +#, python-brace-format
> >> +msgid "Could not query port {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1198
> >> -#, python-format
> >> -msgid "Could not modify port %s/%s"
> >> +#: ../semanage/seobject.py:1193
> >> +#, python-brace-format
> >> +msgid "Could not modify port {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1213
> >> +#: ../semanage/seobject.py:1208
> >>   msgid "Could not list the ports"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1230
> >> +#: ../semanage/seobject.py:1225
> >>   #, python-format
> >>   msgid "Could not delete the port %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1252
> >> -#, python-format
> >> -msgid "Port %s/%s is defined in policy, cannot be deleted"
> >> +#: ../semanage/seobject.py:1247
> >> +#, python-brace-format
> >> +msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1256
> >> -#, python-format
> >> -msgid "Could not delete port %s/%s"
> >> +#: ../semanage/seobject.py:1251
> >> +#, python-brace-format
> >> +msgid "Could not delete port {proto}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
> >> +#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
> >>   msgid "Could not list ports"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
> >> +#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:2766
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:4630
> >>   msgid "SELinux Port Type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1329
> >> +#: ../semanage/seobject.py:1324
> >>   msgid "Proto"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
> >> +#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:1407
> >>   msgid "Port Number"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1351
> >> +#: ../semanage/seobject.py:1346
> >>   msgid "Subnet Prefix is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1361
> >> +#: ../semanage/seobject.py:1356
> >>   msgid "Invalid Pkey"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
> >> +#: ../semanage/seobject.py:1360
> >> +#, python-brace-format
> >> +msgid "Could not create a key for {subnet_prefix}/{pkey}"
> >> +msgstr ""
> >> +
> >> +#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
> >>   #, python-format
> >>   msgid "Type %s is invalid, must be a ibpkey type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
> >> -#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
> >> -#, python-format
> >> -msgid "Could not check if ibpkey %s/%s is defined"
> >> +#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
> >> +#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
> >> +#, python-brace-format
> >> +msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1389
> >> -#, python-format
> >> -msgid "ibpkey %s/%s already defined"
> >> +#: ../semanage/seobject.py:1384
> >> +#, python-brace-format
> >> +msgid "ibpkey {subnet_prefix}/{pkey} already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1393
> >> -#, python-format
> >> -msgid "Could not create ibpkey for %s/%s"
> >> +#: ../semanage/seobject.py:1388
> >> +#, python-brace-format
> >> +msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1403
> >> -#, python-format
> >> -msgid "Could not set user in ibpkey context for %s/%s"
> >> +#: ../semanage/seobject.py:1394
> >> +#, python-brace-format
> >> +msgid "Could not create context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1407
> >> -#, python-format
> >> -msgid "Could not set role in ibpkey context for %s/%s"
> >> +#: ../semanage/seobject.py:1398
> >> +#, python-brace-format
> >> +msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1411
> >> -#, python-format
> >> -msgid "Could not set type in ibpkey context for %s/%s"
> >> +#: ../semanage/seobject.py:1402
> >> +#, python-brace-format
> >> +msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1416
> >> -#, python-format
> >> -msgid "Could not set mls fields in ibpkey context for %s/%s"
> >> +#: ../semanage/seobject.py:1406
> >> +#, python-brace-format
> >> +msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1420
> >> -#, python-format
> >> -msgid "Could not set ibpkey context for %s/%s"
> >> +#: ../semanage/seobject.py:1411
> >> +#, python-brace-format
> >> +msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1424
> >> -#, python-format
> >> -msgid "Could not add ibpkey %s/%s"
> >> +#: ../semanage/seobject.py:1415
> >> +#, python-brace-format
> >> +msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
> >> -#, python-format
> >> -msgid "ibpkey %s/%s is not defined"
> >> +#: ../semanage/seobject.py:1419
> >> +#, python-brace-format
> >> +msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1457
> >> -#, python-format
> >> -msgid "Could not query ibpkey %s/%s"
> >> +#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
> >> +#, python-brace-format
> >> +msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1468
> >> -#, python-format
> >> -msgid "Could not modify ibpkey %s/%s"
> >> +#: ../semanage/seobject.py:1452
> >> +#, python-brace-format
> >> +msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1481
> >> +#: ../semanage/seobject.py:1463
> >> +#, python-brace-format
> >> +msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
> >> +msgstr ""
> >> +
> >> +#: ../semanage/seobject.py:1476
> >>   msgid "Could not list the ibpkeys"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1496
> >> +#: ../semanage/seobject.py:1491
> >>   #, python-format
> >>   msgid "Could not delete the ibpkey %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1513
> >> -#, python-format
> >> -msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
> >> +#: ../semanage/seobject.py:1508
> >> +#, python-brace-format
> >> +msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1517
> >> -#, python-format
> >> -msgid "Could not delete ibpkey %s/%s"
> >> +#: ../semanage/seobject.py:1512
> >> +#, python-brace-format
> >> +msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
> >> +#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
> >>   msgid "Could not list ibpkeys"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1589
> >> +#: ../semanage/seobject.py:1584
> >>   msgid "SELinux IB Pkey Type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1589
> >> +#: ../semanage/seobject.py:1584
> >>   msgid "Subnet_Prefix"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1589
> >> +#: ../semanage/seobject.py:1584
> >>   msgid "Pkey Number"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1611
> >> +#: ../semanage/seobject.py:1606
> >>   msgid "IB device name is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1616
> >> +#: ../semanage/seobject.py:1611
> >>   msgid "Invalid Port Number"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1620
> >> -#, python-format
> >> -msgid "Could not create a key for ibendport %s/%s"
> >> +#: ../semanage/seobject.py:1615
> >> +#, python-brace-format
> >> +msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
> >> +#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
> >>   #, python-format
> >>   msgid "Type %s is invalid, must be an ibendport type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
> >> -#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
> >> -#, python-format
> >> -msgid "Could not check if ibendport %s/%s is defined"
> >> +#: ../semanage/seobject.py:1636
> >> +#, python-brace-format
> >> +msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1643
> >> -#, python-format
> >> -msgid "ibendport %s/%s already defined"
> >> +#: ../semanage/seobject.py:1638
> >> +#, python-brace-format
> >> +msgid "ibendport {ibdev_name}/{port} already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1647
> >> -#, python-format
> >> -msgid "Could not create ibendport for %s/%s"
> >> +#: ../semanage/seobject.py:1642
> >> +#, python-brace-format
> >> +msgid "Could not create ibendport for {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1657
> >> -#, python-format
> >> -msgid "Could not set user in ibendport context for %s/%s"
> >> +#: ../semanage/seobject.py:1648
> >> +#, python-brace-format
> >> +msgid "Could not create context for {ibendport}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1661
> >> -#, python-format
> >> -msgid "Could not set role in ibendport context for %s/%s"
> >> +#: ../semanage/seobject.py:1652
> >> +#, python-brace-format
> >> +msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
> >> +msgstr ""
> >> +
> >> +#: ../semanage/seobject.py:1656
> >> +#, python-brace-format
> >> +msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
> >> +msgstr ""
> >> +
> >> +#: ../semanage/seobject.py:1660
> >> +#, python-brace-format
> >> +msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >>   #: ../semanage/seobject.py:1665
> >> -#, python-format
> >> -msgid "Could not set type in ibendport context for %s/%s"
> >> +#, python-brace-format
> >> +msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1670
> >> -#, python-format
> >> -msgid "Could not set mls fields in ibendport context for %s/%s"
> >> +#: ../semanage/seobject.py:1669
> >> +#, python-brace-format
> >> +msgid "Could not set ibendport context for {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1674
> >> -#, python-format
> >> -msgid "Could not set ibendport context for %s/%s"
> >> +#: ../semanage/seobject.py:1673
> >> +#, python-brace-format
> >> +msgid "Could not add ibendport {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1678
> >> -#, python-format
> >> -msgid "Could not add ibendport %s/%s"
> >> +#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
> >> +#: ../semanage/seobject.py:1758
> >> +#, python-brace-format
> >> +msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
> >> -#, python-format
> >> -msgid "ibendport %s/%s is not defined"
> >> +#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
> >> +#, python-brace-format
> >> +msgid "ibendport {ibdev_name}/{ibendport} is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1711
> >> -#, python-format
> >> -msgid "Could not query ibendport %s/%s"
> >> +#: ../semanage/seobject.py:1706
> >> +#, python-brace-format
> >> +msgid "Could not query ibendport {ibdev_name}/{ibendport}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1722
> >> -#, python-format
> >> -msgid "Could not modify ibendport %s/%s"
> >> +#: ../semanage/seobject.py:1717
> >> +#, python-brace-format
> >> +msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1735
> >> +#: ../semanage/seobject.py:1730
> >>   msgid "Could not list the ibendports"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1744
> >> -#, python-format
> >> -msgid "Could not create a key for %s/%d"
> >> +#: ../semanage/seobject.py:1739
> >> +#, python-brace-format
> >> +msgid "Could not create a key for {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1748
> >> -#, python-format
> >> -msgid "Could not delete the ibendport %s/%d"
> >> +#: ../semanage/seobject.py:1743
> >> +#, python-brace-format
> >> +msgid "Could not delete the ibendport {ibdev_name}/{port}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1765
> >> -#, python-format
> >> -msgid "ibendport %s/%s is defined in policy, cannot be deleted"
> >> +#: ../semanage/seobject.py:1760
> >> +#, python-brace-format
> >> +msgid ""
> >> +"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1769
> >> -#, python-format
> >> -msgid "Could not delete ibendport %s/%s"
> >> +#: ../semanage/seobject.py:1764
> >> +#, python-brace-format
> >> +msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
> >> +#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
> >>   msgid "Could not list ibendports"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1835
> >> +#: ../semanage/seobject.py:1830
> >>   msgid "SELinux IB End Port Type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1835
> >> +#: ../semanage/seobject.py:1830
> >>   msgid "IB Device Name"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1861
> >> +#: ../semanage/seobject.py:1856
> >>   msgid "Node Address is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
> >> +#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
> >>   msgid "Unknown or missing protocol"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1899
> >> +#: ../semanage/seobject.py:1894
> >>   msgid "SELinux node type is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
> >> +#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
> >>   #, python-format
> >>   msgid "Type %s is invalid, must be a node type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
> >> -#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
> >> -#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
> >> -#: ../semanage/seobject.py:2435
> >> +#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
> >> +#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
> >> +#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
> >> +#: ../semanage/seobject.py:2430
> >>   #, python-format
> >>   msgid "Could not create key for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
> >> -#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
> >> +#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
> >> +#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
> >>   #, python-format
> >>   msgid "Could not check if addr %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1914
> >> +#: ../semanage/seobject.py:1909
> >>   #, python-format
> >>   msgid "Addr %s already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1918
> >> +#: ../semanage/seobject.py:1913
> >>   #, python-format
> >>   msgid "Could not create addr for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
> >> -#: ../semanage/seobject.py:2389
> >> +#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
> >> +#: ../semanage/seobject.py:2384
> >>   #, python-format
> >>   msgid "Could not create context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1928
> >> +#: ../semanage/seobject.py:1923
> >>   #, python-format
> >>   msgid "Could not set mask for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1932
> >> +#: ../semanage/seobject.py:1927
> >>   #, python-format
> >>   msgid "Could not set user in addr context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1936
> >> +#: ../semanage/seobject.py:1931
> >>   #, python-format
> >>   msgid "Could not set role in addr context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1940
> >> +#: ../semanage/seobject.py:1935
> >>   #, python-format
> >>   msgid "Could not set type in addr context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1945
> >> +#: ../semanage/seobject.py:1940
> >>   #, python-format
> >>   msgid "Could not set mls fields in addr context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1949
> >> +#: ../semanage/seobject.py:1944
> >>   #, python-format
> >>   msgid "Could not set addr context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1953
> >> +#: ../semanage/seobject.py:1948
> >>   #, python-format
> >>   msgid "Could not add addr %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
> >> +#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
> >>   #, python-format
> >>   msgid "Addr %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1989
> >> +#: ../semanage/seobject.py:1984
> >>   #, python-format
> >>   msgid "Could not query addr %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:1999
> >> +#: ../semanage/seobject.py:1994
> >>   #, python-format
> >>   msgid "Could not modify addr %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2028
> >> +#: ../semanage/seobject.py:2023
> >>   #, python-format
> >>   msgid "Addr %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2032
> >> +#: ../semanage/seobject.py:2027
> >>   #, python-format
> >>   msgid "Could not delete addr %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2046
> >> +#: ../semanage/seobject.py:2041
> >>   msgid "Could not deleteall node mappings"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2060
> >> +#: ../semanage/seobject.py:2055
> >>   msgid "Could not list addrs"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
> >> +#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
> >>   msgid "SELinux Type is required"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
> >> -#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
> >> +#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
> >> +#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
> >>   #, python-format
> >>   msgid "Could not check if interface %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2123
> >> +#: ../semanage/seobject.py:2118
> >>   #, python-format
> >>   msgid "Interface %s already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2127
> >> +#: ../semanage/seobject.py:2122
> >>   #, python-format
> >>   msgid "Could not create interface for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2136
> >> +#: ../semanage/seobject.py:2131
> >>   #, python-format
> >>   msgid "Could not set user in interface context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2140
> >> +#: ../semanage/seobject.py:2135
> >>   #, python-format
> >>   msgid "Could not set role in interface context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2144
> >> +#: ../semanage/seobject.py:2139
> >>   #, python-format
> >>   msgid "Could not set type in interface context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2149
> >> +#: ../semanage/seobject.py:2144
> >>   #, python-format
> >>   msgid "Could not set mls fields in interface context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2153
> >> +#: ../semanage/seobject.py:2148
> >>   #, python-format
> >>   msgid "Could not set interface context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2157
> >> +#: ../semanage/seobject.py:2152
> >>   #, python-format
> >>   msgid "Could not set message context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2161
> >> +#: ../semanage/seobject.py:2156
> >>   #, python-format
> >>   msgid "Could not add interface %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
> >> +#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
> >>   #, python-format
> >>   msgid "Interface %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2190
> >> +#: ../semanage/seobject.py:2185
> >>   #, python-format
> >>   msgid "Could not query interface %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2201
> >> +#: ../semanage/seobject.py:2196
> >>   #, python-format
> >>   msgid "Could not modify interface %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2228
> >> +#: ../semanage/seobject.py:2223
> >>   #, python-format
> >>   msgid "Interface %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2232
> >> +#: ../semanage/seobject.py:2227
> >>   #, python-format
> >>   msgid "Could not delete interface %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2246
> >> +#: ../semanage/seobject.py:2241
> >>   msgid "Could not delete all interface  mappings"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2260
> >> +#: ../semanage/seobject.py:2255
> >>   msgid "Could not list interfaces"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2285
> >> +#: ../semanage/seobject.py:2280
> >>   msgid "SELinux Interface"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
> >> +#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
> >>   msgid "Context"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2355
> >> +#: ../semanage/seobject.py:2350
> >>   #, python-format
> >>   msgid "Target %s is not valid. Target is not allowed to end with '/'"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2358
> >> +#: ../semanage/seobject.py:2353
> >>   #, python-format
> >>   msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2361
> >> +#: ../semanage/seobject.py:2356
> >>   #, python-format
> >>   msgid "Equivalence class for %s already exists"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2367
> >> +#: ../semanage/seobject.py:2362
> >>   #, python-format
> >>   msgid "File spec %s conflicts with equivalency rule '%s %s'"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2378
> >> +#: ../semanage/seobject.py:2373
> >>   #, python-format
> >>   msgid "Equivalence class for %s does not exist"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2395
> >> +#: ../semanage/seobject.py:2390
> >>   #, python-format
> >>   msgid "Could not set user in file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2399
> >> +#: ../semanage/seobject.py:2394
> >>   #, python-format
> >>   msgid "Could not set role in file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
> >> +#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
> >>   #, python-format
> >>   msgid "Could not set mls fields in file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2410
> >> +#: ../semanage/seobject.py:2405
> >>   msgid "Invalid file specification"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2412
> >> +#: ../semanage/seobject.py:2407
> >>   msgid "File specification can not include spaces"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2417
> >> +#: ../semanage/seobject.py:2412
> >>   #, python-format
> >>   msgid ""
> >>   "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
> >> +#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
> >>   #, python-format
> >>   msgid "Type %s is invalid, must be a file or device type"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
> >> -#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
> >> -#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
> >> +#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
> >> +#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
> >> +#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
> >>   #, python-format
> >>   msgid "Could not check if file context for %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2447
> >> +#: ../semanage/seobject.py:2442
> >>   #, python-format
> >>   msgid "File context for %s already defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2451
> >> +#: ../semanage/seobject.py:2446
> >>   #, python-format
> >>   msgid "Could not create file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2459
> >> +#: ../semanage/seobject.py:2454
> >>   #, python-format
> >>   msgid "Could not set type in file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
> >> -#: ../semanage/seobject.py:2543
> >> +#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
> >> +#: ../semanage/seobject.py:2538
> >>   #, python-format
> >>   msgid "Could not set file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2473
> >> +#: ../semanage/seobject.py:2468
> >>   #, python-format
> >>   msgid "Could not add file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2492
> >> +#: ../semanage/seobject.py:2487
> >>   msgid "Requires setype, serange or seuser"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
> >> +#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
> >>   #, python-format
> >>   msgid "Could not query file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
> >> +#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
> >>   #, python-format
> >>   msgid "File context for %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2547
> >> +#: ../semanage/seobject.py:2542
> >>   #, python-format
> >>   msgid "Could not modify file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2565
> >> +#: ../semanage/seobject.py:2560
> >>   msgid "Could not list the file contexts"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2579
> >> +#: ../semanage/seobject.py:2574
> >>   #, python-format
> >>   msgid "Could not delete the file context %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2609
> >> +#: ../semanage/seobject.py:2604
> >>   #, python-format
> >>   msgid "File context for %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2615
> >> +#: ../semanage/seobject.py:2610
> >>   #, python-format
> >>   msgid "Could not delete file context for %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2632
> >> +#: ../semanage/seobject.py:2627
> >>   msgid "Could not list file contexts"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2636
> >> +#: ../semanage/seobject.py:2631
> >>   msgid "Could not list file contexts for home directories"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2640
> >> +#: ../semanage/seobject.py:2635
> >>   msgid "Could not list local file contexts"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2677
> >> +#: ../semanage/seobject.py:2672
> >>   msgid "SELinux fcontext"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2690
> >> +#: ../semanage/seobject.py:2685
> >>   msgid ""
> >>   "\n"
> >>   "SELinux Distribution fcontext Equivalence \n"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2695
> >> +#: ../semanage/seobject.py:2690
> >>   msgid ""
> >>   "\n"
> >>   "SELinux Local fcontext Equivalence \n"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
> >> -#: ../semanage/seobject.py:2790
> >> +#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
> >> +#: ../semanage/seobject.py:2785
> >>   #, python-format
> >>   msgid "Could not check if boolean %s is defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
> >> +#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
> >>   #, python-format
> >>   msgid "Boolean %s is not defined"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2739
> >> +#: ../semanage/seobject.py:2734
> >>   #, python-format
> >>   msgid "Could not query file context %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2744
> >> +#: ../semanage/seobject.py:2739
> >>   #, python-format
> >>   msgid "You must specify one of the following values: %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2749
> >> +#: ../semanage/seobject.py:2744
> >>   #, python-format
> >>   msgid "Could not set active value of boolean %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2752
> >> +#: ../semanage/seobject.py:2747
> >>   #, python-format
> >>   msgid "Could not modify boolean %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2768
> >> -#, python-format
> >> -msgid "Bad format %s: Record %s"
> >> +#: ../semanage/seobject.py:2763
> >> +#, python-brace-format
> >> +msgid "Bad format {filename}: Record {record}"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2792
> >> +#: ../semanage/seobject.py:2787
> >>   #, python-format
> >>   msgid "Boolean %s is defined in policy, cannot be deleted"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2796
> >> +#: ../semanage/seobject.py:2791
> >>   #, python-format
> >>   msgid "Could not delete boolean %s"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
> >> +#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
> >>   msgid "Could not list booleans"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2858
> >> +#: ../semanage/seobject.py:2853
> >>   msgid "off"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2858
> >> +#: ../semanage/seobject.py:2853
> >>   msgid "on"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2870
> >> +#: ../semanage/seobject.py:2865
> >>   msgid "SELinux boolean"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2870
> >> +#: ../semanage/seobject.py:2865
> >>   msgid "State"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2870
> >> +#: ../semanage/seobject.py:2865
> >>   msgid "Default"
> >>   msgstr ""
> >>
> >> -#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
> >> +#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:2510
> >>   #: ../sepolicy/sepolicy/sepolicy.glade:5099
> >>   msgid "Description"
> >> @@ -1555,151 +1566,151 @@ msgstr ""
> >>   msgid "Missing interface definition for %s"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:140
> >> +#: ../sepolicy/sepolicy/generate.py:138
> >>   msgid "Standard Init Daemon"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:141
> >> +#: ../sepolicy/sepolicy/generate.py:139
> >>   msgid "DBUS System Daemon"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:142
> >> +#: ../sepolicy/sepolicy/generate.py:140
> >>   msgid "Internet Services Daemon"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:143
> >> +#: ../sepolicy/sepolicy/generate.py:141
> >>   msgid "Web Application/Script (CGI)"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:144
> >> +#: ../sepolicy/sepolicy/generate.py:142
> >>   msgid "Sandbox"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:145
> >> +#: ../sepolicy/sepolicy/generate.py:143
> >>   msgid "User Application"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:146
> >> +#: ../sepolicy/sepolicy/generate.py:144
> >>   msgid "Existing Domain Type"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:147
> >> +#: ../sepolicy/sepolicy/generate.py:145
> >>   msgid "Minimal Terminal Login User Role"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:148
> >> +#: ../sepolicy/sepolicy/generate.py:146
> >>   msgid "Minimal X Windows Login User Role"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:149
> >> +#: ../sepolicy/sepolicy/generate.py:147
> >>   msgid "Desktop Login User Role"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:150
> >> +#: ../sepolicy/sepolicy/generate.py:148
> >>   msgid "Administrator Login User Role"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:151
> >> +#: ../sepolicy/sepolicy/generate.py:149
> >>   msgid "Confined Root Administrator Role"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:152
> >> +#: ../sepolicy/sepolicy/generate.py:150
> >>   msgid "Module information for a new type"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:158
> >> +#: ../sepolicy/sepolicy/generate.py:156
> >>   msgid "Valid Types:\n"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:193
> >> +#: ../sepolicy/sepolicy/generate.py:191
> >>   #, python-format
> >>   msgid "Ports must be numbers or ranges of numbers from 1 to %d "
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:205
> >> +#: ../sepolicy/sepolicy/generate.py:203
> >>   msgid "You must enter a valid policy type"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:208
> >> +#: ../sepolicy/sepolicy/generate.py:206
> >>   #, python-format
> >>   msgid "You must enter a name for your policy module for your '%s'."
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:346
> >> +#: ../sepolicy/sepolicy/generate.py:344
> >>   msgid ""
> >>   "Name must be alphanumeric with no spaces. Consider using option \"-n "
> >>   "MODULENAME\""
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:438
> >> +#: ../sepolicy/sepolicy/generate.py:436
> >>   msgid "User Role types can not be assigned executables."
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:444
> >> +#: ../sepolicy/sepolicy/generate.py:442
> >>   msgid "Only Daemon apps can use an init script."
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:462
> >> +#: ../sepolicy/sepolicy/generate.py:460
> >>   msgid "use_resolve must be a boolean value "
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:468
> >> +#: ../sepolicy/sepolicy/generate.py:466
> >>   msgid "use_syslog must be a boolean value "
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:474
> >> +#: ../sepolicy/sepolicy/generate.py:472
> >>   msgid "use_kerberos must be a boolean value "
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:480
> >> +#: ../sepolicy/sepolicy/generate.py:478
> >>   msgid "manage_krb5_rcache must be a boolean value "
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:510
> >> +#: ../sepolicy/sepolicy/generate.py:508
> >>   msgid "USER Types automatically get a tmp type"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:847
> >> +#: ../sepolicy/sepolicy/generate.py:845
> >>   #, python-format
> >>   msgid "'%s' policy modules require existing domains"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:872
> >> +#: ../sepolicy/sepolicy/generate.py:870
> >>   msgid "Type field required"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:885
> >> +#: ../sepolicy/sepolicy/generate.py:883
> >>   #, python-format
> >>   msgid ""
> >>   "You need to define a new type which ends with: \n"
> >>   " %s"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1113
> >> +#: ../sepolicy/sepolicy/generate.py:1111
> >>   msgid "You must enter the executable path for your confined process"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1378
> >> +#: ../sepolicy/sepolicy/generate.py:1376
> >>   msgid "Created the following files:\n"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1379
> >> +#: ../sepolicy/sepolicy/generate.py:1377
> >>   msgid "Type Enforcement file"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1380
> >> +#: ../sepolicy/sepolicy/generate.py:1378
> >>   msgid "Interface file"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1381
> >> +#: ../sepolicy/sepolicy/generate.py:1379
> >>   msgid "File Contexts file"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1383
> >> +#: ../sepolicy/sepolicy/generate.py:1381
> >>   msgid "Spec file"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/generate.py:1384
> >> +#: ../sepolicy/sepolicy/generate.py:1382
> >>   msgid "Setup Script"
> >>   msgstr ""
> >>
> >> @@ -2367,29 +2378,29 @@ msgstr ""
> >>   msgid "named pipe"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:148
> >> +#: ../sepolicy/sepolicy/__init__.py:149
> >>   msgid "No SELinux Policy installed"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:184
> >> +#: ../sepolicy/sepolicy/__init__.py:185
> >>   #, python-format
> >>   msgid "Failed to read %s policy file"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:470
> >> +#: ../sepolicy/sepolicy/__init__.py:471
> >>   #, python-format
> >>   msgid "-- Allowed %s [ %s ]"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:896
> >> +#: ../sepolicy/sepolicy/__init__.py:897
> >>   msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:1221
> >> +#: ../sepolicy/sepolicy/__init__.py:1230
> >>   msgid "unknown"
> >>   msgstr ""
> >>
> >> -#: ../sepolicy/sepolicy/__init__.py:1230
> >> +#: ../sepolicy/sepolicy/__init__.py:1239
> >>   #, python-brace-format
> >>   msgid "Allow {subject} to {rest}"
> >>   msgstr ""
> >
>

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v4 4/4] python: update python.pot
  2023-07-06 13:39                   ` James Carter
@ 2023-07-12 17:33                     ` James Carter
  0 siblings, 0 replies; 26+ messages in thread
From: James Carter @ 2023-07-12 17:33 UTC (permalink / raw)
  To: Petr Lautrbach; +Cc: Vit Mojzis, selinux

On Thu, Jul 6, 2023 at 9:39 AM James Carter <jwcart2@gmail.com> wrote:
>
> On Tue, Jun 27, 2023 at 10:12 AM Petr Lautrbach <lautrbach@redhat.com> wrote:
> >
> > Vit Mojzis <vmojzis@redhat.com> writes:
> >
> > > On 6/13/23 13:20, Petr Lautrbach wrote:
> > >> Signed-off-by: Petr Lautrbach <lautrbach@redhat.com>
> >
> > > For all four patches:
> > > Reviewed-by: Vit Mojzis <vmojzis@redhat.com>
> >
> > Thanks.
> >
> >
> > If there's no objection I'd like to merge this soon.
> >
>
> I have no objections.
> For these four patches,
> Acked-by: James Carter <jwcart2@gmail.com>
>

These four patches have been merged.
Thanks,
Jim

> >
> > >> ---
> > >>   python/po/python.pot | 963 ++++++++++++++++++++++---------------------
> > >>   1 file changed, 487 insertions(+), 476 deletions(-)
> > >>
> > >> diff --git a/python/po/python.pot b/python/po/python.pot
> > >> index 16d04eb0f18e..435a1b764e34 100644
> > >> --- a/python/po/python.pot
> > >> +++ b/python/po/python.pot
> > >> @@ -8,7 +8,7 @@ msgid ""
> > >>   msgstr ""
> > >>   "Project-Id-Version: PACKAGE VERSION\n"
> > >>   "Report-Msgid-Bugs-To: \n"
> > >> -"POT-Creation-Date: 2023-01-18 11:57+0100\n"
> > >> +"POT-Creation-Date: 2023-06-12 18:13+0200\n"
> > >>   "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
> > >>   "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
> > >>   "Language-Team: LANGUAGE <LL@li.org>\n"
> > >> @@ -17,17 +17,12 @@ msgstr ""
> > >>   "Content-Type: text/plain; charset=UTF-8\n"
> > >>   "Content-Transfer-Encoding: 8bit\n"
> > >>
> > >> -#: ../audit2allow/audit2allow:239
> > >> -msgid "******************** IMPORTANT ***********************\n"
> > >> +#: ../audit2allow/audit2allow:244
> > >> +msgid "IMPORTANT"
> > >>   msgstr ""
> > >>
> > >> -#: ../audit2allow/audit2allow:240
> > >> -#, python-format
> > >> -msgid ""
> > >> -"To make this policy package active, execute:\n"
> > >> -"\n"
> > >> -"semodule -i %s\n"
> > >> -"\n"
> > >> +#: ../audit2allow/audit2allow:245
> > >> +msgid "To make this policy package active, execute:"
> > >>   msgstr ""
> > >>
> > >>   #: ../chcat/chcat:111 ../chcat/chcat:191
> > >> @@ -40,13 +35,13 @@ msgid "Can not modify sensitivity levels using '+' on %s"
> > >>   msgstr ""
> > >>
> > >>   #: ../chcat/chcat:128
> > >> -#, python-format
> > >> -msgid "%s is already in %s"
> > >> +#, python-brace-format
> > >> +msgid "{target} is already in {category}"
> > >>   msgstr ""
> > >>
> > >>   #: ../chcat/chcat:210 ../chcat/chcat:220
> > >> -#, python-format
> > >> -msgid "%s is not in %s"
> > >> +#, python-brace-format
> > >> +msgid "{target} is not in {category}"
> > >>   msgstr ""
> > >>
> > >>   #: ../chcat/chcat:291 ../chcat/chcat:296
> > >> @@ -152,218 +147,222 @@ msgstr ""
> > >>
> > >>   #: ../semanage/semanage:242
> > >>   msgid ""
> > >> -"\n"
> > >> -"MLS/MCS Security Range (MLS/MCS Systems only)\n"
> > >> -"SELinux Range  for SELinux login mapping\n"
> > >> -"defaults to the SELinux user record range.\n"
> > >> -"SELinux Range for SELinux user defaults to s0.\n"
> > >> +"MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux "
> > >> +"login mapping defaults to the SELinux user record range. SELinux Range for "
> > >> +"SELinux user defaults to s0."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:251
> > >> +#: ../semanage/semanage:249
> > >>   msgid ""
> > >> -"\n"
> > >> -"    Protocol  for  the specified port (tcp|udp|dccp|sctp) or internet "
> > >> -"protocol\n"
> > >> -"    version for the specified node (ipv4|ipv6).\n"
> > >> +"Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol "
> > >> +"version for the specified node (ipv4|ipv6)."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:257
> > >> -msgid ""
> > >> -"\n"
> > >> -"    Subnet prefix for  the specified infiniband ibpkey.\n"
> > >> +#: ../semanage/semanage:253
> > >> +msgid "Subnet prefix for  the specified infiniband ibpkey."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:262
> > >> -msgid ""
> > >> -"\n"
> > >> -"    Name for the specified infiniband end port.\n"
> > >> +#: ../semanage/semanage:256
> > >> +msgid "Name for the specified infiniband end port."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:267
> > >> +#: ../semanage/semanage:259
> > >>   #, python-format
> > >>   msgid "Modify a record of the %s object type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:271
> > >> +#: ../semanage/semanage:263
> > >>   #, python-format
> > >>   msgid "List records of the %s object type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:275
> > >> +#: ../semanage/semanage:267
> > >>   #, python-format
> > >>   msgid "Delete a record of the %s object type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:279
> > >> +#: ../semanage/semanage:271
> > >>   msgid "Extract customizable commands, for use within a transaction"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:283
> > >> +#: ../semanage/semanage:275
> > >>   #, python-format
> > >>   msgid "Remove all %s objects local customizations"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:287
> > >> +#: ../semanage/semanage:279
> > >>   msgid "SELinux user name"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:292
> > >> +#: ../semanage/semanage:284
> > >>   msgid "Manage login mappings between linux users and SELinux confined users"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:309
> > >> +#: ../semanage/semanage:301
> > >>   #, python-format
> > >>   msgid "login_name | %%groupname"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:361
> > >> +#: ../semanage/semanage:344
> > >>   msgid "Manage file context mapping definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:375
> > >> +#: ../semanage/semanage:359
> > >> +msgid ""
> > >> +"Substitute target path with sourcepath when generating default label. This "
> > >> +"is used with fcontext. Requires source and target path arguments. The "
> > >> +"context labeling for the target subtree is made equivalent to that defined "
> > >> +"for the source."
> > >> +msgstr ""
> > >> +
> > >> +#: ../semanage/semanage:363
> > >>   msgid ""
> > >> -"Substitute  target  path with sourcepath when generating default\n"
> > >> -"                                                                  label.  "
> > >> -"This is used with fcontext. Requires source  and  target\n"
> > >> -"                                                                  path  "
> > >> -"arguments.  The context labeling for the target subtree is\n"
> > >> -"                                                                  made "
> > >> -"equivalent to that defined for the source."
> > >> +"File Type. This is used with fcontext. Requires a file type as shown in the "
> > >> +"mode field by ls, e.g. use d to match only directories or f to match only "
> > >> +"regular files. The following file type options can be passed: f (regular "
> > >> +"file), d (directory), c (character device), b (block device), s (socket), l "
> > >> +"(symbolic link), p (named pipe). If you do not specify a file type, the file "
> > >> +"type will default to \"all files\"."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:383
> > >> +#: ../semanage/semanage:371
> > >>   msgid ""
> > >>   "Path to be labeled (may be in the form of a Perl compatible regular "
> > >>   "expression)"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:411
> > >> +#: ../semanage/semanage:399
> > >>   msgid "Manage SELinux confined users (Roles and levels for an SELinux user)"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:429
> > >> +#: ../semanage/semanage:417
> > >>   msgid ""
> > >> -"\n"
> > >> -"SELinux Roles.  You must enclose multiple roles within quotes, separate by "
> > >> -"spaces. Or specify -R multiple times.\n"
> > >> +"SELinux Roles. You must enclose multiple roles within quotes, separate by "
> > >> +"spaces. Or specify -R multiple times."
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:433
> > >> +#: ../semanage/semanage:419
> > >>   msgid "selinux_name"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:461
> > >> +#: ../semanage/semanage:447
> > >>   msgid "Manage network port type definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:477
> > >> +#: ../semanage/semanage:463
> > >>   msgid "port | port_range"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:506
> > >> +#: ../semanage/semanage:492
> > >>   msgid "Manage infiniband ibpkey type definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:522
> > >> +#: ../semanage/semanage:508
> > >>   msgid "pkey | pkey_range"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:549
> > >> +#: ../semanage/semanage:535
> > >>   msgid "Manage infiniband end port type definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:565
> > >> +#: ../semanage/semanage:551
> > >>   msgid "ibendport"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:592
> > >> +#: ../semanage/semanage:578
> > >>   msgid "Manage network interface type definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:607
> > >> +#: ../semanage/semanage:593
> > >>   msgid "interface_spec"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:631
> > >> +#: ../semanage/semanage:617
> > >>   msgid "Manage SELinux policy modules"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:642
> > >> +#: ../semanage/semanage:628
> > >>   msgid "Add a module"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:643
> > >> +#: ../semanage/semanage:629
> > >>   msgid "Remove a module"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:644
> > >> +#: ../semanage/semanage:630
> > >>   msgid "Disable a module"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:645
> > >> +#: ../semanage/semanage:631
> > >>   msgid "Enable a module"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:672
> > >> +#: ../semanage/semanage:658
> > >>   msgid "Manage network node type definitions"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:686
> > >> +#: ../semanage/semanage:672
> > >>   msgid "Network Mask"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:690
> > >> +#: ../semanage/semanage:676
> > >>   msgid "node"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:715
> > >> +#: ../semanage/semanage:701
> > >>   msgid "Manage booleans to selectively enable functionality"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:720
> > >> +#: ../semanage/semanage:706
> > >>   msgid "boolean"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:730
> > >> +#: ../semanage/semanage:716
> > >>   msgid "Enable the boolean"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:731
> > >> +#: ../semanage/semanage:717
> > >>   msgid "Disable the boolean"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:752
> > >> +#: ../semanage/semanage:738
> > >>   msgid "semanage permissive: error: the following argument is required: type\n"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:756
> > >> +#: ../semanage/semanage:742
> > >>   msgid "Manage process type enforcement mode"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:768 ../semanage/seobject.py:2677
> > >> +#: ../semanage/semanage:754 ../semanage/seobject.py:2672
> > >>   msgid "type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:779
> > >> +#: ../semanage/semanage:765
> > >>   msgid "Disable/Enable dontaudit rules in policy"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:799
> > >> +#: ../semanage/semanage:785
> > >>   msgid "Output local customizations"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:801
> > >> +#: ../semanage/semanage:787
> > >>   msgid "Output file"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:894
> > >> +#: ../semanage/semanage:880
> > >>   msgid "Import local customizations"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/semanage:897
> > >> +#: ../semanage/semanage:883
> > >>   msgid "Input file"
> > >>   msgstr ""
> > >>
> > >> +#: ../semanage/semanage:891
> > >> +msgid ""
> > >> +"semanage is used to configure certain elements of SELinux policy with-out "
> > >> +"requiring modification or recompilation from policy source."
> > >> +msgstr ""
> > >> +
> > >>   #: ../semanage/seobject.py:279
> > >>   msgid "Could not create semanage handle"
> > >>   msgstr ""
> > >> @@ -485,123 +484,115 @@ msgstr ""
> > >>   msgid "Customized Permissive Types"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:510
> > >> -msgid ""
> > >> -"The sepolgen python module is required to setup permissive domains.\n"
> > >> -"In some distributions it is included in the policycoreutils-devel package.\n"
> > >> -"# yum install policycoreutils-devel\n"
> > >> -"Or similar for your distro."
> > >> -msgstr ""
> > >> -
> > >> -#: ../semanage/seobject.py:520
> > >> +#: ../semanage/seobject.py:515
> > >>   #, python-format
> > >>   msgid "Could not set permissive domain %s (module installation failed)"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:526
> > >> +#: ../semanage/seobject.py:521
> > >>   #, python-format
> > >>   msgid "Could not remove permissive domain %s (remove failed)"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:563 ../semanage/seobject.py:633
> > >> -#: ../semanage/seobject.py:678 ../semanage/seobject.py:797
> > >> -#: ../semanage/seobject.py:827 ../semanage/seobject.py:892
> > >> -#: ../semanage/seobject.py:948 ../semanage/seobject.py:1226
> > >> -#: ../semanage/seobject.py:1492 ../semanage/seobject.py:2502
> > >> -#: ../semanage/seobject.py:2575 ../semanage/seobject.py:2599
> > >> -#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
> > >> +#: ../semanage/seobject.py:558 ../semanage/seobject.py:628
> > >> +#: ../semanage/seobject.py:673 ../semanage/seobject.py:792
> > >> +#: ../semanage/seobject.py:822 ../semanage/seobject.py:887
> > >> +#: ../semanage/seobject.py:943 ../semanage/seobject.py:1221
> > >> +#: ../semanage/seobject.py:1487 ../semanage/seobject.py:2497
> > >> +#: ../semanage/seobject.py:2570 ../semanage/seobject.py:2594
> > >> +#: ../semanage/seobject.py:2725 ../semanage/seobject.py:2776
> > >>   #, python-format
> > >>   msgid "Could not create a key for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:567 ../semanage/seobject.py:637
> > >> -#: ../semanage/seobject.py:682 ../semanage/seobject.py:688
> > >> +#: ../semanage/seobject.py:562 ../semanage/seobject.py:632
> > >> +#: ../semanage/seobject.py:677 ../semanage/seobject.py:683
> > >>   #, python-format
> > >>   msgid "Could not check if login mapping for %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:569
> > >> +#: ../semanage/seobject.py:564
> > >>   #, python-format
> > >>   msgid "Login mapping for %s is already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:574
> > >> +#: ../semanage/seobject.py:569
> > >>   #, python-format
> > >>   msgid "Linux Group %s does not exist"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:579
> > >> +#: ../semanage/seobject.py:574
> > >>   #, python-format
> > >>   msgid "Linux User %s does not exist"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:583
> > >> +#: ../semanage/seobject.py:578
> > >>   #, python-format
> > >>   msgid "Could not create login mapping for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:587 ../semanage/seobject.py:841
> > >> +#: ../semanage/seobject.py:582 ../semanage/seobject.py:836
> > >>   #, python-format
> > >>   msgid "Could not set name for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:592 ../semanage/seobject.py:851
> > >> +#: ../semanage/seobject.py:587 ../semanage/seobject.py:846
> > >>   #, python-format
> > >>   msgid "Could not set MLS range for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:596
> > >> +#: ../semanage/seobject.py:591
> > >>   #, python-format
> > >>   msgid "Could not set SELinux user for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:600
> > >> +#: ../semanage/seobject.py:595
> > >>   #, python-format
> > >>   msgid "Could not add login mapping for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:616
> > >> +#: ../semanage/seobject.py:611
> > >>   msgid "Requires seuser or serange"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:639 ../semanage/seobject.py:684
> > >> +#: ../semanage/seobject.py:634 ../semanage/seobject.py:679
> > >>   #, python-format
> > >>   msgid "Login mapping for %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:643
> > >> +#: ../semanage/seobject.py:638
> > >>   #, python-format
> > >>   msgid "Could not query seuser for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:658
> > >> +#: ../semanage/seobject.py:653
> > >>   #, python-format
> > >>   msgid "Could not modify login mapping for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:690
> > >> +#: ../semanage/seobject.py:685
> > >>   #, python-format
> > >>   msgid "Login mapping for %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:694
> > >> +#: ../semanage/seobject.py:689
> > >>   #, python-format
> > >>   msgid "Could not delete login mapping for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:713 ../semanage/seobject.py:745
> > >> -#: ../semanage/seobject.py:991
> > >> +#: ../semanage/seobject.py:708 ../semanage/seobject.py:740
> > >> +#: ../semanage/seobject.py:986
> > >>   msgid "Could not list login mappings"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> > >> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:1156
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:3138
> > >>   msgid "Login Name"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:772 ../semanage/seobject.py:784
> > >> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> > >> +#: ../semanage/seobject.py:767 ../semanage/seobject.py:779
> > >> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:1182
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:3156
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:3242
> > >> @@ -609,938 +600,958 @@ msgstr ""
> > >>   msgid "SELinux User"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:772
> > >> +#: ../semanage/seobject.py:767
> > >>   msgid "MLS/MCS Range"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:772
> > >> +#: ../semanage/seobject.py:767
> > >>   msgid "Service"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:800 ../semanage/seobject.py:831
> > >> -#: ../semanage/seobject.py:896 ../semanage/seobject.py:952
> > >> -#: ../semanage/seobject.py:958
> > >> +#: ../semanage/seobject.py:795 ../semanage/seobject.py:826
> > >> +#: ../semanage/seobject.py:891 ../semanage/seobject.py:947
> > >> +#: ../semanage/seobject.py:953
> > >>   #, python-format
> > >>   msgid "Could not check if SELinux user %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:803 ../semanage/seobject.py:902
> > >> -#: ../semanage/seobject.py:964
> > >> +#: ../semanage/seobject.py:798 ../semanage/seobject.py:897
> > >> +#: ../semanage/seobject.py:959
> > >>   #, python-format
> > >>   msgid "Could not query user for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:823
> > >> +#: ../semanage/seobject.py:818
> > >>   #, python-format
> > >>   msgid "You must add at least one role for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:833
> > >> +#: ../semanage/seobject.py:828
> > >>   #, python-format
> > >>   msgid "SELinux user %s is already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:837
> > >> +#: ../semanage/seobject.py:832
> > >>   #, python-format
> > >>   msgid "Could not create SELinux user for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:846
> > >> -#, python-format
> > >> -msgid "Could not add role %s for %s"
> > >> +#: ../semanage/seobject.py:841
> > >> +#, python-brace-format
> > >> +msgid "Could not add role {role} for {name}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:855
> > >> +#: ../semanage/seobject.py:850
> > >>   #, python-format
> > >>   msgid "Could not set MLS level for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:858
> > >> -#, python-format
> > >> -msgid "Could not add prefix %s for %s"
> > >> +#: ../semanage/seobject.py:853
> > >> +#, python-brace-format
> > >> +msgid "Could not add prefix {prefix} for {role}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:861
> > >> +#: ../semanage/seobject.py:856
> > >>   #, python-format
> > >>   msgid "Could not extract key for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:865
> > >> +#: ../semanage/seobject.py:860
> > >>   #, python-format
> > >>   msgid "Could not add SELinux user %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:886
> > >> +#: ../semanage/seobject.py:881
> > >>   msgid "Requires prefix, roles, level or range"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:888
> > >> +#: ../semanage/seobject.py:883
> > >>   msgid "Requires prefix or roles"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:898 ../semanage/seobject.py:954
> > >> +#: ../semanage/seobject.py:893 ../semanage/seobject.py:949
> > >>   #, python-format
> > >>   msgid "SELinux user %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:927
> > >> +#: ../semanage/seobject.py:922
> > >>   #, python-format
> > >>   msgid "Could not modify SELinux user %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:960
> > >> +#: ../semanage/seobject.py:955
> > >>   #, python-format
> > >>   msgid "SELinux user %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:971
> > >> +#: ../semanage/seobject.py:966
> > >>   #, python-format
> > >>   msgid "Could not delete SELinux user %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1009
> > >> +#: ../semanage/seobject.py:1004
> > >>   msgid "Could not list SELinux users"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1015
> > >> +#: ../semanage/seobject.py:1010
> > >>   #, python-format
> > >>   msgid "Could not list roles for user %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1040
> > >> +#: ../semanage/seobject.py:1035
> > >>   msgid "Labeling"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1040
> > >> +#: ../semanage/seobject.py:1035
> > >>   msgid "MLS/"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1041
> > >> +#: ../semanage/seobject.py:1036
> > >>   msgid "Prefix"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1041
> > >> +#: ../semanage/seobject.py:1036
> > >>   msgid "MCS Level"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1041
> > >> +#: ../semanage/seobject.py:1036
> > >>   msgid "MCS Range"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1041 ../semanage/seobject.py:1046
> > >> +#: ../semanage/seobject.py:1036 ../semanage/seobject.py:1041
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:3262
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:5233
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:5382
> > >>   msgid "SELinux Roles"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1071
> > >> +#: ../semanage/seobject.py:1066
> > >>   msgid "Protocol has to be one of udp, tcp, dccp or sctp"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1073
> > >> +#: ../semanage/seobject.py:1068
> > >>   msgid "Port is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1087
> > >> +#: ../semanage/seobject.py:1082
> > >>   msgid "Invalid Port"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1091 ../semanage/seobject.py:1365
> > >> -#, python-format
> > >> -msgid "Could not create a key for %s/%s"
> > >> +#: ../semanage/seobject.py:1086
> > >> +#, python-brace-format
> > >> +msgid "Could not create a key for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1376
> > >> -#: ../semanage/seobject.py:1631
> > >> +#: ../semanage/seobject.py:1097 ../semanage/seobject.py:1371
> > >> +#: ../semanage/seobject.py:1626
> > >>   msgid "Type is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1107 ../semanage/seobject.py:1172
> > >> +#: ../semanage/seobject.py:1102 ../semanage/seobject.py:1167
> > >>   #, python-format
> > >>   msgid "Type %s is invalid, must be a port type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1113 ../semanage/seobject.py:1178
> > >> -#: ../semanage/seobject.py:1244 ../semanage/seobject.py:1250
> > >> -#, python-format
> > >> -msgid "Could not check if port %s/%s is defined"
> > >> +#: ../semanage/seobject.py:1108 ../semanage/seobject.py:1173
> > >> +#: ../semanage/seobject.py:1239 ../semanage/seobject.py:1245
> > >> +#, python-brace-format
> > >> +msgid "Could not check if port {proto}/{port} is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1115
> > >> -#, python-format
> > >> -msgid "Port %s/%s already defined"
> > >> +#: ../semanage/seobject.py:1110
> > >> +#, python-brace-format
> > >> +msgid "Port {proto}/{port} already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1119
> > >> -#, python-format
> > >> -msgid "Could not create port for %s/%s"
> > >> +#: ../semanage/seobject.py:1114
> > >> +#, python-brace-format
> > >> +msgid "Could not create port for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1125 ../semanage/seobject.py:1399
> > >> -#: ../semanage/seobject.py:1653
> > >> -#, python-format
> > >> -msgid "Could not create context for %s/%s"
> > >> +#: ../semanage/seobject.py:1120
> > >> +#, python-brace-format
> > >> +msgid "Could not create context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1129
> > >> -#, python-format
> > >> -msgid "Could not set user in port context for %s/%s"
> > >> +#: ../semanage/seobject.py:1124
> > >> +#, python-brace-format
> > >> +msgid "Could not set user in port context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1133
> > >> -#, python-format
> > >> -msgid "Could not set role in port context for %s/%s"
> > >> +#: ../semanage/seobject.py:1128
> > >> +#, python-brace-format
> > >> +msgid "Could not set role in port context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1137
> > >> -#, python-format
> > >> -msgid "Could not set type in port context for %s/%s"
> > >> +#: ../semanage/seobject.py:1132
> > >> +#, python-brace-format
> > >> +msgid "Could not set type in port context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1142
> > >> -#, python-format
> > >> -msgid "Could not set mls fields in port context for %s/%s"
> > >> +#: ../semanage/seobject.py:1137
> > >> +#, python-brace-format
> > >> +msgid "Could not set mls fields in port context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1146
> > >> -#, python-format
> > >> -msgid "Could not set port context for %s/%s"
> > >> +#: ../semanage/seobject.py:1141
> > >> +#, python-brace-format
> > >> +msgid "Could not set port context for {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1150
> > >> -#, python-format
> > >> -msgid "Could not add port %s/%s"
> > >> +#: ../semanage/seobject.py:1145
> > >> +#, python-brace-format
> > >> +msgid "Could not add port {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1166 ../semanage/seobject.py:1438
> > >> -#: ../semanage/seobject.py:1692 ../semanage/seobject.py:1970
> > >> -#: ../semanage/seobject.py:2176
> > >> +#: ../semanage/seobject.py:1161 ../semanage/seobject.py:1433
> > >> +#: ../semanage/seobject.py:1687 ../semanage/seobject.py:1965
> > >> +#: ../semanage/seobject.py:2171
> > >>   msgid "Requires setype or serange"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1168 ../semanage/seobject.py:1440
> > >> -#: ../semanage/seobject.py:1694
> > >> +#: ../semanage/seobject.py:1163 ../semanage/seobject.py:1435
> > >> +#: ../semanage/seobject.py:1689
> > >>   msgid "Requires setype"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1180 ../semanage/seobject.py:1246
> > >> -#, python-format
> > >> -msgid "Port %s/%s is not defined"
> > >> +#: ../semanage/seobject.py:1175 ../semanage/seobject.py:1241
> > >> +#, python-brace-format
> > >> +msgid "Port {proto}/{port} is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1184
> > >> -#, python-format
> > >> -msgid "Could not query port %s/%s"
> > >> +#: ../semanage/seobject.py:1179
> > >> +#, python-brace-format
> > >> +msgid "Could not query port {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1198
> > >> -#, python-format
> > >> -msgid "Could not modify port %s/%s"
> > >> +#: ../semanage/seobject.py:1193
> > >> +#, python-brace-format
> > >> +msgid "Could not modify port {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1213
> > >> +#: ../semanage/seobject.py:1208
> > >>   msgid "Could not list the ports"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1230
> > >> +#: ../semanage/seobject.py:1225
> > >>   #, python-format
> > >>   msgid "Could not delete the port %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1252
> > >> -#, python-format
> > >> -msgid "Port %s/%s is defined in policy, cannot be deleted"
> > >> +#: ../semanage/seobject.py:1247
> > >> +#, python-brace-format
> > >> +msgid "Port {proto}/{port} is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1256
> > >> -#, python-format
> > >> -msgid "Could not delete port %s/%s"
> > >> +#: ../semanage/seobject.py:1251
> > >> +#, python-brace-format
> > >> +msgid "Could not delete port {proto}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1274 ../semanage/seobject.py:1294
> > >> +#: ../semanage/seobject.py:1269 ../semanage/seobject.py:1289
> > >>   msgid "Could not list ports"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1329 ../sepolicy/sepolicy/sepolicy.glade:2668
> > >> +#: ../semanage/seobject.py:1324 ../sepolicy/sepolicy/sepolicy.glade:2668
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:2766
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:4630
> > >>   msgid "SELinux Port Type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1329
> > >> +#: ../semanage/seobject.py:1324
> > >>   msgid "Proto"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1329 ../semanage/seobject.py:1835
> > >> +#: ../semanage/seobject.py:1324 ../semanage/seobject.py:1830
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:1407
> > >>   msgid "Port Number"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1351
> > >> +#: ../semanage/seobject.py:1346
> > >>   msgid "Subnet Prefix is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1361
> > >> +#: ../semanage/seobject.py:1356
> > >>   msgid "Invalid Pkey"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1381 ../semanage/seobject.py:1445
> > >> +#: ../semanage/seobject.py:1360
> > >> +#, python-brace-format
> > >> +msgid "Could not create a key for {subnet_prefix}/{pkey}"
> > >> +msgstr ""
> > >> +
> > >> +#: ../semanage/seobject.py:1376 ../semanage/seobject.py:1440
> > >>   #, python-format
> > >>   msgid "Type %s is invalid, must be a ibpkey type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1387 ../semanage/seobject.py:1451
> > >> -#: ../semanage/seobject.py:1505 ../semanage/seobject.py:1511
> > >> -#, python-format
> > >> -msgid "Could not check if ibpkey %s/%s is defined"
> > >> +#: ../semanage/seobject.py:1382 ../semanage/seobject.py:1446
> > >> +#: ../semanage/seobject.py:1500 ../semanage/seobject.py:1506
> > >> +#, python-brace-format
> > >> +msgid "Could not check if ibpkey {subnet_prefix}/{pkey} is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1389
> > >> -#, python-format
> > >> -msgid "ibpkey %s/%s already defined"
> > >> +#: ../semanage/seobject.py:1384
> > >> +#, python-brace-format
> > >> +msgid "ibpkey {subnet_prefix}/{pkey} already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1393
> > >> -#, python-format
> > >> -msgid "Could not create ibpkey for %s/%s"
> > >> +#: ../semanage/seobject.py:1388
> > >> +#, python-brace-format
> > >> +msgid "Could not create ibpkey for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1403
> > >> -#, python-format
> > >> -msgid "Could not set user in ibpkey context for %s/%s"
> > >> +#: ../semanage/seobject.py:1394
> > >> +#, python-brace-format
> > >> +msgid "Could not create context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1407
> > >> -#, python-format
> > >> -msgid "Could not set role in ibpkey context for %s/%s"
> > >> +#: ../semanage/seobject.py:1398
> > >> +#, python-brace-format
> > >> +msgid "Could not set user in ibpkey context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1411
> > >> -#, python-format
> > >> -msgid "Could not set type in ibpkey context for %s/%s"
> > >> +#: ../semanage/seobject.py:1402
> > >> +#, python-brace-format
> > >> +msgid "Could not set role in ibpkey context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1416
> > >> -#, python-format
> > >> -msgid "Could not set mls fields in ibpkey context for %s/%s"
> > >> +#: ../semanage/seobject.py:1406
> > >> +#, python-brace-format
> > >> +msgid "Could not set type in ibpkey context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1420
> > >> -#, python-format
> > >> -msgid "Could not set ibpkey context for %s/%s"
> > >> +#: ../semanage/seobject.py:1411
> > >> +#, python-brace-format
> > >> +msgid "Could not set mls fields in ibpkey context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1424
> > >> -#, python-format
> > >> -msgid "Could not add ibpkey %s/%s"
> > >> +#: ../semanage/seobject.py:1415
> > >> +#, python-brace-format
> > >> +msgid "Could not set ibpkey context for {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1453 ../semanage/seobject.py:1507
> > >> -#, python-format
> > >> -msgid "ibpkey %s/%s is not defined"
> > >> +#: ../semanage/seobject.py:1419
> > >> +#, python-brace-format
> > >> +msgid "Could not add ibpkey {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1457
> > >> -#, python-format
> > >> -msgid "Could not query ibpkey %s/%s"
> > >> +#: ../semanage/seobject.py:1448 ../semanage/seobject.py:1502
> > >> +#, python-brace-format
> > >> +msgid "ibpkey {subnet_prefix}/{pkey} is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1468
> > >> -#, python-format
> > >> -msgid "Could not modify ibpkey %s/%s"
> > >> +#: ../semanage/seobject.py:1452
> > >> +#, python-brace-format
> > >> +msgid "Could not query ibpkey {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1481
> > >> +#: ../semanage/seobject.py:1463
> > >> +#, python-brace-format
> > >> +msgid "Could not modify ibpkey {subnet_prefix}/{pkey}"
> > >> +msgstr ""
> > >> +
> > >> +#: ../semanage/seobject.py:1476
> > >>   msgid "Could not list the ibpkeys"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1496
> > >> +#: ../semanage/seobject.py:1491
> > >>   #, python-format
> > >>   msgid "Could not delete the ibpkey %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1513
> > >> -#, python-format
> > >> -msgid "ibpkey %s/%s is defined in policy, cannot be deleted"
> > >> +#: ../semanage/seobject.py:1508
> > >> +#, python-brace-format
> > >> +msgid "ibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1517
> > >> -#, python-format
> > >> -msgid "Could not delete ibpkey %s/%s"
> > >> +#: ../semanage/seobject.py:1512
> > >> +#, python-brace-format
> > >> +msgid "Could not delete ibpkey {subnet_prefix}/{pkey}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1533 ../semanage/seobject.py:1554
> > >> +#: ../semanage/seobject.py:1528 ../semanage/seobject.py:1549
> > >>   msgid "Could not list ibpkeys"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1589
> > >> +#: ../semanage/seobject.py:1584
> > >>   msgid "SELinux IB Pkey Type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1589
> > >> +#: ../semanage/seobject.py:1584
> > >>   msgid "Subnet_Prefix"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1589
> > >> +#: ../semanage/seobject.py:1584
> > >>   msgid "Pkey Number"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1611
> > >> +#: ../semanage/seobject.py:1606
> > >>   msgid "IB device name is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1616
> > >> +#: ../semanage/seobject.py:1611
> > >>   msgid "Invalid Port Number"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1620
> > >> -#, python-format
> > >> -msgid "Could not create a key for ibendport %s/%s"
> > >> +#: ../semanage/seobject.py:1615
> > >> +#, python-brace-format
> > >> +msgid "Could not create a key for ibendport {ibdev_name}/{ibendport}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1636 ../semanage/seobject.py:1699
> > >> +#: ../semanage/seobject.py:1631 ../semanage/seobject.py:1694
> > >>   #, python-format
> > >>   msgid "Type %s is invalid, must be an ibendport type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1641 ../semanage/seobject.py:1705
> > >> -#: ../semanage/seobject.py:1757 ../semanage/seobject.py:1763
> > >> -#, python-format
> > >> -msgid "Could not check if ibendport %s/%s is defined"
> > >> +#: ../semanage/seobject.py:1636
> > >> +#, python-brace-format
> > >> +msgid "Could not check if ibendport {ibdev_name}/{port} is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1643
> > >> -#, python-format
> > >> -msgid "ibendport %s/%s already defined"
> > >> +#: ../semanage/seobject.py:1638
> > >> +#, python-brace-format
> > >> +msgid "ibendport {ibdev_name}/{port} already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1647
> > >> -#, python-format
> > >> -msgid "Could not create ibendport for %s/%s"
> > >> +#: ../semanage/seobject.py:1642
> > >> +#, python-brace-format
> > >> +msgid "Could not create ibendport for {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1657
> > >> -#, python-format
> > >> -msgid "Could not set user in ibendport context for %s/%s"
> > >> +#: ../semanage/seobject.py:1648
> > >> +#, python-brace-format
> > >> +msgid "Could not create context for {ibendport}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1661
> > >> -#, python-format
> > >> -msgid "Could not set role in ibendport context for %s/%s"
> > >> +#: ../semanage/seobject.py:1652
> > >> +#, python-brace-format
> > >> +msgid "Could not set user in ibendport context for {ibdev_name}/{port}"
> > >> +msgstr ""
> > >> +
> > >> +#: ../semanage/seobject.py:1656
> > >> +#, python-brace-format
> > >> +msgid "Could not set role in ibendport context for {ibdev_name}/{port}"
> > >> +msgstr ""
> > >> +
> > >> +#: ../semanage/seobject.py:1660
> > >> +#, python-brace-format
> > >> +msgid "Could not set type in ibendport context for {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >>   #: ../semanage/seobject.py:1665
> > >> -#, python-format
> > >> -msgid "Could not set type in ibendport context for %s/%s"
> > >> +#, python-brace-format
> > >> +msgid "Could not set mls fields in ibendport context for {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1670
> > >> -#, python-format
> > >> -msgid "Could not set mls fields in ibendport context for %s/%s"
> > >> +#: ../semanage/seobject.py:1669
> > >> +#, python-brace-format
> > >> +msgid "Could not set ibendport context for {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1674
> > >> -#, python-format
> > >> -msgid "Could not set ibendport context for %s/%s"
> > >> +#: ../semanage/seobject.py:1673
> > >> +#, python-brace-format
> > >> +msgid "Could not add ibendport {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1678
> > >> -#, python-format
> > >> -msgid "Could not add ibendport %s/%s"
> > >> +#: ../semanage/seobject.py:1700 ../semanage/seobject.py:1752
> > >> +#: ../semanage/seobject.py:1758
> > >> +#, python-brace-format
> > >> +msgid "Could not check if ibendport {ibdev_name}/{ibendport} is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1707 ../semanage/seobject.py:1759
> > >> -#, python-format
> > >> -msgid "ibendport %s/%s is not defined"
> > >> +#: ../semanage/seobject.py:1702 ../semanage/seobject.py:1754
> > >> +#, python-brace-format
> > >> +msgid "ibendport {ibdev_name}/{ibendport} is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1711
> > >> -#, python-format
> > >> -msgid "Could not query ibendport %s/%s"
> > >> +#: ../semanage/seobject.py:1706
> > >> +#, python-brace-format
> > >> +msgid "Could not query ibendport {ibdev_name}/{ibendport}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1722
> > >> -#, python-format
> > >> -msgid "Could not modify ibendport %s/%s"
> > >> +#: ../semanage/seobject.py:1717
> > >> +#, python-brace-format
> > >> +msgid "Could not modify ibendport {ibdev_name}/{ibendport}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1735
> > >> +#: ../semanage/seobject.py:1730
> > >>   msgid "Could not list the ibendports"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1744
> > >> -#, python-format
> > >> -msgid "Could not create a key for %s/%d"
> > >> +#: ../semanage/seobject.py:1739
> > >> +#, python-brace-format
> > >> +msgid "Could not create a key for {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1748
> > >> -#, python-format
> > >> -msgid "Could not delete the ibendport %s/%d"
> > >> +#: ../semanage/seobject.py:1743
> > >> +#, python-brace-format
> > >> +msgid "Could not delete the ibendport {ibdev_name}/{port}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1765
> > >> -#, python-format
> > >> -msgid "ibendport %s/%s is defined in policy, cannot be deleted"
> > >> +#: ../semanage/seobject.py:1760
> > >> +#, python-brace-format
> > >> +msgid ""
> > >> +"ibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1769
> > >> -#, python-format
> > >> -msgid "Could not delete ibendport %s/%s"
> > >> +#: ../semanage/seobject.py:1764
> > >> +#, python-brace-format
> > >> +msgid "Could not delete ibendport {ibdev_name}/{ibendport}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1785 ../semanage/seobject.py:1805
> > >> +#: ../semanage/seobject.py:1780 ../semanage/seobject.py:1800
> > >>   msgid "Could not list ibendports"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1835
> > >> +#: ../semanage/seobject.py:1830
> > >>   msgid "SELinux IB End Port Type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1835
> > >> +#: ../semanage/seobject.py:1830
> > >>   msgid "IB Device Name"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1861
> > >> +#: ../semanage/seobject.py:1856
> > >>   msgid "Node Address is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1873 ../semanage/seobject.py:1885
> > >> +#: ../semanage/seobject.py:1868 ../semanage/seobject.py:1880
> > >>   msgid "Unknown or missing protocol"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1899
> > >> +#: ../semanage/seobject.py:1894
> > >>   msgid "SELinux node type is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1904 ../semanage/seobject.py:1975
> > >> +#: ../semanage/seobject.py:1899 ../semanage/seobject.py:1970
> > >>   #, python-format
> > >>   msgid "Type %s is invalid, must be a node type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1908 ../semanage/seobject.py:1979
> > >> -#: ../semanage/seobject.py:2016 ../semanage/seobject.py:2117
> > >> -#: ../semanage/seobject.py:2180 ../semanage/seobject.py:2216
> > >> -#: ../semanage/seobject.py:2435
> > >> +#: ../semanage/seobject.py:1903 ../semanage/seobject.py:1974
> > >> +#: ../semanage/seobject.py:2011 ../semanage/seobject.py:2112
> > >> +#: ../semanage/seobject.py:2175 ../semanage/seobject.py:2211
> > >> +#: ../semanage/seobject.py:2430
> > >>   #, python-format
> > >>   msgid "Could not create key for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1912 ../semanage/seobject.py:1983
> > >> -#: ../semanage/seobject.py:2020 ../semanage/seobject.py:2026
> > >> +#: ../semanage/seobject.py:1907 ../semanage/seobject.py:1978
> > >> +#: ../semanage/seobject.py:2015 ../semanage/seobject.py:2021
> > >>   #, python-format
> > >>   msgid "Could not check if addr %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1914
> > >> +#: ../semanage/seobject.py:1909
> > >>   #, python-format
> > >>   msgid "Addr %s already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1918
> > >> +#: ../semanage/seobject.py:1913
> > >>   #, python-format
> > >>   msgid "Could not create addr for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1924 ../semanage/seobject.py:2132
> > >> -#: ../semanage/seobject.py:2389
> > >> +#: ../semanage/seobject.py:1919 ../semanage/seobject.py:2127
> > >> +#: ../semanage/seobject.py:2384
> > >>   #, python-format
> > >>   msgid "Could not create context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1928
> > >> +#: ../semanage/seobject.py:1923
> > >>   #, python-format
> > >>   msgid "Could not set mask for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1932
> > >> +#: ../semanage/seobject.py:1927
> > >>   #, python-format
> > >>   msgid "Could not set user in addr context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1936
> > >> +#: ../semanage/seobject.py:1931
> > >>   #, python-format
> > >>   msgid "Could not set role in addr context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1940
> > >> +#: ../semanage/seobject.py:1935
> > >>   #, python-format
> > >>   msgid "Could not set type in addr context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1945
> > >> +#: ../semanage/seobject.py:1940
> > >>   #, python-format
> > >>   msgid "Could not set mls fields in addr context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1949
> > >> +#: ../semanage/seobject.py:1944
> > >>   #, python-format
> > >>   msgid "Could not set addr context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1953
> > >> +#: ../semanage/seobject.py:1948
> > >>   #, python-format
> > >>   msgid "Could not add addr %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1985 ../semanage/seobject.py:2022
> > >> +#: ../semanage/seobject.py:1980 ../semanage/seobject.py:2017
> > >>   #, python-format
> > >>   msgid "Addr %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1989
> > >> +#: ../semanage/seobject.py:1984
> > >>   #, python-format
> > >>   msgid "Could not query addr %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:1999
> > >> +#: ../semanage/seobject.py:1994
> > >>   #, python-format
> > >>   msgid "Could not modify addr %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2028
> > >> +#: ../semanage/seobject.py:2023
> > >>   #, python-format
> > >>   msgid "Addr %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2032
> > >> +#: ../semanage/seobject.py:2027
> > >>   #, python-format
> > >>   msgid "Could not delete addr %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2046
> > >> +#: ../semanage/seobject.py:2041
> > >>   msgid "Could not deleteall node mappings"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2060
> > >> +#: ../semanage/seobject.py:2055
> > >>   msgid "Could not list addrs"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2113 ../semanage/seobject.py:2426
> > >> +#: ../semanage/seobject.py:2108 ../semanage/seobject.py:2421
> > >>   msgid "SELinux Type is required"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2121 ../semanage/seobject.py:2184
> > >> -#: ../semanage/seobject.py:2220 ../semanage/seobject.py:2226
> > >> +#: ../semanage/seobject.py:2116 ../semanage/seobject.py:2179
> > >> +#: ../semanage/seobject.py:2215 ../semanage/seobject.py:2221
> > >>   #, python-format
> > >>   msgid "Could not check if interface %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2123
> > >> +#: ../semanage/seobject.py:2118
> > >>   #, python-format
> > >>   msgid "Interface %s already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2127
> > >> +#: ../semanage/seobject.py:2122
> > >>   #, python-format
> > >>   msgid "Could not create interface for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2136
> > >> +#: ../semanage/seobject.py:2131
> > >>   #, python-format
> > >>   msgid "Could not set user in interface context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2140
> > >> +#: ../semanage/seobject.py:2135
> > >>   #, python-format
> > >>   msgid "Could not set role in interface context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2144
> > >> +#: ../semanage/seobject.py:2139
> > >>   #, python-format
> > >>   msgid "Could not set type in interface context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2149
> > >> +#: ../semanage/seobject.py:2144
> > >>   #, python-format
> > >>   msgid "Could not set mls fields in interface context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2153
> > >> +#: ../semanage/seobject.py:2148
> > >>   #, python-format
> > >>   msgid "Could not set interface context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2157
> > >> +#: ../semanage/seobject.py:2152
> > >>   #, python-format
> > >>   msgid "Could not set message context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2161
> > >> +#: ../semanage/seobject.py:2156
> > >>   #, python-format
> > >>   msgid "Could not add interface %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2186 ../semanage/seobject.py:2222
> > >> +#: ../semanage/seobject.py:2181 ../semanage/seobject.py:2217
> > >>   #, python-format
> > >>   msgid "Interface %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2190
> > >> +#: ../semanage/seobject.py:2185
> > >>   #, python-format
> > >>   msgid "Could not query interface %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2201
> > >> +#: ../semanage/seobject.py:2196
> > >>   #, python-format
> > >>   msgid "Could not modify interface %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2228
> > >> +#: ../semanage/seobject.py:2223
> > >>   #, python-format
> > >>   msgid "Interface %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2232
> > >> +#: ../semanage/seobject.py:2227
> > >>   #, python-format
> > >>   msgid "Could not delete interface %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2246
> > >> +#: ../semanage/seobject.py:2241
> > >>   msgid "Could not delete all interface  mappings"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2260
> > >> +#: ../semanage/seobject.py:2255
> > >>   msgid "Could not list interfaces"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2285
> > >> +#: ../semanage/seobject.py:2280
> > >>   msgid "SELinux Interface"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2285 ../semanage/seobject.py:2677
> > >> +#: ../semanage/seobject.py:2280 ../semanage/seobject.py:2672
> > >>   msgid "Context"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2355
> > >> +#: ../semanage/seobject.py:2350
> > >>   #, python-format
> > >>   msgid "Target %s is not valid. Target is not allowed to end with '/'"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2358
> > >> +#: ../semanage/seobject.py:2353
> > >>   #, python-format
> > >>   msgid "Substitute %s is not valid. Substitute is not allowed to end with '/'"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2361
> > >> +#: ../semanage/seobject.py:2356
> > >>   #, python-format
> > >>   msgid "Equivalence class for %s already exists"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2367
> > >> +#: ../semanage/seobject.py:2362
> > >>   #, python-format
> > >>   msgid "File spec %s conflicts with equivalency rule '%s %s'"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2378
> > >> +#: ../semanage/seobject.py:2373
> > >>   #, python-format
> > >>   msgid "Equivalence class for %s does not exist"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2395
> > >> +#: ../semanage/seobject.py:2390
> > >>   #, python-format
> > >>   msgid "Could not set user in file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2399
> > >> +#: ../semanage/seobject.py:2394
> > >>   #, python-format
> > >>   msgid "Could not set role in file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2404 ../semanage/seobject.py:2464
> > >> +#: ../semanage/seobject.py:2399 ../semanage/seobject.py:2459
> > >>   #, python-format
> > >>   msgid "Could not set mls fields in file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2410
> > >> +#: ../semanage/seobject.py:2405
> > >>   msgid "Invalid file specification"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2412
> > >> +#: ../semanage/seobject.py:2407
> > >>   msgid "File specification can not include spaces"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2417
> > >> +#: ../semanage/seobject.py:2412
> > >>   #, python-format
> > >>   msgid ""
> > >>   "File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2431 ../semanage/seobject.py:2496
> > >> +#: ../semanage/seobject.py:2426 ../semanage/seobject.py:2491
> > >>   #, python-format
> > >>   msgid "Type %s is invalid, must be a file or device type"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2439 ../semanage/seobject.py:2444
> > >> -#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2515
> > >> -#: ../semanage/seobject.py:2603 ../semanage/seobject.py:2607
> > >> +#: ../semanage/seobject.py:2434 ../semanage/seobject.py:2439
> > >> +#: ../semanage/seobject.py:2501 ../semanage/seobject.py:2510
> > >> +#: ../semanage/seobject.py:2598 ../semanage/seobject.py:2602
> > >>   #, python-format
> > >>   msgid "Could not check if file context for %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2447
> > >> +#: ../semanage/seobject.py:2442
> > >>   #, python-format
> > >>   msgid "File context for %s already defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2451
> > >> +#: ../semanage/seobject.py:2446
> > >>   #, python-format
> > >>   msgid "Could not create file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2459
> > >> +#: ../semanage/seobject.py:2454
> > >>   #, python-format
> > >>   msgid "Could not set type in file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2467 ../semanage/seobject.py:2539
> > >> -#: ../semanage/seobject.py:2543
> > >> +#: ../semanage/seobject.py:2462 ../semanage/seobject.py:2534
> > >> +#: ../semanage/seobject.py:2538
> > >>   #, python-format
> > >>   msgid "Could not set file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2473
> > >> +#: ../semanage/seobject.py:2468
> > >>   #, python-format
> > >>   msgid "Could not add file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2492
> > >> +#: ../semanage/seobject.py:2487
> > >>   msgid "Requires setype, serange or seuser"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2511 ../semanage/seobject.py:2521
> > >> +#: ../semanage/seobject.py:2506 ../semanage/seobject.py:2516
> > >>   #, python-format
> > >>   msgid "Could not query file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2517 ../semanage/seobject.py:2611
> > >> +#: ../semanage/seobject.py:2512 ../semanage/seobject.py:2606
> > >>   #, python-format
> > >>   msgid "File context for %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2547
> > >> +#: ../semanage/seobject.py:2542
> > >>   #, python-format
> > >>   msgid "Could not modify file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2565
> > >> +#: ../semanage/seobject.py:2560
> > >>   msgid "Could not list the file contexts"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2579
> > >> +#: ../semanage/seobject.py:2574
> > >>   #, python-format
> > >>   msgid "Could not delete the file context %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2609
> > >> +#: ../semanage/seobject.py:2604
> > >>   #, python-format
> > >>   msgid "File context for %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2615
> > >> +#: ../semanage/seobject.py:2610
> > >>   #, python-format
> > >>   msgid "Could not delete file context for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2632
> > >> +#: ../semanage/seobject.py:2627
> > >>   msgid "Could not list file contexts"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2636
> > >> +#: ../semanage/seobject.py:2631
> > >>   msgid "Could not list file contexts for home directories"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2640
> > >> +#: ../semanage/seobject.py:2635
> > >>   msgid "Could not list local file contexts"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2677
> > >> +#: ../semanage/seobject.py:2672
> > >>   msgid "SELinux fcontext"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2690
> > >> +#: ../semanage/seobject.py:2685
> > >>   msgid ""
> > >>   "\n"
> > >>   "SELinux Distribution fcontext Equivalence \n"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2695
> > >> +#: ../semanage/seobject.py:2690
> > >>   msgid ""
> > >>   "\n"
> > >>   "SELinux Local fcontext Equivalence \n"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2733 ../semanage/seobject.py:2784
> > >> -#: ../semanage/seobject.py:2790
> > >> +#: ../semanage/seobject.py:2728 ../semanage/seobject.py:2779
> > >> +#: ../semanage/seobject.py:2785
> > >>   #, python-format
> > >>   msgid "Could not check if boolean %s is defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2735 ../semanage/seobject.py:2786
> > >> +#: ../semanage/seobject.py:2730 ../semanage/seobject.py:2781
> > >>   #, python-format
> > >>   msgid "Boolean %s is not defined"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2739
> > >> +#: ../semanage/seobject.py:2734
> > >>   #, python-format
> > >>   msgid "Could not query file context %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2744
> > >> +#: ../semanage/seobject.py:2739
> > >>   #, python-format
> > >>   msgid "You must specify one of the following values: %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2749
> > >> +#: ../semanage/seobject.py:2744
> > >>   #, python-format
> > >>   msgid "Could not set active value of boolean %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2752
> > >> +#: ../semanage/seobject.py:2747
> > >>   #, python-format
> > >>   msgid "Could not modify boolean %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2768
> > >> -#, python-format
> > >> -msgid "Bad format %s: Record %s"
> > >> +#: ../semanage/seobject.py:2763
> > >> +#, python-brace-format
> > >> +msgid "Bad format {filename}: Record {record}"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2792
> > >> +#: ../semanage/seobject.py:2787
> > >>   #, python-format
> > >>   msgid "Boolean %s is defined in policy, cannot be deleted"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2796
> > >> +#: ../semanage/seobject.py:2791
> > >>   #, python-format
> > >>   msgid "Could not delete boolean %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2808 ../semanage/seobject.py:2825
> > >> +#: ../semanage/seobject.py:2803 ../semanage/seobject.py:2820
> > >>   msgid "Could not list booleans"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2858
> > >> +#: ../semanage/seobject.py:2853
> > >>   msgid "off"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2858
> > >> +#: ../semanage/seobject.py:2853
> > >>   msgid "on"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2870
> > >> +#: ../semanage/seobject.py:2865
> > >>   msgid "SELinux boolean"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2870
> > >> +#: ../semanage/seobject.py:2865
> > >>   msgid "State"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2870
> > >> +#: ../semanage/seobject.py:2865
> > >>   msgid "Default"
> > >>   msgstr ""
> > >>
> > >> -#: ../semanage/seobject.py:2870 ../sepolicy/sepolicy/sepolicy.glade:2140
> > >> +#: ../semanage/seobject.py:2865 ../sepolicy/sepolicy/sepolicy.glade:2140
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:2510
> > >>   #: ../sepolicy/sepolicy/sepolicy.glade:5099
> > >>   msgid "Description"
> > >> @@ -1555,151 +1566,151 @@ msgstr ""
> > >>   msgid "Missing interface definition for %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:140
> > >> +#: ../sepolicy/sepolicy/generate.py:138
> > >>   msgid "Standard Init Daemon"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:141
> > >> +#: ../sepolicy/sepolicy/generate.py:139
> > >>   msgid "DBUS System Daemon"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:142
> > >> +#: ../sepolicy/sepolicy/generate.py:140
> > >>   msgid "Internet Services Daemon"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:143
> > >> +#: ../sepolicy/sepolicy/generate.py:141
> > >>   msgid "Web Application/Script (CGI)"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:144
> > >> +#: ../sepolicy/sepolicy/generate.py:142
> > >>   msgid "Sandbox"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:145
> > >> +#: ../sepolicy/sepolicy/generate.py:143
> > >>   msgid "User Application"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:146
> > >> +#: ../sepolicy/sepolicy/generate.py:144
> > >>   msgid "Existing Domain Type"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:147
> > >> +#: ../sepolicy/sepolicy/generate.py:145
> > >>   msgid "Minimal Terminal Login User Role"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:148
> > >> +#: ../sepolicy/sepolicy/generate.py:146
> > >>   msgid "Minimal X Windows Login User Role"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:149
> > >> +#: ../sepolicy/sepolicy/generate.py:147
> > >>   msgid "Desktop Login User Role"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:150
> > >> +#: ../sepolicy/sepolicy/generate.py:148
> > >>   msgid "Administrator Login User Role"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:151
> > >> +#: ../sepolicy/sepolicy/generate.py:149
> > >>   msgid "Confined Root Administrator Role"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:152
> > >> +#: ../sepolicy/sepolicy/generate.py:150
> > >>   msgid "Module information for a new type"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:158
> > >> +#: ../sepolicy/sepolicy/generate.py:156
> > >>   msgid "Valid Types:\n"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:193
> > >> +#: ../sepolicy/sepolicy/generate.py:191
> > >>   #, python-format
> > >>   msgid "Ports must be numbers or ranges of numbers from 1 to %d "
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:205
> > >> +#: ../sepolicy/sepolicy/generate.py:203
> > >>   msgid "You must enter a valid policy type"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:208
> > >> +#: ../sepolicy/sepolicy/generate.py:206
> > >>   #, python-format
> > >>   msgid "You must enter a name for your policy module for your '%s'."
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:346
> > >> +#: ../sepolicy/sepolicy/generate.py:344
> > >>   msgid ""
> > >>   "Name must be alphanumeric with no spaces. Consider using option \"-n "
> > >>   "MODULENAME\""
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:438
> > >> +#: ../sepolicy/sepolicy/generate.py:436
> > >>   msgid "User Role types can not be assigned executables."
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:444
> > >> +#: ../sepolicy/sepolicy/generate.py:442
> > >>   msgid "Only Daemon apps can use an init script."
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:462
> > >> +#: ../sepolicy/sepolicy/generate.py:460
> > >>   msgid "use_resolve must be a boolean value "
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:468
> > >> +#: ../sepolicy/sepolicy/generate.py:466
> > >>   msgid "use_syslog must be a boolean value "
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:474
> > >> +#: ../sepolicy/sepolicy/generate.py:472
> > >>   msgid "use_kerberos must be a boolean value "
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:480
> > >> +#: ../sepolicy/sepolicy/generate.py:478
> > >>   msgid "manage_krb5_rcache must be a boolean value "
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:510
> > >> +#: ../sepolicy/sepolicy/generate.py:508
> > >>   msgid "USER Types automatically get a tmp type"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:847
> > >> +#: ../sepolicy/sepolicy/generate.py:845
> > >>   #, python-format
> > >>   msgid "'%s' policy modules require existing domains"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:872
> > >> +#: ../sepolicy/sepolicy/generate.py:870
> > >>   msgid "Type field required"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:885
> > >> +#: ../sepolicy/sepolicy/generate.py:883
> > >>   #, python-format
> > >>   msgid ""
> > >>   "You need to define a new type which ends with: \n"
> > >>   " %s"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1113
> > >> +#: ../sepolicy/sepolicy/generate.py:1111
> > >>   msgid "You must enter the executable path for your confined process"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1378
> > >> +#: ../sepolicy/sepolicy/generate.py:1376
> > >>   msgid "Created the following files:\n"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1379
> > >> +#: ../sepolicy/sepolicy/generate.py:1377
> > >>   msgid "Type Enforcement file"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1380
> > >> +#: ../sepolicy/sepolicy/generate.py:1378
> > >>   msgid "Interface file"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1381
> > >> +#: ../sepolicy/sepolicy/generate.py:1379
> > >>   msgid "File Contexts file"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1383
> > >> +#: ../sepolicy/sepolicy/generate.py:1381
> > >>   msgid "Spec file"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/generate.py:1384
> > >> +#: ../sepolicy/sepolicy/generate.py:1382
> > >>   msgid "Setup Script"
> > >>   msgstr ""
> > >>
> > >> @@ -2367,29 +2378,29 @@ msgstr ""
> > >>   msgid "named pipe"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:148
> > >> +#: ../sepolicy/sepolicy/__init__.py:149
> > >>   msgid "No SELinux Policy installed"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:184
> > >> +#: ../sepolicy/sepolicy/__init__.py:185
> > >>   #, python-format
> > >>   msgid "Failed to read %s policy file"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:470
> > >> +#: ../sepolicy/sepolicy/__init__.py:471
> > >>   #, python-format
> > >>   msgid "-- Allowed %s [ %s ]"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:896
> > >> +#: ../sepolicy/sepolicy/__init__.py:897
> > >>   msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:1221
> > >> +#: ../sepolicy/sepolicy/__init__.py:1230
> > >>   msgid "unknown"
> > >>   msgstr ""
> > >>
> > >> -#: ../sepolicy/sepolicy/__init__.py:1230
> > >> +#: ../sepolicy/sepolicy/__init__.py:1239
> > >>   #, python-brace-format
> > >>   msgid "Allow {subject} to {rest}"
> > >>   msgstr ""
> > >
> >

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2023-07-12 17:33 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-17 13:49 [PATCH 1/4] python: improve format strings for proper localization Petr Lautrbach
2023-05-17 13:49 ` [PATCH 2/4] python/semanage: Drop hard formating from localized strings Petr Lautrbach
2023-06-06 15:20   ` Vit Mojzis
2023-05-17 13:49 ` [PATCH 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
2023-05-17 13:49 ` [PATCH 4/4] python: update python.pot Petr Lautrbach
2023-06-06 15:20 ` [PATCH 1/4] python: improve format strings for proper localization Vit Mojzis
2023-06-12 16:21   ` Petr Lautrbach
2023-06-12 16:21     ` [PATCH v2 1/4] python: improve format strings for proper localization Petr Lautrbach
2023-06-13  9:30       ` Vit Mojzis
2023-06-12 16:21     ` [PATCH v2 2/4] python: Drop hard formating from localized strings Petr Lautrbach
2023-06-12 16:21     ` [PATCH v2 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
2023-06-12 16:21     ` [PATCH v2 4/4] python: update python.pot Petr Lautrbach
2023-06-13  9:42       ` Petr Lautrbach
2023-06-13  9:42         ` [PATCH v3 1/4] python: improve format strings for proper localization Petr Lautrbach
2023-06-13  9:42         ` [PATCH v3 2/4] python: Drop hard formating from localized strings Petr Lautrbach
2023-06-13  9:42         ` [PATCH v3 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
2023-06-13  9:42         ` [PATCH v3 4/4] python: update python.pot Petr Lautrbach
2023-06-13 11:20           ` Petr Lautrbach
2023-06-13 11:20             ` [PATCH v4 1/4] python: improve format strings for proper localization Petr Lautrbach
2023-06-13 11:20             ` [PATCH v4 2/4] python: Drop hard formating from localized strings Petr Lautrbach
2023-06-13 11:20             ` [PATCH v4 3/4] semanage: Drop unnecessary import from seobject Petr Lautrbach
2023-06-13 11:20             ` [PATCH v4 4/4] python: update python.pot Petr Lautrbach
2023-06-13 12:37               ` Vit Mojzis
2023-06-27 13:55                 ` Petr Lautrbach
2023-07-06 13:39                   ` James Carter
2023-07-12 17:33                     ` James Carter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).