Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bareos/python-bareos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Storz <philipp.storz@bareos.com>2018-05-07 11:41:01 +0300
committerPhilipp Storz <philipp.storz@bareos.com>2018-05-07 16:47:15 +0300
commitba80263255a45538320119a26af24926a6c5c5a3 (patch)
tree065b5fb01862bd6a78b65e0b408fe1540e076872
parentaea74c1c696abe60773d5390efd905a702f59229 (diff)
This repository has been merged into https://github.com/bareos/bareos
The Bareos project consists of several sub projects. While these subprojects have been kept in different git repositories until bareos <= 17.2, we decided to merge them all into https://github.com/bareos/bareos Subprojects: * https://github.com/bareos/bareos (core, daemons) repository hasn't changed, but its content has been moved to the core subdirectory https://github.com/bareos/bareos/tree/master/core/ * https://github.com/bareos/bareos-doc (master) => https://github.com/bareos/bareos/tree/master/doc/ * https://github.com/bareos/bareos-regress (master) => https://github.com/bareos/bareos/tree/master/regress/ * https://github.com/bareos/bareos-vmware (master) => https://github.com/bareos/bareos/tree/master/vmware/ * https://github.com/bareos/bareos-webui (master) => https://github.com/bareos/bareos/tree/master/webui/ * https://github.com/bareos/python-bareos (master) => https://github.com/bareos/bareos/tree/master/python-bareos/ We only merged the master branches, so all those plus all future branches from bareos-18.2 onwards can be found there. The old branches (bareos <= 17.2) will be kept and maintained in the old repositories.
-rw-r--r--.gitignore37
-rw-r--r--LICENSE.txt661
-rw-r--r--README.md23
-rw-r--r--README.rst44
-rw-r--r--TODO.txt6
-rw-r--r--bareos/__init__.py5
-rw-r--r--bareos/bsock/__init__.py10
-rw-r--r--bareos/bsock/bsock.py12
-rwxr-xr-xbareos/bsock/bsockjson.py12
-rw-r--r--bareos/bsock/connectiontype.py6
-rw-r--r--bareos/bsock/constants.py77
-rw-r--r--bareos/bsock/directorconsole.py29
-rwxr-xr-xbareos/bsock/directorconsolejson.py57
-rw-r--r--bareos/bsock/filedaemon.py36
-rw-r--r--bareos/bsock/lowlevel.py429
-rw-r--r--bareos/bsock/protocolmessages.py40
-rw-r--r--bareos/exceptions.py33
-rw-r--r--bareos/util/__init__.py4
-rw-r--r--bareos/util/bareosbase64.py99
-rw-r--r--bareos/util/password.py33
-rw-r--r--bareos/util/path.py91
-rwxr-xr-xbin/bareos-fd-connect.py48
-rwxr-xr-xbin/bareos-jsonrpc-server.py120
-rwxr-xr-xbin/bconsole-json.py45
-rwxr-xr-xbin/bconsole.py46
-rwxr-xr-xbin/jsonrpc-test.py40
-rw-r--r--debian/compat1
-rw-r--r--debian/control13
-rwxr-xr-xdebian/rules7
-rw-r--r--debian/source/format1
-rw-r--r--packaging/debian.debtransform1
-rw-r--r--packaging/python-bareos.changes12
-rw-r--r--packaging/python-bareos.dsc10
-rw-r--r--packaging/python-bareos.spec79
-rw-r--r--setup.py23
35 files changed, 23 insertions, 2167 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 8f5bb1e..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,37 +0,0 @@
-*.py[cod]
-
-# C extensions
-*.so
-
-# Packages
-*.egg
-*.egg-info
-dist
-build
-eggs
-parts
-var
-sdist
-develop-eggs
-.installed.cfg
-lib
-lib64
-__pycache__
-
-# Installer logs
-pip-log.txt
-
-# Unit test / coverage reports
-.coverage
-.tox
-nosetests.xml
-
-# Translations
-*.mo
-
-# Mr Developer
-.mr.developer.cfg
-.project
-.pydevproject
-
-*~
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index dba13ed..0000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,661 +0,0 @@
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
- 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
-them 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.
-
- Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate. Many developers of free software are heartened and
-encouraged by the resulting cooperation. However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
- The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community. It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server. Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
- An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals. This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU Affero General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey 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;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If 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 convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software. This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero 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 that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- 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.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-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.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- 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
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 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 Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source. For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code. There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-<http://www.gnu.org/licenses/>.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ba88b6a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+This repository has been merged into https://github.com/bareos/bareos
+
+The Bareos project consists of several sub projects. While these subprojects
+have been kept in different git repositories until bareos <= 17.2, we decided
+to merge them all into https://github.com/bareos/bareos
+
+Subprojects:
+ * https://github.com/bareos/bareos (core, daemons) repository hasn't changed,
+ but its content has been moved to the core subdirectory
+ https://github.com/bareos/bareos/tree/master/core/
+ * https://github.com/bareos/bareos-doc (master) =>
+ https://github.com/bareos/bareos/tree/master/doc/
+ * https://github.com/bareos/bareos-regress (master) => https://github.com/bareos/bareos/tree/master/regress/
+ * https://github.com/bareos/bareos-vmware (master) => https://github.com/bareos/bareos/tree/master/vmware/
+ * https://github.com/bareos/bareos-webui (master) => https://github.com/bareos/bareos/tree/master/webui/
+ * https://github.com/bareos/python-bareos (master) => https://github.com/bareos/bareos/tree/master/python-bareos/
+
+We only merged the master branches, so all those plus all future branches from
+bareos-18.2 onwards can be found there. The old branches (bareos <= 17.2) will
+be kept and maintained in the old repositories.
+
+
+
diff --git a/README.rst b/README.rst
deleted file mode 100644
index afb46ae..0000000
--- a/README.rst
+++ /dev/null
@@ -1,44 +0,0 @@
-python-bareos
-=============
-
-Python module to access a http://www.bareos.org backup system.
-
-`python-bareos` packages are included in the Bareos core distribution since bareos >= 17.2.
-
-
-calling bareos-director user agent commands
------------------------------------------------
-
-.. code:: python
-
- import bareos.bsock
-
- password=bareos.bsock.Password("secret")
- directorconsole=bareos.bsock.DirectorConsole(address="localhost", port=9101, password=password)
- print directorconsole.call("help")
- ...
-
-
-simple version of the bconsole in Python
---------------------------------------------
-
-.. code:: python
-
- import bareos.bsock
- password=bareos.bsock.Password("secret")
- directorconsole=bareos.bsock.DirectorConsole(address="localhost", port=9101, password=password)
- directorconsole.interactive()
- ...
-
-use JSON objects of API mode 2
-----------------------------------
-
-Requires: bareos >= 15.2
-
-.. code:: python
-
- import bareos.bsock
- password=bareos.bsock.Password("secret")
- directorconsole=bareos.bsock.DirectorConsoleJson(address="localhost", port=9101, password=password)
- directorconsole.call("list pools")
- ...
diff --git a/TODO.txt b/TODO.txt
deleted file mode 100644
index f7bc3b3..0000000
--- a/TODO.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TODO:
-
- * pyunit
-
-To test the Bareos Python module without installing, set PYTHONPATH accordingly, eg.
-export PYTHONPATH=.
diff --git a/bareos/__init__.py b/bareos/__init__.py
deleted file mode 100644
index 6e6f32f..0000000
--- a/bareos/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-#__all__ = [ "bconsole" ]
-from bareos.exceptions import *
-from bareos.util.password import Password
-import bareos.util
-import bareos.bsock
diff --git a/bareos/bsock/__init__.py b/bareos/bsock/__init__.py
deleted file mode 100644
index 8984d21..0000000
--- a/bareos/bsock/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#__all__ = [ "bconsole" ]
-from bareos.exceptions import *
-from bareos.util.password import Password
-from bareos.bsock.connectiontype import ConnectionType
-from bareos.bsock.directorconsole import DirectorConsole
-from bareos.bsock.directorconsolejson import DirectorConsoleJson
-from bareos.bsock.filedaemon import FileDaemon
-# compat
-from bareos.bsock.bsock import BSock
-from bareos.bsock.bsockjson import BSockJson
diff --git a/bareos/bsock/bsock.py b/bareos/bsock/bsock.py
deleted file mode 100644
index 51dd59d..0000000
--- a/bareos/bsock/bsock.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""
-Communicates with the bareos-director
-
-Legacy, use DirectorConsole instead.
-"""
-
-from bareos.bsock.directorconsole import DirectorConsole
-
-class BSock(DirectorConsole):
-
- def __init__(self, *args, **kwargs):
- super(BSock, self).__init__(*args, **kwargs)
diff --git a/bareos/bsock/bsockjson.py b/bareos/bsock/bsockjson.py
deleted file mode 100755
index 17b2934..0000000
--- a/bareos/bsock/bsockjson.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""
-Communicates with the bareos-director using JSON results
-
-Legacy, use DirectorConsoleJson instead.
-"""
-
-from bareos.bsock.directorconsolejson import DirectorConsoleJson
-
-class BSockJson(DirectorConsoleJson):
-
- def __init__(self, *args, **kwargs):
- super(BSockJson, self).__init__(*args, **kwargs)
diff --git a/bareos/bsock/connectiontype.py b/bareos/bsock/connectiontype.py
deleted file mode 100644
index 027e12e..0000000
--- a/bareos/bsock/connectiontype.py
+++ /dev/null
@@ -1,6 +0,0 @@
-class ConnectionType:
- """
- """
- DIRECTOR = 1001
- STORAGE = 1002
- FILEDAEMON = 1003
diff --git a/bareos/bsock/constants.py b/bareos/bsock/constants.py
deleted file mode 100644
index b4c0ba4..0000000
--- a/bareos/bsock/constants.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-Constants used by Bareos.
-"""
-
-class Constants:
- """
- translated enum from https://github.com/bareos/bareos/blob/master/src/lib/bsock.h
- """
- BNET_EOD = -1 #, /* End of data stream, new data may follow */
- BNET_EOD_POLL = -2 #, /* End of data and poll all in one */
- BNET_STATUS = -3 #, /* Send full status */
- BNET_TERMINATE = -4 #, /* Conversation terminated, doing close() */
- BNET_POLL = -5 #, /* Poll request, I'm hanging on a read */
- BNET_HEARTBEAT = -6 #, /* Heartbeat Response requested */
- BNET_HB_RESPONSE = -7 #, /* Only response permited to HB */
- BNET_xxxxxxPROMPT = -8 #, /* No longer used -- Prompt for subcommand */
- BNET_BTIME = -9 #, /* Send UTC btime */
- BNET_BREAK = -10 #, /* Stop current command -- ctl-c */
- BNET_START_SELECT = -11 #, /* Start of a selection list */
- BNET_END_SELECT = -12 #, /* End of a select list */
- BNET_INVALID_CMD = -13 #, /* Invalid command sent */
- BNET_CMD_FAILED = -14 #, /* Command failed */
- BNET_CMD_OK = -15 #, /* Command succeeded */
- BNET_CMD_BEGIN = -16 #, /* Start command execution */
- BNET_MSGS_PENDING = -17 #, /* Messages pending */
- BNET_MAIN_PROMPT = -18 #, /* Server ready and waiting */
- BNET_SELECT_INPUT = -19 #, /* Return selection input */
- BNET_WARNING_MSG = -20 #, /* Warning message */
- BNET_ERROR_MSG = -21 #, /* Error message -- command failed */
- BNET_INFO_MSG = -22 #, /* Info message -- status line */
- BNET_RUN_CMD = -23 #, /* Run command follows */
- BNET_YESNO = -24 #, /* Request yes no response */
- BNET_START_RTREE = -25 #, /* Start restore tree mode */
- BNET_END_RTREE = -26 #, /* End restore tree mode */
- BNET_SUB_PROMPT = -27 #, /* Indicate we are at a subprompt */
- BNET_TEXT_INPUT = -28 # /* Get text input from user */
-
- description = {
- BNET_EOD: "End of data stream, new data may follow",
- BNET_EOD_POLL: "End of data and poll all in one",
- BNET_STATUS: "Send full status",
- BNET_TERMINATE: "Conversation terminated",
- BNET_POLL: "Poll request, I'm hanging on a read",
- BNET_HEARTBEAT: "Heartbeat Response requested",
- BNET_HB_RESPONSE: "Only response permited to HB",
- BNET_xxxxxxPROMPT: "No longer used -- Prompt for subcommand",
- BNET_BTIME: "Send UTC btime",
- BNET_BREAK: "Stop current command -- ctl-c",
- BNET_START_SELECT: "Start of a selection list",
- BNET_END_SELECT: "End of a select list",
- BNET_INVALID_CMD: "Invalid command sent",
- BNET_CMD_FAILED: "Command failed",
- BNET_CMD_OK: "Command succeeded",
- BNET_CMD_BEGIN: "Start command execution",
- BNET_MSGS_PENDING: "Messages pending",
- BNET_MAIN_PROMPT: "Server ready and waiting",
- BNET_SELECT_INPUT: "Return selection input",
- BNET_WARNING_MSG: "Warning message",
- BNET_ERROR_MSG: "Error message -- command failed",
- BNET_INFO_MSG: "Info message -- status line",
- BNET_RUN_CMD: "Run command follows",
- BNET_YESNO: "Request yes no response",
- BNET_START_RTREE: "Start restore tree mode",
- BNET_END_RTREE: "End restore tree mode",
- BNET_SUB_PROMPT: "Indicate we are at a subprompt",
- BNET_TEXT_INPUT: "Get text input from user"
- }
-
- @staticmethod
- def get_description( code ):
- try:
- description = Constants.description[code]
- except KeyError:
- #self.logger.error( "unknown bsock code " + code )
- return
- else:
- return description
diff --git a/bareos/bsock/directorconsole.py b/bareos/bsock/directorconsole.py
deleted file mode 100644
index 81e4f6c..0000000
--- a/bareos/bsock/directorconsole.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-Communicates with the bareos-dir console
-"""
-
-from bareos.bsock.connectiontype import ConnectionType
-from bareos.bsock.lowlevel import LowLevel
-
-class DirectorConsole(LowLevel):
- '''use to send and receive the response to Bareos File Daemon'''
-
- def __init__(self,
- address="localhost",
- port=9101,
- dirname=None,
- name="*UserAgent*",
- password=None):
- super(DirectorConsole, self).__init__()
- self.connect(address, port, dirname, ConnectionType.DIRECTOR)
- self.auth(name=name, password=password, auth_success_regex=b'^1000 OK.*$')
- self._init_connection()
-
-
- def _init_connection(self):
- self.call("autodisplay off")
-
-
- def get_to_prompt(self):
- self.send(b".")
- return super(DirectorConsole, self).get_to_prompt()
diff --git a/bareos/bsock/directorconsolejson.py b/bareos/bsock/directorconsolejson.py
deleted file mode 100755
index 2dfa952..0000000
--- a/bareos/bsock/directorconsolejson.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""
-Reimplementation of the bconsole program in python.
-"""
-
-from bareos.bsock.directorconsole import DirectorConsole
-from pprint import pformat, pprint
-import json
-
-class DirectorConsoleJson(DirectorConsole):
- """
- use to send and receive the response from director
- """
-
- def __init__(self, *args, **kwargs):
- super(DirectorConsoleJson, self).__init__(*args, **kwargs)
-
- def _init_connection(self):
- # older version did not support compact mode,
- # therfore first set api mode to json (which should always work in bareos >= 15.2.0)
- # and then set api mode json compact (which should work with bareos >= 15.2.2)
- self.logger.debug(self.call(".api json"))
- self.logger.debug(self.call(".api json compact=yes"))
-
-
- def call(self, command):
- json = self.call_fullresult(command)
- if json == None:
- return
- if 'result' in json:
- result = json['result']
- else:
- # TODO: or raise an exception?
- result = json
- return result
-
-
- def call_fullresult(self, command):
- resultstring = super(DirectorConsoleJson, self).call(command)
- data = None
- if resultstring:
- try:
- data = json.loads(resultstring.decode('utf-8'))
- except ValueError as e:
- # in case result is not valid json,
- # create a JSON-RPC wrapper
- data = {
- 'error': {
- 'code': 2,
- 'message': str(e),
- 'data': resultstring
- },
- }
- return data
-
-
- def _show_result(self, msg):
- pprint(msg)
diff --git a/bareos/bsock/filedaemon.py b/bareos/bsock/filedaemon.py
deleted file mode 100644
index 93a06e1..0000000
--- a/bareos/bsock/filedaemon.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-Communicates with the bareos-fd
-"""
-
-from bareos.bsock.connectiontype import ConnectionType
-from bareos.bsock.lowlevel import LowLevel
-import shlex
-
-
-class FileDaemon(LowLevel):
- '''use to send and receive the response to Bareos File Daemon'''
-
- def __init__(self,
- address="localhost",
- port=9102,
- dirname=None,
- name=None,
- password=None):
- super(FileDaemon, self).__init__()
- self.connect(address, port, dirname, ConnectionType.FILEDAEMON)
- self.auth(name=name, password=password, auth_success_regex=b'^2000 OK Hello.*$')
- self._init_connection()
-
- def call(self, command):
- '''
- Replace spaces by char(1) in quoted arguments
- and then call the original function.
- '''
- if isinstance(command, list):
- cmdlist=command
- else:
- cmdlist=shlex.split(command)
- command0 = []
- for arg in cmdlist:
- command0.append(arg.replace(" ", "\x01"))
- return super(FileDaemon, self).call(command0)
diff --git a/bareos/bsock/lowlevel.py b/bareos/bsock/lowlevel.py
deleted file mode 100644
index 5087e5e..0000000
--- a/bareos/bsock/lowlevel.py
+++ /dev/null
@@ -1,429 +0,0 @@
-"""
-Low Level socket methods to communication with the bareos-director.
-"""
-
-# Authentication code is taken from
-# https://github.com/hanxiangduo/bacula-console-python
-
-from bareos.exceptions import *
-from bareos.util.bareosbase64 import BareosBase64
-from bareos.util.password import Password
-from bareos.bsock.constants import Constants
-from bareos.bsock.connectiontype import ConnectionType
-from bareos.bsock.protocolmessages import ProtocolMessages
-import hmac
-import logging
-import random
-import re
-from select import select
-import socket
-import struct
-import sys
-import time
-
-class LowLevel(object):
- """
- Low Level socket methods to communicate with the bareos-director.
- """
-
- def __init__(self):
- self.logger = logging.getLogger()
- self.logger.debug("init")
- self.status = None
- self.address = None
- self.password = None
- self.port = None
- self.dirname = None
- self.socket = None
- self.auth_credentials_valid = False
- self.connection_type = None
- self.receive_buffer = b''
-
- def connect(self, address, port, dirname, type):
- self.address = address
- self.port = port
- if dirname:
- self.dirname = dirname
- else:
- self.dirname = address
- self.connection_type = type
- return self.__connect()
-
-
- def __connect(self):
- try:
- self.socket = socket.create_connection((self.address, self.port))
- except socket.gaierror as e:
- self._handleSocketError(e)
- raise ConnectionError(
- "failed to connect to host " + str(self.address) + ", port " + str(self.port) + ": " + str(e))
- else:
- self.logger.debug("connected to " + str(self.address) + ":" + str(self.port))
- return True
-
-
- def auth(self, name, password, auth_success_regex):
- '''
- login to the bareos-director
- if the authenticate success return True else False
- dir: the director location
- name: own name.
- '''
- if not isinstance(password, Password):
- raise AuthenticationError("password must by of type bareos.Password() not %s" % (type(password)))
- self.password = password
- self.name = name
- self.auth_success_regex = auth_success_regex
- return self.__auth()
-
-
- def __auth(self):
- bashed_name = ProtocolMessages.hello(self.name, type=self.connection_type)
- # send the bash to the director
- self.send(bashed_name)
-
- (ssl, result_compatible, result) = self._cram_md5_respond(password=self.password.md5(), tls_remote_need=0)
- if not result:
- raise AuthenticationError("failed (in response)")
- if not self._cram_md5_challenge(clientname=self.name, password=self.password.md5(), tls_local_need=0, compatible=True):
- raise AuthenticationError("failed (in challenge)")
- self.recv_msg(self.auth_success_regex)
- self.auth_credentials_valid = True
- return True
-
-
- def _init_connection(self):
- pass
-
-
- def disconnect(self):
- ''' disconnect '''
- # TODO
- pass
-
-
- def reconnect(self):
- result = False
- if self.auth_credentials_valid:
- try:
- if self.__connect() and self.__auth() and self._init_connection():
- result = True
- except socket.error:
- self.logger.warning("failed to reconnect")
- return result
-
-
- def call(self, command):
- '''
- call a bareos-director user agent command
- '''
- if isinstance(command, list):
- command = " ".join(command)
- return self.__call(command, 0)
-
-
- def __call(self, command, count):
- '''
- Send a command and receive the result.
- If connection is lost, try to reconnect.
- '''
- result = b''
- try:
- self.send(bytearray(command, 'utf-8'))
- result = self.recv_msg()
- except (SocketEmptyHeader, ConnectionLostError) as e:
- self.logger.error("connection problem (%s): %s" % (type(e).__name__, str(e)))
- if count == 0:
- if self.reconnect():
- return self.__call(command, count+1)
- return result
-
-
- def send_command(self, command):
- return self.call(command)
-
-
- def send(self, msg=None):
- '''use socket to send request to director'''
- self.__check_socket_connection()
- msg_len = len(msg) # plus the msglen info
-
- try:
- # convert to network flow
- self.socket.sendall(struct.pack("!i", msg_len) + msg)
- self.logger.debug("%s" %(msg))
- except socket.error as e:
- self._handleSocketError(e)
-
-
- def recv(self):
- '''will receive data from director '''
- self.__check_socket_connection()
- # get the message header
- header = self.__get_header()
- if header <= 0:
- self.logger.debug("header: " + str(header))
- # get the message
- length = header
- msg = self.recv_submsg(length)
- return msg
-
-
- def recv_msg(self, regex = b'^\d\d\d\d OK.*$', timeout = None):
- '''will receive data from director '''
- self.__check_socket_connection()
- try:
- timeouts = 0
- while True:
- # get the message header
- self.socket.settimeout(0.1)
- try:
- header = self.__get_header()
- except socket.timeout:
- # only log every 100 timeouts
- if timeouts % 100 == 0:
- self.logger.debug("timeout (%i) on receiving header" % (timeouts))
- timeouts+=1
- else:
- if header <= 0:
- # header is a signal
- self.__set_status(header)
- if self.is_end_of_message(header):
- result = self.receive_buffer
- self.receive_buffer = b''
- return result
- else:
- # header is the length of the next message
- length = header
- submsg = self.recv_submsg(length)
- # check for regex in new submsg
- # and last line in old message,
- # which might have been incomplete without new submsg.
- lastlineindex = self.receive_buffer.rfind(b'\n') + 1
- self.receive_buffer += submsg
- match = re.search(regex, self.receive_buffer[lastlineindex:], re.MULTILINE)
- # Bareos indicates end of command result by line starting with 4 digits
- if match:
- self.logger.debug("msg \"{0}\" matches regex \"{1}\"".format(self.receive_buffer.strip(), regex))
- result = self.receive_buffer[0:lastlineindex+match.end()]
- self.receive_buffer = self.receive_buffer[lastlineindex+match.end()+1:]
- return result
- #elif re.search("^\d\d\d\d .*$", msg, re.MULTILINE):
- #return msg
- except socket.error as e:
- self._handleSocketError(e)
-
-
- def recv_submsg(self, length):
- # get the message
- msg = b''
- while length > 0:
- self.logger.debug(" submsg len: " + str(length))
- # TODO
- self.socket.settimeout(10)
- submsg = self.socket.recv(length)
- length -= len(submsg)
- #self.logger.debug(submsg)
- msg += submsg
- if (type(msg) is str):
- msg = bytearray(msg.decode('utf-8'), 'utf-8')
- if (type(msg) is bytes):
- msg = bytearray(msg)
- #self.logger.debug(str(msg))
- return msg
-
-
- def interactive(self):
- """
- Enter the interactive mode.
- Exit via typing "exit" or "quit".
- """
- command = ""
- while command != "exit" and command != "quit" and self.is_connected():
- command = self._get_input()
- resultmsg = self.call(command)
- self._show_result(resultmsg)
- return True
-
-
- def _get_input(self):
- # Python2: raw_input, Python3: input
- try:
- myinput = raw_input
- except NameError:
- myinput = input
- data = myinput(">>")
- return data
-
-
- def _show_result(self, msg):
- #print(msg.decode('utf-8'))
- sys.stdout.write(msg.decode('utf-8'))
- # add a linefeed, if there isn't one already
- if len(msg) >= 2:
- if msg[-2] != ord(b'\n'):
- sys.stdout.write(b'\n')
-
-
- def __get_header(self):
- header = b''
- header_length = 4
- while header_length > 0:
- self.logger.debug(" remaining header len: {0}".format(header_length))
- self.__check_socket_connection()
- # TODO
- self.socket.settimeout(10)
- submsg = self.socket.recv(header_length)
- header_length -= len(submsg)
- header += submsg
- if len(header) == 0:
- self.logger.debug("received empty header, assuming connection is closed")
- raise SocketEmptyHeader()
- else:
- return self.__get_header_data(header)
-
-
- def __get_header_data(self, header):
- # struct.unpack:
- # !: network (big/little endian conversion)
- # i: integer (4 bytes)
- data = struct.unpack("!i", header)[0]
- return data
-
-
- def is_end_of_message(self, data):
- return ((not self.is_connected()) or
- data == Constants.BNET_EOD or
- data == Constants.BNET_TERMINATE or
- data == Constants.BNET_MAIN_PROMPT or
- data == Constants.BNET_SUB_PROMPT)
-
-
- def is_connected(self):
- return (self.status != Constants.BNET_TERMINATE)
-
-
- def _cram_md5_challenge(self, clientname, password, tls_local_need=0, compatible=True):
- '''
- client launch the challenge,
- client confirm the dir is the correct director
- '''
-
- # get the timestamp
- # here is the console
- # to confirm the director so can do this on bconsole`way
- rand = random.randint(1000000000, 9999999999)
- #chal = "<%u.%u@%s>" %(rand, int(time.time()), self.dirname)
- chal = '<%u.%u@%s>' %(rand, int(time.time()), clientname)
- msg = bytearray('auth cram-md5 %s ssl=%d\n' %(chal, tls_local_need), 'utf-8')
- # send the confirmation
- self.send(msg)
- # get the response
- msg = self.recv()
- if msg[-1] == 0:
- del msg[-1]
- self.logger.debug("received: " + str(msg))
-
- # hash with password
- hmac_md5 = hmac.new(bytes(bytearray(password, 'utf-8')))
- hmac_md5.update(bytes(bytearray(chal, 'utf-8')))
- bbase64compatible = BareosBase64().string_to_base64(bytearray(hmac_md5.digest()), True)
- bbase64notcompatible = BareosBase64().string_to_base64(bytearray(hmac_md5.digest()), False)
- self.logger.debug("string_to_base64, compatible: " + str(bbase64compatible))
- self.logger.debug("string_to_base64, not compatible: " + str(bbase64notcompatible))
-
- is_correct = ((msg == bbase64compatible) or (msg == bbase64notcompatible))
- # check against compatible base64 and Bareos specific base64
- if is_correct:
- self.send(ProtocolMessages.auth_ok())
- else:
- self.logger.error("expected result: %s or %s, but get %s" %(bbase64compatible, bbase64notcompatible, msg))
- self.send(ProtocolMessages.auth_failed())
-
- # check the response is equal to base64
- return is_correct
-
-
- def _cram_md5_respond(self, password, tls_remote_need=0, compatible=True):
- '''
- client connect to dir,
- the dir confirm the password and the config is correct
- '''
- # receive from the director
- chal = ""
- ssl = 0
- result = False
- msg = ""
- try:
- msg = self.recv()
- except RuntimeError:
- self.logger.error("RuntimeError exception in recv")
- return (0, True, False)
-
- # invalid username
- if ProtocolMessages.is_not_authorized(msg):
- self.logger.error("failed: " + str(msg))
- return (0, True, False)
-
- # check the receive message
- self.logger.debug("(recv): " + str(msg))
-
- msg_list = msg.split(b" ")
- chal = msg_list[2]
- # get th timestamp and the tle info from director response
- ssl = int(msg_list[3][4])
- compatible = True
- # hmac chal and the password
- hmac_md5 = hmac.new(bytes(bytearray(password, 'utf-8')))
- hmac_md5.update(bytes(chal))
-
- # base64 encoding
- msg = BareosBase64().string_to_base64(bytearray(hmac_md5.digest()))
-
- # send the base64 encoding to director
- self.send(msg)
- received = self.recv()
- if ProtocolMessages.is_auth_ok(received):
- result = True
- else:
- self.logger.error("failed: " + str(received))
- return (ssl, compatible, result)
-
-
- def __set_status(self, status):
- self.status = status
- status_text = Constants.get_description(status)
- self.logger.debug(str(status_text) + " (" + str(status) + ")")
-
-
- def has_data(self):
- self.__check_socket_connection()
- timeout = 0.1
- readable, writable, exceptional = select([self.socket], [], [], timeout)
- return readable
-
-
- def get_to_prompt(self):
- time.sleep(0.1)
- if self.has_data():
- msg = self.recv_msg()
- self.logger.debug("received message: " + str(msg))
- # TODO: check prompt
- return True
-
-
- def __check_socket_connection(self):
- result = True
- if self.socket == None:
- result = False
- if self.auth_credentials_valid:
- # connection have worked before, but now it is gone
- raise ConnectionLostError("currently no network connection")
- else:
- raise RuntimeError("should connect to director first before send data")
- return result
-
-
- def _handleSocketError(self, exception):
- self.logger.error("socket error:" + str(exception))
- self.socket = None
diff --git a/bareos/bsock/protocolmessages.py b/bareos/bsock/protocolmessages.py
deleted file mode 100644
index 0db3642..0000000
--- a/bareos/bsock/protocolmessages.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Protocol messages between bareos-director and user-agent.
-"""
-
-from bareos.bsock.connectiontype import ConnectionType
-
-class ProtocolMessages():
- """
- strings defined by the protocol to talk to the Bareos Director.
- """
- @staticmethod
- def hello(name, type=ConnectionType.DIRECTOR):
- if type == ConnectionType.FILEDAEMON:
- return bytearray("Hello Director %s calling\n" % (name), 'utf-8')
- else:
- return bytearray("Hello %s calling\n" % (name), 'utf-8')
-
- #@staticmethod
- #def ok():
- #return "1000 OK:"
-
- @staticmethod
- def auth_ok():
- return b"1000 OK auth\n"
-
- @staticmethod
- def auth_failed():
- return b"1999 Authorization failed.\n"
-
- @staticmethod
- def not_authorized():
- return b"1999 You are not authorized.\n"
-
- @staticmethod
- def is_auth_ok(msg):
- return msg == ProtocolMessages.auth_ok()
-
- @staticmethod
- def is_not_authorized(msg):
- return msg == ProtocolMessages.not_authorized() \ No newline at end of file
diff --git a/bareos/exceptions.py b/bareos/exceptions.py
deleted file mode 100644
index 2602a00..0000000
--- a/bareos/exceptions.py
+++ /dev/null
@@ -1,33 +0,0 @@
-"""
-Bareos specific exceptions
-"""
-
-class Error(Exception):
- """
- general error exception
- """
- pass
-
-class ConnectionError(Error):
- """
- error with the Connection
- """
- pass
-
-class ConnectionLostError(Error):
- """
- error with the Connection
- """
- pass
-
-class SocketEmptyHeader(Error):
- """
- socket connection received an empty header. Connection lost?
- """
- pass
-
-class AuthenticationError(Error):
- """
- error during Authentication
- """
- pass
diff --git a/bareos/util/__init__.py b/bareos/util/__init__.py
deleted file mode 100644
index 15c49ce..0000000
--- a/bareos/util/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-#__all__ = [ "bconsole" ]
-from bareos.util.bareosbase64 import BareosBase64
-from bareos.util.password import Password
-from bareos.util.path import Path \ No newline at end of file
diff --git a/bareos/util/bareosbase64.py b/bareos/util/bareosbase64.py
deleted file mode 100644
index 21bae65..0000000
--- a/bareos/util/bareosbase64.py
+++ /dev/null
@@ -1,99 +0,0 @@
-"""
-Bacula and therefore Bareos specific implementation of a base64 decoder.
-This class offers functions to handle this.
-"""
-
-class BareosBase64(object):
- '''
- Bacula and therefore Bareos specific implementation of a base64 decoder
- '''
-
- base64_digits = \
- ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
-
- def __init__(self):
- '''
- Initialize the Base 64 conversion routines
- '''
- self.base64_map = dict(list(zip(self.base64_digits, list(range(0, 64)))))
-
- @staticmethod
- def twos_comp(val, bits):
- """compute the 2's compliment of int value val"""
- if (val&(1<<(bits-1))) != 0:
- val = val - (1<<bits)
- return val
-
- def base64_to_int(self, base64):
- '''
- Convert the Base 64 characters in base64 to a value.
- '''
- value = 0
- first = 0
- neg = False
-
- if base64[0] == '-':
- neg = True
- first = 1
-
- for i in range(first, len(base64)):
- value = value << 6
- try:
- value += self.base64_map[base64[i]]
- except KeyError:
- print("KeyError:", i)
-
- return -value if neg else value
-
- def int_to_base64(self, value):
- """
- Convert an integer to base 64
- """
- result = ""
- if value < 0:
- result = "-"
- value = -value
-
- while value:
- charnumber = value % 0x3F
- result += self.base64_digits[charnumber]
- value = value >> 6
- return result
-
- def string_to_base64(self, string, compatible=False):
- """
- Convert a string to base64
- """
- buf = ""
- reg = 0
- rem = 0
- char = 0
- i = 0
- while i < len(string):
- if rem < 6:
- reg <<= 8
- char = string[i]
- if not compatible:
- if char >= 128:
- char = self.twos_comp(char, 8)
- reg |= char
- i += 1
- rem += 8
-
- save = reg
- reg >>= (rem - 6)
- buf += self.base64_digits[reg & 0x3F]
- reg = save
- rem -= 6
-
- if rem:
- mask = (1 << rem) - 1
- if compatible:
- buf += self.base64_digits[(reg & mask) << (6 - rem)]
- else:
- buf += self.base64_digits[reg & mask]
- return bytearray(buf, 'utf-8')
diff --git a/bareos/util/password.py b/bareos/util/password.py
deleted file mode 100644
index b20f2a8..0000000
--- a/bareos/util/password.py
+++ /dev/null
@@ -1,33 +0,0 @@
-"""
-Class to handle Bareos passwords.
-"""
-
-import hashlib
-
-class Password(object):
-
- def __init__(self, password=None):
- self.password_md5 = None
- self.set_plaintext(password)
-
- def set_plaintext(self, password):
- self.password_plaintext = bytearray(password, 'utf-8')
- self.set_md5(self.__plaintext2md5(password))
-
- def set_md5(self, password):
- self.password_md5 = password
-
- def plaintext(self):
- return self.password_plaintext
-
- def md5(self):
- return self.password_md5
-
- @staticmethod
- def __plaintext2md5(password):
- '''
- md5 the password and return the hex style
- '''
- md5 = hashlib.md5()
- md5.update(bytes(bytearray(password, 'utf-8')))
- return md5.hexdigest()
diff --git a/bareos/util/path.py b/bareos/util/path.py
deleted file mode 100644
index e47e2f5..0000000
--- a/bareos/util/path.py
+++ /dev/null
@@ -1,91 +0,0 @@
-"""
-Class to handle file paths.
-"""
-
-from copy import copy
-
-class Path(object):
-
- def __init__(self, path=None):
- self.__set_defaults()
- self.set_path(path)
-
- def __str__(self):
- result = ""
- if self.is_root():
- result += "/"
- result += "/".join(self.path)
- if (not self.is_root()) or self.len() > 0:
- if self.is_directory():
- result += "/"
- return result
-
- def __set_defaults(self):
- self.path_orig = None
- self.root = False
- self.directory = False
- self.path = None
-
- def set_path(self, path):
- if path == None:
- self.__set_defaults()
- elif isinstance(path, str):
- self.path_orig = path
- components = self.path_orig.split('/')
- self.path = [i for i in components if i != '']
- if path == "":
- self.root = False
- self.directory = True
- else:
- self.root = False
- if self.path_orig[0] == '/':
- self.root = True
- self.directory = False
- if components[-1] == '':
- self.directory = True
- else:
- # exception
- pass
-
-
- def get(self, index=None):
- if index == None:
- return self.path
- else:
- return self.path[index]
-
-
- #def lstrip(self, path=[]):
- #"""
- #Creates a new Path instance with lstrip components removed from left.
- #"""
- #result = copy(self)
- #result.root = False
- #for i in path:
- #if result.get(0) == i:
- #result.remove(0)
- #else:
- ## TODO: exception?
- #pass
- #return result
-
- def shift(self):
- """
- Creates a new Path instance with lstrip components removed from left.
- """
- result = self.get(0)
- self.remove(0)
- return result
-
- def is_directory(self):
- return self.directory
-
- def is_root(self):
- return self.root
-
-
- def remove(self, index):
- del(self.path[index])
-
- def len(self):
- return len(self.path)
diff --git a/bin/bareos-fd-connect.py b/bin/bareos-fd-connect.py
deleted file mode 100755
index 00a7fbb..0000000
--- a/bin/bareos-fd-connect.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/python
-
-import argparse
-import bareos.bsock
-from bareos.bsock.filedaemon import FileDaemon
-import logging
-import sys
-
-def getArguments():
- parser = argparse.ArgumentParser(description='Connect to Bareos File Daemon.' )
- parser.add_argument('-d', '--debug', action='store_true', help="enable debugging output")
- parser.add_argument('--name', help="Name of the Director resource in the File Daemon", required=True)
- parser.add_argument('-p', '--password', help="password to authenticate to a Bareos File Daemon", required=True)
- parser.add_argument('--port', default=9102, help="Bareos File Daemon network port")
- parser.add_argument('address', nargs='?', default="localhost", help="Bareos File Daemon network address")
- parser.add_argument('command', nargs='*', help="Command to send to the Bareos File Daemon")
- args = parser.parse_args()
- return args
-
-if __name__ == '__main__':
- logging.basicConfig(format='%(levelname)s %(module)s.%(funcName)s: %(message)s', level=logging.INFO)
- logger = logging.getLogger()
-
- args=getArguments()
- if args.debug:
- logger.setLevel(logging.DEBUG)
-
- try:
- options = [ 'address', 'port', 'name' ]
- parameter = {}
- for i in options:
- if hasattr(args, i) and getattr(args,i) != None:
- logger.debug( "%s: %s" %(i, getattr(args,i)))
- parameter[i] = getattr(args,i)
- else:
- logger.debug( '%s: ""' %(i))
- logger.debug('options: %s' % (parameter))
- password = bareos.bsock.Password(args.password)
- parameter['password']=password
- bsock=FileDaemon(**parameter)
- except RuntimeError as e:
- print(str(e))
- sys.exit(1)
- logger.debug( "authentication successful" )
- if args.command:
- print(bsock.call(args.command))
- else:
- bsock.interactive()
diff --git a/bin/bareos-jsonrpc-server.py b/bin/bareos-jsonrpc-server.py
deleted file mode 100755
index ffc1249..0000000
--- a/bin/bareos-jsonrpc-server.py
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/python
-
-import argparse
-import bareos.bsock
-import inspect
-import logging
-# pip install python-jsonrpc
-import pyjsonrpc
-import sys
-from types import MethodType
-
-def add(a, b):
- """Test function"""
- return a + b
-
-class RequestHandler(pyjsonrpc.HttpRequestHandler):
- # Register public JSON-RPC methods
- methods = {
- "add": add
- }
-
-class BconsoleMethods:
- def __init__(self, bconsole):
- self.logger = logging.getLogger()
- self.logger.debug("init")
- self.conn = bconsole
-
- def execute(self, command):
- """
- Generic function to call any bareos console command.
- """
- self.logger.debug(command)
- return self.conn.call(command)
-
- def execute_fullresult(self, command):
- """
- Generic function to call any bareos console commands,
- and return the full result (also the pseudo jsonrpc header, not required here).
- """
- self.logger.debug(command)
- return self.conn.call_fullresult(command)
-
- def list(self, command):
- """
- Interface to the Bareos console list command.
- """
- return self.execute("list " + command)
-
- def call(self, command):
- """
- legacy function, as call is a suboptimal name.
- It is used internally by python-jsonrpc.
- Use execute() instead.
- """
- return self.execute(command)
-
-
-
-def bconsole_methods_to_jsonrpc(bconsole_methods):
- tuples = inspect.getmembers(bconsole_methods, predicate=inspect.ismethod)
- methods = RequestHandler.methods
- for i in tuples:
- methods[i[0]] = getattr(bconsole_methods, i[0])
- print i[0]
- print methods
- RequestHandler.methods=methods
-
-
-def getArguments():
- parser = argparse.ArgumentParser(description='Run Bareos Director JSON-RPC proxy.' )
- parser.add_argument('-d', '--debug', action='store_true', help="enable debugging output")
- parser.add_argument('--name', default="*UserAgent*", help="use this to access a specific Bareos director named console. Otherwise it connects to the default console (\"*UserAgent*\")")
- parser.add_argument('-p', '--password', help="password to authenticate to a Bareos Director console", required=True)
- parser.add_argument('--port', default=9101, help="Bareos Director network port")
- parser.add_argument('--dirname', help="Bareos Director name")
- parser.add_argument('address', nargs='?', default="localhost", help="Bareos Director network address")
- args = parser.parse_args()
- return args
-
-
-if __name__ == '__main__':
- logging.basicConfig(format='%(levelname)s %(module)s.%(funcName)s: %(message)s', level=logging.INFO)
- logger = logging.getLogger()
-
- args=getArguments()
- if args.debug:
- logger.setLevel(logging.DEBUG)
-
- try:
- options = [ 'address', 'port', 'dirname', 'name' ]
- parameter = {}
- for i in options:
- if hasattr(args, i) and getattr(args,i) != None:
- logger.debug( "%s: %s" %(i, getattr(args,i)))
- parameter[i] = getattr(args, i)
- else:
- logger.debug( '%s: ""' %(i))
- logger.debug('options: %s' % (parameter))
- password = bareos.bsock.Password(args.password)
- parameter['password']=password
- director = bareos.bsock.DirectorConsoleJson(**parameter)
- except RuntimeError as e:
- print(str(e))
- sys.exit(1)
- logger.debug( "authentication successful" )
-
- bconsole_methods = BconsoleMethods( director )
-
- bconsole_methods_to_jsonrpc( bconsole_methods )
-
- print bconsole_methods.call("list jobs last")
-
- # Threading HTTP-Server
- http_server = pyjsonrpc.ThreadingHttpServer(
- server_address = ('localhost', 8080),
- RequestHandlerClass = RequestHandler
- )
- print "Starting HTTP server ..."
- print "URL: http://localhost:8080"
- http_server.serve_forever()
diff --git a/bin/bconsole-json.py b/bin/bconsole-json.py
deleted file mode 100755
index d04c7ab..0000000
--- a/bin/bconsole-json.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/python
-
-from __future__ import print_function
-import argparse
-import bareos.bsock
-import logging
-import sys
-
-def getArguments():
- parser = argparse.ArgumentParser(description='Console to Bareos Director.' )
- parser.add_argument('-d', '--debug', action='store_true', help="enable debugging output")
- parser.add_argument('--name', default="*UserAgent*", help="use this to access a specific Bareos director named console. Otherwise it connects to the default console (\"*UserAgent*\")")
- parser.add_argument('-p', '--password', help="password to authenticate to a Bareos Director console", required=True)
- parser.add_argument('--port', default=9101, help="Bareos Director network port")
- parser.add_argument('--dirname', help="Bareos Director name")
- parser.add_argument('address', nargs='?', default="localhost", help="Bareos Director network address")
- args = parser.parse_args()
- return args
-
-if __name__ == '__main__':
- logging.basicConfig(format='%(levelname)s %(module)s.%(funcName)s: %(message)s', level=logging.INFO)
- logger = logging.getLogger()
-
- args=getArguments()
- if args.debug:
- logger.setLevel(logging.DEBUG)
-
- try:
- options = [ 'address', 'port', 'dirname', 'name' ]
- parameter = {}
- for i in options:
- if hasattr(args, i) and getattr(args,i) != None:
- logger.debug( "%s: %s" %(i, getattr(args,i)))
- parameter[i] = getattr(args, i)
- else:
- logger.debug( '%s: ""' %(i))
- logger.debug('options: %s' % (parameter))
- password = bareos.bsock.Password(args.password)
- parameter['password']=password
- director = bareos.bsock.DirectorConsoleJson(**parameter)
- except RuntimeError as e:
- print(str(e))
- sys.exit(1)
- logger.debug( "authentication successful" )
- director.interactive()
diff --git a/bin/bconsole.py b/bin/bconsole.py
deleted file mode 100755
index 64afb48..0000000
--- a/bin/bconsole.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/python
-
-from __future__ import print_function
-import argparse
-#import bareos
-import bareos.bsock
-import logging
-import sys
-
-def getArguments():
- parser = argparse.ArgumentParser(description='Console to Bareos Director.' )
- parser.add_argument('-d', '--debug', action='store_true', help="enable debugging output")
- parser.add_argument('--name', default="*UserAgent*", help="use this to access a specific Bareos director named console. Otherwise it connects to the default console (\"*UserAgent*\")")
- parser.add_argument('-p', '--password', help="password to authenticate to a Bareos Director console", required=True)
- parser.add_argument('--port', default=9101, help="Bareos Director network port")
- parser.add_argument('--dirname', help="Bareos Director name")
- parser.add_argument('address', nargs='?', default="localhost", help="Bareos Director network address")
- args = parser.parse_args()
- return args
-
-if __name__ == '__main__':
- logging.basicConfig(format='%(levelname)s %(module)s.%(funcName)s: %(message)s', level=logging.INFO)
- logger = logging.getLogger()
-
- args=getArguments()
- if args.debug:
- logger.setLevel(logging.DEBUG)
-
- try:
- options = [ 'address', 'port', 'dirname', 'name' ]
- parameter = {}
- for i in options:
- if hasattr(args, i) and getattr(args,i) != None:
- logger.debug( "%s: %s" %(i, getattr(args,i)))
- parameter[i] = getattr(args,i)
- else:
- logger.debug( '%s: ""' %(i))
- logger.debug('options: %s' % (parameter))
- password = bareos.bsock.Password(args.password)
- parameter['password']=password
- director = bareos.bsock.DirectorConsole(**parameter)
- except RuntimeError as e:
- print(str(e))
- sys.exit(1)
- logger.debug( "authentication successful" )
- director.interactive()
diff --git a/bin/jsonrpc-test.py b/bin/jsonrpc-test.py
deleted file mode 100755
index 9cd660b..0000000
--- a/bin/jsonrpc-test.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-# coding: utf-8
-
-from pprint import pprint
-import pyjsonrpc
-
-http_client = pyjsonrpc.HttpClient(
- url = "http://localhost:8080",
- #username = "Username",
- #password = "Password"
-)
-
-#try:
- #print http_client.call("a2")
- ## Result: 3
-#except:
- #pass
-
-# It is also possible to use the *method* name as *attribute* name.
-#print http_client.add(1, 2)
-
-# provoke an error
-#print http_client.add(2,"abc")
-
-
-result = http_client.execute_fullresult("list jobs last")
-pprint(result)
-
-result = http_client.execute("list jobs last")
-pprint(result)
-
-result = http_client.list("jobs last")
-pprint(result)
-
-
-#try:
- #pprint(result['result'])
-#except:
- #pprint( result )
-
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index 7f8f011..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 7c296e7..0000000
--- a/debian/control
+++ /dev/null
@@ -1,13 +0,0 @@
-Source: python-bareos
-Maintainer: Joerg Steffens <joerg.steffens@bareos.com>
-Section: python
-Priority: optional
-Build-Depends: dh-python, debhelper (>= 7.4.3), python-all (>= 2.6.6-3), python-setuptools (>= 0.6b3)
-Standards-Version: 3.9.1
-
-Package: python-bareos
-Architecture: all
-Depends: ${misc:Depends}, ${python:Depends}
-Description: Backup Archiving REcovery Open Sourced - Python module
- This packages contains a python module to interact with a Bareos backup system.
- It also includes some tools based on this module.
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index b4fa425..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/make -f
-
-export PYBUILD_NAME = bareos
-
-%:
- dh $@ --with python2 --buildsystem=pybuild
-
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index d3827e7..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/packaging/debian.debtransform b/packaging/debian.debtransform
deleted file mode 100644
index b90c561..0000000
--- a/packaging/debian.debtransform
+++ /dev/null
@@ -1 +0,0 @@
-# this file is only required to activate debtransform from Open Build Service (OBS)
diff --git a/packaging/python-bareos.changes b/packaging/python-bareos.changes
deleted file mode 100644
index 1620a26..0000000
--- a/packaging/python-bareos.changes
+++ /dev/null
@@ -1,12 +0,0 @@
-python-bareos (0.4.0-1) unstable; urgency=low
-
- * move python module bareos.fuse from python-bareos to bareos-fuse.
-
- -- Joerg Steffens <joerg.steffens@bareos.com> Tue, 26 Jun 2017 11:45:40 +0200
-
-python-bareos (0.3.0-1) unstable; urgency=low
-
- * initial
-
- -- Joerg Steffens <joerg.steffens@bareos.com> Mon, 24 Aug 2015 11:45:40 +0200
-
diff --git a/packaging/python-bareos.dsc b/packaging/python-bareos.dsc
deleted file mode 100644
index 96cfc4a..0000000
--- a/packaging/python-bareos.dsc
+++ /dev/null
@@ -1,10 +0,0 @@
-Format: 1.0
-Source: python-bareos
-Binary: python-bareos
-Architecture: all
-Version: 0.4-1
-Maintainer: Joerg Steffens <joerg.steffens@bareos.com>
-Standards-Version: 3.9.1
-Build-Depends: dh-python, debhelper (>= 7.4.3), python-all (>= 2.6.6-3), python-setuptools (>= 0.6b3)
-DEBTRANSFORM-RELEASE: 1
-Files:
diff --git a/packaging/python-bareos.spec b/packaging/python-bareos.spec
deleted file mode 100644
index 7403ff1..0000000
--- a/packaging/python-bareos.spec
+++ /dev/null
@@ -1,79 +0,0 @@
-%global srcname bareos
-
-#%%if 0%%{?rhel} || 0%%{?suse_version} == 1110 || 0%%{?suse_version} == 1315
-%bcond_without python2
-#%%else
-#%%bcond_with python2
-#%%endif
-
-%if 0%{?with_python2}
-%global PYVER 2
-%define noarch 0
-%else
-%global PYVER 3
-%define noarch 1
-%endif
-
-%global pyXsuf %{PYVER}
-%global pyXcmd python%{PYVER}
-
-Name: python-%{srcname}
-Version: 0.4
-Release: 1%{?dist}
-Summary: Backup Archiving REcovery Open Sourced - Python module
-Group: Productivity/Archiving/Backup
-License: AGPL-3.0
-URL: https://github.com/bareos/python-bareos/
-Vendor: The Bareos Team
-#Source0: http://pypi.python.org/packages/source/e/%%{srcname}/%%{srcname}-%%{version}.tar.gz
-Source: %{name}-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-root
-%global debug_package %{nil}
-%if %{with python2}
-BuildRequires: python-devel
-BuildRequires: python-setuptools
-Requires: python-dateutil
-%endif
-%if %{with python3}
-BuildRequires: python3-devel
-BuildRequires: python3-setuptools
-Requires: python3-dateutil
-%endif
-%if %noarch
-BuildArch: noarch
-%endif
-%{?python_provide:%python_provide python-%{srcname}}
-
-%description
-Bareos - Backup Archiving Recovery Open Sourced - Python module
-
-This packages contains a python module to interact with a Bareos backup system.
-It also includes some tools based on this module.
-
-%define pyX_sitelib %(%{pyXcmd} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
-
-%prep
-%setup -q
-
-%build
-%{pyXcmd} setup.py build
-
-%install
-# Must do the python2 install first because the scripts in /usr/bin are
-# overwritten with every setup.py install, and in general we want the
-# python3 version to be the default.
-%{pyXcmd} setup.py install --prefix=%{_prefix} --root=%{buildroot}
-
-%check
-# does not work, as it tries to download other packages from pip
-#%%{__python2} setup.py test
-#%%{pyXcmd} setup.py -q test
-
-# Note that there is no %%files section for the unversioned python module if we are building for several python runtimes
-%files
-%defattr(-,root,root,-)
-%doc README.rst
-%{pyX_sitelib}/*
-%{_bindir}/*
-
-%changelog
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 0eb7883..0000000
--- a/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-
-from setuptools import find_packages, setup
-
-setup(
- name='python-bareos',
- version='0.3',
- author='Joerg Steffens',
- author_email='joerg.steffens@bareos.com',
- packages=find_packages(),
- scripts=['bin/bconsole.py', 'bin/bconsole-json.py', 'bin/bareos-fd-connect.py'],
- url='https://github.com/bareos/python-bareos/',
- # What does your project relate to?
- keywords='bareos',
- description='Network socket connection to the Bareos backup system.',
- long_description=open('README.rst').read(),
- install_requires=[
- #'hmac',
- #'socket',
- 'python-dateutil',
- ]
-)
-