From patchwork Wed Nov 30 13:47:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vit Mojzis X-Patchwork-Id: 9454367 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 1BB7D6071E for ; Wed, 30 Nov 2016 13:49:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CF072832B for ; Wed, 30 Nov 2016 13:49:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 01DEB2842C; Wed, 30 Nov 2016 13:49:24 +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.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from emsm-gh1-uea11.nsa.gov (emsm-gh1-uea11.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 E9D802832B for ; Wed, 30 Nov 2016 13:49:23 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.31,574,1473120000"; d="scan'208";a="1156413" IronPort-PHdr: =?us-ascii?q?9a23=3A25dFfRM8896ra0Zn65sl6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0LP/4p8bcNUDSrc9gkEXOFd2CrakV0KyN4uu5AyQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9GiTe5b75+Nhu7oAHeusULn4dpN7o8xAbOrnZUYe?= =?us-ascii?q?pd2HlmJUiUnxby58ew+IBs/iFNsP8/9MBOTLv3cb0gQbNXEDopPWY15Nb2tRbY?= =?us-ascii?q?VguA+mEcUmQNnRVWBQXO8Qz3UY3wsiv+sep9xTWaMMjrRr06RTiu86FmQwLmhy?= =?us-ascii?q?cdMz4y7X/ZhMp+gqlGpB6tvgFzz5LRbIyTKfFwfL7SfckCSGRBQMhfSiJPDICk?= =?us-ascii?q?b4YNEuYMM+lXoJXyqVQQthuzHhWsCeH1xzNUmnP6wbM23uI8Gg/GxgwgGNcOvW?= =?us-ascii?q?zbo9X0KKcZTOe7zK7KzTTCbvNWwir25Y/WchAkpvGMX7NxccvKyUQ0DQPKkEif?= =?us-ascii?q?qYz/MDOJzOgCr2+b7+95WO+plmUpqBlxryCyysojhYTFnIIYxk3e+Slnz4s5O8?= =?us-ascii?q?e0RFNjbdK6DJddszuWO5Z4T888WW1kpSU3x7MctZKlfyUHzoksyQTFZPydaYeI?= =?us-ascii?q?5wruVOOWIThlmn1oYKm/hxOu8Ui4ze38S9W03E5KriVbltnMsWgA1wDJ5cidS/?= =?us-ascii?q?t941yh1SyT1wHT9u5EIUc0mbDdK5E92b4/ioAfsUHCHi/ygEn2jamWeVs4+uWw?= =?us-ascii?q?9ujqbbrrqoWcOoNpkA3yLKsjltKlDeglKgQOWnKU+eW41L3t5035R7BKg+Utkq?= =?us-ascii?q?bHtJDaJMIbprO2AgNMyYkj7Au/DzG639sGhnkKN05FeRKbgIjpPFHCOvb4Deyl?= =?us-ascii?q?jFi2nzdrwO7GMqX7AprRNnjDjKvhfbFl5k5S0go819Zf6I5VCrEaO//zX1fxtN?= =?us-ascii?q?3BAh8iPQ202PzrCNJn1oMRQWiPGLOWMLvOsV+U4eIiO+qMa5UWuDb6Nvgo/P3u?= =?us-ascii?q?gmU6mV8aYKmlx5wXaGq3Hv5+OUWWfWLsgssdEWcNpgcxVvHliEeDUTFNfXa/RL?= =?us-ascii?q?gz6S0+CI68CofDXI+tiqSb3CinBp1WenxGCleUHHfoaYqEX/MMaCWJL89ljzwE?= =?us-ascii?q?Sb+hS4o72h20sw/60bVnJPLO+iIErZLjyMR15+rLmBEp+zx0FcOd03qRT2xvhW?= =?us-ascii?q?MIQTg23a56oUNnzFePy654jOJEFdZL/fNGTh86NYLAz+x9E93zVBjOftOVSFm4?= =?us-ascii?q?WNWmGio8TswvzN8UeEl9BtCiggrE3yqwDL8fj6aLC4As8qLAw3jxIN5wy2rb26?= =?us-ascii?q?Y8jlkpWM9POHa6ia548gjcG5TGk16Fl6qwc6QTwjLN/n+ZzWWSpEFYTBJwUaLd?= =?us-ascii?q?UHAZZ0vWqdD56V3ZT7K1E7soLBFBycmYJqtNcN3pgk1MRO3/N9TGf2Kxh2CwCA?= =?us-ascii?q?6VybyWcIrlYXsS3CvSCUUfjw8T/WyJNRIiBii/uWLSFjpuGkzzY0n06+lxtGu7?= =?us-ascii?q?TlMozwGNd0Bhybu19QIJhfybUfMfxK4LuCcmqzVyE1awxNbWC9uGpwV7ZqVcZs?= =?us-ascii?q?kx4FBd1WLWrwZ9JICvL7h+hl4CdAR6p0fu1xRsCoVciMQqt20lzA5zKaKezVNA?= =?us-ascii?q?eCiV3YvoOr3WLGny/Qyga7XM1lHYztmW5r8F6O4kpFX7oAGpCk0i/m1909lS13?= =?us-ascii?q?uc4ovFDBAOXpL2XEc67AN6p6zGbSkm/Y/U0mdsMaasuD/Yx90pHPclygqnf9pH?= =?us-ascii?q?KKOLDhLyE8kAC8e0MuAlgF+pbhYYPOBV8q45JMame+eA2K6sIOlshjSmgnpb4I?= =?us-ascii?q?plyEKD6zJ8SvLU35YC2/yY2w+HWy7ig1enqc33h55LZTUWHmWh0yjoHohRabNu?= =?us-ascii?q?fYwTE2ehP9W3xslih57qQ3NY90CsB1Ud2MKyehqdcVr93RZW1UsJvXyrgyy4zy?= =?us-ascii?q?Z7kzsxtKqQwDTOw/j+dBoAImNLWm9igkr3LIiqidAVQUioYxIvlBS7+Ubw37Jb?= =?us-ascii?q?q7hnL2nPXUdIeDD7L3l4XautsrqPeNJA6JI0sSRXSei8b0qVSrjnrxsdySPjEH?= =?us-ascii?q?NUxConeDGyppX5gxt6hXqHLHlusXXUYs5wxRLQ5dDGQ/5ewCYGTjFiiTbLHli8?= =?us-ascii?q?I8Wp/dKMmpfbqO++SmahWYNLcSbxy4OAqDW05XdxDB2ihPC8hMfnERMg3S/g0N?= =?us-ascii?q?lqSD/IowribYnl0KS6K+1ncVdyCF/69cV6Bpl0kpEsi5EIxXgampKV8GIJkWjp?= =?us-ascii?q?N9VbxaX+bH8WSD4F3dHa/Q/l2Fd5IXKR3YL5UXedzdV9aNmmeG8W3Tg9789SAq?= =?us-ascii?q?eO8LNEhTd1oka/rQ/Jbvh9nisSyeEu6X4Cn+EJvxEgziODDbAOBklXITbjlwyW?= =?us-ascii?q?4NykqqVYenqve6Cq1EVihdChEK2CogZEVXb8YJgiGStw4dtjMFLQynL88JrpeN?= =?us-ascii?q?/OYtIPrR2bjw3Pj/BLJ54rkPoFmzZnM3rnvXI50+47kQBu3ZaisYidMWls8ri1?= =?us-ascii?q?AhtCOT3xYMMS+irggrxCkcaTxYyvGY9hGjoTVpvyUf2oCC4StejgNwuWFj08sG?= =?us-ascii?q?2UGaLHHQKE5kdmrmjPE4u3N3GZJXkZy89tRB+BK0xemg8UWC82npkjFgCl3Mbh?= =?us-ascii?q?alt25igN5l7krRtB0vpoOAfkXWjBogeoays0SJ+EIRpX8A5N+VnaPdaZ7uJpEC?= =?us-ascii?q?FS5oehoxCVKmyHewRICnkEVVGfB1/9JLau6sPA/PKGBuelNPvBe7aOqfFEV/iS?= =?us-ascii?q?356v1pZm/zCWOcWVJ3ViE/o72klDXHB+AcjZnSsASzAPnSLXc8GbvAu8+jFwrs?= =?us-ascii?q?2n6/TkQhzv6pGAC7RMKtVi4Au2jr2dN+GKiyZ2Ny1Y2okKxXDW1LgVxEQShD12?= =?us-ascii?q?dzmxDbQAsjbAQ7nRmq9YCB4bbTh+O9ZW4K0n3wlCI8jbhsny1r5igf4/E01FWk?= =?us-ascii?q?D5msG1ecwKJHmwO0nIBEmRKrSJOybGw8bvYayiT71Qif9btxy0uTmAFE/iMS6P?= =?us-ascii?q?lz7zVxCgKetMlj2UPARCuIGhdRZgEXTjTNXjahGhKt93ijw3zqMyhnzRL24cNi?= =?us-ascii?q?Zzc0BWo7KM6iNYh+lwFHZa7np5N+WEnTiW7/XAIJYMrfRrGjh0l/5d4HkiyLtU?= =?us-ascii?q?7CVES+JulSvXqd5urV+mnfeTyjp7UBpOrTNLi5yRsUVkJ6rZ6oFKWWzY8xIV8W?= =?us-ascii?q?WQFxMKqsNkCt3pp6Bf1NzPm7z2KDhc79LU58sdCtPTKMKfLnUhNx/pFyTVDAsB?= =?us-ascii?q?VjGrMm7ei1ZakPGI+X2ftoI6pYT0mJoSVr9bU0Q4FvUEBUt/GNwPO5R3XjQ/kb?= =?us-ascii?q?6HlsEI42G+rBrQRMlAuJDISO6SC+31KDmFlblEewcIwbTgIIQJKIL7wFJtZUNg?= =?us-ascii?q?nIvWG0rdRstCoix7bgApp0VN/mB+Tnct1EPlcA+t5mEcFeKslB4slgR+efgt9C?= =?us-ascii?q?vr41ovO1XKoy0wkE8sltr7hTCRcSX8I72uUoFMDCr4rU8xMon0Qwxtdw29gVRk?= =?us-ascii?q?NCvYR7JWl7ZvaHpkiBHduZRSAv5RVrdLYAUKxfGQafQoykpTpTm6xU9d5OvFFZ?= =?us-ascii?q?tjmBEscZGys3JKwxhjY8ItJazMOKpJyUBdhqyUviC2y+8x2xURJ0AR8GOVYy4F?= =?us-ascii?q?o1YHOaUjJyay+exs8wOCkSNZeGcQT/oqvu5q9kQlNuSEyCLgyaBMKkawNuyYNK?= =?us-ascii?q?6ZtG7AldOSTlM3zEMImFFP/aJq3sc7b0qUS0cvwaOKFxsXMcrCKAdVb9dd9XXI?= =?us-ascii?q?YSmOtuDNzo5vMIWmCuDkV+mOu7gIgki8BgYmA5wM7tgdHpmryEzYLt3nLb4fxh?= =?us-ascii?q?Ur+ATrJE6IDPtOeBKTjDgLuce/w4Fr3YNFPDESHX19MTmr5rbQvgIqnPuDXNIx?= =?us-ascii?q?YncGXosFNmk7V9C7my9ZpXtPFyO70uQHxwie9zX8vDjfDCHgb9p/Y/eZfRNsCN?= =?us-ascii?q?ao9jUx7ae2k0Xa8pTAKG7kK9tuoNjP6fkVp5yfEfNbUaF9s1vAm4lfX3GlSWrP?= =?us-ascii?q?Ed+pKJfuc4YsaNz1CnC9Uly5kT04VNz+PNe3IaiOmA3oS5tUvJOd3D89Kc+3Di?= =?us-ascii?q?seFAtop+Ef+KJ8YhUObIElbh7urAkxLbGwIBmG3dW0WGaiMyFWTvlFweW9fbxX?= =?us-ascii?q?wDImbvWmx3s4UpE60+63/FYCRJEXjxHewfKjaJdbUSXoB3NSZR7ApSsjmGhnLO?= =?us-ascii?q?oyxf0/wBzQu1kGLz+LbPBpaHBDv9wkH1OSJ3R2BXY4R1+biYrD+Rai0akP8SVH?= =?us-ascii?q?g9ta1vZIv2T5vp/afD2jQrerqYnPvyomc9cmv7V7MZb/LcueqJPegjvfQYHMvQ?= =?us-ascii?q?2HSiG1C+FXlcRXICJcRPlImH8qOdYauYVf9UUxVt0yJ7tVCKkjvrqqcyZrDTYO?= =?us-ascii?q?zS8FUIONxCYCjf2m27vdjRida4giMAYev5VcnNQdVy92YiURpK+nVoXWmG+ESn?= =?us-ascii?q?QFIAgJ9wRM4RgMloluceD5+IDIVoNDyyZKo/JoVSvGDplp+EHgSm6MhFj4SfOh?= =?us-ascii?q?nveo3QJO1v3sycUUVwRlBUhb2elWilMiKKtrJKkIoo7KrjiIeFv0vW731OSmJF?= =?us-ascii?q?hRycjVd1LiD4rIrmv8XTMC9nIKX4NPz2vfFZsKmQpjdKkrvElMIJyhekvm/TMk?= =?us-ascii?q?3ZlpH7+iWcCo3FslrHcGRya2E9VaEe1mtkzYWCF9aZCxtJrlI4lSQnNX+JCFpF?= =?us-ascii?q?dZil9iMyilyZdHKsFN5TANXD5ToTWdotSySctD2dNoAJ8WONt/vWnyGL9cMpiL?= =?us-ascii?q?v3I2oqDvymPe+z0krFe6wzCzFrSkT+5F+m0RAR8lJ2KApUkzF+Es6Hvd8kjRsl?= =?us-ascii?q?Bo+OdWHriPgl9roDlnGpBBGy1E2m27IFRrVHlJreFaJ7rPc8BGRPkyfxCvMQQk?= =?us-ascii?q?FfE6x0yJ4V10nXDhbixwsQtV5TvQUBQqWikOnLjtgyEepd+6NjMATZJHcykhZT?= =?us-ascii?q?/fKw2HgSBXoApfa0ZyVp8CDNZK560X0IlJ8sfMUkujNSYFXBl+OQ0iyvpfiVRP?= =?us-ascii?q?sEOGdiDBFQCob+rAsgVrfceNq86kNO758xlahYPnqu84674OR3mhmQ2zX9/SsZ?= =?us-ascii?q?PzttqXuUSQbqv4NfOzYWPZRjjWkR+wnaskD4XN/yXLKApbMIV6xmA5bpj9EmPL?= =?us-ascii?q?JhNGJ78BJ0VHS696b8lGovpAaM9gYqoJ/rVtBh2fTBP1BIOvtOVGLkrURTnGMy?= =?us-ascii?q?WB6PKwrpzO4rHGVOjgYtCMx2zdTKJpP5d67j37FKn20YNE/Ur2wPht/FtgSVfa?= =?us-ascii?q?KyCBsMjhJgQT6ca/cEvtpIYkEi7QAJhqinbtwVtAd8UPSS2w7JsY0I9Z6Gr3Se?= =?us-ascii?q?9g0Ej8qvdS975/6Ykz+b9p19y5JaLPKfRerU9nAwSbBgRw+ZUrG2hzXWdRYvUe?= =?us-ascii?q?KP3JZ6QWkdjuq/zrF6wQ8BCV+fZWad3JJ0HbncmwFy+TRAdYnAgbrz4aNQyc2+?= =?us-ascii?q?SDm6BqVcavvfL51V4141iiMh4Gy6hg5YGA+qeTpe/XaR7RwaIFWqjsSMPztK4j?= =?us-ascii?q?u1iO5f0+ib4BZnB1YxC9EOcDTMIdwX3gza8yxyI2D8zDB67g+OJEV38hmDLgmo?= =?us-ascii?q?xyH1ISGvwOBrqH54VenmA/m+zCLd0baaVCl2mAFBK+Fb8C03Gr4TONIGZ5mhHO?= =?us-ascii?q?zw3wQWSr4VDqtyB4RTXDz8z/kktVUbm6HlxSUDaoOUBmtjOPIAvou8DttaQz8k?= =?us-ascii?q?42LnTutMiRm2u5JLNXA8r/KcSYISkvoVIajIY8RtKx1o8GHtq9Os0e8GlkbvvZ?= =?us-ascii?q?6WOkjTNOo7tdi4rZ+MGV9e3dHWO8gK2Ct7WN2DdYx2A9vVE79N+gM/bO6MOOQ/?= =?us-ascii?q?mz2GYeUSB/uxDZXxGvtrzbrkobOUiK0EfNhIwFINVZ3X051kHp+ucjRs48+xtE?= =?us-ascii?q?GobGefwCuSj5OCHozlaHf9I3Si6e3iNVHlL0FFl1A60813zwvc3Xj3fQ+lsoRo?= =?us-ascii?q?Zqe0zhmxN3E50yKVgx51gP3ioDDQ8NZAiaDLCpH0vqN5cLWFMYaRuZwLi1ZLs4?= =?us-ascii?q?0Vd0wrO16+/ZdfZ8CLYVNvZBkg6Om0BWFYkXsa0FTrNzYV1d9K/Lpgj6EYfnQv?= =?us-ascii?q?zmmGEsOv2yX89V79oWt2Y44ga4XRqv841P77EBiJCHbqREe4TDvNhg70d74j4C?= =?us-ascii?q?bjRNjwJjjxylUeAdqufj4sLYsJax8eahSqItR+QR9xgpCGVzlIPwj0o/od7L1+?= =?us-ascii?q?ddRIrViZ788AxXIH6Fppza0x9iJuoKMY6re6xg93ofLSgEO30OJcaWa+U74yJ1?= =?us-ascii?q?LDXT/UJNAscWatMeIsXAgh1bikzmWLFS6srUAESYBJ1pd8A19Wb3zi468YckWO?= =?us-ascii?q?b69DC2PYzf701KP/5bgyVjjsjCq/YJwfrSEyUX5XiZawRrzSOC0ZaNFu3w8f+K?= =?us-ascii?q?yN7KS1MMBjQ2XJtFJDqe5QynQfK4lJr3XQOS9s/zh5U+eEWLRnOvmKQFs6BMEf?= =?us-ascii?q?NPiyjg2jhRCJr1hvKPvNa27mtYqEFHGp5p7RLZAKVfIol7ORPgm8muQUh8ADf/?= =?us-ascii?q?eM7KeRc1veqWx/0D4+NgOEvia44bJQgEy7Hh6XZPSAthVqL2tE6DXe0NfNtmVO?= =?us-ascii?q?/ErndN5IJvN6APJ0OdqIX3oDlHrl42AQkpaKI/rzFBeUnOmRdaW6Dqt7IajQsc?= =?us-ascii?q?S9F5s1dWGW2sIGI++ybHVaNNgamTD/wV8jOTQrYSXEVoNiN+Xg662ZRve7uvhv?= =?us-ascii?q?BHsWJGkzhjoPgrzTxpXh+8tjDtp64X3zIv5q24vi0buXNZVuWejzvICVJbwfQL?= =?us-ascii?q?k6cTEXDi5Ee4YHkecYTy4b5nJd/6+Ykm+XQ/bg0pfzcaUuS4FyHwk6SID5SNsN?= =?us-ascii?q?1Cih6NtsHOYKS9LCcIMLQy1w7jS2J70gfAgBZi6HELTSm47N84OIW9Pt4oxiWs?= =?us-ascii?q?GWjcelcD/KdJsM/quF4QS+s2b1Jhz3l53siBWCINWNTFG3wpgQg8dWVEbJVD5A?= =?us-ascii?q?cYF6kogjeIpq5G/gUVYDfIDIuo4YzQncbU2XknU9hm3GXWpreKhpkyyn1qh8t0?= =?us-ascii?q?7jKSuHQVb+HYT85sAn3o24dDyOzxe/atvf4DSId8zrSuTuMCONG5+WSqwJVqRl?= =?us-ascii?q?OlxrMGElq8Me8DxbTbUyC+RG2aQ+uLcG+MnzAnPU70/xWoKEM4aNtSpU8nLuTC?= =?us-ascii?q?noJclxHmUb5sXSqfu1nbzHA4POMBcwI2v5unexAUTOEPeueQP+8uwOcxCFEUdX?= =?us-ascii?q?/GATN2C/OqsV6qhIV7I3Jg4UHgbuT3/AHmN9+SGhcfHI7fqZ5x/ue6SXydNn96?= =?us-ascii?q?yx1yJ1J09+bZF1Q+rONcdIyRndfIjdRhzeEFb+ttMTE6utMLlIJs942U0MaScR?= =?us-ascii?q?7P1ZvzJNDVov2dA/LB1UQqfn9VXqAeYQPv6IUwJsQ5VKHLHbtFoRQcArA3QJw9?= =?us-ascii?q?N2fx86F0KRl8chXKabSxg8nquviLaYVOq3/R9FIwIz/WuwcfxfysUQx7c5eqim?= =?us-ascii?q?38IZAoXDJBrsFiBQV9EYtKGsMAsxCnDICOlKG8kd+x9Ftwu/UWvqroFvDKyNO5?= =?us-ascii?q?0p12X5he+0OGJy7RBK1xjUR+kuSyg+vP0oXrCcz8Z9wITu57TXDZarXeBIWwNi?= =?us-ascii?q?qOOt7ge05B67Oc1LN5UhOMZCH2RqaGsCykNO544UUg0YF4ffDczDoq773B39vy?= =?us-ascii?q?fW5brD+5rXGVLJtf8EDKBevGUhJPV/WF9GdlHasKbYr78+sAPsAiwNiC7Alp8j?= =?us-ascii?q?tCyNGKLrOirkDSwEJ7c4zULE/y1CYkVokGOhO/MVEjgWXBsHTSHWxcLtS4Kclq?= =?us-ascii?q?mNuVCh3t51JtmWw2Z29BA2zoSs2LNWgdxc2+eBWA9BhXANYbg+63ZUk4u7W3Se?= =?us-ascii?q?ZyJppFmeSqtLMAkdtyNSHPRc5aMD/ULL93ODpRE+rOqEIvYh4evLg/Qp01aoSW?= =?us-ascii?q?IEMbLEeAzjv/zQnY3k33cNyjz72EIDsQ8nVbz7LF1iVMpwa5ufaFmMHjVq7WbI?= =?us-ascii?q?3uVv7ILCUlTi2aRSg1EUux4liroP0IvP6ZIWcEvlAUeTieCBUNqa9zt9TQFXHc?= =?us-ascii?q?melifJ0MmfCbVDv9RzF4laooGyZLrlqAQvQZGgnKdH/hh2xctBalJv9W8nLvd6?= =?us-ascii?q?eYybZNW+wKHotMdeWUQ9TCdv9FPTcolysWOOKnct3Cq7Y2yEnITWoEE6XS8l2R?= =?us-ascii?q?UlKWSOSGxz33RYUVo5Q0ui0w99LSmy93FL7IP6yepz616YO4ijyXuejAWWkseU?= =?us-ascii?q?A1h/gCAGaZyhlaNG4EE80VuF3qQqOYeUlM1nUpieJo2x8XfwRzVGZj0nJMnPag?= =?us-ascii?q?BM1WV0QUgHmoQPIYcFB9FCkw8lOS4g3ufdwAvtjeR3RQ9rsJVYUQLfol5ZLJOK?= =?us-ascii?q?QO2vYp3TNnoCs8symHCVNSkB6F+bLKHK1g3r1C+XU4//ZuU0GNRDPfdGzHx5Gj?= =?us-ascii?q?C81R2Chur3fk19DIse9zLrdaoZ92AEtZSR5xc8vQ+TFHTHHcxBq5vxH9Gi+XZj?= =?us-ascii?q?0e/mUlPysAI9h006detxTad82JvV2VsKAzqVCDEwuHCrOonpdMD5e6hk2DdSBX?= =?us-ascii?q?fGDzRNhNofFXmYNXOPsq?= X-IPAS-Result: =?us-ascii?q?A2HbBABq2D5Y/wHyM5BdHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAR+BW7tEJYgHUwEBAQEBAQEBAgECXyiCMxqCIwI3FCAOAwkCFyEBBwgIA?= =?us-ascii?q?wEpBBUfCwUYBIhMrn0qAosxJYY+hiqCTBEBZAGFGAWIWoYYi2OMWoQ0AoochhI?= =?us-ascii?q?CkX5VYTYihTFxhhQNF4IXAQEB?= Received: from unknown (HELO tarius.tycho.ncsc.mil) ([144.51.242.1]) by emsm-gh1-uea11.nsa.gov with ESMTP; 30 Nov 2016 13:49:19 +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 uAUDmHBW000671; Wed, 30 Nov 2016 08:48:30 -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 uAUDmG5p141769 for ; Wed, 30 Nov 2016 08:48:16 -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 uAUDmGfl000669 for ; Wed, 30 Nov 2016 08:48:16 -0500 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1DlAABq2D5Yhxy3hNFdGwEBAQMBAQEJAQEBgzgBAQEBAYF6py0BkAiEFRmGCYIDUwECAQEBAQECEwEBAQoLCQkdhhhJAURDiG2ufYwChj6GKoNCAYIDC4MKBYhahhiLY4xahDQCkC4CkX6BbCKCZQFigWk9NIYUDReCFwEBAQ X-IPAS-Result: A1DlAABq2D5Yhxy3hNFdGwEBAQMBAQEJAQEBgzgBAQEBAYF6py0BkAiEFRmGCYIDUwECAQEBAQECEwEBAQoLCQkdhhhJAURDiG2ufYwChj6GKoNCAYIDC4MKBYhahhiLY4xahDQCkC4CkX6BbCKCZQFigWk9NIYUDReCFwEBAQ X-IronPort-AV: E=Sophos;i="5.31,574,1473134400"; d="scan'208";a="5852184" 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; 30 Nov 2016 08:48:00 -0500 IronPort-PHdr: =?us-ascii?q?9a23=3ABrbODxYkCDYMG49ZcNYV1Tj/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZocq+bnLW6fgltlLVR4KTs6sC0LuN9fuxEjVaqb+681k6OKRWUBEEjc?= =?us-ascii?q?hE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRo?= =?us-ascii?q?LerpBIHSk9631+ev8JHPfglEnjSwbLd8IRmsowjcssYajZZ8Jq0s1hbHv3xEdv?= =?us-ascii?q?hMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW874s3rrgTD?= =?us-ascii?q?QhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VDq+46t3ThLjlS?= =?us-ascii?q?EKPCM7/m7KkMx9lKJVrgy8qRJxwIDZe52ZOOZkc6/BYd8WWXZNU8BMXCJBGIO8?= =?us-ascii?q?aI4PAvIOMuZZs4n2ulwArRy8BQitBePv0SJDi3jo3a0/1OQhEwDH3A07H98Vqn?= =?us-ascii?q?Tbssj6NKcIXuCp1qXH0TLDb/ZP1Dr79YPGcQghrOmSUb5sdcfd01QjGg3bglmK?= =?us-ascii?q?tIDoPD2Y2v4Tv2WY6edrSPihhHQ9qw5rpzii3scshZfNhoIS0l3E8Cp4zJsvKd?= =?us-ascii?q?2iVkF0fN6kH4FMty2AK4R2RcYiT3lpuCY81LIGpYa2cDYWxJkj3RLTdvKKf5aS?= =?us-ascii?q?7h7+V+ucLy10iGxmdb6ngha960mgyunyVsmu11ZKqzJIksfJtnAK1RzS68mHSu?= =?us-ascii?q?Bm80e7xzmAygDT5ftYIUwuiaXbLJshzqYqlpUPqUTDAjP2mELuga+NaEok/umo?= =?us-ascii?q?6+L6YrTpvZKcK491hR3+MqQpgMC/B/84PRIUU2iU/uS8yu6rwUqsW7hOj/srgo?= =?us-ascii?q?HFoZvaIoIdvaf/DAhLgag57BPqMTa6mPEfn2sGNxoRZheAjZroIHnULfz4BOv5?= =?us-ascii?q?iFOpxmQ4j8vaN6HsV82eZkPIl63sKO5w?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0EUAgBC1z5Yhxy3hNFdHAEBBAEBCgEBF?= =?us-ascii?q?gEBAQMBAQEJAQEBgw0BAQEBAYF6py0BkAiEFRmGCYIDUwEBAQEBAQEBAgECEAE?= =?us-ascii?q?BAQoLCQkdMIIzGIMdSQFEQ4htrm+MAoY+hiqDQgGCAwuDCgWIWoYYi2OMWoQ0A?= =?us-ascii?q?pAuApF+gWwig0iBaT00hhQNF4IXAQEB?= X-IPAS-Result: =?us-ascii?q?A0EUAgBC1z5Yhxy3hNFdHAEBBAEBCgEBFgEBAQMBAQEJAQE?= =?us-ascii?q?Bgw0BAQEBAYF6py0BkAiEFRmGCYIDUwEBAQEBAQEBAgECEAEBAQoLCQkdMIIzG?= =?us-ascii?q?IMdSQFEQ4htrm+MAoY+hiqDQgGCAwuDCgWIWoYYi2OMWoQ0ApAuApF+gWwig0i?= =?us-ascii?q?BaT00hhQNF4IXAQEB?= X-IronPort-AV: E=Sophos;i="5.31,574,1473120000"; d="scan'208";a="1156368" Received: from mx1.redhat.com ([209.132.183.28]) by emsm-gh1-uea11.nsa.gov with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Nov 2016 13:48:00 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 783CCC04D2AB for ; Wed, 30 Nov 2016 13:47:59 +0000 (UTC) Received: from Thinkpad_450.brq.redhat.com ([10.40.3.114]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uAUDlwfI026975; Wed, 30 Nov 2016 08:47:58 -0500 From: Vit Mojzis To: selinux@tycho.nsa.gov Subject: [PATCH] python/semanage/semanage: Unify argument handling Date: Wed, 30 Nov 2016 14:47:55 +0100 Message-Id: <1480513675-18212-1-git-send-email-vmojzis@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 30 Nov 2016 13:47:59 +0000 (UTC) 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 Missing argument checks for "fcontext" and "boolean" were performed outside of "argparse", resulting in shortened help message (without argument details) and no error description. Fix: perform these checks using "argparse" as is the case with other semanage options. Some "required argument" check were performed outside of "handle_opts" obscuring the code. Fix: Add required arguments to {fcontext boolean}_args and remove the checks from handle{Fcontext Boolean}. Remove unpaired parentheses from "semanage fcontext" usage message. Signed-off-by: Vit Mojzis --- python/semanage/semanage | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/python/semanage/semanage b/python/semanage/semanage index a445d56..9659aac 100644 --- a/python/semanage/semanage +++ b/python/semanage/semanage @@ -50,7 +50,7 @@ usage_login = "semanage login [-h] [-n] [-N] [-S STORE] [" usage_login_dict = {' --add': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --modify': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --delete': ('LOGIN',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_fcontext = "semanage fcontext [-h] [-n] [-N] [-S STORE] [" -usage_fcontext_dict = {' --add': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC', ')',), ' --delete': ('(', '-t TYPE', '-f FTYPE', '|', '-e EQUAL', ')', 'FILE_SPEC', ')',), ' --modify': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC )',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} +usage_fcontext_dict = {' --add': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --delete': ('(', '-t TYPE', '-f FTYPE', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --modify': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --list': ('[-C]',), ' --extract': ('',), ' --deleteall': ('',)} usage_user = "semanage user [-h] [-n] [-N] [-S STORE] [" usage_user_dict = {' --add': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'selinux_name'')'), ' --delete': ('selinux_name',), ' --modify': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'selinux_name', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} @@ -99,8 +99,8 @@ class seParser(argparse.ArgumentParser): def error(self, message): if len(sys.argv) == 2: self.print_help() - sys.exit(2) - self.print_usage() + else: + self.print_usage() self.exit(2, ('%s: error: %s\n') % (self.prog, message)) @@ -346,10 +346,7 @@ def handleFcontext(args): # 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'), ()]} - if args.action is None: - print("usage: " + "%s" % generate_custom_usage(usage_fcontext, usage_fcontext_dict)) - sys.exit(2) - elif args.action and args.equal: + if args.action and args.equal: handle_opts(args, fcontext_equal_args, "equal") else: handle_opts(args, fcontext_args, args.action) @@ -398,7 +395,7 @@ If you do not specify a file type, the file type will default to "all files". parser_add_noreload(fcontextParser, "fcontext") parser_add_store(fcontextParser, "fcontext") - fcontext_action = fcontextParser.add_mutually_exclusive_group(required=False) + fcontext_action = fcontextParser.add_mutually_exclusive_group(required=True) parser_add_add(fcontext_action, "fcontext") parser_add_delete(fcontext_action, "fcontext") parser_add_modify(fcontext_action, "fcontext") @@ -645,19 +642,9 @@ def setupNodeParser(subparsers): def handleBoolean(args): - 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) - # TODO: should be added to handle_opts logic - elif args.action is "modify" and not args.boolean: - print("boolean name required ") - sys.exit(1) - elif args.action is "modify" and args.boolean and not args.state: - print("state option is needed") - sys.exit(1) - else: - handle_opts(args, boolean_args, args.action) + boolean_args = {'list': [('state', 'boolean'), ('')], 'modify': [('localist'), ('boolean', 'state')], 'extract': [('locallist', 'state', 'boolean'), ('')], 'deleteall': [('locallist'), ('')], 'state': [('locallist', 'list', 'extract', 'deleteall'), ('modify')]} + + handle_opts(args, boolean_args, args.action) OBJECT = object_dict['boolean']() OBJECT.set_reload(args.noreload) @@ -683,7 +670,7 @@ def setupBooleanParser(subparsers): parser_add_store(booleanParser, "boolean") booleanParser.add_argument('boolean', nargs="?", default=None, help=_('boolean')) - boolean_action = booleanParser.add_mutually_exclusive_group(required=False) + boolean_action = booleanParser.add_mutually_exclusive_group(required=True) #add_add(boolean_action) parser_add_modify(boolean_action, "boolean") parser_add_list(boolean_action, "boolean")