From f44995d44e03344b2de7fa4a08ecfccbf5cfd75b Mon Sep 17 00:00:00 2001 From: David Paleino Date: Fri, 16 Dec 2011 22:59:54 +0100 Subject: [PATCH] Remove unused third-party code --- depends/python-iwscan/LICENSE | 504 --------------- depends/python-iwscan/debian/changelog | 89 --- depends/python-iwscan/debian/compat | 1 - depends/python-iwscan/debian/control | 16 - depends/python-iwscan/debian/copyright | 8 - depends/python-iwscan/debian/examples | 1 - depends/python-iwscan/debian/rules | 63 -- depends/python-iwscan/iwlist.py | 84 --- depends/python-iwscan/pyiwscan.c | 827 ------------------------ depends/python-iwscan/setup.py | 15 - depends/python-wpactrl/COPYING | 339 ---------- depends/python-wpactrl/Makefile | 18 - depends/python-wpactrl/README | 31 - depends/python-wpactrl/debian/changelog | 173 ----- depends/python-wpactrl/debian/compat | 1 - depends/python-wpactrl/debian/control | 23 - depends/python-wpactrl/debian/copyright | 15 - depends/python-wpactrl/debian/examples | 1 - depends/python-wpactrl/debian/rules | 62 -- depends/python-wpactrl/example.py | 100 --- depends/python-wpactrl/setup.py | 13 - depends/python-wpactrl/wpa_ctrl.c | 256 -------- depends/python-wpactrl/wpa_ctrl.h | 187 ------ depends/python-wpactrl/wpactrl.c | 428 ------------ 24 files changed, 3255 deletions(-) delete mode 100644 depends/python-iwscan/LICENSE delete mode 100644 depends/python-iwscan/debian/changelog delete mode 100644 depends/python-iwscan/debian/compat delete mode 100644 depends/python-iwscan/debian/control delete mode 100644 depends/python-iwscan/debian/copyright delete mode 100644 depends/python-iwscan/debian/examples delete mode 100755 depends/python-iwscan/debian/rules delete mode 100755 depends/python-iwscan/iwlist.py delete mode 100644 depends/python-iwscan/pyiwscan.c delete mode 100644 depends/python-iwscan/setup.py delete mode 100644 depends/python-wpactrl/COPYING delete mode 100644 depends/python-wpactrl/Makefile delete mode 100644 depends/python-wpactrl/README delete mode 100644 depends/python-wpactrl/debian/changelog delete mode 100644 depends/python-wpactrl/debian/compat delete mode 100644 depends/python-wpactrl/debian/control delete mode 100644 depends/python-wpactrl/debian/copyright delete mode 100644 depends/python-wpactrl/debian/examples delete mode 100755 depends/python-wpactrl/debian/rules delete mode 100644 depends/python-wpactrl/example.py delete mode 100644 depends/python-wpactrl/setup.py delete mode 100644 depends/python-wpactrl/wpa_ctrl.c delete mode 100644 depends/python-wpactrl/wpa_ctrl.h delete mode 100644 depends/python-wpactrl/wpactrl.c diff --git a/depends/python-iwscan/LICENSE b/depends/python-iwscan/LICENSE deleted file mode 100644 index 5ab7695..0000000 --- a/depends/python-iwscan/LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/depends/python-iwscan/debian/changelog b/depends/python-iwscan/debian/changelog deleted file mode 100644 index b1c991a..0000000 --- a/depends/python-iwscan/debian/changelog +++ /dev/null @@ -1,89 +0,0 @@ -python-iwscan (0.7.0-2) unstable; urgency=low - - * Read more closely the debian python packaging guide, and embrace the - pycentral pragma. Remove debian/pycompat and adjust debian/control and - debian/rules accordingly. - - -- Kel Modderman Tue, 08 Apr 2008 00:20:57 +1000 - -python-iwscan (0.7.0-1) unstable; urgency=low - - * Add an upstream-release: target to debian/rules, make this a non-native - package. - * Run code through uncristify, cleanup other coding style stuff. - - -- Kel Modderman Wed, 02 Apr 2008 19:24:41 +1000 - -python-iwscan (0.6.1) unstable; urgency=low - - * Minor cleanups of iwlist.py example. - * No need to use struct keyword for iwreq. - - -- Kel Modderman Thu, 27 Mar 2008 23:56:30 +1000 - -python-iwscan (0.6.0) unstable; urgency=low - - * Add enum_devices() method to iwscan, to discover wireless interfaces and - return them in a list. - * Adjust iwlist example to show iwscan.enum_devices(). - - -- Kel Modderman Thu, 27 Mar 2008 23:28:02 +1000 - -python-iwscan (0.5.1) unstable; urgency=low - - * Remove the custom element, its not very useful, nor is it handled properly - in the absence of event stream management. - - -- Kel Modderman Thu, 27 Mar 2008 02:04:12 +1000 - -python-iwscan (0.5.0) unstable; urgency=low - - * Look up cypher and key-mgmt strings from a struct adapted from iwlist.c. - - -- Kel Modderman Thu, 27 Mar 2008 01:41:26 +1000 - -python-iwscan (0.4.1) unstable; urgency=low - - * Cleanup the example iwlist.py output to be _very_ similar to iwlist. - - -- Kel Modderman Thu, 27 Mar 2008 00:27:28 +1000 - -python-iwscan (0.4.0) unstable; urgency=low - - * More cleanup, arrange key elements in in same order as they're processed. - * Process the custom iw element. - * Keep a 'qual' key, so a common index can be used to sort results. - * Put signal et. al. stats into 'stats' key. - * Update iwlist.py example. - - -- Kel Modderman Wed, 26 Mar 2008 22:36:53 +1000 - -python-iwscan (0.3.1) unstable; urgency=low - - * Cleanup iwlist.py example. - - -- Kel Modderman Wed, 26 Mar 2008 21:22:13 +1000 - -python-iwscan (0.3.0) unstable; urgency=low - - * Use iwlib to format frequency, bitrate and quality. - * Increase scan timeout to 15s, as per current iwlist.c. - * Change 'ap' key to 'bssid'. - * Add iwlist.py script, an iwlist emulator, install it as an example. - - -- Kel Modderman Wed, 26 Mar 2008 21:10:06 +1000 - -python-iwscan (0.2.0) unstable; urgency=low - - * Rename extension to 'iwscan' from 'pyiwscan'. - * Return a dict for the 'wpa' key a cells scan results, it will contain wpa - type and version, a list of authentication suites, a list of pairwaise - ciphers and the group cipher. - - -- Kel Modderman Wed, 26 Mar 2008 15:02:14 +1000 - -python-iwscan (0.1.0) unstable; urgency=low - - * Initial release. - - -- Kel Modderman Thu, 13 Mar 2008 12:21:15 +1000 diff --git a/depends/python-iwscan/debian/compat b/depends/python-iwscan/debian/compat deleted file mode 100644 index 1e8b314..0000000 --- a/depends/python-iwscan/debian/compat +++ /dev/null @@ -1 +0,0 @@ -6 diff --git a/depends/python-iwscan/debian/control b/depends/python-iwscan/debian/control deleted file mode 100644 index a3977e7..0000000 --- a/depends/python-iwscan/debian/control +++ /dev/null @@ -1,16 +0,0 @@ -Source: python-iwscan -Section: python -Priority: optional -Build-Depends: debhelper (>= 6), python-all-dev (>= 2.3.5-11), python (>= 2.4), python-central (>= 0.5.6), libiw-dev -Maintainer: Kel Modderman -XS-Python-Version: >= 2.4 -Standards-Version: 3.7.3 - -Package: python-iwscan -Architecture: any -Depends: ${python:Depends}, ${shlibs:Depends} -Provides: ${python:Provides} -XB-Python-Version: ${python:Versions} -Description: A Python interface to iwlist, using the iwlib library - This module makes the iwlib (Linux Wireless Extensions) functions available - in Python for wireless network scanning. diff --git a/depends/python-iwscan/debian/copyright b/depends/python-iwscan/debian/copyright deleted file mode 100644 index 3908602..0000000 --- a/depends/python-iwscan/debian/copyright +++ /dev/null @@ -1,8 +0,0 @@ -This is the Debian package of a Python iwscan module. - -Files: * -Copyright: (c) 2008 Kel Modderman -License: LGPL-2.1 - -On Debian GNU/Linux systems, the complete text of the GNU Lesser General -Public License can be found in `/usr/share/common-licenses/LGPL-2.1'. diff --git a/depends/python-iwscan/debian/examples b/depends/python-iwscan/debian/examples deleted file mode 100644 index c0b2d19..0000000 --- a/depends/python-iwscan/debian/examples +++ /dev/null @@ -1 +0,0 @@ -iwlist.py diff --git a/depends/python-iwscan/debian/rules b/depends/python-iwscan/debian/rules deleted file mode 100755 index 6c186f3..0000000 --- a/depends/python-iwscan/debian/rules +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/make -f - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -PYVERS=$(shell pyversions -r debian/control) - -build: build-stamp -build-stamp: - dh_testdir - for python in $(PYVERS); do \ - $$python setup.py build; \ - done - touch build-stamp - -clean: - dh_testdir - for python in $(PYVERS); do \ - $$python setup.py clean; \ - done - rm -rf build-stamp build - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - for python in $(PYVERS); do \ - $$python setup.py install --root=debian/python-iwscan; \ - done - -# Build architecture-independent files here. -binary-indep: build install - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs -a - dh_installexamples -a - dh_installchangelogs -a - dh_pycentral -a - dh_strip -a - dh_compress -a - dh_fixperms -a - dh_installdeb -a - dh_shlibdeps -a - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary - -VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version:\s*\([0-9]\+:\)\?\([^\s-]\+\).*/\2/p') -TARBALL := ../python-iwscan-$(VERSION).tar.gz -ORIGTGZ := ../tarballs/python-iwscan_$(VERSION).orig.tar.gz -DIRTREE := $(shell basename $(CURDIR)) -upstream-release: - $(RM) $(TARBALL) $(ORIGTGZ) - tar -czf $(TARBALL) --exclude='.svn' --exclude='debian' -C $(CURDIR)/../ $(DIRTREE) - install -D -m 0644 $(TARBALL) $(ORIGTGZ) diff --git a/depends/python-iwscan/iwlist.py b/depends/python-iwscan/iwlist.py deleted file mode 100755 index 9ffb891..0000000 --- a/depends/python-iwscan/iwlist.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -tt - -__author__ = 'Kel Modderman' -__copyright__ = '(C) 2008 Kel Modderman ' -__license__ = 'GPLv2 or any later version' - -import iwscan -import os -import sys - -def printScanResults(results): - '''Pretty print scan results from list of dicts returned by iwscan.''' - for cellno, cell in enumerate(results): - rj = ' ' * 10 - if cell.get('bssid'): - print(rj + 'Cell %02d - Address: %s' % (cellno + 1, cell['bssid'])) - - rj += ' ' * 10 - if cell.get('essid'): - print(rj + 'ESSID:"%s"' % cell['essid']) - - if cell.get('protocol'): - print(rj + 'Protocol:%s' % cell['protocol']) - - if cell.get('mode'): - print(rj + 'Mode:%s' % cell['mode']) - - if cell.get('frequency') and cell.get('channel'): - print(rj + 'Frequency:%s (Channel %d)' % - (cell['frequency'], cell['channel'])) - - if cell.get('enc'): - enc = 'on' - else: - enc = 'off' - print(rj + 'Encryption key:%s' % enc) - - if cell.get('bitrate'): - print(rj + 'Bit Rate:%s' % cell['bitrate']) - - if cell.get('stats'): - print(rj + cell['stats']) - - if cell.get('ie'): - ie = cell['ie'] - - print(rj + 'IE: %s Version %d' % (ie['type'], ie['version'])) - - ierj = rj + ' ' * 4 - - if ie.get('group'): - print(ierj + 'Group Cipher : %s' % ie['group']) - - if ie.get('pairwise'): - print(ierj + 'Pairwise Ciphers (%d) : %s' % - (len(ie['pairwise']), ' '.join(ie['pairwise']))) - - if ie.get('auth'): - print(ierj + 'Authentication Suites (%d) : %s' % - (len(ie['auth']), ' '.join(ie['auth']))) - - print - - -if __name__ == '__main__': - try: - print('python-iwscan v%d.%d.%d' % iwscan.version()) - print('iwlib v%d - wext v%d\n' % (iwscan.iw_version(), - iwscan.we_version())) - wi = iwscan.enum_devices() - for w in wi: - res = iwscan.WirelessInterface(w).Scan() - if len(res) < 1: - print("%-10sNo scan results." % w) - else: - print("%-10sScan completed :" % w) - printScanResults(res) - except iwscan.error, e: - print("Error: %s" % e) - sys.exit(1) - else: - if len(wi) < 1: - print("No wireless devices detected!") - sys.exit(1) diff --git a/depends/python-iwscan/pyiwscan.c b/depends/python-iwscan/pyiwscan.c deleted file mode 100644 index bffbb2f..0000000 --- a/depends/python-iwscan/pyiwscan.c +++ /dev/null @@ -1,827 +0,0 @@ -/* - * Copyright (c) 2008 Kel Modderman - * License: LGPL v2.1 - * - * This is a fork of pyiw: http://downloads.emperorlinux.com/contrib/pyiw/ - * by jeremy@emperorlinux.com - * - * This module was inspired by (and uses) the iw library that comes with the Linux Wireless Tools - * package. Portions of this module are moderately modified snippets of iwlist.c - */ - -#include -#include -#include - -#define IWSCAN_VERSION_MAJOR 0 -#define IWSCAN_VERSION_MINOR 7 -#define IWSCAN_VERSION_MICRO 0 - -/* ------------------------------------------------------------------------------- from iwlist.c */ - -#define IWSCAN_ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) - -/* Values for the IW_IE_CIPHER_* in GENIE */ -static const char* iwscan_ie_cypher_name[] = { - "none", - "WEP-40", - "TKIP", - "WRAP", - "CCMP", - "WEP-104", -}; -#define IWSCAN_IE_CYPHER_NUM IWSCAN_ARRAY_LEN(iwscan_ie_cypher_name) - -/* Values for the IW_IE_KEY_MGMT_* in GENIE */ -static const char* iwscan_ie_key_mgmt_name[] = { - "none", - "802.1x", - "PSK", -}; -#define IWSCAN_IE_KEY_MGMT_NUM IWSCAN_ARRAY_LEN(iwscan_ie_key_mgmt_name) - -/* --------------------------------------------------------------------------- WirelessInterface */ -typedef struct { - PyObject_HEAD - wireless_info info; - char* ifname; - int sock; -} WirelessInterface; - -typedef enum { - IWSCAN_KE_BSSID, - IWSCAN_KE_FREQUENCY, - IWSCAN_KE_CHANNEL, - IWSCAN_KE_MODE, - IWSCAN_KE_PROTOCOL, - IWSCAN_KE_ESSID, - IWSCAN_KE_ENC, - IWSCAN_KE_BITRATE, - IWSCAN_KE_QUAL, - IWSCAN_KE_STATS, - IWSCAN_KE_IE -} WirelessInterfaceKeyEnum; - -typedef struct { - WirelessInterfaceKeyEnum keys[2]; - PyObject* objs[2]; - int num; -} WirelessInterfaceScanData; - -static char* WirelessInterfaceKeys[] = { - "bssid", - "frequency", - "channel", - "mode", - "protocol", - "essid", - "enc", - "bitrate", - "qual", - "stats", - "ie", -}; -#define IWSCAN_INTERFACE_KEYS IWSCAN_ARRAY_LEN(WirelessInterfaceKeys) - -/* ------------------------------------------------------------------------ Function Definitions */ -typedef struct iw_event iwevent; -typedef struct iwreq iwreq; -typedef struct ifreq ifreq; -typedef struct timeval timeval; -typedef WirelessInterface wiface; -typedef WirelessInterfaceScanData wifacesd; - -static PyObject* iwscan_version(PyObject*, PyObject*); -static PyObject* iwscan_iw_version(PyObject*, PyObject*); -static PyObject* iwscan_we_version(PyObject*, PyObject*); -static PyObject* iwscan_enum_devices(PyObject*, PyObject*); - -static int WirelessInterface_init(wiface*, PyObject*, PyObject*); -static void WirelessInterface_dealloc(wiface*); -static void WirelessInterface_refresh(wiface*); -static int WirelessInterface_len(PyObject*); -static PyObject* WirelessInterface_seqitem(PyObject*, int); - -static PyObject* WirelessInterface_Scan(wiface*); -static PyObject* WirelessInterface_ScanCypher(unsigned int); -static PyObject* WirelessInterface_ScanKeyMgt(unsigned int); -static PyObject* WirelessInterface_ScanIe(unsigned char*, int); -static int WirelessInterface_ScanItem(wifacesd*, iwevent*, iwrange*, int); - -static PyObject* IwScanError; - -/* --------------------------------------------------------------------------- IWSCAN_DOC_STRING */ -static char* IWSCAN_DOC_STRING = - "IWSCAN defines a single class, WirelessInterface, that must be instantiated\n" - "with the name of the real wireless interface you wish to operate on. If\n" - "the interface you specify doesn't exist, or if it doesn't support wireless\n" - "extensions, object creation will fail and iwscan.error will be raised. As an\n" - "important side note: IWSCAN requires at least Wireless Extensions 18.\n\n" - "import iwscan\n" - "import sys\n\n" - "try:\n" - " for w in iwscan.enum_devices():\n" - " print 'Scanning with %s:' % w\n" - " wi = iwscan.WirelessInterface(w)\n" - " wi.Scan()\n" - "except iwscan.error, error:\n" - " print error\n" - " sys.exit(1)\n\n" -; - -/* ---------------------------------------------------------------------- WirelessInterface_init */ -static int WirelessInterface_init(wiface* self, PyObject* args, PyObject* kargs) -{ - const char* ifname; - const size_t ifnamesize; - - memset(&(self->info), 0, sizeof(wireless_info)); - - self->ifname = NULL; - self->sock = 0; - - if (PyArg_ParseTuple(args, "s#", &ifname, &ifnamesize)) { - self->sock = iw_sockets_open(); - - if (self->sock != -1) { - ifreq frq; - - self->ifname = malloc(ifnamesize + 1); - - strncpy(self->ifname, ifname, ifnamesize + 1); - strncpy(frq.ifr_name, self->ifname, IFNAMSIZ); - - if (!ioctl(self->sock, SIOCGIFFLAGS, &frq)) { - frq.ifr_flags |= IFF_UP | IFF_RUNNING; - - ioctl(self->sock, SIOCSIFFLAGS, &frq); - - WirelessInterface_refresh(self); - - return 0; - } - else - PyErr_SetString(IwScanError, "Failed to find device"); - } - else - PyErr_SetString(IwScanError, "Failed to connect to libiw"); - } - - return -1; -} - -/* ------------------------------------------------------------------- WirelessInterface_dealloc */ -static void WirelessInterface_dealloc(wiface* self) -{ - if (self->ifname) - free(self->ifname); - - iw_sockets_close(self->sock); - self->ob_type->tp_free((PyObject*)(self)); -} - -/* ------------------------------------------------------------------- WirelessInterface_refresh */ -static void WirelessInterface_refresh(wiface* self) -{ - iwreq wrq; - - iw_get_basic_config(self->sock, self->ifname, &(self->info.b)); - iw_get_range_info(self->sock, self->ifname, &(self->info.range)); - - iw_get_ext(self->sock, self->ifname, SIOCGIWRATE, &wrq); - memcpy(&(self->info.bitrate), &wrq.u.bitrate, sizeof(iwparam)); - - iw_get_ext(self->sock, self->ifname, SIOCGIWAP, &wrq); - memcpy(&(self->info.ap_addr), &wrq.u.ap_addr, sizeof(sockaddr)); - - iw_get_stats(self->sock, self->ifname, &(self->info.stats), - &(self->info.range), self->info.has_range); -} - -/* ----------------------------------------------------------------------- WirelessInterface_len */ -static int WirelessInterface_len(PyObject* self) -{ - return IWSCAN_INTERFACE_KEYS; -} - -/* ------------------------------------------------------------------- WirelessInterface_seqitem */ -static PyObject* WirelessInterface_seqitem(PyObject* self, int index) -{ - if (index >= 0 && index < IWSCAN_INTERFACE_KEYS) - return Py_BuildValue("s", WirelessInterfaceKeys[index]); - - return NULL; -} - -/* ---------------------------------------------------------------------- WirelessInterface_Scan */ -static PyObject* WirelessInterface_Scan(wiface* self) -{ - iwreq wrq; - unsigned char* buffer = NULL; - int buflen = IW_SCAN_MAX_DATA; - iwrange range; - int has_range; - timeval tv; - int timeout = 15000000; - PyObject* scan_list = NULL; - - has_range = (iw_get_range_info(self->sock, self->ifname, &range) >= 0); - - tv.tv_sec = 0; - tv.tv_usec = 250000; - wrq.u.data.pointer = NULL; - wrq.u.data.flags = 0; - wrq.u.data.length = 0; - - if (iw_set_ext(self->sock, self->ifname, SIOCSIWSCAN, &wrq) < 0) { - if (errno != EPERM) { - PyErr_SetString(IwScanError, "Interface doesn't support scanning"); - return NULL; - } - - tv.tv_usec = 0; - } - - timeout -= tv.tv_usec; - - while (1) { - fd_set rfds; - int last_fd; - int ret; - - FD_ZERO(&rfds); - last_fd = -1; - - ret = select(last_fd + 1, &rfds, NULL, NULL, &tv); - - if (ret < 0) { - if (errno == EAGAIN || errno == EINTR) - continue; - else { - PyErr_SetString(IwScanError, "Unknown scanning error"); - return NULL; - } - } - - if (!ret) { - unsigned char* newbuf; - - realloc: - newbuf = realloc(buffer, buflen); - - if (!newbuf) { - if (buffer) - free(buffer); - - PyErr_SetString(IwScanError, "Memory allocation failure in scan"); - return NULL; - } - - buffer = newbuf; - - wrq.u.data.pointer = buffer; - wrq.u.data.flags = 0; - wrq.u.data.length = buflen; - - if (iw_get_ext(self->sock, self->ifname, SIOCGIWSCAN, &wrq) < 0) { - if ((errno == E2BIG)) { - if (wrq.u.data.length > buflen) - buflen = wrq.u.data.length; - else - buflen *= 2; - - goto realloc; - } - - if (errno == EAGAIN) { - tv.tv_sec = 0; - tv.tv_usec = 100000; - timeout -= tv.tv_usec; - - if (timeout > 0) - continue; - } - - free(buffer); - - PyErr_SetString(IwScanError, "Unable to read scan data"); - return NULL; - } - else - break; - } - } - - if (wrq.u.data.length) { - iwevent iwe; - stream_descr stream; - int ret; - PyObject* scan_dict = NULL; - - scan_list = PyList_New(0); - - iw_init_event_stream(&stream, (char*)(buffer), wrq.u.data.length); - - do { - ret = iw_extract_event_stream(&stream, &iwe, range.we_version_compiled); - - if (ret > 0) { - wifacesd sd; - int sr = WirelessInterface_ScanItem(&sd, &iwe, &range, has_range); - - if (sr) { - int i; - - if (scan_dict) { - PyList_Append(scan_list, scan_dict); - Py_DECREF(scan_dict); - } - - scan_dict = PyDict_New(); - - for (i = 0; i < IWSCAN_INTERFACE_KEYS; i++) { - PyMapping_SetItemString(scan_dict, - WirelessInterfaceKeys[i], - Py_BuildValue("")); - } - } - - if (sd.num) { - int i; - - for (i = 0; i < sd.num; i++) { - PyMapping_SetItemString(scan_dict, - WirelessInterfaceKeys[sd.keys[i]], - sd.objs[i]); - - Py_DECREF(sd.objs[i]); - } - } - } - } while (ret > 0); - - PyList_Append(scan_list, scan_dict); - Py_XDECREF(scan_dict); - } - else - return Py_BuildValue("[]"); - - free(buffer); - - return scan_list; -} - -/* ---------------------------------------------------------------- WirelessInterface_ScanCypher */ -static PyObject* WirelessInterface_ScanCypher(unsigned int value) -{ - if (value >= IWSCAN_IE_CYPHER_NUM) - return Py_BuildValue(""); - - return Py_BuildValue("s", iwscan_ie_cypher_name[value]); -} - -/* ---------------------------------------------------------------- WirelessInterface_ScanKeyMgt */ -static PyObject* WirelessInterface_ScanKeyMgt(unsigned int value) -{ - if (value >= IWSCAN_IE_KEY_MGMT_NUM) - return Py_BuildValue(""); - - return Py_BuildValue("s", iwscan_ie_key_mgmt_name[value]); -} - -/* -------------------------------------------------------------------- WirelessInterface_ScanIe */ -static PyObject* WirelessInterface_ScanIe(unsigned char* iebuf, int buflen) -{ - int ielen = iebuf[1] + 2; - int offset = 2; - unsigned char wpa1_oui[3] = { 0x00, 0x50, 0xf2 }; - unsigned char wpa2_oui[3] = { 0x00, 0x0f, 0xac }; - unsigned char* wpa_oui; - int i; - uint16_t ver = 0; - uint16_t cnt = 0; - PyObject* auth_list = PyList_New(0); - PyObject* pairwise_list = PyList_New(0); - PyObject* wpa_dict = PyDict_New(); - - PyMapping_SetItemString(wpa_dict, "auth", auth_list); - PyMapping_SetItemString(wpa_dict, "group", Py_BuildValue("")); - PyMapping_SetItemString(wpa_dict, "pairwise", pairwise_list); - PyMapping_SetItemString(wpa_dict, "type", Py_BuildValue("")); - PyMapping_SetItemString(wpa_dict, "version", Py_BuildValue("")); - if (ielen > buflen) { - ielen = buflen; - } - - switch (iebuf[0]) { - case 0x30: - if (ielen < 4) { - return wpa_dict; - } - - wpa_oui = wpa2_oui; - break; - case 0xdd: - wpa_oui = wpa1_oui; - - if ((ielen < 8) - || (memcmp(&iebuf[offset], wpa_oui, 3) != 0) - || (iebuf[offset + 3] != 0x01)) - return wpa_dict; - - offset += 4; - break; - default: - return wpa_dict; - } - - ver = iebuf[offset] | (iebuf[offset + 1] << 8); - offset += 2; - - PyMapping_SetItemString(wpa_dict, "version", Py_BuildValue("i", ver)); - if (iebuf[0] == 0xdd) - PyMapping_SetItemString(wpa_dict, "type", Py_BuildValue("s", "WPA")); - if (iebuf[0] == 0x30) - PyMapping_SetItemString(wpa_dict, "type", Py_BuildValue("s", "IEEE 802.11i/WPA2")); - - if (ielen < (offset + 4)) { - PyMapping_SetItemString(wpa_dict, "group", Py_BuildValue("s", "TKIP")); - PyList_Append(pairwise_list, Py_BuildValue("s", "TKIP")); - PyMapping_SetItemString(wpa_dict, "pairwise", pairwise_list); - return wpa_dict; - } - - if (memcmp(&iebuf[offset], wpa_oui, 3) != 0) - PyMapping_SetItemString(wpa_dict, "group", Py_BuildValue("s", "Proprietary")); - else - PyMapping_SetItemString(wpa_dict, "group", WirelessInterface_ScanCypher(iebuf[offset + 3])); - - offset += 4; - - if (ielen < (offset + 2)) { - PyList_Append(pairwise_list, Py_BuildValue("s", "TKIP")); - PyMapping_SetItemString(wpa_dict, "pairwise", pairwise_list); - return wpa_dict; - } - - cnt = iebuf[offset] | (iebuf[offset + 1] << 8); - offset += 2; - - if (ielen < (offset + 4 * cnt)) - return wpa_dict; - - for (i = 0; i < cnt; i++) { - if (memcmp(&iebuf[offset], wpa_oui, 3) != 0) - PyList_Append(pairwise_list, Py_BuildValue("s", "Proprietary")); - else - PyList_Append(pairwise_list, WirelessInterface_ScanCypher(iebuf[offset + 3])); - - offset += 4; - } - PyMapping_SetItemString(wpa_dict, "pairwise", pairwise_list); - - cnt = iebuf[offset] | (iebuf[offset + 1] << 8); - offset += 2; - - if (ielen < (offset + 4 * cnt)) - return wpa_dict; - - for (i = 0; i < cnt; i++) { - if (memcmp(&iebuf[offset], wpa_oui, 3) != 0) - PyList_Append(auth_list, Py_BuildValue("s", "Proprietary")); - else - PyList_Append(auth_list, WirelessInterface_ScanKeyMgt(iebuf[offset + 3])); - - offset += 4; - } - PyMapping_SetItemString(wpa_dict, "auth", auth_list); - - return wpa_dict; -} - -/* ------------------------------------------------------------------ WirelessInterface_ScanItem */ -static int WirelessInterface_ScanItem(wifacesd* data, iwevent* event, iwrange* range, int has_range) -{ - static char buf[128]; - - memset(data, 0, sizeof(wifacesd)); - - switch (event->cmd) { - case SIOCGIWAP: { - iw_ether_ntop((const struct ether_addr*)(event->u.ap_addr.sa_data), buf); - - data->keys[0] = IWSCAN_KE_BSSID; - data->objs[0] = Py_BuildValue("s", buf); - data->num = 1; - - return 1; - } - - case SIOCGIWFREQ: { - double freq = iw_freq2float(&(event->u.freq)); - int channel; - - if (freq <= 14.0) - channel = iw_channel_to_freq((int)(freq), &freq, range); - else - channel = iw_freq_to_channel(freq, range); - - iw_print_freq_value(buf, sizeof(buf), freq); - - data->keys[0] = IWSCAN_KE_FREQUENCY; - data->keys[1] = IWSCAN_KE_CHANNEL; - data->objs[0] = Py_BuildValue("s", buf); - data->objs[1] = Py_BuildValue("i", channel); - data->num = 2; - - return 0; - } - - case SIOCGIWMODE: { - data->keys[0] = IWSCAN_KE_MODE; - data->objs[0] = Py_BuildValue("s", iw_operation_mode[event->u.mode]); - data->num = 1; - - return 0; - } - - case SIOCGIWNAME: { - data->keys[0] = IWSCAN_KE_PROTOCOL; - data->objs[0] = Py_BuildValue("s", event->u.name); - data->num = 1; - - return 0; - } - - case SIOCGIWESSID: { - memcpy(buf, event->u.essid.pointer, event->u.essid.length); - buf[event->u.essid.length] = 0x0; - - data->keys[0] = IWSCAN_KE_ESSID; - data->objs[0] = Py_BuildValue("s", buf); - data->num = 1; - - return 0; - } - - case SIOCGIWENCODE: { - PyObject* pybool; - - if (event->u.data.flags & IW_ENCODE_DISABLED) pybool = Py_False; - else pybool = Py_True; - - Py_INCREF(pybool); - - data->keys[0] = IWSCAN_KE_ENC; - data->objs[0] = pybool; - data->num = 1; - - return 0; - } - - case SIOCGIWRATE: { - iw_print_bitrate(buf, sizeof(buf), event->u.bitrate.value); - - data->keys[0] = IWSCAN_KE_BITRATE; - data->objs[0] = Py_BuildValue("s", buf); - data->num = 1; - - return 0; - } - - case IWEVQUAL: { - iw_print_stats(buf, sizeof(buf), &event->u.qual, range, has_range); - - data->keys[0] = IWSCAN_KE_QUAL; - data->keys[1] = IWSCAN_KE_STATS; - data->objs[0] = Py_BuildValue("i", event->u.qual.qual); - data->objs[1] = Py_BuildValue("s", buf); - data->num = 2; - - return 0; - } - - case IWEVGENIE: { - unsigned char* buffer = event->u.data.pointer; - int buflen = event->u.data.length; - int offset = 0; - - data->keys[0] = IWSCAN_KE_IE; - - //PyObject* ie_list = PyList_New(0); - //data->objs[0] = ie_list; - while (offset <= (buflen - 2)) { - //PyList_Append(ie_list, WirelessInterface_ScanIe(buffer + offset, buflen)); - data->objs[0] = WirelessInterface_ScanIe(buffer + offset, buflen); - offset += buffer[offset + 1] + 2; - } - - data->num = 1; - - return 0; - } - - default: - return 0; - } -} - -/* -------------------------------------------------------------------- Member/Method Structures */ -static PyMethodDef module_methods[] = { - { - "version", iwscan_version, METH_NOARGS, - "Returns the current IwScan version." - }, - { - "iw_version", iwscan_iw_version, METH_NOARGS, - "Returns the current Wireless Extnesions (libiw WE) version." - }, - { - "we_version", iwscan_we_version, METH_NOARGS, - "Returns the current Wireless Extensions (kernel-level WE) version." - }, - { - "enum_devices", iwscan_enum_devices, METH_NOARGS, - "Returns list of wireless devices." - }, - { NULL, NULL, 0, NULL } -}; - -static PyMethodDef WirelessInterface_methods[] = { - { - "Scan", (PyCFunction)(WirelessInterface_Scan), METH_NOARGS, - "This function will attempt to scan any local AP's and return a tuple\n" - "of objectes representing the data contained therein." - }, - { NULL, NULL, 0, NULL } -}; - -static PyMappingMethods WirelessInterface_mapping_methods = { - WirelessInterface_len, /* length */ -}; - -static PySequenceMethods WirelessInterface_sequence_methods = { - WirelessInterface_len, /* sq_length */ - 0, /* sq_concat */ - 0, /* sq_repeat */ - WirelessInterface_seqitem, /* sq_item */ - 0, /* sq_slice */ - 0, /* sq_ass_item */ - 0, /* sq_ass_slice */ - 0, /* sq_contains */ - 0, /* sq_inplace_concat */ - 0 /* sq_inplace_repeat */ -}; - -/* -------------------------------------------------------------------- PyType_WirelessInterface */ -static PyTypeObject PyType_WirelessInterface = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ - "iwscan.WirelessInterface", /* tp_name */ - sizeof(WirelessInterface), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)(WirelessInterface_dealloc), /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - &WirelessInterface_sequence_methods, /* tp_as_sequence */ - &WirelessInterface_mapping_methods, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - WirelessInterface_methods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)(WirelessInterface_init), /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ - 0 /* tp_del */ -}; - -/* ---------------------------------------------------------------------------------- initiwscan */ -PyMODINIT_FUNC initiwscan(void) -{ - PyObject* module; - - PyType_Ready(&PyType_WirelessInterface); - - module = Py_InitModule3("iwscan", module_methods, IWSCAN_DOC_STRING); - IwScanError = PyErr_NewException("iwscan.error", NULL, NULL); - - Py_INCREF(&PyType_WirelessInterface); - Py_INCREF(IwScanError); - - PyModule_AddObject(module, "WirelessInterface", (PyObject*)(&PyType_WirelessInterface)); - PyModule_AddObject(module, "error", IwScanError); -} - -static PyObject* iwscan_version(PyObject* u1, PyObject* u2) -{ - return Py_BuildValue("(iii)", - IWSCAN_VERSION_MAJOR, - IWSCAN_VERSION_MINOR, - IWSCAN_VERSION_MICRO); -} - -static PyObject* iwscan_iw_version(PyObject* u1, PyObject* u2) -{ - return Py_BuildValue("i", WE_VERSION); -} - -static PyObject* iwscan_we_version(PyObject* u1, PyObject* u2) -{ - return Py_BuildValue("i", iw_get_kernel_we_version()); -} - -static inline char* iwscan_get_ifname(char* name, int nsize, char* buf) -{ - char* end; - - while (isspace(*buf)) - buf++; - - end = strstr(buf, ": "); - - if ((end == NULL) || (((end - buf) + 1) > nsize)) - return NULL; - - memcpy(name, buf, (end - buf)); - name[end - buf] = '\0'; - - return end; -} - -static int iwscan_ifname_hasiwname(char* ifname) -{ - int ret = 0; - int skfd; - iwreq wrq; - - if ((skfd = iw_sockets_open()) >= 0) { - if (iw_get_ext(skfd, ifname, SIOCGIWNAME, &wrq) >= 0) - ret++; - - iw_sockets_close(skfd); - } - - return ret; -} - -static PyObject* iwscan_enum_devices(PyObject* u1, PyObject* u2) -{ - char buff[1024]; - FILE* fh; - PyObject* ifnames = PyList_New(0); - - fh = fopen(PROC_NET_WIRELESS, "r"); - - if (fh != NULL) { - fgets(buff, sizeof(buff), fh); - fgets(buff, sizeof(buff), fh); - - while (fgets(buff, sizeof(buff), fh)) { - char name[IFNAMSIZ + 1]; - char *s; - - if ((buff[0] == '\0') || (buff[1] == '\0')) - continue; - - s = iwscan_get_ifname(name, sizeof(name), buff); - - if (!s) - continue; - - if (iwscan_ifname_hasiwname(name) > 0) - PyList_Append(ifnames, Py_BuildValue("s", name)); - } - fclose(fh); - } - - return ifnames; -} diff --git a/depends/python-iwscan/setup.py b/depends/python-iwscan/setup.py deleted file mode 100644 index 539b0bf..0000000 --- a/depends/python-iwscan/setup.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python - -'''Setup script for the iwscan extension.''' - -import distutils -from distutils.core import setup -from distutils.extension import Extension - -ext = Extension(name = 'iwscan', - libraries = ['iw'], - sources = ['pyiwscan.c']) - -setup(name = 'iwscan', - description = 'Python bindings for wireless scanning via iwlib', - ext_modules = [ext]) diff --git a/depends/python-wpactrl/COPYING b/depends/python-wpactrl/COPYING deleted file mode 100644 index d511905..0000000 --- a/depends/python-wpactrl/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/depends/python-wpactrl/Makefile b/depends/python-wpactrl/Makefile deleted file mode 100644 index bf77653..0000000 --- a/depends/python-wpactrl/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -PYTHON ?= python -SETUP := setup.py - -build: - $(PYTHON) $(SETUP) $@ - -install: -ifdef DESTDIR - $(PYTHON) $(SETUP) $@ --root=$(DESTDIR) -else - $(PYTHON) $(SETUP) $@ -endif - -clean: - $(PYTHON) $(SETUP) $@ - rm -rf build - -.PHONY: build install clean diff --git a/depends/python-wpactrl/README b/depends/python-wpactrl/README deleted file mode 100644 index 918abda..0000000 --- a/depends/python-wpactrl/README +++ /dev/null @@ -1,31 +0,0 @@ -python-wpactrl --------------- -A Python extension for wpa_supplicant/hostapd control interface access - -Description ------------ -wpactrl defines a single class, WPACtrl, that must be instantiated -with the pathname of a UNIX domain socket control interface of a -wpa_supplicant/hostapd daemon. - -Once a WPACtrl object has been instantiated, it may call several -helper methods to interact with the wpa_supplicant/hostapd daemon. -If an error occurs, a wpactrl.error exception is raised. - -The destructor of a WPACtrl instance closes the connection to the -control interface socket. - -Recommendations for the use of wpa_supplicant/hostapd control -interface access in external programs are at: - - -Installation ------------- -make -make install - -Two Makefile variables may be specified on the command line; PYTHON and -DESTDIR. - -PYTHON - Python executable that should be called (eg. python2.5) -DESTDIR - Alternative root destination directory diff --git a/depends/python-wpactrl/debian/changelog b/depends/python-wpactrl/debian/changelog deleted file mode 100644 index 2f57dae..0000000 --- a/depends/python-wpactrl/debian/changelog +++ /dev/null @@ -1,173 +0,0 @@ -python-wpactrl (1.0.1-1) unstable; urgency=low - - * Mark ctrl_iface_path and attached instance attributes as readonly. - - -- Kel Modderman Fri, 25 Apr 2008 13:17:03 +1000 - -python-wpactrl (1.0.0-1) unstable; urgency=low - - * Major version 1.0.0, first release to the wild. - * Add/enhance doc strings for extension and all methods. - * Just return None for attach() and detach() methods, they can only fail - and raise error or succeed. - * Add Vcs fields to debian/control. - * Do not hardcode a python version in Makefile. - * Add DESTDIR support to Makefile. - * Use upstream Makefile in debian/rules instead of calling setup.py - directly. - * Fix lintian error in package debian/control long description by - capitalizing Python. - * Add entry for wpactrl.c in debian/copyright, adding original Authour's - name and copyright statement. - * Add a .PHONY entry to Makefile, so that 'build' can be called more than - once, for eg., multiple python versions. - * Add README file including description and installation blurbs. - * Add copyright/license information to example.py. - * Enhance the use of the attached WPACtrl struct member, explicitly checking - and setting its value. - * Don't allow an WPACtrl instance to attach() more than once, similarly only - allow the detach() method to do something if the instance previously - attach()'d. - * Remove the isattached() WPACtrl instance method. - * Remove embedded code example from wpactrl doc string. - * Expose the attached WPACtrl struct member as an instance data attribute. - - -- Kel Modderman Wed, 23 Apr 2008 13:44:28 +1000 - -python-wpactrl (0.10.0-2) unstable; urgency=low - - * Update extended package description in debian/control. - * Add reference to upstream control interface specification to wpactrl.c - header. - - -- Kel Modderman Tue, 22 Apr 2008 10:20:45 +1000 - -python-wpactrl (0.10.0-1) unstable; urgency=low - - * Add attached to wpactrl struct, to act as boolean when object as - registered as event monitor. - * Add attached() object method to return pythonic boolean based on state of - attached wpactrl struct member. - * Reorder the object method heirachy to match that of wpa_ctrl.h more - closely. - * Remove check for self->ctrl_iface in each object method, that condition - cannot be possible since object will raise an exception of - self->ctrl_iface could not be created at init. - * Adhere to the CapWords convention for the class name, renaming wpactrl - class to WPACtrl. - - -- Kel Modderman Mon, 21 Apr 2008 16:40:52 +1000 - -python-wpactrl (0.9.1-1) unstable; urgency=low - - * Rename wpactrl_dealloc() object method to wpactrl_close(). - * Add wpactrl_attach() and wpactrl_detach() object methods. - - -- Kel Modderman Mon, 21 Apr 2008 03:47:14 +1000 - -python-wpactrl (0.9.0-1) unstable; urgency=low - - * Don't open two sockets for 2-way communication, one socket returned by - wpa_ctrl_open() is sufficient for sending and receiving. - * Don't include (and allocate memory for) the sendbuf and recvbuf wpactrl - struct members. - * Fix check of path string length, to make sure we are able to allocate - enough memory to accommodate it. - * Don't rely on python's PyArg_ParseTuple() to return length of argument in - wpactrl_request() method, just use strlen instead. - * Rename socket object member to ctrl_iface_path. - * Rename close() object method to detach(). - * If wpactrl_reattach() method fails, allow exception to be raised rather - than returning false. - * Rename wpactrl_init() object method to wpactrl_open(). - - -- Kel Modderman Mon, 21 Apr 2008 02:59:30 +1000 - -python-wpactrl (0.8.0-1) unstable; urgency=low - - * Drop recevents method and helper function. - * Overhaul wpactrl_init, doing paranoid chanking that every allocation of - memory and so on is completed. - * free() send and recv buffers in wpactrl_close() to ensure we do not leak - memory should we choose to reattach(). - - -- Kel Modderman Fri, 18 Apr 2008 22:52:54 +1000 - -python-wpactrl (0.7.1-1) unstable; urgency=low - - * More code cleanups, rename wpactrlError to wpactrl_error for consistency. - * Shorten the version defines. - * Add wpactrl_members structure to provide access to path attribute of - wpactrl instances. - * Rename the path attribute to socket. Remove socket wpactrl method. - * Check if bss command returned a string starting with bssid rather than - testing string length, it could return UNKNOWN COMMAND or FAILED. - * Rename events method to recvevents, to be more descriptive about expected - action. - * Numerous trivial code beautifications. - * Bugfix output of example.py. - * Include a changelog in the tarball generated by "upstream-release". - * Check pathsize is less than allocated size. - - -- Kel Modderman Fri, 18 Apr 2008 16:47:03 +1000 - -python-wpactrl (0.7.0-1) unstable; urgency=low - - * Make all methods lower case. - * Use wpactrl namespace instead of WPACtrl. - - -- Kel Modderman Thu, 17 Apr 2008 01:20:02 +1000 - -python-wpactrl (0.6.0-1) unstable; urgency=low - - * Add -fno-strict-aliasing to compiler flags to silence noise with - python2.5. - * Global rename of 'buff' to 'buf'. - * Add Reattach() method, to reattach monitor to a wpa_ctrl path that was - previously attached by recycling the WPACtrl_init() function. - * Take better care of handling all possible return values for the - wpa_ctrl_*() functions. - * Recycle WPACtrl_Recv() when collecting a list of events for the - RecvPendingEvents() method. - * Readd the Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS keywords around - the wpa_ctrl_recv() in Recv() method, as the forked upstream seemed to - support threading at that point. - * Update example.py to show commands as they are executed, similar in - appearance to IDLE. - - -- Kel Modderman Thu, 17 Apr 2008 00:41:54 +1000 - -python-wpactrl (0.5.0-1) unstable; urgency=low - - * Ensure send or recv socket is open before attempting to access it via one - of the WPACtrl object methods. - * Take care that the Recv() method is not blocking, return None if - wpa_ctrl_pending indicates we have nothing pending. - - -- Kel Modderman Fri, 11 Apr 2008 16:32:35 +1000 - -python-wpactrl (0.4.2-1) unstable; urgency=low - - * Install example.py in examples directory. - * Retain SocketPath() method from original extension source. - - -- Kel Modderman Wed, 09 Apr 2008 21:30:13 +1000 - -python-wpactrl (0.4.1-1) unstable; urgency=low - - * Return NULL when an exception is to be raised in ScanResults() method due - to failure of wpa_ctrl_request(). - * Minor formatting cleanups. - * Remove ./build directory in debian/rules clean: target. - * Don't mark functions explicitly as inline, let the compiler make those - decisions. - * Enhance example.py to show of a few of wpactrl's methods, and to not - hardcode interface name for easier testing. - - -- Kel Modderman Tue, 08 Apr 2008 17:20:27 +1000 - -python-wpactrl (0.4.0-1) unstable; urgency=low - - * Initial release. - - -- Kel Modderman Mon, 07 Apr 2008 23:27:14 +1000 diff --git a/depends/python-wpactrl/debian/compat b/depends/python-wpactrl/debian/compat deleted file mode 100644 index 1e8b314..0000000 --- a/depends/python-wpactrl/debian/compat +++ /dev/null @@ -1 +0,0 @@ -6 diff --git a/depends/python-wpactrl/debian/control b/depends/python-wpactrl/debian/control deleted file mode 100644 index dcf8a90..0000000 --- a/depends/python-wpactrl/debian/control +++ /dev/null @@ -1,23 +0,0 @@ -Source: python-wpactrl -Section: python -Priority: optional -Build-Depends: debhelper (>= 6), python-all-dev (>= 2.3.5-11), python (>= 2.4), python-central (>= 0.5.6) -Maintainer: Kel Modderman -XS-Python-Version: >=2.4 -Standards-Version: 3.7.3 -Vcs-Svn: http://svn.projects.otaku42.de/python-wpactrl/trunk/ -Vcs-Browser: http://projects.otaku42.de/browser/python-wpactrl/trunk/ - -Package: python-wpactrl -Architecture: any -Depends: ${python:Depends}, ${shlibs:Depends} -Suggests: wpasupplicant, hostapd -Provides: ${python:Provides} -XB-Python-Version: ${python:Versions} -Description: A Python extension for wpa_supplicant/hostapd control interface access - wpa_supplicant/hostapd implements a control interface that can be used by - external programs to control the operations of the wpa_supplicant/hostapd - daemon and to get status information and event notifications. The WPACtrl - class provided by python-wpactrl allows Python programs to use helper - functions to connect with the UNIX domain socket form of control interface - and communicate with a wpa_supplicant/hostapd daemon. diff --git a/depends/python-wpactrl/debian/copyright b/depends/python-wpactrl/debian/copyright deleted file mode 100644 index 2fbef7d..0000000 --- a/depends/python-wpactrl/debian/copyright +++ /dev/null @@ -1,15 +0,0 @@ -Files: * -Copyright: (c) 2008 Kel Modderman -License: GPL-2 - -Files: wpactrl.c -Copyright: (c) 2008 Kel Modderman - (c) 2006 Jeremy Moles -License: GPL-2 - -Files: wpa_ctrl.* -Copyright: (c) 2004-2007, Jouni Malinen -License: GPL-2 | BSD - -On Debian GNU/Linux systems, the complete text of the GNU Lesser General -Public License can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/depends/python-wpactrl/debian/examples b/depends/python-wpactrl/debian/examples deleted file mode 100644 index f9882ef..0000000 --- a/depends/python-wpactrl/debian/examples +++ /dev/null @@ -1 +0,0 @@ -example.py diff --git a/depends/python-wpactrl/debian/rules b/depends/python-wpactrl/debian/rules deleted file mode 100755 index 193f309..0000000 --- a/depends/python-wpactrl/debian/rules +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/make -f - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -PYVERS=$(shell pyversions -r debian/control) - -build: build-stamp -build-stamp: - dh_testdir - for python in $(PYVERS); do \ - $(MAKE) build PYTHON=$$python ; \ - done - touch build-stamp - -clean: - dh_testdir - for python in $(PYVERS); do \ - $(MAKE) clean PYTHON=$$python ; \ - done - dh_clean build-stamp - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - for python in $(PYVERS); do \ - $(MAKE) install PYTHON=$$python DESTDIR=$(CURDIR)/debian/python-wpactrl ; \ - done - -binary-indep: build install - -binary-arch: build install - dh_testdir - dh_testroot - dh_installdocs -a - dh_installexamples -a - dh_installchangelogs -a - dh_pycentral -a - dh_strip -a - dh_compress -a - dh_fixperms -a - dh_installdeb -a - dh_shlibdeps -a - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary - -VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version:\s*\([0-9]\+:\)\?\([^\s-]\+\).*/\2/p') -TARBALL := $(CURDIR)/../python-wpactrl-$(VERSION).tar.gz -ORIGTGZ := $(CURDIR)/../tarballs/python-wpactrl_$(VERSION).orig.tar.gz -DIRTREE := $(shell basename $(CURDIR)) -upstream-release: - $(RM) $(TARBALL) $(ORIGTGZ) - cp $(CURDIR)/debian/changelog $(CURDIR)/CHANGELOG - tar -czf $(TARBALL) --exclude='.svn' --exclude='debian' -C $(CURDIR)/../ $(DIRTREE) - install -D -m 0644 $(TARBALL) $(ORIGTGZ) - $(RM) $(CURDIR)/CHANGELOG diff --git a/depends/python-wpactrl/example.py b/depends/python-wpactrl/example.py deleted file mode 100644 index a9f4df7..0000000 --- a/depends/python-wpactrl/example.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/python - -'''Example usage of the wpactrl extension.''' - -__author__ = 'Kel Modderman' -__copyright__ = '(c) 2008 Kel Modderman ' -__license__ = 'GPLv2' - -import os -import sys -import time -import wpactrl - -run = '/var/run/wpa_supplicant' - -if __name__ == "__main__": - print '>>> wpactrl version %d.%d.%d ...' % wpactrl.version() - - sockets = [] - if os.path.isdir(run): - try: - sockets = [os.path.join(run, i) for i in os.listdir(run)] - except OSError, error: - print 'Error:', error - sys.exit(1) - - if len(sockets) < 1: - print 'No wpa_ctrl sockets found in %s, aborting.' % run - sys.exit(1) - - for s in sockets: - try: - print '>>> # Open a ctrl_iface connection' - print '>>> wpa = wpactrl.WPACtrl("%s")' % s - wpa = wpactrl.WPACtrl(s) - - print '>>> # Location of ctrl_iface socket' - print '>>> wpa.ctrl_iface_path' - print wpa.ctrl_iface_path - - print '>>> # Request a few commands' - print '>>> wpa.request("PING")' - print wpa.request('PING') - - print '>>> wpa.request("STATUS")' - print wpa.request('STATUS') - - print '>>> wpa.request("LIST_NETWORKS")' - print wpa.request('LIST_NETWORKS') - - time.sleep(1) - - print '>>> # Open a new ctrl_iface connection for receiving event' - print '>>> # messages' - print '>>> wpa_event = wpactrl.WPACtrl("%s")' % s - wpa_event = wpactrl.WPACtrl(s) - - print '>>> wpa_event.attached' - print wpa_event.attached - print '>>> wpa_event.attach()' - wpa_event.attach() - print '>>> wpa_event.attached' - print wpa_event.attached - - print '>>> # Request commands via original ctrl_iface connection' - print '>>> wpa.request("SCAN")' - print wpa.request('SCAN') - - time.sleep(1) - - print '>>> wpa.request("STATUS")' - print wpa.request('STATUS') - - print '>>> # Waiting 10s for pending events ...' - time.sleep(10) - - print '>>> # Check for pending events and collect them' - print '>>> while wpa_event.pending():' - print '>>> ....wpa_event.recv()' - while wpa_event.pending(): - print wpa_event.recv() - - print '>>> # Request scan results (wpa_supplicant only)' - print '>>> results = wpa.scanresults()' - print '>>> for no, bss in enumerate(results):' - print '>>> ....print \'bss(%d):\' % no' - print '>>> ....print bss' - results = wpa.scanresults() - for no, bss in enumerate(results): - print 'bss(%d):' % no - print bss - - print '>>> # Detach the event monitor' - print '>>> wpa_event.detach()' - wpa_event.detach() - - print '>>> # Finished!' - except wpactrl.error, error: - print 'Error:', error - pass diff --git a/depends/python-wpactrl/setup.py b/depends/python-wpactrl/setup.py deleted file mode 100644 index 9745b3e..0000000 --- a/depends/python-wpactrl/setup.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/python - -'''Setup script for the wpactrl extension.''' - -import distutils -from distutils.core import setup -from distutils.extension import Extension - -ext = Extension(name = 'wpactrl', sources = ['wpa_ctrl.c', 'wpactrl.c'], - extra_compile_args = ["-fno-strict-aliasing"]) - -setup(name = 'wpactrl', ext_modules = [ext], - description = 'Python bindings for wpa_supplicant/hostapd ctrl socket.') diff --git a/depends/python-wpactrl/wpa_ctrl.c b/depends/python-wpactrl/wpa_ctrl.c deleted file mode 100644 index 6e01a9e..0000000 --- a/depends/python-wpactrl/wpa_ctrl.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Modifed version of src/common/wpa_ctrl.c from wpa_supplicant, discarding - * all code paths except for CONFIG_CTRL_IFACE_UNIX. Define strlcpy inline, - * it is not provided by GNU libc. - * Copyright (c) 2008, Kel Modderman - * - * wpa_supplicant/hostapd control interface library - * Copyright (c) 2004-2007, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Alternatively, this software may be distributed under the terms of BSD - * license. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "wpa_ctrl.h" - -/** - * strlcpy - Copy a string with size bound and NUL-termination - * @dest: Destination - * @src: Source - * @siz: Size of the target buffer - * Returns: Total length of the target string (length of src) (not including - * NUL-termination) - * - * This function matches in behavior with the strlcpy(3) function in OpenBSD. - */ -size_t strlcpy(char *dest, const char *src, size_t siz) -{ - const char *s = src; - size_t left = siz; - - if (left) { - /* Copy string up to the maximum size of the dest buffer */ - while (--left != 0) { - if ((*dest++ = *s++) == '\0') - break; - } - } - - if (left == 0) { - /* Not enough room for the string; force NUL-termination */ - if (siz != 0) - *dest = '\0'; - while (*s++) - ; /* determine total src string length */ - } - - return s - src - 1; -} - - -/** - * struct wpa_ctrl - Internal structure for control interface library - * - * This structure is used by the wpa_supplicant/hostapd control interface - * library to store internal data. Programs using the library should not touch - * this data directly. They can only use the pointer to the data structure as - * an identifier for the control interface connection and use this as one of - * the arguments for most of the control interface library functions. - */ -struct wpa_ctrl { - int s; - struct sockaddr_un local; - struct sockaddr_un dest; -}; - - -struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path) -{ - struct wpa_ctrl *ctrl; - static int counter = 0; - int ret; - size_t res; - - ctrl = malloc(sizeof(*ctrl)); - if (ctrl == NULL) - return NULL; - memset(ctrl, 0, sizeof(*ctrl)); - - ctrl->s = socket(PF_UNIX, SOCK_DGRAM, 0); - if (ctrl->s < 0) { - free(ctrl); - return NULL; - } - - ctrl->local.sun_family = AF_UNIX; - ret = snprintf(ctrl->local.sun_path, sizeof(ctrl->local.sun_path), - "/tmp/wpa_ctrl_%d-%d", getpid(), counter++); - if (ret < 0 || (size_t) ret >= sizeof(ctrl->local.sun_path)) { - close(ctrl->s); - free(ctrl); - return NULL; - } - if (bind(ctrl->s, (struct sockaddr *) &ctrl->local, - sizeof(ctrl->local)) < 0) { - close(ctrl->s); - free(ctrl); - return NULL; - } - - ctrl->dest.sun_family = AF_UNIX; - res = strlcpy(ctrl->dest.sun_path, ctrl_path, - sizeof(ctrl->dest.sun_path)); - if (res >= sizeof(ctrl->dest.sun_path)) { - close(ctrl->s); - free(ctrl); - return NULL; - } - if (connect(ctrl->s, (struct sockaddr *) &ctrl->dest, - sizeof(ctrl->dest)) < 0) { - close(ctrl->s); - unlink(ctrl->local.sun_path); - free(ctrl); - return NULL; - } - - return ctrl; -} - - -void wpa_ctrl_close(struct wpa_ctrl *ctrl) -{ - unlink(ctrl->local.sun_path); - close(ctrl->s); - free(ctrl); -} - - -int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, - char *reply, size_t *reply_len, - void (*msg_cb)(char *msg, size_t len)) -{ - struct timeval tv; - int res; - fd_set rfds; - const char *_cmd; - char *cmd_buf = NULL; - size_t _cmd_len; - - { - _cmd = cmd; - _cmd_len = cmd_len; - } - - if (send(ctrl->s, _cmd, _cmd_len, 0) < 0) { - free(cmd_buf); - return -1; - } - free(cmd_buf); - - for (;;) { - tv.tv_sec = 2; - tv.tv_usec = 0; - FD_ZERO(&rfds); - FD_SET(ctrl->s, &rfds); - res = select(ctrl->s + 1, &rfds, NULL, NULL, &tv); - if (FD_ISSET(ctrl->s, &rfds)) { - res = recv(ctrl->s, reply, *reply_len, 0); - if (res < 0) - return res; - if (res > 0 && reply[0] == '<') { - /* This is an unsolicited message from - * wpa_supplicant, not the reply to the - * request. Use msg_cb to report this to the - * caller. */ - if (msg_cb) { - /* Make sure the message is nul - * terminated. */ - if ((size_t) res == *reply_len) - res = (*reply_len) - 1; - reply[res] = '\0'; - msg_cb(reply, res); - } - continue; - } - *reply_len = res; - break; - } else { - return -2; - } - } - return 0; -} - - -static int wpa_ctrl_attach_helper(struct wpa_ctrl *ctrl, int attach) -{ - char buf[10]; - int ret; - size_t len = 10; - - ret = wpa_ctrl_request(ctrl, attach ? "ATTACH" : "DETACH", 6, - buf, &len, NULL); - if (ret < 0) - return ret; - if (len == 3 && memcmp(buf, "OK\n", 3) == 0) - return 0; - return -1; -} - - -int wpa_ctrl_attach(struct wpa_ctrl *ctrl) -{ - return wpa_ctrl_attach_helper(ctrl, 1); -} - - -int wpa_ctrl_detach(struct wpa_ctrl *ctrl) -{ - return wpa_ctrl_attach_helper(ctrl, 0); -} - - -int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len) -{ - int res; - - res = recv(ctrl->s, reply, *reply_len, 0); - if (res < 0) - return res; - *reply_len = res; - return 0; -} - - -int wpa_ctrl_pending(struct wpa_ctrl *ctrl) -{ - struct timeval tv; - fd_set rfds; - tv.tv_sec = 0; - tv.tv_usec = 0; - FD_ZERO(&rfds); - FD_SET(ctrl->s, &rfds); - select(ctrl->s + 1, &rfds, NULL, NULL, &tv); - return FD_ISSET(ctrl->s, &rfds); -} - - -int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl) -{ - return ctrl->s; -} diff --git a/depends/python-wpactrl/wpa_ctrl.h b/depends/python-wpactrl/wpa_ctrl.h deleted file mode 100644 index e4cd490..0000000 --- a/depends/python-wpactrl/wpa_ctrl.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Unmodifed version of src/common/wpa_ctrl.h from wpa_supplicant. - * - * wpa_supplicant/hostapd control interface library - * Copyright (c) 2004-2006, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Alternatively, this software may be distributed under the terms of BSD - * license. - */ - -#ifndef WPA_CTRL_H -#define WPA_CTRL_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* wpa_supplicant control interface - fixed message prefixes */ - -/** Interactive request for identity/password/pin */ -#define WPA_CTRL_REQ "CTRL-REQ-" - -/** Response to identity/password/pin request */ -#define WPA_CTRL_RSP "CTRL-RSP-" - -/* Event messages with fixed prefix */ -/** Authentication completed successfully and data connection enabled */ -#define WPA_EVENT_CONNECTED "CTRL-EVENT-CONNECTED " -/** Disconnected, data connection is not available */ -#define WPA_EVENT_DISCONNECTED "CTRL-EVENT-DISCONNECTED " -/** wpa_supplicant is exiting */ -#define WPA_EVENT_TERMINATING "CTRL-EVENT-TERMINATING " -/** Password change was completed successfully */ -#define WPA_EVENT_PASSWORD_CHANGED "CTRL-EVENT-PASSWORD-CHANGED " -/** EAP-Request/Notification received */ -#define WPA_EVENT_EAP_NOTIFICATION "CTRL-EVENT-EAP-NOTIFICATION " -/** EAP authentication started (EAP-Request/Identity received) */ -#define WPA_EVENT_EAP_STARTED "CTRL-EVENT-EAP-STARTED " -/** EAP method selected */ -#define WPA_EVENT_EAP_METHOD "CTRL-EVENT-EAP-METHOD " -/** EAP authentication completed successfully */ -#define WPA_EVENT_EAP_SUCCESS "CTRL-EVENT-EAP-SUCCESS " -/** EAP authentication failed (EAP-Failure received) */ -#define WPA_EVENT_EAP_FAILURE "CTRL-EVENT-EAP-FAILURE " -/** New scan results available */ -#define WPA_EVENT_SCAN_RESULTS "CTRL-EVENT-SCAN-RESULTS " - - -/* wpa_supplicant/hostapd control interface access */ - -/** - * wpa_ctrl_open - Open a control interface to wpa_supplicant/hostapd - * @ctrl_path: Path for UNIX domain sockets; ignored if UDP sockets are used. - * Returns: Pointer to abstract control interface data or %NULL on failure - * - * This function is used to open a control interface to wpa_supplicant/hostapd. - * ctrl_path is usually /var/run/wpa_supplicant or /var/run/hostapd. This path - * is configured in wpa_supplicant/hostapd and other programs using the control - * interface need to use matching path configuration. - */ -struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path); - - -/** - * wpa_ctrl_close - Close a control interface to wpa_supplicant/hostapd - * @ctrl: Control interface data from wpa_ctrl_open() - * - * This function is used to close a control interface. - */ -void wpa_ctrl_close(struct wpa_ctrl *ctrl); - - -/** - * wpa_ctrl_request - Send a command to wpa_supplicant/hostapd - * @ctrl: Control interface data from wpa_ctrl_open() - * @cmd: Command; usually, ASCII text, e.g., "PING" - * @cmd_len: Length of the cmd in bytes - * @reply: Buffer for the response - * @reply_len: Reply buffer length - * @msg_cb: Callback function for unsolicited messages or %NULL if not used - * Returns: 0 on success, -1 on error (send or receive failed), -2 on timeout - * - * This function is used to send commands to wpa_supplicant/hostapd. Received - * response will be written to reply and reply_len is set to the actual length - * of the reply. This function will block for up to two seconds while waiting - * for the reply. If unsolicited messages are received, the blocking time may - * be longer. - * - * msg_cb can be used to register a callback function that will be called for - * unsolicited messages received while waiting for the command response. These - * messages may be received if wpa_ctrl_request() is called at the same time as - * wpa_supplicant/hostapd is sending such a message. This can happen only if - * the program has used wpa_ctrl_attach() to register itself as a monitor for - * event messages. Alternatively to msg_cb, programs can register two control - * interface connections and use one of them for commands and the other one for - * receiving event messages, in other words, call wpa_ctrl_attach() only for - * the control interface connection that will be used for event messages. - */ -int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len, - char *reply, size_t *reply_len, - void (*msg_cb)(char *msg, size_t len)); - - -/** - * wpa_ctrl_attach - Register as an event monitor for the control interface - * @ctrl: Control interface data from wpa_ctrl_open() - * Returns: 0 on success, -1 on failure, -2 on timeout - * - * This function registers the control interface connection as a monitor for - * wpa_supplicant/hostapd events. After a success wpa_ctrl_attach() call, the - * control interface connection starts receiving event messages that can be - * read with wpa_ctrl_recv(). - */ -int wpa_ctrl_attach(struct wpa_ctrl *ctrl); - - -/** - * wpa_ctrl_detach - Unregister event monitor from the control interface - * @ctrl: Control interface data from wpa_ctrl_open() - * Returns: 0 on success, -1 on failure, -2 on timeout - * - * This function unregisters the control interface connection as a monitor for - * wpa_supplicant/hostapd events, i.e., cancels the registration done with - * wpa_ctrl_attach(). - */ -int wpa_ctrl_detach(struct wpa_ctrl *ctrl); - - -/** - * wpa_ctrl_recv - Receive a pending control interface message - * @ctrl: Control interface data from wpa_ctrl_open() - * @reply: Buffer for the message data - * @reply_len: Length of the reply buffer - * Returns: 0 on success, -1 on failure - * - * This function will receive a pending control interface message. This - * function will block if no messages are available. The received response will - * be written to reply and reply_len is set to the actual length of the reply. - * wpa_ctrl_recv() is only used for event messages, i.e., wpa_ctrl_attach() - * must have been used to register the control interface as an event monitor. - */ -int wpa_ctrl_recv(struct wpa_ctrl *ctrl, char *reply, size_t *reply_len); - - -/** - * wpa_ctrl_pending - Check whether there are pending event messages - * @ctrl: Control interface data from wpa_ctrl_open() - * Returns: 1 if there are pending messages, 0 if no, or -1 on error - * - * This function will check whether there are any pending control interface - * message available to be received with wpa_ctrl_recv(). wpa_ctrl_pending() is - * only used for event messages, i.e., wpa_ctrl_attach() must have been used to - * register the control interface as an event monitor. - */ -int wpa_ctrl_pending(struct wpa_ctrl *ctrl); - - -/** - * wpa_ctrl_get_fd - Get file descriptor used by the control interface - * @ctrl: Control interface data from wpa_ctrl_open() - * Returns: File descriptor used for the connection - * - * This function can be used to get the file descriptor that is used for the - * control interface connection. The returned value can be used, e.g., with - * select() while waiting for multiple events. - * - * The returned file descriptor must not be used directly for sending or - * receiving packets; instead, the library functions wpa_ctrl_request() and - * wpa_ctrl_recv() must be used for this. - */ -int wpa_ctrl_get_fd(struct wpa_ctrl *ctrl); - -#ifdef CONFIG_CTRL_IFACE_UDP -#define WPA_CTRL_IFACE_PORT 9877 -#define WPA_GLOBAL_CTRL_IFACE_PORT 9878 -#endif /* CONFIG_CTRL_IFACE_UDP */ - - -#ifdef __cplusplus -} -#endif - -#endif /* WPA_CTRL_H */ diff --git a/depends/python-wpactrl/wpactrl.c b/depends/python-wpactrl/wpactrl.c deleted file mode 100644 index 1e4ecc9..0000000 --- a/depends/python-wpactrl/wpactrl.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - * python-wpactrl - * -------------- - * A Python extension for wpa_supplicant/hostapd control interface access - * - * Copyright (c) 2008 Kel Modderman - * License: GPL v2 - * - * This is based on (a fork of) pywpa: - * http://downloads.emperorlinux.com/contrib/pywpa/ - * Copyright (c) 2006 Jeremy Moles - * License: LGPL v2.1 - * - */ - -#include -#include -#include - -#include "wpa_ctrl.h" - -#define WPACTRL_MAJ_VER 1 -#define WPACTRL_MIN_VER 0 -#define WPACTRL_MIC_VER 1 - -#define UNUSED __attribute__ (( __unused__ )) - -/* ------------------------------------------------------------------------------------- WPACtrl */ -typedef struct { - PyObject_HEAD - struct wpa_ctrl* ctrl_iface; - char* ctrl_iface_path; - int attached; -} WPACtrl; - -/* -------------------------------------------------------------------------Function Definitions */ -static PyObject* wpactrl_version(PyObject*, PyObject*); - -static int WPACtrl_open(WPACtrl*, PyObject*, PyObject*); -static PyObject* WPACtrl_request(WPACtrl*, PyObject*, PyObject*); -static PyObject* WPACtrl_attach(WPACtrl*); -static PyObject* WPACtrl_detach(WPACtrl*); -static PyObject* WPACtrl_pending(WPACtrl*); -static PyObject* WPACtrl_recv(WPACtrl*); -static PyObject* WPACtrl_scanresults(WPACtrl*); -static void WPACtrl_close(WPACtrl*); -static PyObject* WPACtrl_error; - -/* -------------------------------------------------------------------------- WPACTRL_DOC_STRING */ -static char* WPACTRL_DOC_STRING = - "wpactrl defines a single class, WPACtrl, that must be instantiated\n" - "with the pathname of a UNIX domain socket control interface of a\n" - "wpa_supplicant/hostapd daemon.\n" - "\n" - "Once a WPACtrl object has been instantiated, it may call several\n" - "helper methods to interact with the wpa_supplicant/hostapd daemon.\n" - "If an error occurs, a wpactrl.error exception is raised.\n" - "\n" - "The destructor of a WPACtrl instance closes the connection to the\n" - "control interface socket.\n" - "\n" - "Recommendations for the use of wpa_supplicant/hostapd control\n" - "interface access in external programs are at:\n" - " \n" -; - -/* ----------------------------------------------------------------------------- wpactrl_version */ -static PyObject* wpactrl_version(UNUSED PyObject* u1, UNUSED PyObject* u2) -{ - return Py_BuildValue("(iii)", WPACTRL_MAJ_VER, WPACTRL_MIN_VER, WPACTRL_MIC_VER); -} - -/* -------------------------------------------------------------------------------- WPACtrl_open */ -static int WPACtrl_open(WPACtrl* self, PyObject* args, UNUSED PyObject* kargs) -{ - char* path; - - if (!PyArg_ParseTuple(args, "s", &path)) { - PyErr_SetString(WPACtrl_error, "failed to parse ctrl_iface_path string"); - return -1; - } - - if (strlen(path) >= MAXPATHLEN) { - PyErr_SetString(WPACtrl_error, "ctrl_iface_path string length too long"); - return -1; - } - - self->ctrl_iface_path = malloc(MAXPATHLEN); - - if (!self->ctrl_iface_path) { - PyErr_SetString(WPACtrl_error, "failed to allocate memory for ctrl_iface_path"); - return -1; - } - - strcpy(self->ctrl_iface_path, path); - - self->ctrl_iface = wpa_ctrl_open(self->ctrl_iface_path); - - if (!self->ctrl_iface) { - PyErr_SetString(WPACtrl_error, "wpa_ctrl_open failed"); - return -1; - } - - self->attached = 0; - - return 0; -} - -/* ----------------------------------------------------------------------------- WPACtrl_request */ -static PyObject* WPACtrl_request(WPACtrl* self, PyObject* args, UNUSED PyObject* kargs) -{ - int ret; - char* cmd; - char buf[2048]; - size_t buflen = sizeof(buf) - 1; - - if (!PyArg_ParseTuple(args, "s", &cmd)) { - PyErr_SetString(WPACtrl_error, "failed to parse request command string"); - return NULL; - } - - ret = wpa_ctrl_request(self->ctrl_iface, cmd, strlen(cmd), buf, &buflen, NULL); - - switch (ret) { - case 0: - buf[buflen] = '\0'; - return Py_BuildValue("s", buf); - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request failed"); - break; - case -2: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request timed out"); - break; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request returned unknown error"); - break; - } - - return NULL; -} - -/* ------------------------------------------------------------------------------ WPACtrl_attach */ -static PyObject* WPACtrl_attach(WPACtrl* self) -{ - int ret; - - if (self->attached == 1) - Py_RETURN_NONE; - - ret = wpa_ctrl_attach(self->ctrl_iface); - - switch (ret) { - case 0: - self->attached = 1; - Py_RETURN_NONE; - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_attach failed"); - break; - case -2: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_attach timed out"); - break; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_attach returned unknown error"); - break; - } - - return NULL; -} - -/* ------------------------------------------------------------------------------ WPACtrl_detach */ -static PyObject* WPACtrl_detach(WPACtrl* self) -{ - int ret; - - if (self->attached == 0) - Py_RETURN_NONE; - - ret = wpa_ctrl_detach(self->ctrl_iface); - - switch (ret) { - case 0: - self->attached = 0; - Py_RETURN_NONE; - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_detach failed"); - break; - case -2: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_detach timed out"); - break; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_detach returned unknown error"); - break; - } - - return NULL; -} - -/* ----------------------------------------------------------------------------- WPACtrl_pending */ -static PyObject* WPACtrl_pending(WPACtrl* self) -{ - int ret; - - ret = wpa_ctrl_pending(self->ctrl_iface); - - switch (ret) { - case 1: - Py_RETURN_TRUE; - case 0: - Py_RETURN_FALSE; - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_pending failed"); - break; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_pending returned unknown error"); - break; - } - - return NULL; -} - -/* -------------------------------------------------------------------------------- WPACtrl_recv */ -static PyObject* WPACtrl_recv(WPACtrl* self) -{ - int ret; - char buf[256]; - size_t buflen = sizeof(buf) - 1; - - Py_BEGIN_ALLOW_THREADS - ret = wpa_ctrl_recv(self->ctrl_iface, buf, &buflen); - Py_END_ALLOW_THREADS - - switch (ret) { - case 0: - buf[buflen] = '\0'; - return Py_BuildValue("s", buf); - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_recv failed"); - break; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_recv returned unknown error"); - break; - } - - return NULL; -} - - -/* ------------------------------------------------------------------------- WPACtrl_scanresults */ -static PyObject* WPACtrl_scanresults(WPACtrl* self) -{ - int cell; - PyObject* results = PyList_New(0); - - for (cell = 0; cell < 1000; cell++) { - int ret; - char bss[10]; - char buf[2048]; - size_t buflen = sizeof(buf) - 1; - - snprintf(bss, sizeof(bss), "BSS %d", cell); - - ret = wpa_ctrl_request(self->ctrl_iface, bss, sizeof(bss), buf, &buflen, NULL); - - switch (ret) { - case 0: - buf[buflen] = '\0'; - break; - case -1: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request failed"); - return NULL; - case -2: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request timed out"); - return NULL; - default: - PyErr_SetString(WPACtrl_error, "wpa_ctrl_request returned unknown error"); - return NULL; - } - - if (strstr(buf, "bssid=")) - PyList_Append(results, Py_BuildValue("s", buf)); - else - break; - } - - return results; -} - -/* ------------------------------------------------------------------------------- WPACtrl_close */ -static void WPACtrl_close(WPACtrl* self) -{ - if (self->ctrl_iface) { - if (self->attached == 1) - WPACtrl_detach(self); - - wpa_ctrl_close(self->ctrl_iface); - self->ctrl_iface = NULL; - } - - if (self->ctrl_iface_path) { - free(self->ctrl_iface_path); - self->ctrl_iface_path = NULL; - } - - if (self->ob_type) - self->ob_type->tp_free((PyObject*)(self)); -} - -/* -------------------------------------------------------------------- Member/Method Structures */ -static PyMethodDef module_methods[] = { - { - "version", wpactrl_version, METH_NOARGS, - "Returns a version tuple of wpactrl consisting of 3 integers; major version,\n" - "minor version and micro version." - }, - { NULL, NULL, 0, NULL } -}; - -static PyMethodDef WPACtrl_methods[] = { - { - "request", (PyCFunction)(WPACtrl_request), METH_VARARGS, - "Send a command to wpa_supplicant/hostapd. Returns the command response\n" - "in a string." - }, - { - "attach", (PyCFunction)(WPACtrl_attach), METH_NOARGS, - "Register as an event monitor for the control interface." - }, - { - "detach", (PyCFunction)(WPACtrl_detach), METH_NOARGS, - "Unregister event monitor from the control interface." - }, - { - "pending", (PyCFunction)(WPACtrl_pending), METH_NOARGS, - "Check if any events/messages are pending. Returns True if messages are pending,\n" - "otherwise False." - }, - { - "recv", (PyCFunction)(WPACtrl_recv), METH_NOARGS, - "Recieve a pending event/message from ctrl socket. Returns a message string." - }, - { - "scanresults", (PyCFunction)(WPACtrl_scanresults), METH_NOARGS, - "Return list of scan results. Each element of the scan result list is a string\n" - "of properties for a single BSS. This method is specific to wpa_supplicant." - }, - { NULL, NULL, 0, NULL } -}; - -static PyMemberDef WPACtrl_members[] = { - { - "attached", T_INT, offsetof(WPACtrl, attached), READONLY, - "Set to value of 1 if instance has registered as an event monitor via\n" - "the attached() method, otherwise 0." - }, - { - "ctrl_iface_path", T_STRING, offsetof(WPACtrl, ctrl_iface_path), READONLY, - "Pathname of WPACtrl control interface socket." - }, - { NULL } -}; - -/* ------------------------------------------------------------------------------ PyType_WPACtrl */ -static PyTypeObject PyType_WPACtrl = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ - "wpactrl.WPACtrl", /* tp_name */ - sizeof(WPACtrl), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)(WPACtrl_close), /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - PyObject_GenericSetAttr, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - WPACtrl_methods, /* tp_methods */ - WPACtrl_members, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)(WPACtrl_open), /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ - 0 /* tp_del */ -}; - -/* --------------------------------------------------------------------------------- initwpactrl */ -PyMODINIT_FUNC initwpactrl(void) -{ - PyObject* module; - - PyType_Ready(&PyType_WPACtrl); - - module = Py_InitModule3("wpactrl", module_methods, WPACTRL_DOC_STRING); - WPACtrl_error = PyErr_NewException("wpactrl.error", NULL, NULL); - - Py_INCREF(&PyType_WPACtrl); - Py_INCREF(WPACtrl_error); - - PyModule_AddObject(module, "WPACtrl", (PyObject*)(&PyType_WPACtrl)); - PyModule_AddObject(module, "error", WPACtrl_error); -}