From patchwork Fri Jan 27 12:47:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Haines X-Patchwork-Id: 9541767 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 990C0601D7 for ; Fri, 27 Jan 2017 12:49:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 874BA2074F for ; Fri, 27 Jan 2017 12:49:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7BED526E51; Fri, 27 Jan 2017 12:49:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from emsm-gh1-uea11.nsa.gov (smtp.nsa.gov [8.44.101.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id BD3ED2074F for ; Fri, 27 Jan 2017 12:49:44 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.33,295,1477958400"; d="scan'208";a="2654944" IronPort-PHdr: =?us-ascii?q?9a23=3AC/eNpxAv8D5qfMboNfJ1UyQJP3N1i/DPJgcQr6Af?= =?us-ascii?q?oPdwSPr4pMWwAkXT6L1XgUPTWs2DsrQf2raQ7v+rBTZIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbx/IA+2oAjTucUbjpVuIbstxxXUpXdFZ/?= =?us-ascii?q?5Yzn5yK1KJmBb86Maw/Jp9/ClVpvks6c1OX7jkcqohVbBXAygoPG4z5M3wqBnM?= =?us-ascii?q?VhCP6WcGUmUXiRVHHQ7I5wznU5jrsyv6su192DSGPcDzULs5Vyiu47ttRRT1hi?= =?us-ascii?q?gHLTo5+3zJhMJ2gqxQvRatqwViz4LIZY2YMud1cKHActMAXWdPXthfWTFPDI2/?= =?us-ascii?q?aIUPF+gMMftWoobyu1QAogWxBRK3CePzyDJFnGP60Lcm3+g/FwzNwQwuH8gJsH?= =?us-ascii?q?TRtNj7KKYSXvy1zKbS1zXMcu5d1zXn54jJdBAuv+qMVq93fMrLyEkgCwPFgU+K?= =?us-ascii?q?qYP4JzyayvwCs2iB4OphU+KglXUnphpqrTizx8csjJXJiZwPylDC6yp53Jw5Ks?= =?us-ascii?q?G/SE5+eNOpFoZbuSKCN4ZuX88vTG5ltDw6x7Ebo5K3YicHxIo9yxLCc/CKcImF?= =?us-ascii?q?7gj+WOueIzp0nnJodKylixqs70Sty+vxXdSu3llQtCpKiNzMu2gI1xzU98eIVO?= =?us-ascii?q?Nw/lyk2TaTzwDT7fxEIVwsmarbNZEhxrkwm4IPsUvZBC/2mVj2jLSMekU4+umn?= =?us-ascii?q?9+TnYrL8qp+aK4B0kR3xPr4rmsy+BeQ0KgkOX26F9uSgzLDv4EL0TbpQgvA2j6?= =?us-ascii?q?XVqo7WKMsFqqKjHgNZyoMj5Ay+Dzei3tQYh34HLFdddRKckYfpP1DOIPblDfaw?= =?us-ascii?q?mlijizBrx+3APrL9HJrNNWPOkKvhfLlh605czxA/zdZE551OEL0BL/XzWlHpuN?= =?us-ascii?q?zCEhA5KxC0w/rgCNhl1IMeXmSPDbWFMKPSq1CI4PkiI+uLZI8TvTbyMeMl5+Lw?= =?us-ascii?q?gn8jgl8RZ66p3YEYaHqgBPRpP12ZYWbwgtcGCWoKvAg+Q/b2h12BSj5TYHCyX6?= =?us-ascii?q?Mi5jwgBoKmCZrDR4+2j7yc2ie7AoBWanpBClCWHnfib5+EVOsUaCKOPs9hlSQJ?= =?us-ascii?q?VLagS48l0BGhqhX6xqFpLuXK5yIYsojj28Jt5+3JkhEy9yJ7ANiB022XSGF0hG?= =?us-ascii?q?wITScs3K9juUx91kuD0a9gjvNFCdNT4vRJUgEmNZLB1OF6Fc79WhjAftaIT1am?= =?us-ascii?q?RM+qATcvQdIt29UOeVpyG82+jhDf2CqnG6Ial6CRC5wu6a/Tw3/xJ8NhxHncz6?= =?us-ascii?q?khk0MqQs1ROm26nqR/7RTcB5bVk0WFkKanbaQd3S/K9GeF1meOuUVYXBdxUaXD?= =?us-ascii?q?R3wfYFHZrc765kPDUb+hF64rMg1fxs6eMqFKcMHmjU1aRPf/P9TTe3m+lHy3CR?= =?us-ascii?q?aMx7OMd5bqe34H0CXGFkcLjxof/W2YOgg6ByehpX/eDTN1GF3zY0Ls6/R+qGih?= =?us-ascii?q?Qk461Q6Kc1Zh172z+hIPgvycUfwT1KoeuCg9szV0AEq939XOBtWevwpuZr9cYd?= =?us-ascii?q?Im4FpczWLWrRZ9Pp27L6B6gl4RaRh4sF302xVwEIVAntAgrGk2wwpqNaKYzFRB?= =?us-ascii?q?eiuW3ZDqILLXLHX9/BG0a6PN31HeyNeW9r4U6PU2sFXvpgapFlAt839/ydlaz2?= =?us-ascii?q?Oc5onWDAoVSZ/xUVw49xt9p7HHeSQ95Jnb1X5rMampqDPC3MgpBOQ9wBa6Y9hf?= =?us-ascii?q?KL+EFBP1E8ACHcehNfYqm1m3YRIeJ+1d7rI7P8a8e/uBwq6rM/5qnCi6gmRf/I?= =?us-ascii?q?B9zkWM+jJ8SuHW25YFx/aY0xCDVzfhkFehtcX3lppeaTEVBGq/xjDuBJRNaa1q?= =?us-ascii?q?YYYLFWCuLtWsxtVwnZ7tXGVY9EK4ClMd3s+pfhSTb1nn0g1Wz0gXp2KomTegxT?= =?us-ascii?q?xujz4ptraf3DDJw+n6ehsIIGpLRHV8glf2Ooi5lM4aU1aybwcyiRul4Fz2x69B?= =?us-ascii?q?pKRwN2PTW1tHfzDqL2F+Vau9rqaCbNNS55MpqypXVP+xbkydSr74vxQVyTjjH3?= =?us-ascii?q?dEyDA9aT6qpo3znwZmh2KFMHZzsH3ZdNl2xRfe4NzcQeBe3iEdSSZilzbXHF+8?= =?us-ascii?q?M8Ou/dWOmJfJqvq+WH65Vp1PbSnrypuNtDW65WJ2HR2/mOqzlsf7Hgg61i/70d?= =?us-ascii?q?ZqWD7MrBb9ZInkzb66MeV9cklvHl/85NJwGptinYsomJEQxX8ai42R/XoGimfz?= =?us-ascii?q?LcxX2bngY3oJRD4LxcPV4Qf+1U14NnKJxoT5VnSBzct6fdW6ZH0Z2j4l5cBQFK?= =?us-ascii?q?iU9KBEnTdyolegtwLRZvx9njMDxvs09HEahO8ItRE2ziWAHr8SBlNUPSv2lxSH?= =?us-ascii?q?99q+trlYZH6zcbis00pzhcihA6ufogFYQnr2YI0uEjR37sV7LFLM13vz55rheN?= =?us-ascii?q?XMa9ITsQGbnw3Gj+dLNJI7juAKijZ/OWLhoX0lzPY2jR9w0pG8p4iKMGZt87y/?= =?us-ascii?q?Ah5DMD36ed8T9ivqjaZEkcacx5qvEYl5GjUXQJvoSuqlECwUtfv6LAuODjs8pW?= =?us-ascii?q?qbGbbFGw+Q9ltmpWrVE5+3L3GXOGUZzdJ6SRmFPkNfnQQUUS4mkZ44CgCrxNXt?= =?us-ascii?q?cElj6TAX/FL4rQFMyu1wPRnlTmjfvBuoaiszSJWHNBpZ9BxC50PLPsyG9O1zGT?= =?us-ascii?q?1Y8YO7rAGWN2ybfBpHDXsSWkCeHFDjOaSu5cPc/OeGCOq+KOHOYbqQpuBEUfeH?= =?us-ascii?q?246v2JN8/zmQLsWPImViD/oj10pNR395HdjZmzIKSyEMmSLCcdOUpBCm+iJtts?= =?us-ascii?q?C/6vPrWADx6oSTF7teK9Jv+wq5ga2bLe6fmD55KSpE1pML3XLIzaIQ3FoWiy5w?= =?us-ascii?q?azmtDa4PujTWQaLWhKBXEwUbZD9pO8tQ8a0wxA9NNtDHitntzL53kuY1C0tZVV?= =?us-ascii?q?zmgsypf9YGIm+nOFPCHkmLMLOGJD3Qzs7tfay8TKdcjOJOtx2/oTybCVPsPiyf?= =?us-ascii?q?lzn1UBCiKedMjDuBMxxGoIGwaRhtCWn5TNL9dh27Pt53jTsszr0ymnzKNHQTMT?= =?us-ascii?q?xmf0NKtL2Q4jtSgu9jFGxZ8nplMe6Elj6B7+bGMZkZr/1rAiVol+Jd+3k6yqVa?= =?us-ascii?q?4z9aS/BvnyvStNFuqUm8kuaT0jpnTAZOqjFTiY2WpkVtJ7/W9pZaWXne4hIA9n?= =?us-ascii?q?6QBA4Jp9t4EN3gobpcytzSlKL1MjhC6cvY/dcbB8jXKMOHN2AtMRz3Fz7IFAEF?= =?us-ascii?q?VyKkNXnDh0xBl/Gf7maVoYIkqpf2l5oBVKRbWUcuFvwAFERqBtMCL4lsXj8+l7?= =?us-ascii?q?6UktII72KkrBbNXMVaoozHVvWKDPr0KTaZgr5EZx0TzLzlM4scLYz71FZkalVg?= =?us-ascii?q?m4TKAUXQV8hXoiJ9dg80vFlN8H9mQ2Ip1ELqcB2t72EIGP6zhh45lA1+YeE3+z?= =?us-ascii?q?ft51c4PV3KpSQqnEk2g9XljiibcCTtI6eoQYFWFy30ulAtMpP8RgZ5dxeynUtl?= =?us-ascii?q?NTjaQbJelKFgdWd1hw/fopZABflcTahYbxAK3vGXe+8k0VJCpSW73UVH//fKCY?= =?us-ascii?q?N+lAs2dp6ht3FA2gJnbNErPqHQIa1JzlZehq2Qoi+oyuAxwAgbJ0kT6m+SfjAH?= =?us-ascii?q?uFAQPLk8OyWo5vBs6RCFmzZbfmgDSeAlovZx+0M+POSA1D7g3KRFKkCqNOyfLr?= =?us-ascii?q?mVu27ems6UWlkwzF8Hl1FZ/bhq1scua1CUWF40zLSPDRsJL9bNKQFOYsVJ9XjT?= =?us-ascii?q?ZzuBseLDwZJtJYWyCODpQfWItKkKnkKuBBwpEJgU7sQdApms11nVItrgLL4Dzx?= =?us-ascii?q?Ui+RrkJFGEDPlSYh2Eji0Ho8alwJ9wx4ldKSkXAX9hPiWv+rbXuggqjeKeU9gs?= =?us-ascii?q?fHcaX5YLNmktVcKggS5ZpXNADTes0u0H1AeC8iX8piXMDDj8ddZjYumbZQ90At?= =?us-ascii?q?Gs5To/67S2iULQ8pjGKWH6L8pttcLU6ewAoZaHF/RUTaJmvkjGh4ZYQmamU2nV?= =?us-ascii?q?Ed66P5LwcZUjbcToCnamVVyykzY1T8DrPNmzKKiJgAboSJ1bsImdwTAvL8i9Fi?= =?us-ascii?q?sRGx1oveEM+Lp8ZREfY5o8eRPorBoxN6i+IAeez9WvTH2gJidRT/la0eq1fadX?= =?us-ascii?q?zzY2Yu+81nQgUokwz/Or/k4VWJEKkhbeyO6gZ4lEUSn8AHpdexnPpScimGhhMf?= =?us-ascii?q?4yzfslzBPOr1YcLyiBdPZ1Z2xco9E8GVSSLG1qCmo5Ql+cipbD4g6s3r0J4iRd?= =?us-ascii?q?ntZV3vdev3TkuJ/Qfi6sUrSxqZrJqyogccQmo6ppPIP5JsuGtY/RkSLHQ5nVsg?= =?us-ascii?q?yFVim6F/xAldVLOy1YQeNHmWc8NcwIpIpN80wxWdkiJ7ZXEqkjuqiqaSZ4DS4V?= =?us-ascii?q?1SIWTJ2P3DoZj+imxrTaiAmfcI45MBMeqpVDgsERUylsYiMRvKWjTZnZl3eYSm?= =?us-ascii?q?gXJwce9QtM5B8Blo90euDq/o/IQYRRxDFIuP10UzHEFp9y+1v8UGGWjkDySO+9?= =?us-ascii?q?nOyxwQJS0PXs38EBWB55CEhS2+ZWlkwsKLFsM6cep5PEvCWUeE39p2/i1OymJF?= =?us-ascii?q?xNxsLObF34EJDJtWziXS0A4XcUX5NAyGnDFZQOlAp0cLwrq0hRL429dUb+4jMl?= =?us-ascii?q?y55vH7amScCh30wlomoeRye2D9pBDPlrsEjNVz1/ZJCks47oO4lIQmBK5p2StV?= =?us-ascii?q?NZkERrMy62zZpcKs5N4j4QXDhBuzqdpt6yRNdF2cBoE58GOs1/tGvlGKNYJJiR?= =?us-ascii?q?pGU7u7L1xnDF+zA8sVK6xDSpFK+7VO9Z/nMRFRs3KGiErUkvFeQs+H/I8l/Rql?= =?us-ascii?q?B04/tbBr+XgEprujZ9A5ZOCixK1X2+LlRzTXhGs/lBJ6jPdcxTXeUybwe1OxMi?= =?us-ascii?q?Df4mw1CJ/UZskHf4ZSxyqhVV+yTDUAkxSyYVnq3tmD0Fp8GgIT8VVZRIbTA7YC?= =?us-ascii?q?fELwKUgidXvRlFZ0FtQZAZDc5P+6sH0otM4srCVUGsJDkKXBx4LA041+ZfmFVC?= =?us-ascii?q?sEWfdyHdCxaodfbRvR12e8eRsNCmLO7j8AdBlIznrPgy978fSH2+hQ2tXdfeop?= =?us-ascii?q?fgtt2Ns0uDb7v4P/G5YXDaVjTMiw6/has8BZnQ4yfTKBZbK4V9yXc8YZjuE3TL?= =?us-ascii?q?Mg5CJ60GPEdUSL51ac1eou9EY89rZrwJ9bVqBhKdSRPlAJavo+VeLlbPWTTeKD?= =?us-ascii?q?2M8u64oY3N9rHSVPbvZteSyHbdX6J4IIp15SP9G7j0zY9U4lD21et19kNmVVjG?= =?us-ascii?q?NDiMo8/vJgwX+MWvdFbus5MyEDzKB5dwlWbiyVtbd8oLWSGq9ooXyI9B4nbqVe?= =?us-ascii?q?14ylTzsPFV97R884k4/a1myceuKqfOMvlatUhnAgaKCQl06potB3VwSH5Lbu8X?= =?us-ascii?q?NvjRYbwTjdrypODvC6wX9BqV9vRBadvcO0HOgNSwCi2HRBxfmwcBtCQaIReC2P?= =?us-ascii?q?6Dh690U9yqpezj1kIq+Vi+IQYMzKpx6oec5qqIuOjXYgPNzbgeRKflWN78o68x?= =?us-ascii?q?u0OW+f0kjqQBenJ0Yw2gFOgSSNIdyn3nzaAwwiImC9nDEK74+P5fS3I5mSrtlI?= =?us-ascii?q?17H1oMAf4bALyL8p5Ekmc/gezZOcUccrpelWaXCR6kDrgCxGap6ySNOmllhQrO?= =?us-ascii?q?0xXqTmOt91L2qDJ4QS/Qz9fijkVVV6O4BUFJXyazPk94qjyPNhLytNXroaQ18F?= =?us-ascii?q?02Mmv8udKPjmShPr1XH9f4JNOBPyY5v04Xg4c3Rty03oAXA9y9L8kN8HtmdPvR?= =?us-ascii?q?93urkzNdo6dAn4fe5MWV9+7WHXmmiq2WsbSNxDZWyngip14/8cygNuvT59KWX/?= =?us-ascii?q?SoynwRQDlltwvGRR61paTRr0oINkyTzEfLhIsKM8lf3Xk5yk7m4+wjT8go9AlE?= =?us-ascii?q?F4bAYPQCpSvoODbvxFaSbN02WjOZ0ztNEVL/CUN4F7Qk2GLsoMLJkm/d9EEySY?= =?us-ascii?q?l0aUPnngB3DoU/KU8281gY3isDHhYLaRCHDbGnH17pLY0aWkgfcR6HxqS1er8r?= =?us-ascii?q?3U1vxbOi/OvTbfd5B6cNLftdgBCBk0VcGpIMq6IeWKh8e1hf9KHJugfiF5LrX/?= =?us-ascii?q?/8lXo/Lfe1WNxV8dgFt3s+5QayXxig6ZZG77sAjZCHaK5FbobWvMB96Udn6iQD?= =?us-ascii?q?dipTjxhjlxm5S/wTpPj/4tjHt5ql8ueuVac3SOoN6xc5HH9+gIXsgF89vd7bze?= =?us-ascii?q?BcSpfaiY7n6gBCP2aKuJrG0xl7MecBMIOrfK1u9nodJSgeJm4OPcKMZPkh5y9g?= =?us-ascii?q?Kync51tfDcwSf9wYIdDNmQdOikLzQr1T8dDbGlCAAYdpa88o93b3yCwy8ZYkSu?= =?us-ascii?q?bv8iO2Kozf71BDOPNDliZsmMvZpOcLxfrSCS4X4WSWahVu2iON0YWNBOrw/eSC?= =?us-ascii?q?z9HUTVAGEjQ1U4hDPjqC/xKoRu6vmJXuSAOU5df5gIgie0KIWnyxgKMFv75QEe?= =?us-ascii?q?5alCr72iJRFobriP+OrtWs6WRXtlxbEIlp9h3KAr9fPohhNRT+iMarWlB2BjHj?= =?us-ascii?q?d8HMahoupO2Wy/8D4+pkLUvxe5MbIhIfxrL+6HpVUhVhSL7ssVaERuIdft1mR+?= =?us-ascii?q?3YrnpN84JvN7cPPESBpJzttjpIp045AAk1aL83qTxWcVLOkxNRW6b1vr4AlwQd?= =?us-ascii?q?XMV9uUBSA2KxOHgx6yDBVatLkKmbEOYV/SmLTqwST0VoNTtzTA+32Jp0Z7Skhu?= =?us-ascii?q?xIsmRCniN5ofglzSZmRAeitiLwp6IBwzUg+Ku3tD8Zo3xKUv2ekzvUCVVE1PkK?= =?us-ascii?q?iKAcC3D+6VyzfnYOd47y4Lh9KsTm64Yh/3o+YRI5fy0FRuSsESfwgL2UAoaXqt?= =?us-ascii?q?JTmAaNuNnSbb+0NSUSOagyyQn4R3RkzwbQkxBm8GoNQjW9494pP4q9OcM/ySqu?= =?us-ascii?q?B2fXblEM4rlGsMHpr14EUPM2aU99wGVkysWHRCoNRMzJG2ovkgckaWFEcI9e5h?= =?us-ascii?q?4bFqkohC2IvqpH/gwPfjfUE5ql9ZPUncjV2HkxV9FqyXzKpqednJMlzGVlm89o?= =?us-ascii?q?7i6JoHkSdvLYXNVqAnXo0odf1PHxZ/SqsuAcUodmz66hUPAaOMm55WS2wIlqWl?= =?us-ascii?q?OixrkGHVq2LuEDxrnfUyq+R2yXQ+KLfHaQnzojNE79+wWoJEUtaMhWt089LvfC?= =?us-ascii?q?hplEmg3uVbN0QSuRqkHfzGwnKu4abAU2uIGmewMWVuIRYfaTJfQ2yv0kFFQMd2?= =?us-ascii?q?PJHTdxC+Kus16tnIh6O21n4UX+YOTt7h7pPcCXGhkFDY7atIB+9ea9RmKbNn9q?= =?us-ascii?q?1AdyM1Vs9+fDC1QxsfdRc4qQndjVnNl7ze8FeOtuMSIjvt4fgIRj5peI0M2Sax?= =?us-ascii?q?He0o7yJc3JovifG/DfykUqemJZUroeeg715Z81Pt0+W73VA7RZuw4QBa4kT5w9?= =?us-ascii?q?L23x7r17LBtvcg7NY7S5mtLlqfyNZptIvHLW9VYwLCDAux0f1Py7UxF0Y4qth3?= =?us-ascii?q?XoL5A6XihBoMF1Cht6AItPHNsNrxKgA56Qgq67kdGw+0R+u+8EqqfwD/fK1NOi?= =?us-ascii?q?34pvQ5da/0uLPC3KBKlqhERlgf6+gvDa0pn+EcniY88LVPBnQm7Zbb/LBou/JS?= =?us-ascii?q?yKOsL9Y05J7aWR0bN4UhWUYSD2QbCGtCm6O/l+5kU70IN4dvLJzDMx97HbxMfy?= =?us-ascii?q?Z2ZDqyattX6JLppf40DUCuHFWhJUSOaF8Hx7EqENaov07ugOO8Q4wNeA+wlz8C?= =?us-ascii?q?hC0MydLqimqk/DxFl2dYrfLETzwCY5RYgKLwijMUs2n2DWtG7RAXJCIci4McNt?= =?us-ascii?q?msqaDgTx50ltnmEgfmpBGmvuRdeMNmkXwsa+ZAyR9AJXFNYOhO+3dlQ+tq21U+?= =?us-ascii?q?VoPY9FmeqyvrUdjdlpMz3PRNRdPyzIN795ID5RDuTJpFg1bR8ItLc7Wps1ZZeQ?= =?us-ascii?q?OkMILl+AxjnpwAvBz0L0bdqs27iNICkN73VHwKjJ0T9Wpwm2ofyZmNHsUKjFbJ?= =?us-ascii?q?HqW/7fKC8lWSuGSjQyEEap/1CktuEavPqZJ2cQvFQUYiOUCA4OqaFjt9/QDnXc?= =?us-ascii?q?med7Zp0FmOiaWzzsSC1/jKcyBDxEtUOLQ/UYDgTWcnnhgHZcuAylO/9M8nLlb6?= =?us-ascii?q?GCyqpTReMWHpNGcueFTNvAZfBeOzAomy0WOOmmZNLctbc53UzMTWYCDanI8EeR?= =?us-ascii?q?TFWXQvyB3T7rW5sav5QssCoy5t3QhjN3E7jPP7uHpT6u94m4jDyCue3fTWkgeE?= =?us-ascii?q?o1j/gHAGafwRlMMmYEC8sauEv1WK6Pe15M1G41ieJpwxIMYwpzUnhy3XBXn/uw?= =?us-ascii?q?AdNZRkAOjGOvQfwGa1Z3ACk2/UCU/g34ecYAttzLR29C6rsMTpIQLPsv6InRPK?= =?us-ascii?q?sd2/Mp0yx7ryw0tCWdFU9SgRyf/6rWAq182u4K2W5t5PxyX0eSUxvDY2PHzcyg?= =?us-ascii?q?EMsJyiBw5Tjt08PS+OttLrpBu4ZhAFoQRyB7INPc+ytpXmT92Q/0tBG+TxqEJz?= =?us-ascii?q?dM2jcAJSUfeq5Vxu59vQ2AIszA4kOZra4Wo3yrAAeNB6Gc0oBKDN3kzwO1dW9A?= =?us-ascii?q?djD9RMM+kepEiNtHOfBvXoO5GV2Ua1GmAw=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2F9AwDyQItY/wHyM5Bdg2UBAQEBAR+Bao5QmRWOcTUthgO?= =?us-ascii?q?CHVcBAQEBAQEBAQIBAl8ogjMbDT0KMgEBAQEBAQEBAQEBAQEBARoCCEgBIQIkE?= =?us-ascii?q?wYBDSAMAgMJAgUSKQgIAwEdEBUYBwsFGASJJAEDGASvEzomAoJhBYECgyUNgRu?= =?us-ascii?q?CNwQIhD+JTIFKEQE1hS0fBYkCkhc4jWkBhAKKWYYmAooliFlYdiUTHVCEPByBY?= =?us-ascii?q?XUBhlGCLgEBAQ?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 27 Jan 2017 12:49:42 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus [192.168.25.40]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id v0RCmubj004883; Fri, 27 Jan 2017 07:49:03 -0500 Received: from tarius.tycho.ncsc.mil (tarius.infosec.tycho.ncsc.mil [144.51.242.1]) by prometheus.infosec.tycho.ncsc.mil (8.15.2/8.15.2) with ESMTP id v0RCmsvp213768 for ; Fri, 27 Jan 2017 07:48:54 -0500 Received: from goalie.tycho.ncsc.mil (goalie [144.51.242.250]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id v0RCmqx9004881 for ; Fri, 27 Jan 2017 07:48:54 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1ARAQBXQYtYh7UAFEFdGwEBBAEBCgEBgzYBAQEBAYIJp2WLGYQbDIYWgh1XAQIBAQEBAQITAQEBCgsJCh2FRhkBOAEVbD0SiUUBAxgErxQ6gwkFgQKDIw2BG4IRJgQIhD+JTIREDIJuHwWJApIXOI1qhAKQfwKKJYhZgXITHVCDbU8RC4FhdQGIfwEBAQ X-IPAS-Result: A1ARAQBXQYtYh7UAFEFdGwEBBAEBCgEBgzYBAQEBAYIJp2WLGYQbDIYWgh1XAQIBAQEBAQITAQEBCgsJCh2FRhkBOAEVbD0SiUUBAxgErxQ6gwkFgQKDIw2BG4IRJgQIhD+JTIREDIJuHwWJApIXOI1qhAKQfwKKJYhZgXITHVCDbU8RC4FhdQGIfwEBAQ X-IronPort-AV: E=Sophos;i="5.33,295,1477972800"; d="scan'208";a="5923023" Received: from emsm-gh1-uea10.corp.nsa.gov (HELO emsm-gh1-uea10.nsa.gov) ([10.208.41.36]) by goalie.tycho.ncsc.mil with ESMTP; 27 Jan 2017 07:48:18 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3AgrD0Rhft1ZOpL3uJ6cBS1kHylGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcS4YR7h7PlgxGXEQZ/co6odzbGH7+a9Bidcu96oizMrSNR0TRgLiM?= =?us-ascii?q?EbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ/iOgVr?= =?us-ascii?q?O+/7BpDdj9it1+C15pbffxhEiCCzbL52Ixi6twXcu8sZjYZtNKo61wfErGZPd+?= =?us-ascii?q?lK321jOEidnwz75se+/Z5j9zpftvc8/MNeUqv0Yro1Q6VAADspL2466svrtQLe?= =?us-ascii?q?TQSU/XsTTn8WkhtTDAfb6hzxQ4r8vTH7tup53ymaINH2QLUpUjms86tnVBnlgz?= =?us-ascii?q?oBOjUk8m/Yl9Zwgbpbrhy/uhJxzY3aboaOOfZiYq/QZ88WSHBdUspNUSFKH4Oy?= =?us-ascii?q?b5EID+oEJetWs4j9qEcOrRSkHwmjGf7kxD1SiX/32601zf8hGhzB0Qw6HtIBrH?= =?us-ascii?q?TUo8/vNKgPSe+60LHHzTXZYPNX3zfy9pPIfws6rvGQXLJwd9bRxlc1FwPDkFqQ?= =?us-ascii?q?tZbpMC+S1uQIqmWW6fdrW+G3i2M/qgx8oiKjytkwhoXTmo4Z0E3I+CZkzIotJt?= =?us-ascii?q?C1SVR3bcOrHZZSrS2XN5V6Ttk8T212uSs3zKANt4ShcygQ0psnwgbSa/yZfIiM?= =?us-ascii?q?5RLuTPyRITh/hHJ4ZLKzmxm//VK7xe3gTMW01FFKrixFn9XWqn8NzwDc6syASv?= =?us-ascii?q?tg40itwyqA1wfJ5uFZIkA4javbK5g/zb4sjpcesETOEjXolEnqlqOaal8o9vWr?= =?us-ascii?q?5uj6ernmo4WTN45wigHwKKQuncm/DPwiMggPQ2eb+f6z1Kf+8kLhXLpFlv02nb?= =?us-ascii?q?PYsJDcO8sbvbW0DBRJ0oYi7Ra/Eymp0M4enXYZMFJJYg6Ij4/sO13WOvD3Ee+/?= =?us-ascii?q?g0iwkDds3/3GJaPuApHMLnjFjbfgcq1w61JcyQUvzdBf4IhYCrcaIP3pQEPxu9?= =?us-ascii?q?vYDgFqezCzlv3qDNR7y5M2RXOEAqjfNrjb91CP+KZnKu2FYskeuCz8MOQi//7j?= =?us-ascii?q?lzk7lFkefK+y9ZQSYXG8WP9hJha3e33p1+0AGmcDpAZ2bOXrjlCZGWpJZn2yVr?= =?us-ascii?q?gw0ToMCIunC4rYboqxgbqd0T29E4EQbWdDXAPfWUz0fpmJDq9fIBmZJdVsx2QJ?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0EIAQAtQYtYh7UAFEFdGwEFAQsBGAEBB?= =?us-ascii?q?AEBCgEBgwsBAQEBAYIJp2WLGYNYQwyGFoIdVwEBAQEBAQEBAgECEAEBAQoLCQo?= =?us-ascii?q?dL4IzGQ89CjIBAQEBAQEBAQEBAQEBAQEaAghISBkBOAEVbD0SiUUBAxgErxQ6g?= =?us-ascii?q?wkFgQKDIw2BG4IRJgQIhD+JTIREDIJuHwWJApIXOI1qhAKQfwKKJYhZgXMTHVC?= =?us-ascii?q?DbU8RC4FhdQGIfwEBAQ?= X-IPAS-Result: =?us-ascii?q?A0EIAQAtQYtYh7UAFEFdGwEFAQsBGAEBBAEBCgEBgwsBAQE?= =?us-ascii?q?BAYIJp2WLGYNYQwyGFoIdVwEBAQEBAQEBAgECEAEBAQoLCQodL4IzGQ89CjIBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEaAghISBkBOAEVbD0SiUUBAxgErxQ6gwkFgQKDIw2BG4I?= =?us-ascii?q?RJgQIhD+JTIREDIJuHwWJApIXOI1qhAKQfwKKJYhZgXMTHVCDbU8RC4FhdQGIf?= =?us-ascii?q?wEBAQ?= X-IronPort-AV: E=Sophos;i="5.33,295,1477958400"; d="scan'208";a="3244005" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from rgout04.bt.lon5.cpcloud.co.uk ([65.20.0.181]) by emsm-gh1-uea10.nsa.gov with ESMTP; 27 Jan 2017 12:47:59 +0000 X-OWM-Source-IP: 86.147.52.226 (GB) X-OWM-Env-Sender: richard_c_haines@btinternet.com X-Junkmail-Premium-Raw: score=8/50, refid=2.7.2:2016.12.19.90316:17:8.707, ip=, rules=NO_URI_FOUND, NO_CTA_URI_FOUND, NO_MESSAGE_ID, TO_MALFORMED, NO_URI_HTTPS Received: from localhost.localdomain (86.147.52.226) by rgout04.bt.lon5.cpcloud.co.uk (9.0.019.13-1) (authenticated as richard_c_haines@btinternet.com) id 58482DA204819762; Fri, 27 Jan 2017 12:47:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=btinternet.com; s=btcpcloud; t=1485521280; bh=xVr0ts4DM+8u8p1EsE+gGduh9/VLTEechL30MR2xCbM=; h=From:To:Cc:Subject:Date:Message-Id:X-Mailer; b=fiXYkTuWiT1XO2O4jfdFZHw4dfbTg2JWWEVvRZipWa7wNjHWezBqZ+lSy6JcnyX3t6SfjsS3MzoMGKjiieQ/llYEpB90oML0RxVJqrAugSdSWEWEgW4v6CW6e5UBzESa2jiUgLKWtwOCw9nRsL3cZ9d6xnVED5rfbwb0dqAKflE= From: Richard Haines To: selinux@tycho.nsa.gov, alan.christopher.jenkins@gmail.com Subject: [PATCH] setfiles: Fix setfiles progress indicator Date: Fri, 27 Jan 2017 12:47:49 +0000 Message-Id: <20170127124749.7527-1-richard_c_haines@btinternet.com> X-Mailer: git-send-email 2.9.3 X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.20 Precedence: list List-Id: "Security-Enhanced Linux \(SELinux\) mailing list" List-Post: List-Help: MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP This fixes the following bug: UX regression: setfiles progress indicator is now misleading and confusing in fixfiles. The outputting of * is replaced by the number of files in 1k increments as the previous versions. If "/" is specified on the pathname, then this will indicate a mass relabel, an example output will be: restorecon -nRp /etc /tmp /boot / /etc 100.0% /tmp 100.0% /boot 100.0% 3.2% Also setfiles(8) and restorecon(8) versions that are implemented using the selinux_restorecon(3) function do not support the [-o filename] option as this was deprecated. This has now been made clear by displaying a message to stderr. The documentation has also been updated to reflect these changes. Reported-by: Alan Jenkins Signed-off-by: Richard Haines --- libselinux/include/selinux/restorecon.h | 11 +++++++--- libselinux/man/man3/selinux_restorecon.3 | 12 +++++++++-- libselinux/src/selinux_restorecon.c | 37 ++++++++------------------------ policycoreutils/setfiles/.gitignore | 1 - policycoreutils/setfiles/Makefile | 7 ++---- policycoreutils/setfiles/restore.c | 3 ++- policycoreutils/setfiles/restore.h | 9 +------- policycoreutils/setfiles/restorecon.8 | 4 ++-- policycoreutils/setfiles/setfiles.8 | 6 +++--- policycoreutils/setfiles/setfiles.c | 27 +++++++---------------- 10 files changed, 45 insertions(+), 72 deletions(-) diff --git a/libselinux/include/selinux/restorecon.h b/libselinux/include/selinux/restorecon.h index 7cfdee1..de694cd 100644 --- a/libselinux/include/selinux/restorecon.h +++ b/libselinux/include/selinux/restorecon.h @@ -50,9 +50,9 @@ extern int selinux_restorecon(const char *pathname, */ #define SELINUX_RESTORECON_VERBOSE 0x0010 /* - * Show progress by printing * to stdout every 1000 files, unless - * relabeling the entire OS, that will then show the approximate - * percentage complete. + * If SELINUX_RESTORECON_PROGRESS is true and + * SELINUX_RESTORECON_MASS_RELABEL is true, then output approx % complete, + * else output the number of files in 1k blocks processed to stdout. */ #define SELINUX_RESTORECON_PROGRESS 0x0020 /* @@ -91,6 +91,11 @@ extern int selinux_restorecon(const char *pathname, * mounts to be excluded from relabeling checks. */ #define SELINUX_RESTORECON_IGNORE_MOUNTS 0x2000 +/* + * Set if there is a mass relabel required. + * See SELINUX_RESTORECON_PROGRESS flag for details. + */ +#define SELINUX_RESTORECON_MASS_RELABEL 0x4000 /** * selinux_restorecon_set_sehandle - Set the global fc handle. diff --git a/libselinux/man/man3/selinux_restorecon.3 b/libselinux/man/man3/selinux_restorecon.3 index d698818..1eac6ed 100644 --- a/libselinux/man/man3/selinux_restorecon.3 +++ b/libselinux/man/man3/selinux_restorecon.3 @@ -88,8 +88,16 @@ will take precedence. .RE .sp .B SELINUX_RESTORECON_PROGRESS -show progress by printing * to stdout every 1000 files unless relabeling the -entire OS, that will then show the approximate percentage complete. +show progress by outputting the number of files in 1k blocks processed +to stdout. If the +.B SELINUX_RESTORECON_MASS_RELABEL +flag is also set then the approximate percentage complete will be shown. +.sp +.B SELINUX_RESTORECON_MASS_RELABEL +generally set when relabeling the entire OS, that will then show the +approximate percentage complete. The +.B SELINUX_RESTORECON_PROGRESS +flag must also be set. .sp .B SELINUX_RESTORECON_REALPATH convert passed-in diff --git a/libselinux/src/selinux_restorecon.c b/libselinux/src/selinux_restorecon.c index 38acbd2..9fdafea 100644 --- a/libselinux/src/selinux_restorecon.c +++ b/libselinux/src/selinux_restorecon.c @@ -41,7 +41,7 @@ #define SYS_PATH "/sys" #define SYS_PREFIX SYS_PATH "/" -#define STAR_COUNT 1000 +#define STAR_COUNT 1024 static struct selabel_handle *fc_sehandle = NULL; static unsigned char *fc_digest = NULL; @@ -68,18 +68,12 @@ static uint64_t efile_count; /* Estimated total number of files */ struct dir_xattr *dir_xattr_list; static struct dir_xattr *dir_xattr_last; -/* - * If SELINUX_RESTORECON_PROGRESS is set and mass_relabel = true, then - * output approx % complete, else output * for every STAR_COUNT files - * processed to stdout. - */ -static bool mass_relabel; - /* restorecon_flags for passing to restorecon_sb() */ struct rest_flags { bool nochange; bool verbose; bool progress; + bool mass_relabel; bool set_specctx; bool add_assoc; bool ignore_digest; @@ -631,14 +625,14 @@ static int restorecon_sb(const char *pathname, const struct stat *sb, if (flags->progress) { fc_count++; if (fc_count % STAR_COUNT == 0) { - if (mass_relabel && efile_count > 0) { + if (flags->mass_relabel && efile_count > 0) { pc = (fc_count < efile_count) ? (100.0 * fc_count / efile_count) : 100; fprintf(stdout, "\r%-.1f%%", (double)pc); } else { - fprintf(stdout, "*"); + fprintf(stdout, "\r%luk", fc_count / STAR_COUNT); } - fflush(stdout); + fflush(stdout); } } @@ -750,6 +744,8 @@ int selinux_restorecon(const char *pathname_orig, SELINUX_RESTORECON_VERBOSE) ? true : false; flags.progress = (restorecon_flags & SELINUX_RESTORECON_PROGRESS) ? true : false; + flags.mass_relabel = (restorecon_flags & + SELINUX_RESTORECON_MASS_RELABEL) ? true : false; flags.recurse = (restorecon_flags & SELINUX_RESTORECON_RECURSE) ? true : false; flags.set_specctx = (restorecon_flags & @@ -904,17 +900,6 @@ int selinux_restorecon(const char *pathname_orig, } } - mass_relabel = false; - if (!strcmp(pathname, "/")) { - mass_relabel = true; - if (flags.set_xdev && flags.progress) - /* - * Need to recalculate to get accurate % complete - * as only root device id will be processed. - */ - efile_count = file_system_count(pathname); - } - if (flags.set_xdev) fts_flags = FTS_PHYSICAL | FTS_NOCHDIR | FTS_XDEV; else @@ -1009,12 +994,8 @@ int selinux_restorecon(const char *pathname_orig, } out: - if (flags.progress) { - if (mass_relabel) - fprintf(stdout, "\r100.0%%\n"); - else - fprintf(stdout, "\n"); - } + if (flags.progress && flags.mass_relabel) + fprintf(stdout, "\r%s 100.0%%\n", pathname); sverrno = errno; (void) fts_close(fts); diff --git a/policycoreutils/setfiles/.gitignore b/policycoreutils/setfiles/.gitignore index 583eb6c..5e899c9 100644 --- a/policycoreutils/setfiles/.gitignore +++ b/policycoreutils/setfiles/.gitignore @@ -1,2 +1 @@ -restorecon.8.man setfiles.8.man diff --git a/policycoreutils/setfiles/Makefile b/policycoreutils/setfiles/Makefile index 43364f9..92300c9 100644 --- a/policycoreutils/setfiles/Makefile +++ b/policycoreutils/setfiles/Makefile @@ -5,7 +5,6 @@ MANDIR = $(PREFIX)/share/man LIBDIR ?= $(PREFIX)/lib AUDITH = $(shell ls /usr/include/libaudit.h 2>/dev/null) -PROGRESS_STEP=$(shell grep "^\#define STAR_COUNT" restore.h | awk -S '{ print $$3 }') ABORT_ON_ERRORS=$(shell grep "^\#define ABORT_ON_ERRORS" setfiles.c | awk -S '{ print $$3 }') CFLAGS ?= -g -Werror -Wall -W @@ -28,8 +27,6 @@ restorecon_xattr: restorecon_xattr.o restore.o man: @cp -af setfiles.8 setfiles.8.man - @cp -af restorecon.8 restorecon.8.man - @sed -i "s/STAR_COUNT/$(PROGRESS_STEP)/g" setfiles.8.man restorecon.8.man @sed -i "s/ABORT_ON_ERRORS/$(ABORT_ON_ERRORS)/g" setfiles.8.man install: all @@ -39,11 +36,11 @@ install: all (cd $(SBINDIR) && ln -sf setfiles restorecon) install -m 755 restorecon_xattr $(SBINDIR) install -m 644 setfiles.8.man $(MANDIR)/man8/setfiles.8 - install -m 644 restorecon.8.man $(MANDIR)/man8/restorecon.8 + install -m 644 restorecon.8 $(MANDIR)/man8/restorecon.8 install -m 644 restorecon_xattr.8 $(MANDIR)/man8/restorecon_xattr.8 clean: - rm -f setfiles restorecon restorecon_xattr *.o setfiles.8.man restorecon.8.man + rm -f setfiles restorecon restorecon_xattr *.o setfiles.8.man indent: ../../scripts/Lindent $(wildcard *.[ch]) diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c index cf04e96..50d192a 100644 --- a/policycoreutils/setfiles/restore.c +++ b/policycoreutils/setfiles/restore.c @@ -35,7 +35,8 @@ void restore_init(struct restore_opts *opts) r_opts->recurse | r_opts->userealpath | r_opts->xdev | r_opts->abort_on_error | r_opts->syslog_changes | r_opts->log_matches | - r_opts->ignore_noent | r_opts->ignore_mounts; + r_opts->ignore_noent | r_opts->ignore_mounts | + r_opts->mass_relabel; /* Use setfiles, restorecon and restorecond own handles */ selinux_restorecon_set_sehandle(r_opts->hnd); diff --git a/policycoreutils/setfiles/restore.h b/policycoreutils/setfiles/restore.h index 97fbdf4..b64042a 100644 --- a/policycoreutils/setfiles/restore.h +++ b/policycoreutils/setfiles/restore.h @@ -17,18 +17,12 @@ #include #include -/* - * STAR_COUNT is also defined in libselinux/src/selinux_restorecon.c where it - * is used to output "*" for each number of files processed. Defined here for - * inclusion in man pages. -*/ -#define STAR_COUNT 1000 - /* Things that need to be init'd */ struct restore_opts { unsigned int nochange; unsigned int verbose; unsigned int progress; + unsigned int mass_relabel; unsigned int set_specctx; unsigned int add_assoc; unsigned int ignore_digest; @@ -49,7 +43,6 @@ struct restore_opts { const char *selabel_opt_path; const char *selabel_opt_digest; int debug; - FILE *outfile; }; void restore_init(struct restore_opts *opts); diff --git a/policycoreutils/setfiles/restorecon.8 b/policycoreutils/setfiles/restorecon.8 index bd27113..0f81db4 100644 --- a/policycoreutils/setfiles/restorecon.8 +++ b/policycoreutils/setfiles/restorecon.8 @@ -115,10 +115,10 @@ don't change any file labels (passive check). To display the files whose labels .BR \-v . .TP .BI \-o \ outfilename -Deprecated, SELinux policy will probably block this access. Use shell redirection to save list of files with incorrect context in filename. +Deprecated - This option is no longer supported. .TP .B \-p -show progress by printing * every STAR_COUNT files unless relabeling the entire +show progress by printing the number of files in 1k blocks unless relabeling the entire OS, that will then show the approximate percentage complete. Note that the .B \-p and diff --git a/policycoreutils/setfiles/setfiles.8 b/policycoreutils/setfiles/setfiles.8 index 6901e13..9501845 100644 --- a/policycoreutils/setfiles/setfiles.8 +++ b/policycoreutils/setfiles/setfiles.8 @@ -106,11 +106,11 @@ seclabel fs mounted on a directory below this. .B \-n don't change any file labels (passive check). .TP -.BI \-o \ filename -Deprecated, SELinux policy will probably block this access. Use shell redirection to save list of files with incorrect context in filename. +.BI \-o \ outfilename +Deprecated - This option is no longer supported. .TP .B \-p -show progress by printing * every STAR_COUNT files unless relabeling the entire +show progress by printing the number of files in 1k blocks unless relabeling the entire OS, that will then show the approximate percentage complete. Note that the .B \-p and diff --git a/policycoreutils/setfiles/setfiles.c b/policycoreutils/setfiles/setfiles.c index d767131..e3df212 100644 --- a/policycoreutils/setfiles/setfiles.c +++ b/policycoreutils/setfiles/setfiles.c @@ -160,7 +160,7 @@ int main(int argc, char **argv) char *buf = NULL; size_t buf_len; const char *base; - int mass_relabel = 0, errors = 0; + int errors = 0; const char *ropts = "e:f:hiIDlmno:pqrsvFRW0"; const char *sopts = "c:de:f:hiIDlmno:pqr:svFR:W0"; const char *opts; @@ -318,19 +318,8 @@ int main(int argc, char **argv) r_opts.nochange = SELINUX_RESTORECON_NOCHANGE; break; case 'o': /* Deprecated */ - if (strcmp(optarg, "-") == 0) { - r_opts.outfile = stdout; - break; - } - - r_opts.outfile = fopen(optarg, "w"); - if (!r_opts.outfile) { - fprintf(stderr, "Error opening %s: %s\n", - optarg, strerror(errno)); - - usage(argv[0]); - } - __fsetlocking(r_opts.outfile, FSETLOCKING_BYCALLER); + fprintf(stderr, "%s: -o option no longer supported\n", + r_opts.progname); break; case 'q': /* Deprecated - Was only used to say whether print @@ -394,7 +383,7 @@ int main(int argc, char **argv) for (i = optind; i < argc; i++) { if (!strcmp(argv[i], "/")) - mass_relabel = 1; + r_opts.mass_relabel = SELINUX_RESTORECON_MASS_RELABEL; } cb.func_log = log_callback; @@ -466,7 +455,7 @@ int main(int argc, char **argv) while ((len = getdelim(&buf, &buf_len, delim, f)) > 0) { buf[len - 1] = 0; if (!strcmp(buf, "/")) - mass_relabel = 1; + r_opts.mass_relabel = SELINUX_RESTORECON_MASS_RELABEL; errors |= process_glob(buf, &r_opts) < 0; } if (strcmp(input_filename, "-") != 0) @@ -476,7 +465,7 @@ int main(int argc, char **argv) errors |= process_glob(argv[i], &r_opts) < 0; } - maybe_audit_mass_relabel(mass_relabel, errors); + maybe_audit_mass_relabel(r_opts.mass_relabel, errors); if (warn_no_match) selabel_stats(r_opts.hnd); @@ -484,8 +473,8 @@ int main(int argc, char **argv) selabel_close(r_opts.hnd); restore_finish(); - if (r_opts.outfile) - fclose(r_opts.outfile); + if (r_opts.progress) + fprintf(stdout, "\n"); exit(errors ? -1 : 0); }