From patchwork Sun May 7 11:05:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Jenkins X-Patchwork-Id: 9715239 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 2B076602BD for ; Sun, 7 May 2017 11:10:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1DFAC281B7 for ; Sun, 7 May 2017 11:10:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 114AD283CA; Sun, 7 May 2017 11:10:51 +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=-3.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from emsm-gh1-uea11.nsa.gov (emsm-gh1-uea11.nsa.gov [8.44.101.9]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BD6CE281B7 for ; Sun, 7 May 2017 11:10:48 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.38,304,1491264000"; d="scan'208";a="5541680" IronPort-PHdr: =?us-ascii?q?9a23=3AoOck9RcXp7bR5RTnXbQDcgNWlGMj4u6mDksu8pMi?= =?us-ascii?q?zoh2WeGdxcq4ZBON2/xhgRfzUJnB7Loc0qyN4v6mBzxLus3JmUtBWaQEbwUCh8?= =?us-ascii?q?QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6?= =?us-ascii?q?OPn+FJLMgMSrzeCy/IDYbxlViDanb75/KBS7oR/Qu8QVjodvJKg8wQbVr3VVfO?= =?us-ascii?q?hb2XlmLk+JkRbm4cew8p9j8yBOtP8k6sVNT6b0cbkmQLJBFDgpPHw768PttRnY?= =?us-ascii?q?UAuA/WAcXXkMkhpJGAfK8hf3VYrsvyTgt+p93C6aPdDqTb0xRD+v4btnRAPuhS?= =?us-ascii?q?waOTE56mXXgdFugqxdrhyquhhzz5fVbY2QMvd1Y6HTcs4ARWdZXshfSTFPDI2/?= =?us-ascii?q?YYUIDeUBM/5Yoovgq1YAsxS+HhKhCP/zxjJSmnP7x7E23/gnHArb3AIgBdUOsH?= =?us-ascii?q?HModjpMKcdS+a1x7TMwzrdafNW2jb96I7Tchs8pvyDR7ZwftDXyUU1CwzFjk+Q?= =?us-ascii?q?qY3+PzOJ0eQNq2ib4PR6Ve61iW4otQdxojuuxscqkYnEnY0VylXe+iV4xIY5P8?= =?us-ascii?q?G3SEl+YdO9FpZbqi+UN4xzQsw4QmFovj43y7MBuZ68eCgF1okoxxHBZPCddIiI?= =?us-ascii?q?+B3jWeCMKjl7nHJoYK+zihm9/ES6yuDwS9O43EhFoyZbiNXAq2gB2hjN5sSdV/?= =?us-ascii?q?dx412t1SiS2w3S8O1IP144mKrdJpU82LA/jIATvl7GHiLunUX2i7KZeVs89+iz?= =?us-ascii?q?7uTnfq3mppiBN49okg3+Mrohmsi4AekgLggBRXKb+eWh1L3450H5XLVLgeE2kq?= =?us-ascii?q?neqpzaI9gUprWlDANP14Yj6hK/Ay+n0NQeg3YHMEpIdA+IgoXmIV3DIO30Ae2h?= =?us-ascii?q?j1mjjjtn3e3KMqXkAprXL3jDlLnhfax6605Z0Acz1s5Q55ZVCrEHPfLyVVb9u8?= =?us-ascii?q?ffDh8kNQy73/joCM5m24MCWWOAHq+ZMKTIvV+O/eIgOfOAZIASuDbjM/Ql/eLh?= =?us-ascii?q?jWclmV8BeqmkxZkXaHe+Hvt8P0WZYWDjgtEaHGcIuQo+Sunqh0eZUT5PeXmyRb?= =?us-ascii?q?k86is8CIK8AofJXpqtj6CZ3CenAp1WYXhLClKOEXjya4qEWOwMaCWUIs9gjDwJ?= =?us-ascii?q?TrahS4s81RChrwD61rxnLvbJ+iECspLjztd17fXJlR4u7Tx0E9id02aVQmFsgG?= =?us-ascii?q?wHXCE53KZ+oUxhzVeOyql4jOJGGtNN/f9JVR06NZHExexgF9/yQh7BfsuOSFu+?= =?us-ascii?q?X9qmBjcxTtQszNAQZ0Z9Gs6vgQrd0CqwBL8ZjbuLBIY78qjExXj+O959y2ra1K?= =?us-ascii?q?kml1QpX9dPOne8hqNk6wfTAIvJnFmDmKaxaaQQxijN+3mfzWCWpkFXTBZwUbnZ?= =?us-ascii?q?XXAYfkbWrNL55l/cQL+qF7snNxVOydKYKqpKcdDpik1GS+nlONTbeW2xmmOwCg?= =?us-ascii?q?2PxrKDdobqfH8d3CrFAkgejw8T5WqGNRQ5Biq5o2PfDTtuFVT0bkPp9elysXK7?= =?us-ascii?q?TkkuwwGMdUJhzbm1+h8LhfOCUf8T2KwLuDs5oTVuAFm9x87WC8aHpwd5Yqpcec?= =?us-ascii?q?ky4E1G1WLCrAF9JoavL7pjhl4FawR3u1nh2AlpBYlalsgqtnwqxhJoKa2EyFNB?= =?us-ascii?q?ay+Y3ZfoN7zZK2ny+BWvZLDM2lzF3taZ5LoA6PMiq1r5pAGpDE0i83d53NZJz3?= =?us-ascii?q?uQ/JLKDBAdUZjpSEY46wB6p63GYik6/47U22dsPrOysjDe2tIpH/AoyhO4f9de?= =?us-ascii?q?Ka+EDwHzE9YAC8ipMuwqlECjbggYM+BK6K40I8SmeuOF2KGxP+Zgmy+mgH9E4I?= =?us-ascii?q?9n0UKM8Dd8RvTP35YfzPGSxhGHWCvkjFe9rsD3nphJaisPEWqlyCjrGpRRa7Zo?= =?us-ascii?q?cokXDGeiOcq3xs9xh5T1QX5X6EajB08a2M+uYRedc0by3QlO2kQMvXymmSy4wi?= =?us-ascii?q?dvkz41r6qQwirOw/jjdBUdIGJLQndtjUv0K4iuk98aRFSobxQulBa9/kb6ybJb?= =?us-ascii?q?pKNkL2nPWkpIZC72L2ZsU6u1rLWCZdRD6JU2viVLSO68e0yVSqbhoxsG1CPuB2?= =?us-ascii?q?Vfyyo/dzG2pJr5hQd6hXmDLHlttnrWYtxwxRLF6NzbX/5R0SIMRDNkhjnPGli8?= =?us-ascii?q?I96p8M2Il5jer+++VniuVplIfCb3yoOAsTe06ndxAR2jhfyznMPoERQi2y/hy9?= =?us-ascii?q?ZqTTnIrAr7YoTzyaS6MP5oflVvBF/m8cZ1BoF+kow2hJEfwnUagpSV/Xwdnmfp?= =?us-ascii?q?NtVXw6X+bGACRTQT2d7a/BDl2FF/LnKO34/5UnSdwtB9Z9WjeWMZxCY978FMCK?= =?us-ascii?q?eJ471JhjB1okK5rQLXYPhygiwdxeEo6HEEn+EDoBAtwTmFArAOAUlYOjThlw6P?= =?us-ascii?q?79C6qKVYenyvfqS31Etwht2hF6yCrR1HWHrjfZciByBw5N1lMF3QyH3z9p3keN?= =?us-ascii?q?7IYNILrBKUjhPAg/JPJ54rjfUKgi5nOX76vX0j0OM7iABi3Ze9vIebMWlt+ry2?= =?us-ascii?q?AgJAPD3ve8wT4i3tjbpZnsuO3ICgAJNhGi4QUZvrU/2oFikStfL5OAaSCjE8rW?= =?us-ascii?q?2bGbXHFw+F9Ehmt27PE4ysN3yPPHkW18hiRB2DK0xHmg8UWik6kYAjFg2x2czh?= =?us-ascii?q?a1l25ioK5lLisRtMzf9oNwPjXWjBqgeobS00SJeBIxZM6AFN+VvVO9SE7u1vBy?= =?us-ascii?q?FY4oGhrAuVJ2yFYQRHEHoEWlKCB1/+Prmi/9/A/PaEBuCmNfvBfa2OqfBCV/eP?= =?us-ascii?q?3Z+vypFp/yuINsiUInZiDuE720paUXB3AcvZnS8DSysNlyLCd8Sbvguz+jVrrs?= =?us-ascii?q?Cj9/TmQAHv5IuLC7RMKthv/he2gamNN+GOmCZ5NTZY1pQJxXDW0rQf2kAdiz12?= =?us-ascii?q?fTm3DbsArTLNTL7XmqJPAR4UcSVzNNdP76I5xQRNN9DUhc7y1r5ilPE1E01FVV?= =?us-ascii?q?vjms63ecMKP3uxNFTdBEaELL6GPyHEw9nrYaOgTr1dlP9Uuwe+uDqBFk/sJDCD?= =?us-ascii?q?lz7pVh20K+5DkCSbMAZZuIGnfRZnEXLjQ87+ah2nLN93iiU7wbMuhnzUKGEcKi?= =?us-ascii?q?Jzc0VRrr2X9iNVme9wFHBE7nZ/KumEgSmZ5fHCKpkKqftrHjh0l+VC7XQ80bta?= =?us-ascii?q?9jlERORulSvcr95uuUqmkvWByjpmVhpBsDBLi56KvUp4PaXV7J5AWWzL/BgV92?= =?us-ascii?q?WfFwwKp8d5Ct3oo61f0cPAmKX3KDdD6NLU4dAcC9LPKM2ZLHUtKwHpFyDQDAsE?= =?us-ascii?q?Sz6rKG7eildBn/CS7H2Vs4M6poLimZUUVr9bT1s1FvUABkRiBtwCL499Xik4nr?= =?us-ascii?q?6DkM4I+X2+oQHXRMVbupDHUuydAe70JTmDk7ZEfRwIzan/LYQJOY3xw1ZiZUVi?= =?us-ascii?q?nITWB0rQWshArTZgbg87p0VN9mNzQXAt1E3+awOi+nkTGeSznh4shQt0ef4t+y?= =?us-ascii?q?v041crOlrKozM9n1M+mdr/nzCebiX8LKCoXY5IDSr0slI+MpL/Qwluag2zklZo?= =?us-ascii?q?NDDeR7Jel7Fgb3xkiBfAuZtTHv5RVbFEYBgVxf2NffUo1lVdpTuhxUBc/+vFDo?= =?us-ascii?q?VtlAgxfJGwqHJA3h5sY8QuJazMPqZJyEZfhr6WtC+yyu8x2BMeJ1oK8G6Kfi4H?= =?us-ascii?q?plYHNr09Kiqr+exs8hCClCFFeGgXVPoqo+hm9kUjNOSc1yjgyaJMKlitN+yDKK?= =?us-ascii?q?OUo3LAmtCTQlwuzEwIjVVK/bht3Mg4ckqUTV0gzLyfFxQRL8rNNwFUY9BU9HfN?= =?us-ascii?q?YSaEqf/Nzo5tP4WhCuDoSveDu7sOjUK6HQYmAp8M498bEZm2ykHYKsnmLKUbxh?= =?us-ascii?q?ox+QTrPlSFDOhJeR6RljcIvd2/xodt3YZBPjEdHXl9MSKv67nKvQ8lnuCMXNgs?= =?us-ascii?q?YngAQIsJLWk2V9e5my5EpXRPFiO70uYEyAiE9TD8vD3cDCX7b9pgZPaUYglgCN?= =?us-ascii?q?eo9jUj66K2k0LY8o3CJ2HmMtRvotvP6eQAp5mZDfNVTL59vlzTm4leWnymSWnP?= =?us-ascii?q?EcS6J5LocYkjccT0CmqmUly4kz81VNn+PNKsLqiOnAHpSp1Zv5Wc3DAmKcCyDC?= =?us-ascii?q?oeGwtqq+EF+q18eRUJY4Anbh7wqwQ+K6u/LR+F3dqyRmatLj1WT+VCweihebxY?= =?us-ascii?q?0TAsbu67yXsnSJE21e+3/lARRJsSlBHR2e6jZ5VCUSj0AnFdeB/PpCojmGhnKu?= =?us-ascii?q?YywvwywBzPsVkELz+HbuppZ3JYv9skH1OdPW12CnYkR1+blYfD/g+s37UV/ytB?= =?us-ascii?q?n9ZV0fZIv2X/vp7fej2jQ7anqZPLvCo8ddImubF+MZT/Isuas5PThjPfTIPKvQ?= =?us-ascii?q?2DTC63DPtamt9eISJeXPlImX8qOc0AuYpd90UxTN0yJ7pRB6kwvrqqcyZrDTYO?= =?us-ascii?q?zS8FUIONxCYNguO927TGiBifaJEiMRwCsJVFhNsSSTV7bTgfpKC5UYXajmGESn?= =?us-ascii?q?URLAcV8wtM+BoKlpVsceD9/IrIUJhMxiZNrP1qVCvGDYNn+EblSm6Im1j4U++u?= =?us-ascii?q?k/ap3A5Iy/LsyNYbUgZlCUdB3+ZWilcoKLZvJqkKuI7KsyOHdUP9vGLp0+uoPE?= =?us-ascii?q?Bfx9DOeVDkC4TIrnbzUioZ+XIIX4BP023fGY4UkwVndKYhvE9ML5y+ekbi+zwk?= =?us-ascii?q?wJxkEKW6Vc+x21kotmoJRyCuE9pFCuFprkjXWCF7bJ+3qJXpIZJSQnVf+JeFsV?= =?us-ascii?q?dWjF1tMzKlyZpbM8xN+CQDXCJIoTqGp9ayVNdD1tVoD5ASJtd/unH9GKxAOJiQ?= =?us-ascii?q?rH02uqDvynHD9DAmtVe23jOzFLGkT+hB5W0RBh0pJ3iCqkkoF+Yt/H3e/UzNsl?= =?us-ascii?q?B1+udbB6KAjUZqrTZ8AJ9BGChG2WqiL1RpQ3lMq/9aJ7jNc8xAX/kyYgeiOwQ5?= =?us-ascii?q?Ff4ixUOJ5091nXD9Yyx8rQZa/ifdXw4vVSYLnrjtgzoeqtq8OT8bTZJIYi8tby?= =?us-ascii?q?DfKwKUgSpXpgpQa1l2W5AFBdZI46sU3ZFJ/srEU0qsKjoIXB1jNgI5zfpQjlRP?= =?us-ascii?q?sEOGdiDBFQCob+rAsgVrfceNq86kNOj5/ABCio78rOA066ADSGa8lQ2rX9/es5?= =?us-ascii?q?f2tseWuUuWaKf4L+q8bGfBTDfWlxC/n7MkAITR8ifOLgVbM4F6xmQgYZf/E27H?= =?us-ascii?q?JxNGJ7gUJ0BDT6B1dc1GovxGZ89jYKsJ+6htCQycSxzyBoOvt+dJLkzPRTvAMi?= =?us-ascii?q?qN6Oq/rpzP7bbFU+jvetSMx2rbQ6JwJpp18jf7FKv23YJc50b71Oxg+V99SVjD?= =?us-ascii?q?Ly+Ots/hJh8R6MmkaETiooUjHSnKD5dojHrt2kZAetINQyK07ZsYyIlW6GrrRO?= =?us-ascii?q?J81UjzrvNd+6d45okw/r9m1924JaHMJvRGqUVnGASbBh129pUxB2hyX3hRYvQN?= =?us-ascii?q?KPjLYKsZkdvjq/vwF6wK8h2a5/JWad3bJ0HbgMa/DiuQSRtenAcOsTQaNBeT1+?= =?us-ascii?q?aZm69oTsaovfT52lgz7FegMxEL161t5YOY+qqSvuDXcRrRzb8AWqf0WsP/tLMs?= =?us-ascii?q?u1md5fc8jr4BZnR1YxG7EOgaTsMdw33vzaQuzS0yD8PDA6jv9+RYWnI/gD3gh4?= =?us-ascii?q?t9EEkMFfMMA7WH54JekXkkm+bBLN0ZbrhCmnqTFR6jCrICy2Sk6zGQIGl+hhHB?= =?us-ascii?q?yQ/wTHi27F/rqS94XSrMwMvikkVPULm3Hl1eXy2zOU93qDmPJhbntMLruaQp60?= =?us-ascii?q?E7Km7ku8iLlGuvIrNXGNDwK8KHLCkovl0XioYxRtu11YAdB9W9PM8b8GtiYfvG?= =?us-ascii?q?92OrjyhBrr9Ih4rD48GV/vHXEmelj6CBtrqC2itXynkislE58NygMevO59KSSf?= =?us-ascii?q?Syy2kRVzt/uxfGXxOtrLzbq0sZOU2N0EfOgoAKP9dZ3Xci1k78/+gjXMgz9BhC?= =?us-ascii?q?GYbcevMCvy78NCHzwVaFbNI9TjOe3CdPHlLpDVl4H7Ax2Gf3vMLPiXfQ9EMnS5?= =?us-ascii?q?J1d0zmnxN3CZs3KV4j6VgQ2CoDEhMNZQqdDL62GUTvNZEEWlQbaRSbwLi6fb86?= =?us-ascii?q?3Vduzbyy/+LTYul8BqUXOvZbkAGOgEBRGogKvq0GXLJ8Z1hd+bbTpgj5DojqX+?= =?us-ascii?q?PrlXQuOvKoRcBa69oWt2M44ga4RRqv94tM76oBhJCPbK5EboDGvNpg4Ed/+T4P?= =?us-ascii?q?aitNjQBkjxyjT+ATvu/j7cbAsJez8eahTrgtSP8Y9xcqHGRylZ3wj04/odvPze?= =?us-ascii?q?dTVpXViZjj8ABKO3OKuofa0xxnJOoLNY2qfKhv928GJygYKHICJ9yWZOcg4yV1?= =?us-ascii?q?KjXc+0RCAt8QZdMfJMfNmAFVhVfzV75P7cfbAUGXC5tteM809Wb3zyo18ZQkWO?= =?us-ascii?q?b69DC2PYzf701KP/5blypslcnCpeYPzvrQCSgX/WGZZAJowiOG0JSCF/Hw8viS?= =?us-ascii?q?x97OSlMGBCk2U51HKzaY/gynXOW1no3zUgyI8s/znI4+dEWIS3yphqsFrrpDEe?= =?us-ascii?q?5OiyX8xDheFZn5h+mLvNqo6WtXsEBHEYlo4B3dAqpfIol0ORT2l8msXEh8BTHz?= =?us-ascii?q?eMLKeRo0vuqZ2OMM7/95N0vkao8ROggExK7i6XpJUgtuT6b7vkqDXe0PYNtpUv?= =?us-ascii?q?XEoW5O5I19Kq8PM1mdpIDwoTdTsl82GhIpZKU2rjNEaknEhBdVVLrsuL4clgsc?= =?us-ascii?q?VsZ0uUBWFmKqJm0++zrHWL9RjKmQFPwa7DWTQbYTU0VzKC9+RQ262Il2cbuzgf?= =?us-ascii?q?9Hqn9Gnj96oPUy3DxpWh28uTHrp6IK3j4g46+3tDEAuXxDU+WfnDzFCVFdw/QQ?= =?us-ascii?q?jaYTEWzu6Vqib3kfdIHy+qVoJdz89Yk95HQyeRMjfywaUuSnDyH/lbiIDpaOsN?= =?us-ascii?q?Jbgx6No97OYKS2LSUdObUx0xXjR2Jy0gLGhhZn7HMLQim87N8jPIi9NtoqxjGz?= =?us-ascii?q?GWTCaVgC7aVHsMr3tV4WQ+o7clxhwGB53ciBWCIBXsvPG3w6jgI8c2VLbIpD6Q?= =?us-ascii?q?MGF6kvmjuIvK5G/gESYDvODoul+o3QndrV1ng8TNdqwHnWpq6Ehp4xzn1lms10?= =?us-ascii?q?4TSKuHsPduzUSclsDWbv1o1H0+zxe+2tsvwbSIth0LmhUeECPdOl+Wat3JVqR1?= =?us-ascii?q?KqxrUZH1qiKuMDwa3bUyi9Q22CReuLa3SMnyo+MkPq5xmnMFM3aMlOr0ImPOrN?= =?us-ascii?q?nJhcmBP9Ub9uQCWfu0PbxnQ5MewGbwI2pJunewsSQe4eY+icIuYvz+M6CFsIdH?= =?us-ascii?q?LJBix2C+m3sVGxhoR7PWtv4Vnia+T37g/mKMeSGgUDEYPCrJ5x+fy7RnqGOX9k?= =?us-ascii?q?zR1yIFd7+vzaF1Qwqu9caYiekcLXh9Rh3u4Pb+1tPjElut4PhoJj7pGZ0NuLcR?= =?us-ascii?q?HU1ZvyOdDVreSbA/LBy0QmYGdaXaQFYQnt/YU1IsY5W6HPHbtepRkcAKk6QJ8i?= =?us-ascii?q?N2f276x0Lhl8cg3WZLSynMbqoPiHZp1KqH/K9lgwNjvTuwUfyvyoSgx2d4uliG?= =?us-ascii?q?v0IJAsXT9BtNltChx6HItTBcMPsReoD4STmKGhhN+741l6tPMSsarsFvDK08y0?= =?us-ascii?q?34tvUJhe5EyLJCjeCbJqg0Rki+Syh+nP0oP1Ccz8Y98EU/J7QmHdYL/cAoq/Mi?= =?us-ascii?q?6OOt77e0Ne/b+cyKh5UhSNay/nRKeGsSykNOl+4Uol0IB4e/DTzDM15bHBxNTy?= =?us-ascii?q?f31bpjukrXORM5tf6ELFCPfGXxJQU/WF63plHawLYovo7ucBL8ItzMKa4wZt8D?= =?us-ascii?q?RIyNGFLLS5rk/QxkJ7corWLE/o2yY/RIkLLw2zMU8tgW/CtnTdGm9RLsm+Jslr?= =?us-ascii?q?h9aZFBvt51N+mWs1fG5OBnLoRcuNOWgcw8++fxOF9AZKD9YFgu62dkk0uKKuSe?= =?us-ascii?q?loJJpFg/ultK0dnttyKCHAWtJaPyfOI79yJTVRE+rPqEIvYh4evLg/Qp01aoSW?= =?us-ascii?q?IEMbLEeAzjv/zQ7Y3kLod9ys1aCJICEN/3VZzrLF1yZDpw24ufafn83iX6rVbJ?= =?us-ascii?q?bsXP7dKCAlTC2VRSwuEUa1/lepo/gEs+CbIWcYuV8ZeT+SCAgPpqBvqtjQE2DT?= =?us-ascii?q?me1/fJEQgvCVRTzwQjVilKUuHiZLqVyMQ/0bGAnZdXDum3BcuA28Kf9I5n/lcb?= =?us-ascii?q?mYybBOW+wXH4tAaPuZTMXEefpGPTcnii0ZOPqgf93bt7s50FfITWwDE6nS9V2e?= =?us-ascii?q?V1WbQvqGyDLuQ4oVvpI4ui0y+tLfhiV3CbjHP66Dpz6y9Y61lD2YuePbVmYxYk?= =?us-ascii?q?E4g/kPAHefzxlaKWEFCtYVuEf3Tq6GeUlMyCFhteU7wBIIeQJuQlVyw3ZWm7C7?= =?us-ascii?q?AcQfRlkK3020R/hTRVR+CnsS8EmJ4wvpKYgJvcnVAWRe7LoXVY0FLPQyrovaPq?= =?us-ascii?q?gRxu0B0zdvoSh8uCKYWQAOxjmZ+rbdSfovjoZJ4nM1qrQoUw=3D=3D?= X-IPAS-Result: =?us-ascii?q?A2GxBABC/w5Z/wHyM5BcHAEBBAEBCgEBFgEBAQMBAQEJAQE?= =?us-ascii?q?BgwEpKDqBDI5zjyQNAQEBBQGBBR2JFoQSiho/JQeCRogBVwEBAQEBAQEBAgECa?= =?us-ascii?q?CiCMyINRikDAQEBAQEBAQEBIwEBAQEBAQEBAQEfAg0eJQEBGQYBAj0BGx0BAgE?= =?us-ascii?q?CCQEBBRACMQgDAR8RAQUBHB6IUIEyAQMIDQQKolM/jgwFARwmAoJiBYNIChknD?= =?us-ascii?q?VaCWAELHgIGEoQ9gUqCWo0SHwWJQhGII4s1Tocci28NglmIGieGUpJ2M4EVWIE?= =?us-ascii?q?KLyAhdIRMgg91iTMBAQE?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 07 May 2017 11:10:47 +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 v47BAj6B023781; Sun, 7 May 2017 07:10:47 -0400 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 v47B73KP112829 for ; Sun, 7 May 2017 07:07:03 -0400 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 v47B71HT022944 for ; Sun, 7 May 2017 07:07:02 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1B5AwCf/w5ZhsKAVdFcHAEBBAEBCgEBgyyBC4EMjnOPNAaBBYkzhBKKXSiCRoM2AoRJVwECAQEBAQECEwEBAQgLCwgohUUDA0ABGx0BAwwGEDsjEQEFARyIboEyAQMIDQQKolQ/jgwFARyDCgWDSAoZJw1WglgBAQEBAQEEAgEdAgYJAQiEPYFKglqNEh8FiUIRiCOLNU6HHItvDYJZiBqGeZJ2M4EVgWEvICF0hEwfgXB1iTMBAQE X-IPAS-Result: A1B5AwCf/w5ZhsKAVdFcHAEBBAEBCgEBgyyBC4EMjnOPNAaBBYkzhBKKXSiCRoM2AoRJVwECAQEBAQECEwEBAQgLCwgohUUDA0ABGx0BAwwGEDsjEQEFARyIboEyAQMIDQQKolQ/jgwFARyDCgWDSAoZJw1WglgBAQEBAQEEAgEdAgYJAQiEPYFKglqNEh8FiUIRiCOLNU6HHItvDYJZiBqGeZJ2M4EVgWEvICF0hEwfgXB1iTMBAQE X-IronPort-AV: E=Sophos;i="5.38,304,1491278400"; d="scan'208";a="6043158" Received: from emsm-gh1-uea11.corp.nsa.gov (HELO emsm-gh1-uea11.nsa.gov) ([10.208.41.37]) by goalie.tycho.ncsc.mil with ESMTP; 07 May 2017 07:06:46 -0400 IronPort-PHdr: =?us-ascii?q?9a23=3AVwtRjxxDnAK4Z9zXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?2+4QIJqq85mqBkHD//Il1AaPBtSFrawUwLGN+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZPebgFJiTanYL5/Lxq6oAvfu8ILnYZsN6E9xwfTrHBVYe?= =?us-ascii?q?pW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbf?= =?us-ascii?q?VwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8qFmQwLqhi?= =?us-ascii?q?gaLT406GHZhNJtgqxVoxyvoB5ww4DPbY2JKPZzZL/RcMkGSWZdWMtaSixPApm7?= =?us-ascii?q?b4sKF+cMIeJYoJP7p1ATqRWxGw+sBODuyj9OnX/9wKo33P4lEQ7c2gwsBc4BsH?= =?us-ascii?q?TOrNX0L6cSTee1zLHIzTrddfNawzX955bOchAioPGMW6lwfNHeyUkqDQzFj1GQ?= =?us-ascii?q?pZb5MDOS0+QAqm6W5PduW+Kojm4osQBxoj63y8YijYnJgYYVxU7Z+iV23ok5P9?= =?us-ascii?q?q4SFR0YdOiDZBetDmaOpNoTs8+R2xkoiU3x70ctZKmYiQHy44rywPbZvGIa4SF?= =?us-ascii?q?5gzvWPyMLTtlnn5pZq+ziheo/US+1OHxVs+520tQoCVfiNnDrHUN2gTT6seZTv?= =?us-ascii?q?t9+V+s2TOV2ADS7uFIOE41lbDHJ5I4zL48i54evEvZEi/5n0X2i6CWdkE69eSy?= =?us-ascii?q?9+vnZbDmqoedN49ylA7+LrwjltKjDek8KAQDXGiW9f6h2LH9/kD1WqhGg/k5n6?= =?us-ascii?q?XBtZDVP8Ubpqq3Aw9P1YYj7g6yAC2i0NsCm3kLNk5KeBKdj4joIFHOPPf4De+/?= =?us-ascii?q?g1uyijdn3fLGMaPnApXOL3jDlqzhcK1y605Z0gUzzNRf64hIBbEGJfL/QlXxu8?= =?us-ascii?q?DADh8lLwy0xP7qCM5j2YMaWGKPBLKZMazJvF+U5uMgP+mMZIgPtDb7MPgq/eTi?= =?us-ascii?q?jXA+mV8DLuGV2s4MZXS5GOl2C1mIanrrxNEaGCEFuRRtYvbtjQirVTdVL1S/Wa?= =?us-ascii?q?E94CpzXIuiBIGFTYC3gaed2z+7E4cQZG1ACVGKCl/ncoyFX7EHbyfEcZwpqSAN?= =?us-ascii?q?SbX0E9xp7hqprgKvk7c=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0GfAQBC/w5ZhsKAVdFcHQEFAQsBFwEBB?= =?us-ascii?q?AEBCgEBgwGBC4EMjnOPMgEBBoEFiTOEEooaQyiCRoM2AoRJVwEBAQEBAQEBAgE?= =?us-ascii?q?CEAEBAQgLCwgoL4IzIA9GKQMBAQEBAQEBAQEjAQEBAQEBAQEBAR8CDR4lAQEZA?= =?us-ascii?q?wNAARsdAQMMBhA7IxEBBQEciG6BMgEDCA0ECqJTP44MBQEcgwoFg0gKGScNVoJ?= =?us-ascii?q?YAQEBAQEBBAEBAQEBGwIGCQEIhD2BSoJaihgMgm4fBYlCEYgjizVOhxyLbw2CW?= =?us-ascii?q?YgahnmSdjOBFYFiLyAhdIRMH4FwdYkzAQEB?= X-IPAS-Result: =?us-ascii?q?A0GfAQBC/w5ZhsKAVdFcHQEFAQsBFwEBBAEBCgEBgwGBC4E?= =?us-ascii?q?MjnOPMgEBBoEFiTOEEooaQyiCRoM2AoRJVwEBAQEBAQEBAgECEAEBAQgLCwgoL?= =?us-ascii?q?4IzIA9GKQMBAQEBAQEBAQEjAQEBAQEBAQEBAR8CDR4lAQEZAwNAARsdAQMMBhA?= =?us-ascii?q?7IxEBBQEciG6BMgEDCA0ECqJTP44MBQEcgwoFg0gKGScNVoJYAQEBAQEBBAEBA?= =?us-ascii?q?QEBGwIGCQEIhD2BSoJaihgMgm4fBYlCEYgjizVOhxyLbw2CWYgahnmSdjOBFYF?= =?us-ascii?q?iLyAhdIRMH4FwdYkzAQEB?= X-IronPort-AV: E=Sophos;i="5.38,304,1491264000"; d="scan'208";a="5541622" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from mail-wr0-f194.google.com ([209.85.128.194]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/AES128-GCM-SHA256; 07 May 2017 11:06:45 +0000 Received: by mail-wr0-f194.google.com with SMTP id v42so4753444wrc.3 for ; Sun, 07 May 2017 04:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=X2zr7j+r/qk8+m/iJE8wZUPkSQqUaYesjtN9C6b4jqE=; b=GWX/MRwnKbUSlm7Ryfhe+Rda92m52vjid18VSDBu2Po1jiw/dpwD5sYW4wXukI8Ns+ IYo5zfkB21xiz5OUp6SdWATq4Zb7XxFtyteAVfbfNWMaapqFESQMVJi+qtuqArA/X1Iq 2QHFGvMRN/CIjjZKhRxZNIuwFgoaT6ueN1mcOCVStF+eom1SPgPdGDLo32iIpZd9Fxvf aEw6/G3Z+Fegno/gqyc46pPnhHRdON+JXjDeYVICUMoJ2KyfIccexWxSb45xluzpVtj9 m84f0Y1hwjm1uHsOwbvX+IPagkQt1anIqIAvvN7V97K8cwXKA6FVHytnQwxRGloMTPbD i70Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=X2zr7j+r/qk8+m/iJE8wZUPkSQqUaYesjtN9C6b4jqE=; b=Jo9odAUE6tQJu21tiroxz6f0iXa9y4AraTXsNhqvKsHNhs4okcHk1A4dOBz/dKbYuq MMC0p5RNcjR4OdbZNHIm8QCDaCHYOrQEgN0ehZN2LUEohsYE5X+aJ8DbQ25asi17LOk3 /H30gwZwGyzktREQlrhSuJxBDP3xuJ+cMGAPnhOpWr2qnwTvCJLVH4rPvmvKpHSdQdbw MlJ8sMnR8lsyI2uWLdRZZ8OqQ1Tin3iynOXnR0vkNUlY7O6Fn5rMfHwGUH7Nt/7muvDl XAWHk94hj4W+M2QPOvx0aCRCupLQHXN63W10MnEIaAWRtFh4KTjHnQP0u5lF4MbwKwdu +BhQ== X-Gm-Message-State: AN3rC/7GDV1E87//5fj+5gJ96rww5uBE8QAf24JqlU979RdPSHWMi/dr aH7kL4LEL3LyF9Wj X-Received: by 10.223.146.225 with SMTP id 88mr36079943wrn.51.1494155204733; Sun, 07 May 2017 04:06:44 -0700 (PDT) Received: from alan-laptop.carrier.duckdns.org (host-92-11-216-225.as43234.net. [92.11.216.225]) by smtp.gmail.com with ESMTPSA id v22sm8636428wrd.38.2017.05.07.04.06.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 May 2017 04:06:43 -0700 (PDT) From: Alan Jenkins To: selinux@tycho.nsa.gov Subject: [PATCH 06/10] policycoreutils: fixfiles: refactor into the `set -u` dialect Date: Sun, 7 May 2017 12:05:52 +0100 Message-Id: <20170507110556.7740-6-alan.christopher.jenkins@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170507110556.7740-1-alan.christopher.jenkins@gmail.com> References: <20170507110556.7740-1-alan.christopher.jenkins@gmail.com> 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: Cc: Alan Jenkins Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP This commit allows the use of `set -u` to detect reads of unset variables. But what I really liked was making the code more explicit about these modes. I hope that this is easier for a new reader to reason about. `fixfiles restore` has accumulated five different modes it can run in. Now use a single variable to indicate the mode, out-of-band of the variables used for the individual modes. Apparently `set -u` / `set -o nounset` doesn't work correctly with arrays. If we ever need bash arrays, we can simply remove `set -u`. The `set -u` dialect is a strict subset. See http://mywiki.wooledge.org/BashFAQ/112 Extra notes: RESTORE_MODE was created because I couldn't bring myself to use an empty FILEPATH, as a special case to indicate the default mode. Arguments to the script (paths) could be empty already, so it would mean I had to work out how we behaved in that case and decide whether it was reasonable. It turns out the `-B | -N time` mode is distinct and does not respect paths. So we can tell the user we're not going to do anything with the paths they passed. Make sure this distinction is shown in the usage error message. We already rejected the combination of `-R rpmpackage,... dir/file...`. Being aware of the different modes just causes more bogus combinations to be rejected. --- policycoreutils/scripts/fixfiles | 164 ++++++++++++++++++++----------------- policycoreutils/scripts/fixfiles.8 | 7 +- 2 files changed, 95 insertions(+), 76 deletions(-) diff --git a/policycoreutils/scripts/fixfiles b/policycoreutils/scripts/fixfiles index 1b173e6..df70b27 100755 --- a/policycoreutils/scripts/fixfiles +++ b/policycoreutils/scripts/fixfiles @@ -20,6 +20,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +set -o nounset + # # seclabel support was added in 2.6.30. This function will return a positive # number if the current kernel version is greater than 2.6.30, a negative @@ -107,7 +109,9 @@ fullFlag=0 BOOTTIME="" VERBOSE="-p" FORCEFLAG="" -RPMILES="" +RPMFILES="" +PREFC="" +RESTORE_MODE="DEFAULT" SETFILES=/sbin/setfiles RESTORECON=/sbin/restorecon FILESYSTEMSRW=`get_rw_labeled_mounts` @@ -209,50 +213,57 @@ restore () { OPTION=$1 shift -if [ ! -z "$PREFC" ]; then - diff_filecontext $* - exit $? -fi -if [ ! -z "$BOOTTIME" ]; then - newer $BOOTTIME $* - exit $? -fi +case "$RESTORE_MODE" in + PREFC) + diff_filecontext $* + exit $? + ;; + BOOTTIME) + newer $BOOTTIME $* + exit $? + ;; +esac + [ -x /usr/sbin/genhomedircon ] && /usr/sbin/genhomedircon EXCLUDEDIRS="`exclude_dirs_from_relabelling`" LogExcluded -if [ ! -z "$RPMFILES" ]; then - for i in `echo "$RPMFILES" | sed 's/,/ /g'`; do - rpmlist $i | ${RESTORECON} ${EXCLUDEDIRS} ${FORCEFLAG} ${VERBOSE} $* -R -i -f - - done - exit $? -fi -if [ ! -z "$FILEPATH" ]; then - ${RESTORECON} ${EXCLUDEDIRS} ${FORCEFLAG} ${VERBOSE} -R $* -- "$FILEPATH" - return -fi -if [ -n "${FILESYSTEMSRW}" ]; then - LogReadOnly - echo "${OPTION}ing `echo ${FILESYSTEMSRW}`" - ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} -q ${FORCEFLAG} $* ${FC} ${FILESYSTEMSRW} -else - echo >&2 "fixfiles: No suitable file systems found" -fi -if [ ${OPTION} != "Relabel" ]; then - return -fi -echo "Cleaning up labels on /tmp" -rm -rf /tmp/gconfd-* /tmp/pulse-* /tmp/orbit-* - -UNDEFINED=`get_undefined_type` || exit $? -UNLABELED=`get_unlabeled_type` || exit $? -find /tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) \( -type s -o -type p \) -delete -find /tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /tmp {} \; -find /var/tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /var/tmp {} \; -find /var/run \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /var/run {} \; -[ ! -e /var/lib/debug ] || find /var/lib/debug \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /lib {} \; -exit 0 +case "$RESTORE_MODE" in + RPMFILES) + for i in `echo "$RPMFILES" | sed 's/,/ /g'`; do + rpmlist $i | ${RESTORECON} ${EXCLUDEDIRS} ${FORCEFLAG} ${VERBOSE} $* -R -i -f - + done + exit $? + ;; + FILEPATH) + ${RESTORECON} ${EXCLUDEDIRS} ${FORCEFLAG} ${VERBOSE} -R $* -- "$FILEPATH" + return # to loop over each FILEPATH + ;; + DEFAULT) + if [ -n "${FILESYSTEMSRW}" ]; then + LogReadOnly + echo "${OPTION}ing `echo ${FILESYSTEMSRW}`" + ${SETFILES} ${VERBOSE} ${EXCLUDEDIRS} -q ${FORCEFLAG} $* ${FC} ${FILESYSTEMSRW} + else + echo >&2 "fixfiles: No suitable file systems found" + fi + if [ ${OPTION} != "Relabel" ]; then + return + fi + echo "Cleaning up labels on /tmp" + rm -rf /tmp/gconfd-* /tmp/pulse-* /tmp/orbit-* + + UNDEFINED=`get_undefined_type` || exit $? + UNLABELED=`get_unlabeled_type` || exit $? + find /tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) \( -type s -o -type p \) -delete + find /tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /tmp {} \; + find /var/tmp \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /var/tmp {} \; + find /var/run \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /var/run {} \; + [ ! -e /var/lib/debug ] || find /var/lib/debug \( -context "*:${UNLABELED}*" -o -context "*:${UNDEFINED}*" \) -exec chcon --reference /lib {} \; + exit 0 + ;; +esac } fullrelabel() { @@ -263,7 +274,7 @@ fullrelabel() { } relabel() { - if [ ! -z "$RPMFILES" ]; then + if [ "$RESTORE_MODE" == RPMFILES ]; then restore Relabel fi @@ -309,7 +320,9 @@ esac } usage() { echo $""" -Usage: $0 [-v] [-F] [-B | -N time ] { check | restore | [-f] relabel | verify } [[dir/file] ... ] +Usage: $0 [-v] [-F] { check | restore | [-f] relabel | verify } dir/file ... +or +Usage: $0 [-v] [-F] [-B | -N time ] { check | restore | [-f] relabel | verify } or Usage: $0 [-v] [-F] -R rpmpackage[,rpmpackage...] { check | restore | verify } or @@ -319,39 +332,52 @@ Usage: $0 [-F] [-B] onboot """ } -if [ $# = 0 ]; then +if [ $# -eq 0 ]; then usage exit 1 fi +set_restore_mode() { + if [ "$RESTORE_MODE" != DEFAULT ]; then + # can't specify two different modes + usage + exit 1 + fi + RESTORE_MODE="$1" +} + # See how we were called. while getopts "N:BC:FfR:l:v" i; do case "$i" in B) BOOTTIME=`/bin/who -b | awk '{print $3}'` + set_restore_mode BOOTTIME ;; - f) - fullFlag=1 - ;; - v) - VERBOSE="-v" + N) + BOOTTIME=$OPTARG + set_restore_mode BOOTTIME ;; R) RPMFILES=$OPTARG + set_restore_mode RPMFILES + ;; + C) + PREFC=$OPTARG + set_restore_mode PREFC + ;; + v) + VERBOSE="-v" ;; l) # Old scripts use obsolete option `-l logfile` echo "Redirecting output to $OPTARG" exec >>"$OPTARG" 2>&1 ;; - C) - PREFC=$OPTARG - ;; F) FORCEFLAG="-F" ;; - N) - BOOTTIME=$OPTARG + f) + fullFlag=1 ;; *) usage @@ -362,34 +388,24 @@ done shift $(( OPTIND - 1 )) # Check for the command -command="$1" -if [ -z "$command" ]; then +if [ $# -eq 0 ]; then usage exit 1 fi +command="$1" # Move out command from arguments shift -# -# check if they specified both RPMFILES and FILEPATHs -# - -if [ ! -z "$RPMFILES" ]; then - if [ $# -gt 0 ]; then - usage - exit 1 - fi - process "$command" +if [ $# -gt 0 ]; then + set_restore_mode FILEPATH + while [ $# -gt 0 ]; do + FILEPATH="$1" + process "$command" || exit $? + shift + done else - if [ -z "$1" ]; then - process "$command" - else - while [ -n "$1" ]; do - FILEPATH="$1" - process "$command" || exit $? - shift - done - fi + process "$command" fi + exit $? diff --git a/policycoreutils/scripts/fixfiles.8 b/policycoreutils/scripts/fixfiles.8 index c58cb7d..0ec18a8 100644 --- a/policycoreutils/scripts/fixfiles.8 +++ b/policycoreutils/scripts/fixfiles.8 @@ -5,8 +5,11 @@ fixfiles \- fix file SELinux security contexts. .SH "SYNOPSIS" .na -.B fixfiles -.I [\-v] [\-F] [\-B | \-N time ] { check | restore | [\-f] relabel | verify } [[dir/file] ... ] +.B fixfiles +.I [\-v] [\-F] { check | restore | [\-f] relabel | verify } dir/file ... + +.B fixfiles +.I [\-v] [\-F] [\-B | \-N time ] { check | restore | [\-f] relabel | verify } .B fixfiles .I [\-v] [\-F] \-R rpmpackagename[,rpmpackagename...] { check | restore | verify }