[policycoreutils] Fix semanage argparse bugs
Daniel J Walsh
dwalsh at fedoraproject.org
Fri Jul 26 16:20:33 UTC 2013
commit 0eb608c4317236e83bf9cf8d460839de16c0c227
Author: Dan Walsh <dwalsh at redhat.com>
Date: Fri Jul 26 12:20:20 2013 -0400
Fix semanage argparse bugs
- Update Translations
- Add test suite for semanage command lines
policycoreutils-rhat.patch | 527 +++++++++++++++++++++++++++++++------------
policycoreutils.spec | 7 +-
2 files changed, 386 insertions(+), 148 deletions(-)
---
diff --git a/policycoreutils-rhat.patch b/policycoreutils-rhat.patch
index b5bbf4b..cc361d7 100644
--- a/policycoreutils-rhat.patch
+++ b/policycoreutils-rhat.patch
@@ -219135,10 +219135,10 @@ index 4216790..9fef0da 100644
+msgid "Boolean %s Allow Rules"
msgstr ""
diff --git a/policycoreutils/po/or.po b/policycoreutils/po/or.po
-index c95cd67..690bbb4 100644
+index c95cd67..0cd1d80 100644
--- a/policycoreutils/po/or.po
+++ b/policycoreutils/po/or.po
-@@ -3,15 +3,16 @@
+@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
@@ -219155,11 +219155,13 @@ index c95cd67..690bbb4 100644
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-04 12:01-0500\n"
-"PO-Revision-Date: 2013-01-04 17:02+0000\n"
+-"Last-Translator: dwalsh <dwalsh at redhat.com>\n"
+"POT-Creation-Date: 2013-07-10 16:36-0400\n"
-+"PO-Revision-Date: 2013-07-10 20:44+0000\n"
- "Last-Translator: dwalsh <dwalsh at redhat.com>\n"
++"PO-Revision-Date: 2013-07-26 14:16+0000\n"
++"Last-Translator: Manoj Kumar Giri <mgiri at redhat.com>\n"
"Language-Team: Oriya (http://www.transifex.com/projects/p/fedora/language/or/)\n"
"MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
@@ -25,9 +26,9 @@ msgid ""
"USAGE: run_init <script> <args ...>\n"
" where: <script> is the name of the init script to run,\n"
@@ -219198,7 +219200,7 @@ index c95cd67..690bbb4 100644
+#: ../semanage/seobject.py:288
+#, python-format
+msgid "Module does not exists %s "
-+msgstr ""
++msgstr "ମଡ୍ୟୁଲ ଅବସ୍ଥିତ ନାହିଁ %s "
+
+#: ../semanage/seobject.py:298
#, python-format
@@ -219239,7 +219241,7 @@ index c95cd67..690bbb4 100644
+"In some distributions it is included in the policycoreutils-devel patckage.\n"
+"# yum install policycoreutils-devel\n"
+"Or similar for your distro."
-+msgstr ""
++msgstr "sepolgen python ମଡ୍ୟୁଲକୁ permissive ଡମେନଗୁଡ଼ିକୁ ବ୍ୟବସ୍ଥା କରିବା ଆବଶ୍ୟକ।\nକିଛି ବଣ୍ଟନଗୁଡ଼ିକରେ ଏହାକୁ policycoreutils-devel ପ୍ୟାକେଜରେ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଥାଏ।\n# yum install policycoreutils-devel\nକିମ୍ବା ଆପଣଙ୍କର ତନ୍ତ୍ର ପାଇଁ ସେହିପରି ଏକ।"
+
+#: ../semanage/seobject.py:418
#, python-format
@@ -221357,7 +221359,7 @@ index c95cd67..690bbb4 100644
-#: booleans.py:70
+#: booleans.py:72
+msgid "Allow http daemon to connect to mythtv"
-+msgstr ""
++msgstr "mythtv ସହିତ ସଂଯୋଗ କରିବା ପାଇଁ http ଡେମନକୁ ଅନୁମତି ଦିଅନ୍ତୁ"
+
+#: booleans.py:73
msgid "Allow http daemon to connect to zabbix"
@@ -221519,23 +221521,23 @@ index c95cd67..690bbb4 100644
msgstr "httpd କୁ openstack ପୋର୍ଟଗୁଡ଼ିକରେ ଅଭିଗମ୍ୟତା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ"
-#: booleans.py:100
--msgid "Allow Apache to query NS records"
+#: booleans.py:103
+msgid "Allow httpd to connect to sasl"
- msgstr ""
++msgstr "sasl ସହିତ ସଂଯୋଗ କରିବା ପାଇଁ httpd କୁ ଅନୁମତି ଦିଅନ୍ତୁ"
++
++#: booleans.py:104
+ msgid "Allow Apache to query NS records"
+-msgstr ""
++msgstr "Apache କୁ NS ବିବରଣୀଗୁଡ଼ିକୁ ଅନୁସନ୍ଧାନ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ"
-#: booleans.py:101
-msgid "Allow icecast to connect to all ports, not just sound ports."
-msgstr "icecast କୁ କେବଳ ଧ୍ୱନି ପୋର୍ଟ ବ୍ୟତୀତ ବାକି ସମସ୍ତ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ ସଂଯୋଗ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"
-+#: booleans.py:104
-+msgid "Allow Apache to query NS records"
-+msgstr "Apache କୁ NS ବିବରଣୀଗୁଡ଼ିକୁ ଅନୁସନ୍ଧାନ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ"
-
--#: booleans.py:102
+#: booleans.py:105
+msgid "Determine whether icecast can listen on and connect to any TCP port."
+msgstr "icecast ଯେକୌଣସି TCP ପୋର୍ଟରେ ଶୁଣି ପାରିବ ଏବଂ ସଂଯୁକ୍ତ ହୋଇପାରିବ କି ନାହିଁ ନିର୍ଦ୍ଧାରଣ କରନ୍ତୁ।"
-+
+
+-#: booleans.py:102
+#: booleans.py:106
+msgid ""
+"Determine whether irc clients can listen on and connect to any unreserved "
@@ -221613,7 +221615,7 @@ index c95cd67..690bbb4 100644
-msgstr "ସ୍ଥାପନ ନିର୍ଦ୍ଦେଶ କୌଣସି ଡିରେକ୍ଟୋରୀ କିମ୍ବା ଫାଇଲକୁ ସ୍ଥାପନ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+#: booleans.py:121
+msgid "Allow the mount commands to mount any directory or file."
-+msgstr ""
++msgstr "ସ୍ଥାପନ ନିର୍ଦ୍ଦେଶ କୌଣସି ଡିରେକ୍ଟୋରୀ କିମ୍ବା ଫାଇଲକୁ ସ୍ଥାପନ କରିବା ପାଇଁ ଅନୁମତି ଦେଇଥାଏ।"
-#: booleans.py:110
+#: booleans.py:122
@@ -221626,12 +221628,12 @@ index c95cd67..690bbb4 100644
-msgstr "ବ୍ୟବହାରକାରୀଙ୍କ ହୋମ ଡିରେକ୍ଟୋରୀରେ ମନଇଚ୍ଛା ବିଷୟବସ୍ତୁ ନିର୍ମାଣ କରିବା ପାଇଁ mozilla_plugins କୁ ଅନୁମତି ଦିଅନ୍ତୁ"
+#: booleans.py:123
+msgid "Allow mozilla plugin to support GPS."
-+msgstr ""
++msgstr "GPS କୁ ସହାୟତା ଦେବା ପାଇଁ mozilla ପ୍ଲଗଇନକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"
-#: booleans.py:112
+#: booleans.py:124
+msgid "Allow mozilla plugin to support spice protocols."
-+msgstr ""
++msgstr "spice ପ୍ରଟୋକଲକୁ ସହାୟତା ଦେବା ପାଇଁ mozilla ପ୍ଲଗଇନକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+
+#: booleans.py:125
msgid "Allow confined web browsers to read home directory content"
@@ -221802,7 +221804,7 @@ index c95cd67..690bbb4 100644
-"Allow privoxy to connect to all ports, not just HTTP, FTP, and Gopher ports."
-msgstr "privoxy କୁ HTTP, FTP, ଏବଂ Gopher ପୋର୍ଟଗୁଡ଼ିକ ସହିତ ବାକି ସମସ୍ତ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ ସଂଯୋଗ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+"Permit to prosody to bind apache port. Need to be activated to use BOSH."
-+msgstr ""
++msgstr "apache ପୋର୍ଟକୁ ବାନ୍ଧିବାକୁ prosody ପାଇଁ ଥିବା ଅନୁମତି। BOSH କୁ ବ୍ୟବହାର କରିବା ପାଇଁ ସକ୍ରିୟ କରିବା ଆବଶ୍ୟକ।"
-#: booleans.py:139
+#: booleans.py:156
@@ -222011,12 +222013,12 @@ index c95cd67..690bbb4 100644
+#: booleans.py:190
msgid "Allow user to use ssh chroot environment."
-msgstr ""
--
++msgstr "ssh chroot ପରିବେଶକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ବ୍ୟବହାରକାରୀମାନଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+
-#: booleans.py:175
-msgid "Allow user music sharing"
-msgstr "ବ୍ୟବହାରକାରୀ ସଂଗୀତ ସହଭାଗକୁ ଅନୁମତି ଦିଅନ୍ତୁ"
-+msgstr "ssh chroot ପରିବେଶକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ବ୍ୟବହାରକାରୀମାନଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"
-
+-
-#: booleans.py:176
+#: booleans.py:191
msgid ""
@@ -222154,7 +222156,7 @@ index c95cd67..690bbb4 100644
-#: booleans.py:196
+#: booleans.py:211
+msgid "Allow testpolicy to exec content"
-+msgstr ""
++msgstr "ବିଷୟବସ୍ତୁକୁ ନିଷ୍ପାଦନ କରିବା ପାଇଁ testpolicy କୁ ଅନୁମତି ଦିଅନ୍ତୁ"
+
+#: booleans.py:212
msgid ""
@@ -222348,7 +222350,7 @@ index c95cd67..690bbb4 100644
+msgid ""
+"Allow the graphical login program to create files in HOME dirs as "
+"xdm_home_t."
-+msgstr ""
++msgstr "ଆଲେଖିକ ଲଗଇନ ପ୍ରଗ୍ରାମକୁ HOME dirs ରେ xdm_home_t ଭାବରେ ଫାଇଲ ସୃଷ୍ଟି କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+
+#: booleans.py:243
msgid "Allow xen to manage nfs files"
@@ -222424,7 +222426,7 @@ index c95cd67..690bbb4 100644
+
+#: booleans.py:256
+msgid "Allow ZoneMinder to run su/sudo."
-+msgstr ""
++msgstr "ZoneMinder କୁ su/sudo ଚଲାଇବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"
+
+#: ../sepolicy/sepolicy.py:194
+#, python-format
@@ -222433,7 +222435,7 @@ index c95cd67..690bbb4 100644
+
+#: ../sepolicy/sepolicy.py:281
+msgid "Graphical User Interface for SELinux Policy"
-+msgstr ""
++msgstr "SELinux ନିତୀ ପାଇଁ ଆଲେଖୀକ ଚାଳକ ଅନ୍ତରାପୃଷ୍ଠ"
+
+#: ../sepolicy/sepolicy.py:305
+msgid "Generate SELinux man pages"
@@ -222567,11 +222569,11 @@ index c95cd67..690bbb4 100644
+
+#: ../sepolicy/sepolicy.py:528
+msgid "Enter SELinux role(s) to which the administror domain will transition"
-+msgstr ""
++msgstr "SELinux ନିୟମାବଳୀ(ଗୁଡ଼ିକୁ) ଭରଣ କରନ୍ତୁ ଯେଉଁଥିରେ ପ୍ରଶାସକ ଡମେନ ପରିବର୍ତ୍ତିତ ହେବ"
+
+#: ../sepolicy/sepolicy.py:531
+msgid "Enter domain(s) which this confined admin will administrate"
-+msgstr ""
++msgstr "ଯେଉଁ ଡମେନ(ଗୁଡ଼ିକୁ) ଏହି ନିର୍ଦ୍ଦିଷ୍ଟ ପ୍ରଶାସକ ଚଲାଇବ ତାହାକୁ ଭରଣ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy.py:534
+msgid "name of policy to generate"
@@ -222618,35 +222620,35 @@ index c95cd67..690bbb4 100644
+
+#: ../sepolicy/sepolicy/__init__.py:167 ../sepolicy/sepolicy/gui.py:479
+msgid "all files"
-+msgstr ""
++msgstr "ସମସ୍ତ ଫାଇଲଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/__init__.py:168
+msgid "regular file"
-+msgstr ""
++msgstr "ନିୟମିତ ଫାଇଲ"
+
+#: ../sepolicy/sepolicy/__init__.py:169
+msgid "directory"
-+msgstr ""
++msgstr "ଡିରେକ୍ଟୋରି"
+
+#: ../sepolicy/sepolicy/__init__.py:170
+msgid "character device"
-+msgstr ""
++msgstr "ବର୍ଣ୍ଣ ଉପକରଣ"
+
+#: ../sepolicy/sepolicy/__init__.py:171
+msgid "block device"
-+msgstr ""
++msgstr "ବ୍ଲକ ଉପକରଣ"
+
+#: ../sepolicy/sepolicy/__init__.py:172
+msgid "socket file"
-+msgstr ""
++msgstr "ସକେଟ ଫାଇଲ"
+
+#: ../sepolicy/sepolicy/__init__.py:173
+msgid "symbolic link"
-+msgstr ""
++msgstr "ସାଙ୍କେତିକ ଲିଙ୍କ"
+
+#: ../sepolicy/sepolicy/__init__.py:174
+msgid "named pipe"
-+msgstr ""
++msgstr "ନାମକରଣ ହୋଇଥିବା ପାଇପ"
+
+#: ../sepolicy/sepolicy/__init__.py:306
+msgid "No SELinux Policy installed"
@@ -222654,7 +222656,7 @@ index c95cd67..690bbb4 100644
+
+#: ../sepolicy/sepolicy/__init__.py:386
+msgid "You must regenerate interface info by running /usr/bin/sepolgen-ifgen"
-+msgstr ""
++msgstr "/usr/bin/sepolgen-ifgen କୁ ଚଲାଇ ଆପଣଙ୍କୁ ନିଶ୍ଚିତ ଭାବରେ ଅନ୍ତରାପୃଷ୍ଠ ସୂଚନାକୁ ପୁଣି ଦର୍ଶାଇବାକୁ ହେବ"
+
+#: ../sepolicy/sepolicy/__init__.py:591
+#, python-format
@@ -222791,368 +222793,368 @@ index c95cd67..690bbb4 100644
+
+#: ../sepolicy/sepolicy/sepolicy.glade:7
+msgid "SELinux Gui"
-+msgstr ""
++msgstr "SELinux Gui"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:33
+msgid "Type to search for a process"
-+msgstr ""
++msgstr "ଏକ ପଦ୍ଧତି ପାଇଁ ସନ୍ଧାନ ପ୍ରକାର"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:35
+msgid "Select domain"
-+msgstr ""
++msgstr "ଡମେନ ବାଛନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:70
+#: ../sepolicy/sepolicy/sepolicy.glade:308
+msgid "Booleans"
-+msgstr ""
++msgstr "ବୁଲିଆନଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:74
+msgid ""
+"Display boolean information that can be used to modify the policy for the "
+"'selected domain'."
-+msgstr ""
++msgstr "ବୁଲିଆନ ସୂଚନା ଦର୍ଶାନ୍ତୁ ଯାହାକୁ 'ବଚ୍ଛିତ ଡମେନ' ପାଇଁ ନିତୀ ପରିବର୍ତ୍ତନ କରିବାକୁ ବ୍ୟବହାର କରାଯାଇଥାଏ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:85
+#: ../sepolicy/sepolicy/sepolicy.glade:710
+msgid "Files"
-+msgstr ""
++msgstr "ଫାଇଲଗୁଡିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:89
+msgid ""
+"Display file type information that can be used by the 'selected domain'."
-+msgstr ""
++msgstr "ଫାଇଲ ପ୍ରକାର ସୂଚନା ଦର୍ଶାନ୍ତୁ ଯାହାକୁ 'ବଚ୍ଛିତ ଡମେନ' ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଇଥାଏ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:100
+#: ../sepolicy/sepolicy/sepolicy.glade:1062
+msgid "Network"
-+msgstr ""
++msgstr "ନେଟୱର୍କ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:104
+msgid ""
+"Display network ports to which the 'selected domain' can connect or listen "
+"to."
-+msgstr ""
++msgstr "ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ ଯାହା ସହିତ 'ବଚ୍ଛିତ ଡମେନ' ସଂଯୋଗ ହୋଇପାରିବ କିମ୍ବା ଉତ୍ତର ପାଇ ପାରିବ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:115
+#: ../sepolicy/sepolicy/sepolicy.glade:1361
+msgid "Transitions"
-+msgstr ""
++msgstr "ପରିବର୍ତ୍ତନଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:119
+msgid ""
+"Display applications that can transition into or out of the 'selected "
+"domain'."
-+msgstr ""
++msgstr "ପ୍ରୟୋଗଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ ଯାହାକି 'ବଚ୍ଛିତ ଡମେନ'ଭିତରକୁ କିମ୍ବା ବାହାରକୁ ପରିବର୍ତ୍ତିତ ହୋଇପାରିବ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:188
+#: ../sepolicy/sepolicy/sepolicy.glade:358
+#: ../sepolicy/sepolicy/sepolicy.glade:765
+#: ../sepolicy/sepolicy/sepolicy.glade:1113
+msgid "Show Modified Only"
-+msgstr ""
++msgstr "କେବଳ ପରିବର୍ତ୍ତିତଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:219
+msgid ""
+"If-Then-Else rules written in policy that can \n"
+"allow alternative access control."
-+msgstr ""
++msgstr "If-Then-Else ନିୟମଗୁଡ଼ିକ ନିତୀରେ ଲେଖା ହୋଇଛି ଯାହାକି \nବୈକଳ୍ପିକ ଅଭିଗମ୍ୟତା ନିୟନ୍ତ୍ରଣକୁ ଅନୁମତି ଦେଇଥାଏ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:373
+#: ../sepolicy/sepolicy/sepolicy.glade:787
+#: ../sepolicy/sepolicy/sepolicy.glade:1128
+msgid "Modify"
-+msgstr ""
++msgstr "ପରିବର୍ତ୍ତନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:377
+#: ../sepolicy/sepolicy/sepolicy.glade:791
+msgid "Modify an existing item"
-+msgstr ""
++msgstr "ଏକ ସ୍ଥିତବାନ ବସ୍ତୁକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:389
+#: ../sepolicy/sepolicy/sepolicy.glade:803
+#: ../sepolicy/sepolicy/sepolicy.glade:1142
+msgid "Delete"
-+msgstr ""
++msgstr "ଅପସାରଣ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:393
+#: ../sepolicy/sepolicy/sepolicy.glade:807
+msgid "Delete an existing item"
-+msgstr ""
++msgstr "ଏକ ସ୍ଥିତବାନ ବସ୍ତୁକୁ ଅପସାରଣ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:409
+#: ../sepolicy/sepolicy/sepolicy.glade:823
+msgid "Add a new item"
-+msgstr ""
++msgstr "ଏକ ନୂତନ ବସ୍ତୁ ଯୋଗ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:442
+msgid "File path used to enter the above selected process domain."
-+msgstr ""
++msgstr "ଉପରଲିଖିତ ବଚ୍ଛିତ ପଦ୍ଧତି ଡମେନକୁ ଭରଣ କରିବାକୁ ବ୍ୟବହୃତ ଫାଇଲ ପଥ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:450
+#: ../sepolicy/sepolicy/sepolicy.glade:531
+msgid "File Path"
-+msgstr ""
++msgstr "ଫାଇଲ ପଥ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:468
+#: ../sepolicy/sepolicy/sepolicy.glade:549
+msgid "SELinux File Label"
-+msgstr ""
++msgstr "SELinux ଫାଇଲ ନାମପଟି"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:485
+#: ../sepolicy/sepolicy/sepolicy.glade:567
+#: ../sepolicy/sepolicy/sepolicy.glade:660
+msgid "Class"
-+msgstr ""
++msgstr "ଶ୍ରେଣୀ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:505
+msgid "File path used to enter the 'selected domain'."
-+msgstr ""
++msgstr "'ବଚ୍ଛିତ ଡମେନ' କୁ ଭରଣ କରିବା ପାଇଁ ବ୍ୟବହୃତ ଫାଇଲ ପଥ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:506
+msgid "Executable Files"
-+msgstr ""
++msgstr "ନିଷ୍ପାଦନଯୋଗ୍ୟ ଫାଇଲଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:523
+msgid "Files to which the above selected process domain can write."
-+msgstr ""
++msgstr "ଉପରଲିଖିତ ପଦ୍ଧତି ଡମେନରେ ଯେଉଁ ଫାଇଲଗୁଡ଼ିକ ଲେଖିପାରିବ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:591
+msgid "Files to which the 'selected domain' can write."
-+msgstr ""
++msgstr "'ବଚ୍ଛିତ ଡମେନ' ଲେଖି ପାରୁଥିବା ଫାଇଲଗୁଡ଼ିକ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:592
+msgid "Writable Files"
-+msgstr ""
++msgstr "ଲେଖିବା ଯୋଗ୍ୟ ଫାଇଲଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:610
+msgid "File Types defined for the selected domain"
-+msgstr ""
++msgstr "ବଚ୍ଛିତ ଡମେନ ପାଇଁ ନିର୍ଦ୍ଦିଷ୍ଟ ଫାଇଲ ପ୍ରକାରଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:618
+msgid "File path"
-+msgstr ""
++msgstr "ଫାଇଲ ପଥ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:686
+msgid "File Types defined for the 'selected domain'."
-+msgstr ""
++msgstr "'ବଚ୍ଛିତ ଡମେନ' ପାଇଁ ବ୍ଯାଖ୍ୟା କରାଯାଇଥିବା ଫାଇଲ ପ୍ରକାର।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:687
+msgid "Application File Types"
-+msgstr ""
++msgstr "ପ୍ରୟୋଗ ଫାଇଲ ପ୍ରକାରଗୁଡ଼ିକ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:856
+msgid "Network Ports to which the selected domain is allowed to connect."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ ବଚ୍ଛିତ ଡମେନ ସଂଯୋଗ ହେବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:898
+#: ../sepolicy/sepolicy/sepolicy.glade:997
+msgid "Modified"
-+msgstr ""
++msgstr "ପରିବର୍ତ୍ତିତ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:937
+msgid "Network Ports to which the 'selected domain' is allowed to connect."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ 'ବଚ୍ଛିତ ଡମେନ' ସଂଯୋଗ ହେବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:938
+msgid "Outbound"
-+msgstr ""
++msgstr "ଯାଉଥିବା"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:955
+msgid "Network Ports to which the selected domain is allowed to listen."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ ବଚ୍ଛିତ ଡମେନ ଉତ୍ତର ପାଇବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1038
+msgid "Network Ports to which the 'selected domain' is allowed to listen."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକ ସହିତ 'ବଚ୍ଛିତ ଡମେନ' ଉତ୍ତର ପାଇବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1039
+msgid "Inbound"
-+msgstr ""
++msgstr "ଆସୁଥିବା"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1189
+#: ../sepolicy/sepolicy/sepolicy.glade:1260
+msgid ""
+"Executables which will transition to a different domain, when the 'selected "
+"domain' executes them."
-+msgstr ""
++msgstr "ଭିନ୍ନ ଏକ ଡମେନକୁ ପରିବର୍ତ୍ତିତ ହେଉଥିବା ନିଷ୍ପାଦନଗୁଡ଼ିକ, ଯେତେବେଳେ ଏକ ବଚ୍ଛିତ ଡମେନଗୁଡ଼ିକତାହାକୁ ନିଷ୍ପାଦନ କରିଥାଏ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1194
+#: ../sepolicy/sepolicy/sepolicy.glade:1285
+msgid "Enabled"
-+msgstr ""
++msgstr "ସକ୍ରିୟ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1223
+msgid "Executable File Type"
-+msgstr ""
++msgstr "ନିଷ୍ପାଦନଯୋଗ୍ୟ ଫାଇଲ ପ୍ରକାର"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1239
+msgid "Transtype"
-+msgstr ""
++msgstr "Transtype"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1263
+msgid "Transitions From 'select domain'"
-+msgstr ""
++msgstr "'ଡମେନ ବାଛନ୍ତୁ' ରୁ ପରିବର୍ତ୍ତନ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1280
+#: ../sepolicy/sepolicy/sepolicy.glade:1337
+msgid ""
+"Executables which will transition to the 'selected domain', when executing a"
+" selected domains entrypoint."
-+msgstr ""
++msgstr "'ବଚ୍ଛିତ ଡମେନ' କୁ ପରିବର୍ତ୍ତିତ ହେଉଥିବା ନିଷ୍ପାଦନଗୁଡ଼ିକ, ଯେତେବେଳେ ଏକ ବଚ୍ଛିତ ଡମେନଗୁଡ଼ିକର ପ୍ରବେଶ ସ୍ଥାନରେ ନିଷ୍ପାଦନ କରିଥାଏ।"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1299
+msgid "Calling Process Domain"
-+msgstr ""
++msgstr "ପଦ୍ଧତି ଡମେନକୁ ଡ଼ାକୁଅଛି"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1313
+msgid "Executable File"
-+msgstr ""
++msgstr "ନିଷ୍ପାଦନଯୋଗ୍ୟ ଫାଇଲ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1338
+msgid "Transitions Into 'select domain'"
-+msgstr ""
++msgstr "'ଡମେନ ବାଛନ୍ତୁ' ରୁ ପରିବର୍ତ୍ତନ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1388
+msgid "Reset"
-+msgstr ""
++msgstr "ପୁନଃସ୍ଥାପନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1392
+msgid "Reset to system default"
-+msgstr ""
++msgstr "ତନ୍ତ୍ର ପୂର୍ବନିର୍ଦ୍ଧାରିତରେ ପୁନଃସ୍ଥାପନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1403
+msgid "Update"
-+msgstr ""
++msgstr "ଅଦ୍ୟତନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1407
+msgid "Save your changes"
-+msgstr ""
++msgstr "ଆପଣଙ୍କର ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1454
+#: ../sepolicy/sepolicy/sepolicy.glade:1541
+#: ../sepolicy/sepolicy/sepolicy.glade:1629
+msgid "Add a File"
-+msgstr ""
++msgstr "ଗୋଟିଏ ଫାଇଲ ଯୋଗକରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1504
+#: ../sepolicy/sepolicy/sepolicy.glade:1592
+#: ../sepolicy/sepolicy/sepolicy.glade:1680
+msgid "Save changes"
-+msgstr ""
++msgstr "ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1518
+#: ../sepolicy/sepolicy/sepolicy.glade:1606
+#: ../sepolicy/sepolicy/sepolicy.glade:1694
+msgid "Reset Changes"
-+msgstr ""
++msgstr "ପରିବର୍ତ୍ତନଗୁଡିକ ପୁନଃସ୍ଥାପନ କରନ୍ତୁ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1780
+msgid "Applicaiton more detailed view"
-+msgstr ""
++msgstr "ପ୍ରୟୋଗର ଅଧିକ ବିସ୍ତୃତ ଦୃଶ୍ୟ"
+
+#: ../sepolicy/sepolicy/sepolicy.glade:1874
+msgid "Analyzing Policy..."
-+msgstr ""
++msgstr "ନିତୀକୁ ବିଶ୍ଳେଷଣ କରୁଅଛି ..."
+
+#: ../sepolicy/sepolicy/gui.py:49
+msgid "No"
-+msgstr ""
++msgstr "ନାଁ"
+
+#: ../sepolicy/sepolicy/gui.py:49
+msgid "Yes"
-+msgstr ""
++msgstr "ହଁ"
+
+#: ../sepolicy/sepolicy/gui.py:61
+msgid "GTK Not Available"
-+msgstr ""
++msgstr "GTK ଉପଲବ୍ଧ ନାହିଁ"
+
+#: ../sepolicy/sepolicy/gui.py:195
+msgid "System Status: Enforcing"
-+msgstr ""
++msgstr "ତନ୍ତ୍ର ସ୍ଥିତି: Enforcing"
+
+#: ../sepolicy/sepolicy/gui.py:197
+msgid "System Status: Permissive"
-+msgstr ""
++msgstr "ତନ୍ତ୍ର ସ୍ଥିତି: Permissive"
+
+#: ../sepolicy/sepolicy/gui.py:199
+msgid "System Status: Disabled"
-+msgstr ""
++msgstr "ତନ୍ତ୍ର ସ୍ଥିତି: Disabled"
+
+#: ../sepolicy/sepolicy/gui.py:413
+#, python-format
+msgid "File path used to enter the '%s' domain."
-+msgstr ""
++msgstr "'%s' ଡମେନରେ ପ୍ରବେଶ ପାଇଁ ବ୍ୟବହୃତ ଫାଇଲ ପଥ।"
+
+#: ../sepolicy/sepolicy/gui.py:414
+#, python-format
+msgid "Files to which the '%s' domain can write."
-+msgstr ""
++msgstr "ଯେଉଁ ଫାଇଲଗୁଡ଼ିକରେ '%s' ଡମେନ ଲେଖିପାରିବ।"
+
+#: ../sepolicy/sepolicy/gui.py:415
+#, python-format
+msgid "Network Ports to which the '%s' is allowed to connect."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକରେ '%s' ସଂଯୋଗ ହେବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/gui.py:416
+#, python-format
+msgid "Network Ports to which the '%s' is allowed to listen."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକରେ '%s' ଉତ୍ତର ପାଇବା ପାଇଁ ଅନୁମତି ପ୍ରାପ୍ତ।"
+
+#: ../sepolicy/sepolicy/gui.py:417
+#, python-format
+msgid "File Types defined for the '%s'."
-+msgstr ""
++msgstr "'%s' ପାଇଁ ବ୍ୟାଖ୍ୟା ହୋଇଥିବା ଫାଇଲ ପ୍ରକାର।"
+
+#: ../sepolicy/sepolicy/gui.py:418
+#, python-format
+msgid ""
+"Display boolean information that can be used to modify the policy for the "
+"'%s'."
-+msgstr ""
++msgstr "ବୁଲିଆନ ସୂଚନା ଦର୍ଶାନ୍ତୁ ଯାହାକୁ '%s' ପାଇଁ ନିତୀ ପରିବର୍ତ୍ତନ କରିବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ।"
+
+#: ../sepolicy/sepolicy/gui.py:419
+#, python-format
+msgid "Display file type information that can be used by the '%s'."
-+msgstr ""
++msgstr "ଫାଇଲ ପ୍ରକାର ସୂଚନାକୁ ଦର୍ଶାନ୍ତୁ ଯାହାକୁ '%s' ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଇପାରିବ।"
+
+#: ../sepolicy/sepolicy/gui.py:420
+#, python-format
+msgid "Display network ports to which the '%s' can connect or listen to."
-+msgstr ""
++msgstr "ଯେଉଁ ନେଟୱର୍କ ପୋର୍ଟଗୁଡ଼ିକରେ '%s' ସଂଯୋଗ ହୋଇପାରିବ କିମ୍ବା ଉତ୍ତର ପାଇ ପାରିବ ତାହାକୁ ଦର୍ଶାନ୍ତୁ।"
+
+#: ../sepolicy/sepolicy/gui.py:421
+#, python-format
+msgid "Transitions Into '%s'"
-+msgstr ""
++msgstr "'%s' କୁ ପରିବର୍ତ୍ତନ"
+
+#: ../sepolicy/sepolicy/gui.py:422
+#, python-format
+msgid "Transitions From '%s'"
-+msgstr ""
++msgstr "'%s' ରୁ ପରିବର୍ତ୍ତନ"
+
+#: ../sepolicy/sepolicy/gui.py:423
+#, python-format
+msgid ""
+"Executables which will transition to the '%s', when executing a selected "
+"domains entrypoint."
-+msgstr ""
++msgstr "'%s' କୁ ପରିବର୍ତ୍ତନ ହୋଇପାରୁଥିବା ନିଷ୍ପାଦନଗୁଡ଼ିକ, ଯେତେବେଳେ ଏକ ବଚ୍ଛିତ ଡମେନ ନିବେଶ ବିନ୍ଦୁକୁ ନିଷ୍ପାଦନ କରାଯାଏ।"
+
+#: ../sepolicy/sepolicy/gui.py:424
+#, python-format
+msgid ""
+"Executables which will transition to a different domain, when the '%s' "
+"executes them."
-+msgstr ""
++msgstr "ଭିନ୍ନ ଏକ ଡମେନକୁ ପରିବର୍ତ୍ତନ ହେଉଥିବା ନିଷ୍ପାଦନଗୁଡ଼ିକ, ଯେତେବେଳେ '%s' ସେଗୁଡ଼ିକୁ ନିଷ୍ପାଦନ କରିଥାଏ।"
+
+#: ../sepolicy/sepolicy/gui.py:425
+#, python-format
+msgid "Display applications that can transition into or out of the '%s'."
-+msgstr ""
++msgstr "ପ୍ରୟୋଗଗୁଡ଼ିକୁ ଦର୍ଶାଇଥାଏ ଯାହାକି '%s' କୁ କିମ୍ବା ସେଥିରୁ ପରିବର୍ତ୍ତନ ହୋଇପାରୁଥିବ।"
+
+#: ../sepolicy/sepolicy/gui.py:604
+#, python-format
+msgid "Boolean %s Allow Rules"
-+msgstr ""
++msgstr "ବୁଲିଆନ %s ଅନୁମୋଦିତ ନିୟମାବଳୀ"
diff --git a/policycoreutils/po/pa.po b/policycoreutils/po/pa.po
index 128fb5f..94b7d0d 100644
--- a/policycoreutils/po/pa.po
@@ -318093,7 +318095,7 @@ index 0000000..e2befdb
+ packages=["policycoreutils"],
+)
diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
-index 6e33c85..37fff6e 100644
+index 6e33c85..9f5a805 100644
--- a/policycoreutils/semanage/semanage
+++ b/policycoreutils/semanage/semanage
@@ -1,5 +1,7 @@
@@ -318105,7 +318107,7 @@ index 6e33c85..37fff6e 100644
# see file 'COPYING' for use and warranty information
#
# semanage is a tool for managing SELinux configuration files
-@@ -19,564 +21,797 @@
+@@ -19,564 +21,798 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA
#
@@ -318291,7 +318293,7 @@ index 6e33c85..37fff6e 100644
+
+def handleLogin(args):
+ # {action:[conflict_opts,require_opts]}
-+ login_args = {'list':[('login','seuser'),('')],'add':[('locallist'),('seuser','login')],'modify':[('locallist'),('seuser','login')], 'delete':[('locallist'),('login')],'extract':[('locallist','login','seuser'),('')],'deleteall':[('locallist','login','seuser'),('')]}
++ login_args = {'list':[('login','seuser'),('')],'add':[('locallist'),('seuser','login')],'modify':[('locallist'),('login')], 'delete':[('locallist'),('login')],'extract':[('locallist','login','seuser'),('')],'deleteall':[('locallist'),('')]}
+
+ handle_opts(args,login_args,args.action)
+
@@ -318310,7 +318312,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "login %s" % (str(i))
+
+def parser_add_store(parser, name):
+ parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage"))
@@ -318361,7 +318363,7 @@ index 6e33c85..37fff6e 100644
+ parser.add_argument('-D', '--deleteall', dest='action', action='store_const', const='deleteall', help=_('Remove all %s objects local customizations') % name )
+
+def parser_add_seuser(parser, name):
-+ parser.add_argument('-s', '--seuser', default=None, help=_("SELinux user name"))
++ parser.add_argument('-s', '--seuser', default="", help=_("SELinux user name"))
+
+def setupLoginParser(subparsers):
+ generated_usage = generate_custom_usage(usage_login, usage_login_dict)
@@ -318370,6 +318372,7 @@ index 6e33c85..37fff6e 100644
+ parser_add_noheading(loginParser, "login")
+ parser_add_noreload(loginParser, "login")
+ parser_add_store(loginParser, "login")
++ parser_add_range(loginParser, "login")
+
+ login_action = loginParser.add_mutually_exclusive_group(required=True)
+
@@ -318381,14 +318384,14 @@ index 6e33c85..37fff6e 100644
+ parser_add_deleteall(login_action, "login")
+ parser_add_seuser(loginParser, "login")
+
-+ parser_add_range(login_action, "login")
+ loginParser.add_argument('login', nargs='?', default=None, help=_("login_name | %%groupname"))
++
+ loginParser.set_defaults(func=handleLogin)
+
+def handleFcontext(args):
-+ fcontext_args = {'list':[('equal','ftype','seuser','type'),('')],'add':[('locallist'),('type','file_spec')],'modify':[('locallist'),('type','file_spec')], 'delete':[('locallist'),('type','file_spec')],'extract':[('locallist','equal','ftype','seuser','type'),('')],'deleteall':[('locallist','equal','ftype','seuser','type'),('')]}
++ fcontext_args = {'list':[('equal','ftype','seuser','type'),('')],'add':[('locallist'),('type','file_spec')],'modify':[('locallist'),('type','file_spec')], 'delete':[('locallist'), ('file_spec')],'extract':[('locallist','equal','ftype','seuser','type'),('')],'deleteall':[('locallist'),('')]}
+ # we can not use mutually for equal because we can define some actions together with equal
-+ fcontext_equal_args = {'equal':[('list','locallist','type','ftype','seuser','deleteall','extract'),('add','modify','delete','file_spec')]}
++ fcontext_equal_args = {'equal':[('list','locallist','type','ftype','seuser','deleteall','extract'),()]}
+
+ if args.action is None:
+ print("usage: "+"%s" % generate_custom_usage(usage_fcontext, usage_fcontext_dict))
@@ -318410,7 +318413,7 @@ index 6e33c85..37fff6e 100644
+ if args.equal:
+ OBJECT.add_equal(args.file_spec, args.equal)
+ else:
-+ OBJECT.modify(args.file_spec, args.type, args.ftype, args.seuser, args.range)
++ OBJECT.modify(args.file_spec, args.type, args.ftype, args.range, args.seuser)
+ if args.action is "delete":
+ if args.equal:
+ OBJECT.delete(args.file_spec, args.equal)
@@ -318422,7 +318425,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "fcontext %s" % str(i)
+
+def setupFcontextParser(subparsers):
+ ftype_help = '''
@@ -318460,7 +318463,7 @@ index 6e33c85..37fff6e 100644
+ fcontextParser.set_defaults(func=handleFcontext)
+
+def handleUser(args):
-+ user_args = {'list':[('selinux_name','seuser','roles'),('')],'add':[('locallist'),('roles','selinux_name')],'modify':[('locallist'),('roles','selinux_name')], 'delete':[('locallist'),('selinux_name')],'extract':[('locallist','selinux_name','seuser','role'),('')],'deleteall':[('locallist','selinux_name','seuser','roles'),('')]}
++ user_args = {'list':[('selinux_name','seuser','roles'),('')],'add':[('locallist'),('roles','selinux_name')],'modify':[('locallist'),('selinux_name')], 'delete':[('locallist'),('selinux_name')],'extract':[('locallist','selinux_name','seuser','role'),('')],'deleteall':[('locallist'),('')]}
+
+ handle_opts(args,user_args,args.action)
+
@@ -318479,7 +318482,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "user %s" % str(i)
+
+def setupUserParser(subparsers):
+ generated_usage = generate_custom_usage(usage_user, usage_user_dict)
@@ -318509,7 +318512,7 @@ index 6e33c85..37fff6e 100644
+ userParser.set_defaults(func=handleUser)
+
+def handlePort(args):
-+ port_args = {'list':[('port','type','proto'),('')],'add':[('locallist'),('type','port','proto')],'modify':[('localist'),('type','port','proto')], 'delete':[('locallist'),('port','proto')],'extract':[('locallist','port','type','proto'),('')],'deleteall':[('locallist','port','type','proto'),('')]}
++ port_args = {'list':[('port','type','proto'),('')],'add':[('locallist'),('type','port','proto')],'modify':[('localist'),('port','proto')], 'delete':[('locallist'),('port','proto')],'extract':[('locallist','port','type','proto'),('')],'deleteall':[('locallist'),('')]}
+
+ handle_opts(args,port_args,args.action)
+
@@ -318528,7 +318531,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "port %s" % str(i)
+
+def setupPortParser(subparsers):
+ generated_usage = generate_custom_usage(usage_port, usage_port_dict)
@@ -318552,7 +318555,7 @@ index 6e33c85..37fff6e 100644
+ portParser.set_defaults(func=handlePort)
+
+def handleInterface(args):
-+ interface_args = {'list':[('interface'),('')],'add':[('locallist'),('type','interface')],'modify':[('locallist'),('type','interface')], 'delete':[('locallist'),('type','interface')],'extract':[('locallist','interface','type'),('')],'deleteall':[('locallist','interface','type'),('')]}
++ interface_args = {'list':[('interface'),('')],'add':[('locallist'),('type','interface')],'modify':[('locallist'),('type','interface')], 'delete':[('locallist'),('interface')],'extract':[('locallist','interface','type'),('')],'deleteall':[('locallist'),('')]}
+
+ handle_opts(args,interface_args,args.action)
+
@@ -318571,7 +318574,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "interface %s" % str(i)
+
+def setupInterfaceParser(subparsers):
+ generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
@@ -318623,7 +318626,7 @@ index 6e33c85..37fff6e 100644
+ moduleParser.set_defaults(func=handleModule)
+
+def handleNode(args):
-+ node_args = {'list':[('node','type','proto','mask'),('')],'add':[('locallist'),('type','node','proto','mask')],'modify':[('locallist'),('type','node','mask','proto')], 'delete':[('locallist'),('type','node','mask')],'extract':[('locallist','node','type','proto','mask'),('')],'deleteall':[('locallist','node','type','proto','mask'),('')]}
++ node_args = {'list':[('node','type','proto','mask'),('')],'add':[('locallist'),('type','node','proto','mask')],'modify':[('locallist'),('node','mask','proto')], 'delete':[('locallist'),('node','mask','prototype')],'extract':[('locallist','node','type','proto','mask'),('')],'deleteall':[('locallist'),('')]}
+ handle_opts(args,node_args,args.action)
+
+ OBJECT = object_dict['node']()
@@ -318641,7 +318644,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "node %s" % str(i)
+
+def setupNodeParser(subparsers):
+ generated_usage = generate_custom_usage(usage_node, usage_node_dict)
@@ -318667,7 +318670,7 @@ index 6e33c85..37fff6e 100644
+ nodeParser.set_defaults(func=handleNode)
+
+def handleBoolean(args):
-+ boolean_args = {'list':[('state','boolean'),('')],'modify':[('localist'),('')], 'extract':[('locallist','state','boolean'),('')],'deleteall':[('locallist','state','boolean'),('')],'state':[('locallist','list','extract','deleteall'),('modify')]}
++ boolean_args = {'list':[('state','boolean'),('')],'modify':[('localist'),('')], 'extract':[('locallist','state','boolean'),('')],'deleteall':[('locallist'),('')],'state':[('locallist','list','extract','deleteall'),('modify')]}
+ if args.action is None:
+ print("Usage: "+"%s" % generate_custom_usage(usage_boolean, usage_boolean_dict))
+ sys.exit(2)
@@ -318693,7 +318696,7 @@ index 6e33c85..37fff6e 100644
+ OBJECT.deleteall()
+ if args.action is "extract":
+ for i in OBJECT.customized():
-+ print "%s %s" % (object, str(i))
++ print "boolean %s" % str(i)
+
+def setupBooleanParser(subparsers):
+ generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
@@ -320574,7 +320577,7 @@ index 28a9022..90b142e 100644
+usage: semanage [-h]
+
diff --git a/policycoreutils/semanage/seobject.py b/policycoreutils/semanage/seobject.py
-index 85bc37f..2f6a440 100644
+index 85bc37f..b66840f 100644
--- a/policycoreutils/semanage/seobject.py
+++ b/policycoreutils/semanage/seobject.py
@@ -32,11 +32,10 @@ from IPy import IP
@@ -320668,11 +320671,11 @@ index 85bc37f..2f6a440 100644
+ def __add(self, target, type, ftype = "", serange = "s0", seuser = "system_u"):
self.validate(target)
-+ if not seuser:
++ if seuser == "":
+ seuser = "system_u"
+
-+ if not serange:
-+ seuser = "s0"
++ if serange == "":
++ serange = "s0"
+
if is_mls_enabled == 1:
serange = untranslate(serange)
@@ -320705,6 +320708,201 @@ index 85bc37f..2f6a440 100644
return l
def list(self, heading = True, locallist = False, use_file = False):
+diff --git a/policycoreutils/semanage/test-semanage.py b/policycoreutils/semanage/test-semanage.py
+new file mode 100644
+index 0000000..2aeffba
+--- /dev/null
++++ b/policycoreutils/semanage/test-semanage.py
+@@ -0,0 +1,189 @@
++import unittest, os, shutil
++from tempfile import mkdtemp
++from subprocess import Popen, PIPE
++
++object_list = [ 'login', 'user', 'port', 'module', 'interface', 'node', 'fcontext', 'boolean','permissive', "dontaudit"]
++
++class SemanageTests(unittest.TestCase):
++ def assertDenied(self, err):
++ self.assertTrue('Permission denied' in err,
++ '"Permission denied" not found in %r' % err)
++ def assertNotFound(self, err):
++ self.assertTrue('not found' in err,
++ '"not found" not found in %r' % err)
++
++ def assertFailure(self, status):
++ self.assertTrue(status != 0,
++ '"semanage succeeded when it should have failed')
++
++ def assertSuccess(self, status, err):
++ self.assertTrue(status == 0,
++ '"semanage should have succeeded for this test %r' % err)
++
++ def test_extract(self):
++ for object in object_list:
++ if object in ["dontaudit","module","permissive"]:
++ continue
++ "Verify semanage %s -E" % object
++ p = Popen(['semanage', object, '-E'], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_input_output(self):
++ print("Verify semanage export -f /tmp/out")
++ p = Popen(['semanage', "export", '-f', '/tmp/out'], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage import -f /tmp/out")
++ p = Popen(['semanage', "import", '-f', '/tmp/out'], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_list(self):
++ for object in object_list:
++ if object in ["dontaudit"]:
++ continue
++ "Verify semanage %s -l" % object
++ p = Popen(['semanage', object, '-l'], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_list_c(self):
++ for object in object_list:
++ if object in ["module", "permissive", "dontaudit"]:
++ continue
++ print("Verify semanage %s -l" % object)
++ p = Popen(['semanage', object, '-lC'], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_fcontext(self):
++ p = Popen(["semanage", "fcontext", "-d", "/ha-web(/.*)?" ], stderr = PIPE)
++ out, err = p.communicate()
++
++ print("Verify semanage fcontext -a")
++ p = Popen(["semanage", "fcontext", "-a", "-t", "httpd_sys_content_t", "/ha-web(/.*)?" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage fcontext -m")
++ p = Popen(["semanage", "fcontext", "-m", "-t", "default_t", "/ha-web(/.*)?" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage fcontext -d")
++ p = Popen(["semanage", "fcontext", "-d", "/ha-web(/.*)?" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_fcontext_e(self):
++ p = Popen(["semanage", "fcontext", "-d", "/myhome" ], stderr = PIPE)
++ out, err = p.communicate()
++ p = Popen(["semanage", "fcontext", "-d", "/myhome1" ], stderr = PIPE)
++ out, err = p.communicate()
++
++ print("Verify semanage fcontext -a -e")
++ p = Popen(["semanage", "fcontext", "-a", "-e", "/home", "/myhome" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage fcontext -m -e")
++ p = Popen(["semanage", "fcontext", "-a", "-e", "/home", "/myhome1" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage fcontext -d -e")
++ p = Popen(["semanage", "fcontext", "-d", "/myhome1" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_port(self):
++ # Cleanup
++ p = Popen(["semanage", "port", "-d", "-p", "tcp", "55" ], stdout = PIPE, stderr = PIPE)
++ out, err = p.communicate()
++
++ # test
++ print("Verify semanage port -a")
++ p = Popen(["semanage", "port", "-a", "-t", "ssh_port_t", "-p", "tcp", "55" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage port -m")
++ p = Popen(["semanage", "port", "-m", "-t", "http_port_t", "-p", "tcp", "55" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage port -d")
++ p = Popen(["semanage", "port", "-d", "-p", "tcp", "55" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_login(self):
++ # Cleanup
++ p = Popen(["userdel", "-f", "-r", "testlogin" ], stderr = PIPE, stdout = PIPE)
++ out, err = p.communicate()
++ p = Popen(["semanage", "user", "-d", "testuser_u" ], stderr = PIPE, stdout = PIPE)
++ out, err = p.communicate()
++ p = Popen(["semanage", "login", "-d", "testlogin" ], stderr = PIPE, stdout = PIPE)
++ out, err = p.communicate()
++
++ #test
++ print("Verify semanage user -a")
++ p = Popen(["semanage", "user", "-a", "-R", "staff_r", "-r", "s0-s0:c0.c1023", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify useradd ")
++ p = Popen(["useradd", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage login -a")
++ p = Popen(["semanage", "login", "-a", "-s", "testuser_u", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage login -m -r")
++ p = Popen(["semanage", "login", "-m", "-r", "s0-s0:c1", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage login -m -s")
++ p = Popen(["semanage", "login", "-m", "-s", "staff_u", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage login -m -s -r")
++ p = Popen(["semanage", "login", "-m", "-s", "testuser_u", "-r", "s0", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage login -d")
++ p = Popen(["semanage", "login", "-d", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ print("Verify userdel ")
++ p = Popen(["userdel", "testlogin" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage user -d")
++ p = Popen(["semanage", "user", "-d", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++ def test_user(self):
++ # Cleanup
++ p = Popen(["semanage", "user", "-d", "testuser_u" ], stderr = PIPE, stdout = PIPE)
++ out, err = p.communicate()
++
++ # test
++ print("Verify semanage user -a")
++ p = Popen(["semanage", "user", "-a", "-R", "staff_r", "-r", "s0-s0:c0.c1023", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage user -m -R")
++ p = Popen(["semanage", "user", "-m", "-R", "sysadm_r unconfined_r", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage user -m -r")
++ p = Popen(["semanage", "user", "-m", "-r", "s0-s0:c1", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++ print("Verify semanage user -d")
++ p = Popen(["semanage", "user", "-d", "testuser_u" ], stdout = PIPE)
++ out, err = p.communicate()
++ self.assertSuccess(p.returncode, err)
++
++if __name__ == "__main__":
++ import selinux
++ if selinux.security_getenforce() == 1:
++ unittest.main()
++ else:
++ print("SELinux must be in enforcing mode for this test")
diff --git a/policycoreutils/semodule/Makefile b/policycoreutils/semodule/Makefile
index 4c5243a..036c418 100644
--- a/policycoreutils/semodule/Makefile
@@ -321142,7 +321340,7 @@ index 82fea52..779fd75 100644
fi
COMPREPLY=( $(compgen -W '${OPTS[$verb]}' -- "$cur") )
diff --git a/policycoreutils/sepolicy/sepolicy-generate.8 b/policycoreutils/sepolicy/sepolicy-generate.8
-index fb84af6..2d97999 100644
+index fb84af6..9408c5e 100644
--- a/policycoreutils/sepolicy/sepolicy-generate.8
+++ b/policycoreutils/sepolicy/sepolicy-generate.8
@@ -4,16 +4,66 @@ sepolicy-generate \- Generate an initial SELinux policy module template.
@@ -321159,28 +321357,28 @@ index fb84af6..2d97999 100644
+Confined Applications
+
+.br
-+.B sepolicy generate \-\-application [\-n NAME] [\-w WRITE_PATH ] command
++.B sepolicy generate \-\-application [\-n NAME] command [\-w WRITE_PATH ]
+.br
-+.B sepolicy generate \-\-cgi [\-n NAME] [\-w WRITE_PATH ] command
++.B sepolicy generate \-\-cgi [\-n NAME] command [\-w WRITE_PATH ]
+.br
-+.B sepolicy generate \-\-dbus [\-n NAME] [\-w WRITE_PATH ] command
++.B sepolicy generate \-\-dbus [\-n NAME] command [\-w WRITE_PATH ]
+.br
-+.B sepolicy generate \-\-inetd [\-n NAME] [\-w WRITE_PATH ] command
++.B sepolicy generate \-\-inetd [\-n NAME] command [\-w WRITE_PATH ]
+.br
-+.B sepolicy generate \-\-init [\-n NAME] [\-w WRITE_PATH ] command
++.B sepolicy generate \-\-init [\-n NAME] command [\-w WRITE_PATH ]
+
+Confined Users
+
+.br
+.B sepolicy generate \-\-admin_user [\-r TRANSITION_ROLE] \-n NAME
+.br
-+.B sepolicy generate \-\-confined_admin \-n NAME [\-a ADMIN_DOMAIN] [\-u USER] [\-n NAME] [\-p PATH]
++.B sepolicy generate \-\-confined_admin \-n NAME [\-a ADMIN_DOMAIN] [\-u USER] [\-n NAME] [\-w WRITE_PATH]
+.br
-+.B sepolicy generate \-\-desktop_user \-n NAME [\-p PATH]
++.B sepolicy generate \-\-desktop_user \-n NAME [\-w WRITE_PATH]
+.br
-+.B sepolicy generate \-\-term_user \-n NAME [\-p PATH]
++.B sepolicy generate \-\-term_user \-n NAME [\-w WRITE_PATH]
+.br
-+.B sepolicy generate \-\-x_user \-n NAME [\-p PATH]
++.B sepolicy generate \-\-x_user \-n NAME [\-w WRITE_PATH]
+.br
+
+Miscellaneous Policy
@@ -321256,6 +321454,15 @@ index fb84af6..2d97999 100644
.TP
.I \-\-admin_user
Generate Policy for Administrator Login User Role
+@@ -95,7 +154,7 @@ Generate Policy for Minimal Terminal Login User Role
+ Generate Policy for Minimal X Windows Login User Role
+
+ .SH "EXAMPLE"
+-.B > sepolicy generate /usr/sbin/rwhod
++.B > sepolicy generate --init /usr/sbin/rwhod
+ .br
+ Generating Policy for /usr/sbin/rwhod named rwhod
+ .br
diff --git a/policycoreutils/sepolicy/sepolicy-gui.8 b/policycoreutils/sepolicy/sepolicy-gui.8
new file mode 100644
index 0000000..49ea4b4
@@ -326923,6 +327130,32 @@ index 4b44b3c..98f4f7d 100644
override CFLAGS += -I$(PREFIX)/include
LDLIBS = -lselinux -lsepol -L$(LIBDIR)
+diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c
+index a0e5415..7fe4166 100644
+--- a/policycoreutils/setfiles/restore.c
++++ b/policycoreutils/setfiles/restore.c
+@@ -118,7 +118,7 @@ static int restore(FTSENT *ftsent, int recurse)
+ r_opts->count++;
+ if (r_opts->count % STAR_COUNT == 0) {
+ if (r_opts->progress == 1) {
+- fprintf(stdout, "*");
++ fprintf(stdout, "\r%luk", (size_t) r_opts->count / STAR_COUNT );
+ } else {
+ if (r_opts->nfile > 0) {
+ progress = (r_opts->count < r_opts->nfile) ? (100.0 * r_opts->count / r_opts->nfile) : 100;
+diff --git a/policycoreutils/setfiles/restore.h b/policycoreutils/setfiles/restore.h
+index 57ae46a..406594b 100644
+--- a/policycoreutils/setfiles/restore.h
++++ b/policycoreutils/setfiles/restore.h
+@@ -16,7 +16,7 @@
+ #include <limits.h>
+ #include <stdint.h>
+
+-#define STAR_COUNT 1000
++#define STAR_COUNT 1024
+
+ /* Things that need to be init'd */
+ struct restore_opts {
diff --git a/policycoreutils/setfiles/restorecon.8 b/policycoreutils/setfiles/restorecon.8
index 80b6d6e..ff759af 100644
--- a/policycoreutils/setfiles/restorecon.8
diff --git a/policycoreutils.spec b/policycoreutils.spec
index 5fad36a..897f37b 100644
--- a/policycoreutils.spec
+++ b/policycoreutils.spec
@@ -7,7 +7,7 @@
Summary: SELinux policy core utilities
Name: policycoreutils
Version: 2.1.14
-Release: 69%{?dist}
+Release: 70%{?dist}
License: GPLv2
Group: System Environment/Base
# Based on git repository with tag 20101221
@@ -330,6 +330,11 @@ The policycoreutils-restorecond package contains the restorecond service.
%systemd_postun_with_restart restorecond.service
%changelog
+* Fri Jul 26 2013 Dan Walsh <dwalsh at redhat.com> - 2.1.14-70
+- Fix semanage argparse bugs
+- Update Translations
+- Add test suite for semanage command lines
+
* Wed Jul 24 2013 Dan Walsh <dwalsh at redhat.com> - 2.1.14-69
- Fix semanage argparse bugs
More information about the scm-commits
mailing list