openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
February 2023
- 1 participants
- 2021 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mapi-header-php for openSUSE:Factory checked in at 2023-02-28 12:48:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mapi-header-php (Old)
and /work/SRC/openSUSE:Factory/.mapi-header-php.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mapi-header-php"
Tue Feb 28 12:48:31 2023 rev:3 rq:1067987 version:1.1.0.70e984f
Changes:
--------
--- /work/SRC/openSUSE:Factory/mapi-header-php/mapi-header-php.changes 2023-01-21 19:11:44.717361507 +0100
+++ /work/SRC/openSUSE:Factory/.mapi-header-php.new.31432/mapi-header-php.changes 2023-02-28 12:48:52.928573985 +0100
@@ -1,0 +2,8 @@
+Mon Feb 27 12:17:12 UTC 2023 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Update to tag 1.1 (70e984f)
+ * Add a prefix to the CAL_DEFAULT and CAL_GREGORIAN constants to
+ avoid runtime conflict with php-calendar
+ * Remove mapi_strerror since it was moved to Gromox/PHP-MAPI
+
+-------------------------------------------------------------------
Old:
----
mapi-header-php-1.0.13.f8f3255.tar.xz
New:
----
mapi-header-php-1.1.0.70e984f.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mapi-header-php.spec ++++++
--- /var/tmp/diff_new_pack.nyo6cJ/_old 2023-02-28 12:48:53.696578975 +0100
+++ /var/tmp/diff_new_pack.nyo6cJ/_new 2023-02-28 12:48:53.700579000 +0100
@@ -19,7 +19,7 @@
%define _empty_manifest_terminate_build 0
Name: mapi-header-php
-Version: 1.0.13.f8f3255
+Version: 1.1.0.70e984f
Release: 0
Summary: Common PHP MAPI header files for grommunio
License: AGPL-3.0-or-later
@@ -39,9 +39,7 @@
%build
%install
-b=%buildroot
-mkdir -p "$b/%_datadir/php-mapi"
-cp -av *.php "$b/%_datadir/php-mapi/"
+%make_install
%files
%_datadir/php-mapi/
++++++ debian.changelog ++++++
--- /var/tmp/diff_new_pack.nyo6cJ/_old 2023-02-28 12:48:53.752579338 +0100
+++ /var/tmp/diff_new_pack.nyo6cJ/_new 2023-02-28 12:48:53.752579338 +0100
@@ -1,4 +1,4 @@
-mapi-header-php (1.0.13.f8f3255) unstable; urgency=low
+mapi-header-php (1.1.0.70e984f) unstable; urgency=low
* Initial package.
++++++ debian.control ++++++
--- /var/tmp/diff_new_pack.nyo6cJ/_old 2023-02-28 12:48:53.772579468 +0100
+++ /var/tmp/diff_new_pack.nyo6cJ/_new 2023-02-28 12:48:53.776579494 +0100
@@ -9,6 +9,7 @@
Package: mapi-header-php
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, grommunio-error-pages
+Conflicts: gromox (< 2.3.20)
Description: Common PHP MAPI header files for grommunio
PHP files shared between grommunio-web, grommunio-sync and other PHP
applications from the groupware suite.
++++++ debian.rules ++++++
--- /var/tmp/diff_new_pack.nyo6cJ/_old 2023-02-28 12:48:53.800579650 +0100
+++ /var/tmp/diff_new_pack.nyo6cJ/_new 2023-02-28 12:48:53.804579676 +0100
@@ -5,6 +5,5 @@
dh $@
override_dh_auto_install:
- mkdir -p "${INSTDIR}/usr/share/php-mapi/"
- cp -av *.php "${INSTDIR}/usr/share/php-mapi/"
+ make install DESTDIR=${INSTDIR}
++++++ mapi-header-php-1.0.13.f8f3255.tar.xz -> mapi-header-php-1.1.0.70e984f.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/Makefile new/mapi-header-php-1.1.0.70e984f/Makefile
--- old/mapi-header-php-1.0.13.f8f3255/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/Makefile 2023-02-24 21:53:58.000000000 +0100
@@ -0,0 +1,13 @@
+# -*- Makefile -*-
+
+prefix = /usr
+datadir = ${prefix}/share
+pkgdatadir = ${datadir}/${PACKAGE_NAME}
+PACKAGE_NAME = php-mapi
+MKDIR_P = mkdir -p
+
+all:
+
+install:
+ ${MKDIR_P} ${DESTDIR}${pkgdatadir}
+ install -m0644 *.php ${DESTDIR}${pkgdatadir}/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/README.md new/mapi-header-php-1.1.0.70e984f/README.md
--- old/mapi-header-php-1.0.13.f8f3255/README.md 2023-01-12 14:22:15.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/README.md 1970-01-01 01:00:00.000000000 +0100
@@ -1,106 +0,0 @@
-# grommunio MAPI headers (PHP)
-
-![project license](https://img.shields.io/badge/license-AGPL--3.0-orange)
-[![latest version](https://shields.io/github/v/tag/grommunio/mapi-header-php)](https:…
-[![scrutinizer](https://img.shields.io/scrutinizer/build/g/grommunio/mapi-header-php)](https://scrutinizer-ci.com/g/grommunio/mapi-header-php/)
-[![code size](https://img.shields.io/github/languages/code-size/grommunio/mapi-head…
-
-[![pull requests welcome](https://img.shields.io/badge/PRs-welcome-ff69b4.svg)](https://gith…
-[![code with love by grommunio](https://img.shields.io/badge/%3C%2F%3E%20with%20%E2%99%A5%20by-grommunio-ff1414.svg)](https://grommunio.com)
-[![twitter](https://img.shields.io/twitter/follow/grommunio?style=social)](https://twitter.com/grommunio)
-
-grommunio MAPI headers (PHP) provide the central repository for PHP-based MAPI applications. These MAPI header files are used by [grommunio Web](https://github.com/grommunio/grommunio-web), [grommunio Sync](https://github.com/grommunio/grommunio-sync) and [grommunio Dav](https://github.com/grommunio/grommunio-dav), eliminating the independent maintenance of these header files thereof.
-
-<details open="open">
-<summary>Overview</summary>
-
-- [About](#about)
- - [Compatible with](#compatible-with)
-- [Getting Started](#getting-started)
-- [Status](#status)
-- [Support](#support)
-- [Project assistance](#project-assistance)
-- [Contributing](#contributing)
- - [Additional notes](#additional-notes)
-- [Security](#security)
-- [Development](#development)
- - [Coding style](#coding-style)
-- [License](#license)
-
-</details>
-
----
-
-## About grommunio Web
-
-- Provides MAPI header files for any PHP-based application
-
-### Compatible with
-
-- PHP 7.4+, PHP 8.0 and 8.1
-
-## Getting Started
-
-## Status
-
-- [Top Feature Requests](https://github.com/grommunio/mapi-header-php/issues?q=label%3Aenh… (Add your votes using the ���� reaction)
-- [Top Bugs](https://github.com/grommunio/mapi-header-php/issues?q=is%3Aissue+is%3… (Add your votes using the ���� reaction)
-- [Newest Bugs](https://github.com/grommunio/mapi-header-php/issues?q=is%3Aopen+is%3A…
-
-## Support
-
-- Support is available through [grommunio GmbH](https://grommunio.com) and its partners.
-- grommunio Web community is available here: [grommunio Community](https://community.grommunio.com)
-
-For direct contact to the maintainers (for example to supply information about a security-related responsible disclosure), you can contact grommunio directly at [dev@grommunio.com](mailto:dev@grommunio.com)
-
-## Project assistance
-
-If you want to say thank you or/and support active development of grommunio Web:
-
-- Add a [GitHub Star](https://github.com/grommunio/mapi-header-php) to the project.
-- Tweet about grommunio Web.
-- Write interesting articles about the project on [Dev.to](https://dev.to/), [Medium](https://medium.com/), your personal blog or any medium you feel comfortable with.
-
-Together, we can make grommunio Web better!
-
-## Contributing
-
-First off, thanks for taking the time to contribute! Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make will benefit everybody else and are greatly appreciated.
-
-If you have found an issue and want to report an issue, either reach out to us in our [community](https://community.grommunio.com), or, if you have a subscription, open up a [support case](https://grommunio.com/).
-
-To provide changesets,
-
-- Clone the repository from https://github.com/grommunio/mapi-header-php.git
-- Commit and sign your work (```git commit -s```).
-
-Then, either
-
-- create a pull request towards the master branch.
-
-or
-
-- upload commits to a git store of your choosing, or export the series as a patchset using [git format-patch](https://git-scm.com/docs/git-format-patch).
-- send the patch(es) or git link to [dev@grommunio.com](mailto:dev@grommunio.com) and we will consider the submission.
-
-### Additional notes
-
-- If possible, please only work on one issue per commit.
-
-## Security
-
-grommunio Web follows good practices of security. grommunio constantly monitors security-related issues.
-grommunio Web is provided "as is" without any warranty. For professional support options through subscriptions, head over to [grommunio](https://grommunio.com).
-
-## Development
-
-### Coding style
-
-This repository follows a customized coding style. The coding style can be validated anytime by the repositories provided [configuration file](.phpcs).
-
-## License
-
-This project is licensed under the GNU Affero General Public License v3.
-
-See [LICENSE.txt](LICENSE.txt) for more information.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/README.rst new/mapi-header-php-1.1.0.70e984f/README.rst
--- old/mapi-header-php-1.0.13.f8f3255/README.rst 1970-01-01 01:00:00.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/README.rst 2023-02-24 21:53:58.000000000 +0100
@@ -0,0 +1,49 @@
+grommunio MAPI headers (PHP)
+============================
+
+mapi-headers-php is the central repository for PHP-based MAPI applications.
+These header files are used by `grommunio Web
+<https://github.com/grommunio/grommunio-web>`_, `grommunio Sync
+<https://github.com/grommunio/grommunio-sync>`_ and `grommunio DAV
+<https://github.com/grommunio/grommunio-dav>`_, eliminating the bundling of
+headers.
+
+|shield-agpl|_ |shield-release|_ |shield-scrut|_ |shield-loc|
+
+.. |shield-agpl| image:: https://img.shields.io/badge/license-AGPL--3.0-green
+.. _shield-agpl: LICENSE.txt
+.. |shield-release| image:: https://shields.io/github/v/tag/grommunio/mapi-header-php
+.. _shield-release: https://github.com/grommunio/mapi-header-php/tags
+.. |shield-scrut| image:: https://img.shields.io/scrutinizer/build/g/grommunio/mapi-header-php
+.. _shield-scrut: https://scrutinizer-ci.com/g/grommunio/mapi-header-php/
+.. |shield-loc| image:: https://img.shields.io/github/languages/code-size/grommunio/mapi-header-php
+
+Compatibility
+=============
+
+* PHP 7.4+, PHP 8.x
+
+Support
+=======
+
+Support is available through grommunio GmbH and its partners. See
+https://grommunio.com/ for details. A community forum is at
+`<https://community.grommunio.com/>`_.
+
+For direct contact and supplying information about a security-related
+responsible disclosure, contact `dev(a)grommunio.com <dev(a)grommunio.com>`_.
+
+Contributing
+============
+
+* https://docs.github.com/en/get-started/quickstart/contributing-to-projects
+* Alternatively, upload commits to a git store of your choosing, or export the
+ series as a patchset using `git format-patch
+ <https://git-scm.com/docs/git-format-patch>`_, then convey the git
+ link/patches through our direct contact address (above).
+
+Coding style
+------------
+
+This repository follows a custom coding style, which can be validated anytime
+using the repository's provided `configuration file <.phpcs>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/class.baserecurrence.php new/mapi-header-php-1.1.0.70e984f/class.baserecurrence.php
--- old/mapi-header-php-1.0.13.f8f3255/class.baserecurrence.php 2023-01-12 14:22:15.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/class.baserecurrence.php 2023-02-24 21:53:58.000000000 +0100
@@ -169,7 +169,7 @@
return $ret;
}
- if (!in_array($data['CalendarType'], [CAL_DEFAULT, CAL_GREGORIAN])) {
+ if (!in_array($data['CalendarType'], [MAPI_CAL_DEFAULT, MAPI_CAL_GREGORIAN])) {
return $ret;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/class.meetingrequest.php new/mapi-header-php-1.1.0.70e984f/class.meetingrequest.php
--- old/mapi-header-php-1.0.13.f8f3255/class.meetingrequest.php 2023-01-12 14:22:15.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/class.meetingrequest.php 2023-02-24 21:53:58.000000000 +0100
@@ -751,7 +751,7 @@
*
* @psalm-param array<float|mixed|true> $proposeNewTimeProps
*/
- public function accept(bool $tentative, bool $sendresponse, bool $move, array $proposeNewTimeProps = [], $body = false, bool $userAction = false, $store, $calFolder, $basedate = false) {
+ public function accept(bool $tentative, bool $sendresponse, bool $move, array $proposeNewTimeProps, $body, bool $userAction, $store, $calFolder, $basedate = false) {
$messageprops = mapi_getprops($this->message);
$isDelegate = isset($messageprops[PR_RCVD_REPRESENTING_NAME]);
@@ -1971,7 +1971,7 @@
* @param mixed $basedate date of occurrence which attendee has responded
* @param mixed $calFolder
*/
- public function createResponse($status, $proposeNewTimeProps = [], $body = false, $store, $basedate = false, $calFolder): void {
+ public function createResponse($status, $proposeNewTimeProps, $body, $store, $basedate, $calFolder): void {
$messageprops = mapi_getprops($this->message, [
PR_SENT_REPRESENTING_ENTRYID,
PR_SENT_REPRESENTING_EMAIL_ADDRESS,
@@ -2829,7 +2829,7 @@
* @param resource $store user store
* @param bool $isDelegate true if delegate is processing this meeting request
*/
- public function acceptException(&$recurringItem, &$occurrenceItem, $basedate, $move = false, $tentative, $userAction = false, $store, $isDelegate = false): void {
+ public function acceptException(&$recurringItem, &$occurrenceItem, $basedate, $move, $tentative, $userAction, $store, $isDelegate = false): void {
$recurr = new Recurrence($store, $recurringItem);
// Copy properties from meeting request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/mapi.util.php new/mapi-header-php-1.1.0.70e984f/mapi.util.php
--- old/mapi-header-php-1.0.13.f8f3255/mapi.util.php 2023-01-12 14:22:15.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/mapi.util.php 2023-02-24 21:53:58.000000000 +0100
@@ -350,168 +350,3 @@
return null;
}
-
-/**
- * Returns an error message from error code.
- *
- * @param int $e error code
- *
- * @return string error message
- */
-function mapi_strerror($e) {
- switch ($e) {
- case 0: return "success";
-
- case MAPI_E_CALL_FAILED: return "An error of unexpected or unknown origin occurred";
-
- case MAPI_E_NOT_ENOUGH_MEMORY: return "Not enough memory was available to complete the operation";
-
- case MAPI_E_INVALID_PARAMETER: return "An invalid parameter was passed to a function or remote procedure call";
-
- case MAPI_E_INTERFACE_NOT_SUPPORTED: return "MAPI interface not supported";
-
- case MAPI_E_NO_ACCESS: return "An attempt was made to access a message store or object for which the user has insufficient permissions";
-
- case MAPI_E_NO_SUPPORT: return "Function is not implemented";
-
- case MAPI_E_BAD_CHARWIDTH: return "An incompatibility exists in the character sets supported by the caller and the implementation";
-
- case MAPI_E_STRING_TOO_LONG: return "In the context of this method call, a string exceeds the maximum permitted length";
-
- case MAPI_E_UNKNOWN_FLAGS: return "One or more values for a flags parameter were not valid";
-
- case MAPI_E_INVALID_ENTRYID: return "invalid entryid";
-
- case MAPI_E_INVALID_OBJECT: return "A method call was made using a reference to an object that has been destroyed or is not in a viable state";
-
- case MAPI_E_OBJECT_CHANGED: return "An attempt to commit changes failed because the object was changed separately";
-
- case MAPI_E_OBJECT_DELETED: return "An operation failed because the object was deleted separately";
-
- case MAPI_E_BUSY: return "A table operation failed because a separate operation was in progress at the same time";
-
- case MAPI_E_NOT_ENOUGH_DISK: return "Not enough disk space was available to complete the operation";
-
- case MAPI_E_NOT_ENOUGH_RESOURCES: return "Not enough system resources were available to complete the operation";
-
- case MAPI_E_NOT_FOUND: return "The requested object could not be found at the server";
-
- case MAPI_E_VERSION: return "Client and server versions are not compatible";
-
- case MAPI_E_LOGON_FAILED: return "A client was unable to log on to the server";
-
- case MAPI_E_SESSION_LIMIT: return "A server or service is unable to create any more sessions";
-
- case MAPI_E_USER_CANCEL: return "An operation failed because a user cancelled it";
-
- case MAPI_E_UNABLE_TO_ABORT: return "A ropAbort or ropAbortSubmit ROP request was unsuccessful";
-
- case MAPI_E_NETWORK_ERROR: return "An operation was unsuccessful because of a problem with network operations or services";
-
- case MAPI_E_DISK_ERROR: return "There was a problem writing to or reading from disk";
-
- case MAPI_E_TOO_COMPLEX: return "The operation requested is too complex for the server to handle (often w.r.t. restrictions)";
-
- case MAPI_E_BAD_COLUMN: return "The column requested is not allowed in this type of table";
-
- case MAPI_E_EXTENDED_ERROR: return "extended error";
-
- case MAPI_E_COMPUTED: return "A property cannot be updated because it is read-only, computed by the server";
-
- case MAPI_E_CORRUPT_DATA: return "There is an internal inconsistency in a database, or in a complex property value";
-
- case MAPI_E_UNCONFIGURED: return "unconfigured";
-
- case MAPI_E_FAILONEPROVIDER: return "failoneprovider";
-
- case MAPI_E_UNKNOWN_CPID: return "The server is not configured to support the code page requested by the client";
-
- case MAPI_E_UNKNOWN_LCID: return "The server is not configured to support the locale requested by the client";
-
- case MAPI_E_PASSWORD_CHANGE_REQUIRED: return "password change required";
-
- case MAPI_E_PASSWORD_EXPIRED: return "password expired";
-
- case MAPI_E_INVALID_WORKSTATION_ACCOUNT: return "invalid workstation account";
-
- case MAPI_E_INVALID_ACCESS_TIME: return "The operation failed due to clock skew between servers";
-
- case MAPI_E_ACCOUNT_DISABLED: return "account disabled";
-
- case MAPI_E_END_OF_SESSION: return "The server session has been destroyed, possibly by a server restart";
-
- case MAPI_E_UNKNOWN_ENTRYID: return "The EntryID passed to OpenEntry was created by a different MAPI provider";
-
- case MAPI_E_MISSING_REQUIRED_COLUMN: return "missing required column";
-
- case MAPI_W_NO_SERVICE: return "no service";
-
- case MAPI_E_BAD_VALUE: return "bad value";
-
- case MAPI_E_INVALID_TYPE: return "invalid type";
-
- case MAPI_E_TYPE_NO_SUPPORT: return "type no support";
-
- case MAPI_E_UNEXPECTED_TYPE: return "unexpected_type";
-
- case MAPI_E_TOO_BIG: return "The table is too big for the requested operation to complete";
-
- case MAPI_E_DECLINE_COPY: return "The provider implements this method by calling a support object method, and the caller has passed the MAPI_DECLINE_OK flag";
-
- case MAPI_E_UNEXPECTED_ID: return "unexpected id";
-
- case MAPI_W_ERRORS_RETURNED: return "The call succeeded, but the message store provider has error information available";
-
- case MAPI_E_UNABLE_TO_COMPLETE: return "A complex operation such as building a table row set could not be completed";
-
- case MAPI_E_TIMEOUT: return "An asynchronous operation did not succeed within the specified time-out";
-
- case MAPI_E_TABLE_EMPTY: return "A table essential to the operation is empty";
-
- case MAPI_E_TABLE_TOO_BIG: return "The table is too big for the requested operation to complete";
-
- case MAPI_E_INVALID_BOOKMARK: return "The bookmark passed to a table operation was not created on the same table";
-
- case MAPI_W_POSITION_CHANGED: return "position changed";
-
- case MAPI_W_APPROX_COUNT: return "approx count";
-
- case MAPI_E_WAIT: return "A wait time-out has expired";
-
- case MAPI_E_CANCEL: return "The operation had to be canceled";
-
- case MAPI_E_NOT_ME: return "not me";
-
- case MAPI_W_CANCEL_MESSAGE: return "cancel message";
-
- case MAPI_E_CORRUPT_STORE: return "corrupt store";
-
- case MAPI_E_NOT_IN_QUEUE: return "not in queue";
-
- case MAPI_E_NO_SUPPRESS: return "The server does not support the suppression of read receipts";
-
- case MAPI_E_COLLISION: return "A folder or item cannot be created because one with the same name or other criteria already exists";
-
- case MAPI_E_NOT_INITIALIZED: return "The subsystem is not ready";
-
- case MAPI_E_NON_STANDARD: return "non standard";
-
- case MAPI_E_NO_RECIPIENTS: return "A message cannot be sent because it has no recipients";
-
- case MAPI_E_SUBMITTED: return "A message cannot be opened for modification because it has already been sent";
-
- case MAPI_E_HAS_FOLDERS: return "A folder cannot be deleted because it still contains subfolders";
-
- case MAPI_E_HAS_MESSAGES: return "A folder cannot be deleted because it still contains messages";
-
- case MAPI_E_FOLDER_CYCLE: return "A folder move or copy operation would create a cycle";
-
- case MAPI_W_PARTIAL_COMPLETION: return "The call succeeded, but not all entries were successfully operated on";
-
- case MAPI_E_AMBIGUOUS_RECIP: return "An unresolved recipient matches more than one directory entry";
-
- case MAPI_E_STORE_FULL: return "Store full";
-
- default: return sprintf("%xh", $e);
- }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mapi-header-php-1.0.13.f8f3255/mapidefs.php new/mapi-header-php-1.1.0.70e984f/mapidefs.php
--- old/mapi-header-php-1.0.13.f8f3255/mapidefs.php 2023-01-12 14:22:15.000000000 +0100
+++ new/mapi-header-php-1.1.0.70e984f/mapidefs.php 2023-02-24 21:53:58.000000000 +0100
@@ -679,8 +679,8 @@
define('TZRULE_FLAG_EFFECTIVE_TZREG', 0x0002);
/* RecurrencePattern related values */
-define('CAL_DEFAULT', 0);
-define('CAL_GREGORIAN', 1);
+define('MAPI_CAL_DEFAULT', 0);
+define('MAPI_CAL_GREGORIAN', 1);
define('IDC_RCEV_PAT_ORB_DAILY', 0x200A);
define('IDC_RCEV_PAT_ORB_WEEKLY', 0x200B);
define('IDC_RCEV_PAT_ORB_MONTHLY', 0x200C);
++++++ mapi-header-php.dsc ++++++
--- /var/tmp/diff_new_pack.nyo6cJ/_old 2023-02-28 12:48:53.912580378 +0100
+++ /var/tmp/diff_new_pack.nyo6cJ/_new 2023-02-28 12:48:53.916580404 +0100
@@ -1,7 +1,7 @@
Format: 1.0
Source: mapi-header-php
Architecture: any
-Version: 1.0.13.f8f3255
+Version: 1.1.0.70e984f
DEBTRANSFORM-RELEASE: 1
Maintainer: Grommunio <null(a)grommunio.com>
Homepage: https://grommunio.com
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-d-installer for openSUSE:Factory checked in at 2023-02-28 12:48:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-d-installer (Old)
and /work/SRC/openSUSE:Factory/.rubygem-d-installer.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-d-installer"
Tue Feb 28 12:48:30 2023 rev:4 rq:1067904 version:0.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-d-installer/rubygem-d-installer.changes 2023-02-16 16:56:53.234948920 +0100
+++ /work/SRC/openSUSE:Factory/.rubygem-d-installer.new.31432/rubygem-d-installer.changes 2023-02-28 12:48:51.940567567 +0100
@@ -1,0 +2,5 @@
+Wed Feb 15 16:09:16 UTC 2023 - Jos�� Iv��n L��pez Gonz��lez <jlopez(a)suse.com>
+
+- Add D-Bus API for iSCSI.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-d-installer.spec ++++++
--- /var/tmp/diff_new_pack.O7NLkw/_old 2023-02-28 12:48:52.540571464 +0100
+++ /var/tmp/diff_new_pack.O7NLkw/_new 2023-02-28 12:48:52.544571491 +0100
@@ -29,6 +29,8 @@
%define mod_name d-installer
%define mod_full_name %{mod_name}-%{version}
# MANUAL
+# Override build.rpm, see also https://github.com/openSUSE/obs-build/blob/master/configs/
+%global rb_build_versions %{rb_default_ruby}
BuildRequires: dbus-1-common
Requires: dbus-1-common
Requires: snapper
@@ -36,6 +38,7 @@
Requires: yast2-country
Requires: yast2-hardware-detection
Requires: yast2-installation
+Requires: yast2-iscsi-client >= 4.5.7
Requires: yast2-network
Requires: yast2-proxy
Requires: yast2-storage-ng
++++++ d-installer-0.7.gem ++++++
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/etc/d-installer.yaml new/etc/d-installer.yaml
--- old/etc/d-installer.yaml 2023-02-15 17:34:43.000000000 +0100
+++ new/etc/d-installer.yaml 2023-02-24 14:18:28.000000000 +0100
@@ -149,15 +149,16 @@
ALP:
software:
installation_repositories:
- - url: https://download.opensuse.org/repositories/SUSE:/ALP:/ToTest/images/repo/AL…
+ - url: https://download.opensuse.org/repositories/SUSE:/ALP/standard/
archs: x86_64
- - url: https://download.opensuse.org/repositories/SUSE:/ALP:/ToTest/images/repo/AL…
+ - url: https://download.opensuse.org/repositories/SUSE:/ALP/standard/
archs: aarch64
mandatory_patterns:
- alp_base
- alp_base_zypper
- alp_cockpit
- alp-container_runtime
+ - alt_defaults
optional_patterns: null # no optional pattern shared
mandatory_packages:
- device-mapper # Apparently needed if devices at /dev/mapper are used at boot (eg. FDE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/dbus/storage/iscsi_node.rb new/lib/dinstaller/dbus/storage/iscsi_node.rb
--- old/lib/dinstaller/dbus/storage/iscsi_node.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/dbus/storage/iscsi_node.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,157 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "dbus"
+require "dinstaller/dbus/base_object"
+require "dinstaller/dbus/storage/with_iscsi_auth"
+
+module DInstaller
+ module DBus
+ module Storage
+ # Class representing an iSCSI node
+ class ISCSINode < BaseObject
+ include WithISCSIAuth
+
+ # @return [DInstaller::Storage::ISCSI::Manager]
+ attr_reader :iscsi_manager
+
+ # @return [DInstaller::Storage::ISCSI::Node]
+ attr_reader :iscsi_node
+
+ # Constructor
+ #
+ # @param iscsi_manager [DInstaller::Storage::Iscsi::Manager]
+ # @param iscsi_node [DInstaller::Storage::Iscsi::Node]
+ # @param path [DBus::ObjectPath] Path in which the object is exported
+ # @param logger [Logger, nil]
+ def initialize(iscsi_manager, iscsi_node, path, logger: nil)
+ super(path, logger: logger)
+
+ @iscsi_manager = iscsi_manager
+ @iscsi_node = iscsi_node
+ end
+
+ ISCSI_NODE_INTERFACE = "org.opensuse.DInstaller.Storage1.ISCSI.Node"
+ private_constant :ISCSI_NODE_INTERFACE
+
+ dbus_interface ISCSI_NODE_INTERFACE do
+ dbus_reader(:target, "s")
+ dbus_reader(:address, "s")
+ dbus_reader(:port, "u")
+ dbus_reader(:interface, "s")
+ dbus_reader(:connected, "b")
+ dbus_reader(:startup, "s")
+ dbus_method(:Login, "in options:a{sv}, out result:u") { |o| login(o) }
+ dbus_method(:Logout, "out result:u") { logout }
+ end
+
+ # Name of the iSCSI target
+ #
+ # @return [String]
+ def target
+ iscsi_node.target || ""
+ end
+
+ # IP address of the iSCSI target
+ #
+ # @return [String]
+ def address
+ iscsi_node.address || ""
+ end
+
+ # Port of the iSCSI target
+ #
+ # @return [Integer]
+ def port
+ iscsi_node.port || 0
+ end
+
+ # Interface of the iSCSI node
+ #
+ # @return [String]
+ def interface
+ iscsi_node.interface || ""
+ end
+
+ # Whether the node is connected
+ #
+ # @return [Boolean]
+ def connected
+ iscsi_node.connected?
+ end
+
+ # Startup status of the connection
+ #
+ # @return [String] Empty if the node is not connected
+ def startup
+ iscsi_node.startup || ""
+ end
+
+ # Sets the associated iSCSI node
+ #
+ # @note A properties changed signal is always emitted.
+ #
+ # @param value [DInstaller::Storage::ISCSI::Node]
+ def iscsi_node=(value)
+ @iscsi_node = value
+
+ properties = interfaces_and_properties[ISCSI_NODE_INTERFACE]
+ dbus_properties_changed(ISCSI_NODE_INTERFACE, properties, [])
+ end
+
+ # Creates an iSCSI session
+ #
+ # @param options [Hash<String, String>] Options from a D-Bus call:
+ # @option Username [String] Username for authentication by target
+ # @option Password [String] Password for authentication by target
+ # @option ReverseUsername [String] Username for authentication by initiator
+ # @option ReversePassword [String] Password for authentication by inititator
+ # @option Startup [String] Valid values are "onboot", "manual", "automatic"
+ #
+ # @return [Integer] 0 on success, 1 on failure if the given startup value is not valid, and
+ # 2 on failure because any other reason.
+ def login(options = {})
+ auth = iscsi_auth(options)
+ startup = options["Startup"]
+
+ if startup && !DInstaller::Storage::ISCSI::Manager::STARTUP_OPTIONS.include?(startup)
+ logger.info("iSCSI login error: startup value #{startup} is not valid")
+ return 1
+ end
+
+ success = iscsi_manager.login(iscsi_node, auth, startup: startup)
+ return 0 if success
+
+ logger.info("iSCSI login error: fail to login iSCSI node #{path}")
+ 2 # Error code
+ end
+
+ # Logouts the iSCSI session
+ #
+ # @return [Integer] 0 on success, 1 on failure
+ def logout
+ success = iscsi_manager.logout(iscsi_node)
+ success ? 0 : 1
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/dbus/storage/iscsi_nodes_tree.rb new/lib/dinstaller/dbus/storage/iscsi_nodes_tree.rb
--- old/lib/dinstaller/dbus/storage/iscsi_nodes_tree.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/dbus/storage/iscsi_nodes_tree.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,162 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "dinstaller/dbus/with_path_generator"
+require "dinstaller/dbus/storage/iscsi_node"
+
+module DInstaller
+ module DBus
+ module Storage
+ # Class representing the iSCSI nodes tree exported on D-Bus
+ class ISCSINodesTree
+ include WithPathGenerator
+
+ ROOT_PATH = "/org/opensuse/DInstaller/Storage1/iscsi_nodes"
+ path_generator ROOT_PATH
+
+ # Constructor
+ #
+ # @param service [::DBus::Service]
+ # @param iscsi_manager DInstaller::Storage::ISCSI::Manager]
+ # @param logger [Logger, nil]
+ def initialize(service, iscsi_manager, logger: nil)
+ @service = service
+ @iscsi_manager = iscsi_manager
+ @logger = logger
+ end
+
+ # Finds an iSCSI D-Bus node exported with the given path
+ #
+ # @param path [::DBus::ObjectPath]
+ def find(path)
+ dbus_nodes.find { |n| n.path == path }
+ end
+
+ # Updates the D-Bus tree according to the given iSCSI nodes
+ #
+ # New nodes are exported, existing nodes are updated and missing nodes are unexported.
+ #
+ # @param iscsi_nodes [Array<DInstaller::Storage::ISCSI::Node>]
+ def update(iscsi_nodes)
+ add_new_nodes(iscsi_nodes)
+ update_existing_nodes(iscsi_nodes)
+ delete_old_nodes(iscsi_nodes)
+ end
+
+ private
+
+ # @return [::DBus::Service]
+ attr_reader :service
+
+ # @return [DInstaller::Storage::ISCSI::Manager]
+ attr_reader :iscsi_manager
+
+ # @return [Logger]
+ attr_reader :logger
+
+ # Exports a new iSCSI D-Bus node for the given iSCSI nodes which do not have a D-Bus object
+ #
+ # @param iscsi_nodes [Array<DInstaller::Storage::ISCSI::Node>]
+ def add_new_nodes(iscsi_nodes)
+ new_iscsi_nodes = iscsi_nodes.select { |n| find_node(n).nil? }
+ new_iscsi_nodes.each { |n| add_node(n) }
+ end
+
+ # Updates the D-Bus iSCSI node for the given iSCSI nodes that already have a D-Bus object
+ #
+ # @param iscsi_nodes [Array<DInstaller::Storage::ISCSI::Node>]
+ def update_existing_nodes(iscsi_nodes)
+ existing_iscsi_nodes = iscsi_nodes.reject { |n| find_node(n).nil? }
+ existing_iscsi_nodes.each { |n| update_node(n) }
+ end
+
+ # Unexports the D-Bus iSCSI nodes that do not represent any of the given iSCSI nodes
+ #
+ # @param iscsi_nodes [Array<DInstaller::Storage::ISCSI::Node>]
+ def delete_old_nodes(iscsi_nodes)
+ current_iscsi_nodes = dbus_nodes.map(&:iscsi_node)
+ deleted_iscsi_nodes = current_iscsi_nodes.select do |current_node|
+ iscsi_nodes.none? { |n| same_iscsi_node?(n, current_node) }
+ end
+
+ deleted_iscsi_nodes.each { |n| delete_node(n) }
+ end
+
+ # Exports a D-Bus node for the given iSCSI node
+ #
+ # @param iscsi_node [DInstaller::Storage::ISCSI::Node]
+ def add_node(iscsi_node)
+ dbus_node = DBus::Storage::ISCSINode.new(
+ iscsi_manager, iscsi_node, next_path, logger: logger
+ )
+ service.export(dbus_node)
+ dbus_node.path
+ end
+
+ # Updates the D-Bus node associated to the given iSCSI node
+ #
+ # @param iscsi_node [DInstaller::Storage::ISCSI::Node]
+ def update_node(iscsi_node)
+ dbus_node = find_node(iscsi_node)
+ dbus_node.iscsi_node = iscsi_node
+ end
+
+ # Unexports the D-Bus node associated to the given iSCSI node
+ #
+ # @param iscsi_node [DInstaller::Storage::ISCSI::Node]
+ def delete_node(iscsi_node)
+ dbus_node = find_node(iscsi_node)
+ service.unexport(dbus_node)
+ end
+
+ # Returns the D-Bus node associated to the given iSCSI node
+ #
+ # @param iscsi_node [DInstaller::Storage::ISCSI::Node]
+ # @return [DInstaller::DBus::Storage::ISCSINode]
+ def find_node(iscsi_node)
+ dbus_nodes.find { |n| same_iscsi_node?(n.iscsi_node, iscsi_node) }
+ end
+
+ # All exported iSCSI D-Bus nodes
+ #
+ # @return [Array<DInstaller::DBus::Storage::ISCSINode>]
+ def dbus_nodes
+ root = service.get_node(ROOT_PATH, create: false)
+ return [] unless root
+
+ root.descendant_objects
+ end
+
+ # Whether the given iSCSI nodes can be considered the same iSCSI node
+ #
+ # @param iscsi_node1 [DInstaller::Storage::ISCSI::Node]
+ # @param iscsi_node2 [DInstaller::Storage::ISCSI::Node]
+ #
+ # @return [Boolean]
+ def same_iscsi_node?(iscsi_node1, iscsi_node2)
+ [:address, :port, :target, :interface].all? do |method|
+ iscsi_node1.public_send(method) == iscsi_node2.public_send(method)
+ end
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/dbus/storage/manager.rb new/lib/dinstaller/dbus/storage/manager.rb
--- old/lib/dinstaller/dbus/storage/manager.rb 2023-02-15 17:34:43.000000000 +0100
+++ new/lib/dinstaller/dbus/storage/manager.rb 2023-02-24 14:18:28.000000000 +0100
@@ -25,14 +25,18 @@
require "dinstaller/dbus/interfaces/progress"
require "dinstaller/dbus/interfaces/service_status"
require "dinstaller/dbus/interfaces/validation"
+require "dinstaller/dbus/storage/proposal"
require "dinstaller/dbus/storage/proposal_settings_converter"
require "dinstaller/dbus/storage/volume_converter"
+require "dinstaller/dbus/storage/with_iscsi_auth"
+require "dinstaller/dbus/storage/iscsi_nodes_tree"
module DInstaller
module DBus
module Storage
# D-Bus object to manage storage installation
class Manager < BaseObject
+ include WithISCSIAuth
include WithServiceStatus
include ::DBus::ObjectManager
include DBus::Interfaces::Progress
@@ -52,17 +56,12 @@
register_proposal_callbacks
register_progress_callbacks
register_service_status_callbacks
+ register_iscsi_callbacks
end
STORAGE_INTERFACE = "org.opensuse.DInstaller.Storage1"
private_constant :STORAGE_INTERFACE
- dbus_interface STORAGE_INTERFACE do
- dbus_method(:Probe) { probe }
- dbus_method(:Install) { install }
- dbus_method(:Finish) { finish }
- end
-
def probe
busy_while { backend.probe }
end
@@ -75,22 +74,15 @@
busy_while { backend.finish }
end
+ dbus_interface STORAGE_INTERFACE do
+ dbus_method(:Probe) { probe }
+ dbus_method(:Install) { install }
+ dbus_method(:Finish) { finish }
+ end
+
PROPOSAL_CALCULATOR_INTERFACE = "org.opensuse.DInstaller.Storage1.Proposal.Calculator"
private_constant :PROPOSAL_CALCULATOR_INTERFACE
- dbus_interface PROPOSAL_CALCULATOR_INTERFACE do
- dbus_reader :available_devices, "a(ssa{sv})"
-
- dbus_reader :volume_templates, "aa{sv}"
-
- dbus_reader :result, "o"
-
- # result: 0 success; 1 error
- dbus_method :Calculate, "in settings:a{sv}, out result:u" do |settings|
- busy_while { calculate_proposal(settings) }
- end
- end
-
# List of disks available for installation
#
# Each device is represented by an array containing the name of the device and the label to
@@ -131,6 +123,82 @@
success ? 0 : 1
end
+ dbus_interface PROPOSAL_CALCULATOR_INTERFACE do
+ dbus_reader :available_devices, "a(ssa{sv})"
+
+ dbus_reader :volume_templates, "aa{sv}"
+
+ dbus_reader :result, "o"
+
+ # result: 0 success; 1 error
+ dbus_method :Calculate, "in settings:a{sv}, out result:u" do |settings|
+ busy_while { calculate_proposal(settings) }
+ end
+ end
+
+ ISCSI_INITIATOR_INTERFACE = "org.opensuse.DInstaller.Storage1.ISCSI.Initiator"
+ private_constant :ISCSI_INITIATOR_INTERFACE
+
+ # Gets the iSCSI initiator name
+ #
+ # @return [String]
+ def initiator_name
+ backend.iscsi.initiator.name || ""
+ end
+
+ # Sets the iSCSI initiator name
+ #
+ # @param value [String]
+ def initiator_name=(value)
+ backend.iscsi.initiator.name = value
+ end
+
+ # Performs an iSCSI discovery
+ #
+ # @param address [String] IP address of the iSCSI server
+ # @param port [Integer] Port of the iSCSI server
+ # @param options [Hash<String, String>] Options from a D-Bus call:
+ # @option Username [String] Username for authentication by target
+ # @option Password [String] Password for authentication by target
+ # @option ReverseUsername [String] Username for authentication by initiator
+ # @option ReversePassword [String] Username for authentication by inititator
+ #
+ # @return [Integer] 0 on success, 1 on failure
+ def iscsi_discover(address, port, options = {})
+ success = backend.iscsi.discover_send_targets(address, port, iscsi_auth(options))
+ success ? 0 : 1
+ end
+
+ # Deletes an iSCSI node from the database
+ #
+ # @param path [::DBus::ObjectPath]
+ # @return [Integer] 0 on success, 1 on failure if the given node is not exported, 2 on
+ # failure because any other reason.
+ def iscsi_delete(path)
+ dbus_node = iscsi_nodes_tree.find(path)
+ if !dbus_node
+ logger.info("iSCSI delete error: iSCSI node #{path} is not exported")
+ return 1
+ end
+
+ success = backend.iscsi.delete(dbus_node.iscsi_node)
+ return 0 if success
+
+ logger.info("iSCSI delete error: fail to delete iSCSI node #{path}")
+ 2 # Error code
+ end
+
+ dbus_interface ISCSI_INITIATOR_INTERFACE do
+ dbus_accessor :initiator_name, "s"
+
+ dbus_method :Discover,
+ "in address:s, in port:u, in options:a{sv}, out result:u" do |address, port, options|
+ busy_while { iscsi_discover(address, port, options) }
+ end
+
+ dbus_method(:Delete, "in node:o, out result:u") { |n| iscsi_delete(n) }
+ end
+
private
# @return [DInstaller::Storage::Manager]
@@ -152,6 +220,12 @@
end
end
+ def register_iscsi_callbacks
+ backend.iscsi.on_probe do
+ refresh_iscsi_nodes
+ end
+ end
+
def properties_changed
properties = interfaces_and_properties[PROPOSAL_CALCULATOR_INTERFACE]
dbus_properties_changed(PROPOSAL_CALCULATOR_INTERFACE, properties, [])
@@ -162,6 +236,15 @@
@dbus_proposal = DBus::Storage::Proposal.new(proposal, logger)
@service.export(@dbus_proposal)
end
+
+ def refresh_iscsi_nodes
+ nodes = backend.iscsi.nodes
+ iscsi_nodes_tree.update(nodes)
+ end
+
+ def iscsi_nodes_tree
+ @iscsi_nodes_tree ||= ISCSINodesTree.new(@service, backend.iscsi, logger: logger)
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/dbus/storage/with_iscsi_auth.rb new/lib/dinstaller/dbus/storage/with_iscsi_auth.rb
--- old/lib/dinstaller/dbus/storage/with_iscsi_auth.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/dbus/storage/with_iscsi_auth.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "y2iscsi_client/authentication"
+
+module DInstaller
+ module DBus
+ module Storage
+ # Mixin for creating an iSCSI authentication object from D-Bus options
+ module WithISCSIAuth
+ # Creates an iSCSI authentication object
+ #
+ # @param dbus_options [Hash<String, String>] Options from a D-Bus call:
+ # @option Username [String] Username for authentication by target
+ # @option Password [String] Password for authentication by target
+ # @option ReverseUsername [String] Username for authentication by initiator
+ # @option ReversePassword [String] Username for authentication by inititator
+ #
+ # @return [Y2IscsiClient::Authentication]
+ def iscsi_auth(dbus_options)
+ Y2IscsiClient::Authentication.new.tap do |auth|
+ auth.username = dbus_options["Username"]
+ auth.password = dbus_options["Password"]
+ auth.username_in = dbus_options["ReverseUsername"]
+ auth.password_in = dbus_options["ReversePassword"]
+ end
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/dbus/with_path_generator.rb new/lib/dinstaller/dbus/with_path_generator.rb
--- old/lib/dinstaller/dbus/with_path_generator.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/dbus/with_path_generator.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "dbus/object_path"
+require "pathname"
+
+module DInstaller
+ module DBus
+ # Mixin for creating D-Bus path of dynamically exported objects
+ #
+ # @example
+ # class Test1
+ # include WithPathGenerator
+ # path_generator "/test1/objects"
+ # end
+ #
+ # class Test2
+ # include WithPathGenerator
+ # path_generator "/test2", "object"
+ # end
+ #
+ # test1.next_path #=> "/test1/objects/1"
+ # test1.next_path #=> "/test1/objects/2"
+ #
+ # test2.next_path #=> "/test2/object1"
+ # test2.next_path #=> "/test2/object2"
+ module WithPathGenerator
+ # Generates the next based on the configuration of the path generator
+ #
+ # @return [::DBus::ObjectPath]
+ def next_path
+ self.class.next_path
+ end
+
+ def self.included(base)
+ base.extend ClassMethods
+ end
+
+ # Define class methods
+ module ClassMethods
+ def next_path
+ raise "path_generator not configured yet" unless @path_generator
+
+ @path_generator.next
+ end
+
+ # Configures the path generator
+ #
+ # @param base_path [String]
+ # @param base_name [String]
+ def path_generator(base_path, base_name = "")
+ @path_generator = PathGenerator.new(base_path, base_name)
+ end
+
+ # Class for generating an object path
+ class PathGenerator
+ def initialize(base_path, base_name)
+ @base_path = base_path
+ @base_name = base_name
+ end
+
+ def next
+ path = Pathname.new(@base_path).join(@base_name + next_id.to_s)
+ ::DBus::ObjectPath.new(path.to_s)
+ end
+
+ private
+
+ # Generates the next id
+ #
+ # @return [Integer]
+ def next_id
+ @last_id ||= 0
+ @last_id += 1
+ end
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/iscsi/initiator.rb new/lib/dinstaller/storage/iscsi/initiator.rb
--- old/lib/dinstaller/storage/iscsi/initiator.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/storage/iscsi/initiator.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+Yast.import "IscsiClientLib"
+
+module DInstaller
+ module Storage
+ module ISCSI
+ # Class representing an open-iscsi initiator
+ #
+ # This class is a wrapper for YaST code dealing with the iSCSI initiator. Note that the YaST
+ # code uses a singleton module, so different instances of this class always represent the very
+ # same iSCSI initiator configured by YaST.
+ class Initiator
+ # Initiator name
+ #
+ # @return [String]
+ def name
+ Yast::IscsiClientLib.initiatorname
+ end
+
+ # Sets the inititator name
+ #
+ # @param value [String]
+ def name=(value)
+ return if Yast::IscsiClientLib.initiatorname == value
+
+ Yast::IscsiClientLib.writeInitiatorName(value)
+ end
+
+ # Configured iSCSI offload card
+ #
+ # @return [String]
+ def offload_card
+ Yast::IscsiClientLib.GetOffloadCard()
+ end
+
+ # Sets the iSCSI offload card
+ #
+ # @param value [String]
+ def offload_card=(value)
+ Yast::IscsiClientLib.SetOffloadCard(value)
+ end
+
+ # Whether the initiator name was set via iBFT
+ #
+ # @return [Boolean]
+ def ibft_name?
+ !Yast::IscsiClientLib.getiBFT.fetch("iSCSI_INITIATOR_NAME", "").empty?
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/iscsi/manager.rb new/lib/dinstaller/storage/iscsi/manager.rb
--- old/lib/dinstaller/storage/iscsi/manager.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/storage/iscsi/manager.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,243 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require "yast"
+require "dinstaller/storage/iscsi/node"
+require "dinstaller/storage/iscsi/initiator"
+
+Yast.import "IscsiClientLib"
+
+module DInstaller
+ module Storage
+ module ISCSI
+ # Manager for iSCSI
+ class Manager
+ STARTUP_OPTIONS = ["onboot", "manual", "automatic"].freeze
+
+ # iSCSI initiator
+ #
+ # @return [Initiator]
+ attr_reader :initiator
+
+ # Discovered iSCSI nodes
+ #
+ # @return [Array<Node>]
+ attr_reader :nodes
+
+ # Constructor
+ #
+ # @param logger [Logger, nil]
+ def initialize(logger: nil)
+ @logger = logger || ::Logger.new($stdout)
+ @initiator = ISCSI::Initiator.new
+
+ @on_probe_callbacks = []
+ end
+
+ # Performs actions for activating iSCSI
+ def activate
+ logger.info "Activating iSCSI"
+
+ @activated = true
+
+ # Why we need to sleep every now and then? This was copied from yast2-iscsi-client.
+ sl = 0.5
+
+ Yast::IscsiClientLib.getiBFT
+ sleep(sl)
+
+ # Check initiator name, creating one if missing
+ return false unless Yast::IscsiClientLib.checkInitiatorName(silent: true)
+
+ sleep(sl)
+
+ Yast::IscsiClientLib.getConfig
+ Yast::IscsiClientLib.autoLogOn
+ sleep(sl)
+ end
+
+ # Probes iSCSI
+ #
+ # Callbacks are called at the end, see {#on_probe}.
+ def probe
+ logger.info "Probing iSCSI"
+
+ Yast::IscsiClientLib.readSessions
+ @nodes = Yast::IscsiClientLib.getDiscovered.map { |t| node_from(t.split) }
+
+ @on_probe_callbacks.each(&:call)
+ end
+
+ # Performs an iSCSI discovery
+ #
+ # Based on provided address and port, ie. assuming ISNS is not used. Since YaST do not offer
+ # UI to configure ISNS during installation, we are assuming it's not supported.
+ #
+ # @note iSCSI nodes are probed again, see {#probe_after}.
+ #
+ # @param host [String] IP address
+ # @param port [Integer]
+ # @param authentication [Y2IscsiClient::Authentication]
+ #
+ # @return [Boolean] Whether the action successes
+ def discover_send_targets(host, port, authentication)
+ ensure_activated
+
+ probe_after do
+ Yast::IscsiClientLib.discover(host, port, authentication, silent: true)
+ end
+ end
+
+ # Creates a new iSCSI session
+ #
+ # @note iSCSI nodes are probed again if needed, see {#probe_after}.
+ #
+ # @param node [Node]
+ # @param authentication [Y2IscsiClient::Authentication]
+ # @param startup [String, nil] Startup status
+ #
+ # @return [Boolean] Whether the action successes
+ def login(node, authentication, startup: nil)
+ startup ||= Yast::IscsiClientLib.default_startup_status
+
+ if !STARTUP_OPTIONS.include?(startup)
+ logger.info(
+ "Cannot create iSCSI session because startup status is not valid: #{startup}"
+ )
+ return false
+ end
+
+ ensure_activated
+
+ probe_after do
+ Yast::IscsiClientLib.currentRecord = record_from(node)
+ Yast::IscsiClientLib.login_into_current(authentication, silent: true) &&
+ Yast::IscsiClientLib.setStartupStatus(startup)
+ end
+ end
+
+ # Closes an iSCSI session
+ #
+ # @note iSCSI nodes are probed again, see {#probe_after}.
+ #
+ # @param node [Node]
+ # @return [Boolean] Whether the action successes
+ def logout(node)
+ ensure_activated
+
+ probe_after do
+ Yast::IscsiClientLib.currentRecord = record_from(node)
+ # Yes, this is the correct method name for logging out
+ Yast::IscsiClientLib.deleteRecord
+ end
+ end
+
+ # Deletes an iSCSI node from the database
+ #
+ # @note iSCSI nodes are probed again, see {#probe_after}.
+ #
+ # @param node [Node]
+ # @return [Boolean] Whether the action successes
+ def delete(node)
+ probe_after do
+ Yast::IscsiClientLib.currentRecord = record_from(node)
+ Yast::IscsiClientLib.removeRecord
+ end
+ end
+
+ # Registers a callback to be called when the nodes are probed
+ #
+ # @param block [Proc]
+ def on_probe(&block)
+ @on_probe_callbacks << block
+ end
+
+ private
+
+ # @return [Logger]
+ attr_reader :logger
+
+ # Calls activation if needed
+ def ensure_activated
+ activate unless activated?
+ end
+
+ # Whether activation has been already performed
+ #
+ # @return [Boolean]
+ def activated?
+ !!@activated
+ end
+
+ # Creates a node from the record provided by YaST
+ #
+ # @param record [Array] Contains portal, target and interface of the iSCSI node.
+ # @return [Node]
+ def node_from(record)
+ ISCSI::Node.new.tap do |node|
+ node.portal = record[0]
+ node.target = record[1]
+ node.interface = record[2] || "default"
+ node.connected = false
+
+ Yast::IscsiClientLib.currentRecord = record
+ node.ibtf = Yast::IscsiClientLib.iBFT?(Yast::IscsiClientLib.getCurrentNodeValues)
+
+ session_record = find_session_for(record)
+
+ if session_record
+ node.connected = true
+ # FIXME: the calculation of both startup and ibft imply executing getCurrentNodeValues
+ # (ie. calling iscsiadm)
+ Yast::IscsiClientLib.currentRecord = session_record
+ node.startup = Yast::IscsiClientLib.getStartupStatus
+ end
+ end
+ end
+
+ # Generates a YaST record from a node
+ #
+ # @param node [Node]
+ # @return [Array]
+ def record_from(node)
+ [node.portal, node.target, node.interface]
+ end
+
+ # Finds a session for the given iSCSI record
+ #
+ # @param record [Array] Contains portal, target and interface of the iSCSI node.
+ # @return [Array, nil] Record for the iSCSI session
+ def find_session_for(record)
+ Yast::IscsiClientLib.currentRecord = record
+ Yast::IscsiClientLib.find_session(true)&.split
+ end
+
+ # Calls the given block and performs iSCSI probing afterwards
+ #
+ # @note Returns the result of the block.
+ # @param block [Proc]
+ def probe_after(&block)
+ block.call.tap { probe }
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/iscsi/node.rb new/lib/dinstaller/storage/iscsi/node.rb
--- old/lib/dinstaller/storage/iscsi/node.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/storage/iscsi/node.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,87 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+module DInstaller
+ module Storage
+ module ISCSI
+ # Class to represent an Open-iscsi node
+ #
+ # Bear in mind Open-iscsi does not use the term node as defined by the iSCSI RFC, where a node
+ # is a single iSCSI initiator or target. Open-iscsi uses the term node to refer to a portal on
+ # a target
+ class Node
+ # Target IP address
+ #
+ # @return [String]
+ attr_accessor :address
+
+ # Target port
+ #
+ # @return [Integer]
+ attr_accessor :port
+
+ # Target name
+ #
+ # @return [String]
+ attr_accessor :target
+
+ # Target interface
+ #
+ # @return [String]
+ attr_accessor :interface
+
+ # Whether the node was initiated by iBTF
+ #
+ # @return [Boolean]
+ attr_accessor :ibtf
+
+ # Whether the node is connected (there is a session)
+ #
+ # @return [Boolean]
+ attr_accessor :connected
+
+ # Startup status
+ #
+ # @return [String]
+ attr_accessor :startup
+
+ def ibft?
+ !!ibtf
+ end
+
+ def connected?
+ !!connected
+ end
+
+ def portal
+ "#{address}:#{port}"
+ end
+
+ def portal=(value)
+ address, port = value.split(":")
+
+ @address = address
+ @port = port.to_i
+ end
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/iscsi.rb new/lib/dinstaller/storage/iscsi.rb
--- old/lib/dinstaller/storage/iscsi.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/dinstaller/storage/iscsi.rb 2023-02-24 14:18:28.000000000 +0100
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+# Copyright (c) [2023] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# 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, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+module DInstaller
+ module Storage
+ # Module for iSCSI
+ module ISCSI
+ end
+ end
+end
+
+require "dinstaller/storage/iscsi/initiator"
+require "dinstaller/storage/iscsi/node"
+require "dinstaller/storage/iscsi/manager"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/manager.rb new/lib/dinstaller/storage/manager.rb
--- old/lib/dinstaller/storage/manager.rb 2023-02-15 17:34:43.000000000 +0100
+++ new/lib/dinstaller/storage/manager.rb 2023-02-24 14:18:28.000000000 +0100
@@ -28,6 +28,7 @@
require "dinstaller/storage/proposal"
require "dinstaller/storage/proposal_settings"
require "dinstaller/storage/callbacks"
+require "dinstaller/storage/iscsi/manager"
require "dinstaller/with_progress"
require "dinstaller/security"
require "dinstaller/dbus/clients/questions"
@@ -111,6 +112,13 @@
@proposal ||= Proposal.new(logger, config)
end
+ # iSCSI manager
+ #
+ # @return [Storage::ISCSI::Manager]
+ def iscsi
+ @iscsi ||= ISCSI::Manager.new(logger: logger)
+ end
+
# Validates the storage configuration
#
# @return [Array<ValidationError>] List of validation errors
@@ -133,12 +141,14 @@
def activate_devices
callbacks = Callbacks::Activate.new(questions_client, logger)
+ iscsi.activate
Y2Storage::StorageManager.instance.activate(callbacks)
end
# Probes the devices
def probe_devices
# TODO: probe callbacks
+ iscsi.probe
Y2Storage::StorageManager.instance.probe
end
@@ -188,8 +198,7 @@
end
def tpm_proposal?
- settings = proposal.calculated_settings
- settings.encrypt? && !settings.lvm
+ proposal.calculated_settings.encrypt?
end
def tpm_system?
@@ -201,7 +210,7 @@
@tpm_present =
begin
- execute_fdectl("tpm-present")
+ Yast::Execute.on_target!("fdectl", "tpm-present")
logger.info "FDE: TPMv2 detected"
true
rescue Cheetah::ExecutionFailed
@@ -215,9 +224,9 @@
end
def prepare_tpm_key
- keyfile_path = File.join(Yast::Installation.destdir, "root", ".root.keyfile")
- execute_fdectl(
- "add-secondary-key", "--keyfile", keyfile_path,
+ keyfile_path = File.join("root", ".root.keyfile")
+ Yast::Execute.on_target!(
+ "fdectl", "add-secondary-key", "--keyfile", keyfile_path,
stdin: "#{proposal.calculated_settings.encryption_password}\n",
recorder: Yast::ReducedRecorder.new(skip: :stdin)
)
@@ -228,16 +237,6 @@
rescue Cheetah::ExecutionFailed
false
end
-
- def execute_fdectl(*args)
- # Some subcommands like "tpm-present" should not require a --device argument, but they
- # currently do. Let's always us until the problem at fdectl is fully fixed.
- Yast::Execute.locally!("fdectl", "--device", fdectl_device, *args)
- end
-
- def fdectl_device
- Yast::Installation.destdir
- end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/dinstaller/storage/proposal.rb new/lib/dinstaller/storage/proposal.rb
--- old/lib/dinstaller/storage/proposal.rb 2023-02-15 17:34:43.000000000 +0100
+++ new/lib/dinstaller/storage/proposal.rb 2023-02-24 14:18:28.000000000 +0100
@@ -21,7 +21,6 @@
require "y2storage"
require "y2storage/dialogs/guided_setup/helpers/disk"
-require "dinstaller/with_progress"
require "dinstaller/validation_error"
require "dinstaller/storage/actions"
require "dinstaller/storage/proposal_settings"
@@ -42,8 +41,6 @@
# proposal.calculate(settings) #=> true
# proposal.calculated_volumes #=> [Volume, Volume]
class Proposal
- include WithProgress
-
# Constructor
#
# @param logger [Logger]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2023-02-15 17:34:43.000000000 +0100
+++ new/metadata 2023-02-24 14:18:28.000000000 +0100
@@ -8,7 +8,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2023-02-15 00:00:00.000000000 Z
+date: 2023-02-24 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: packaging_rake_tasks
@@ -254,13 +254,17 @@
- lib/dinstaller/dbus/software/proposal.rb
- lib/dinstaller/dbus/software_service.rb
- lib/dinstaller/dbus/storage.rb
+- lib/dinstaller/dbus/storage/iscsi_node.rb
+- lib/dinstaller/dbus/storage/iscsi_nodes_tree.rb
- lib/dinstaller/dbus/storage/manager.rb
- lib/dinstaller/dbus/storage/proposal.rb
- lib/dinstaller/dbus/storage/proposal_settings_converter.rb
- lib/dinstaller/dbus/storage/volume_converter.rb
+- lib/dinstaller/dbus/storage/with_iscsi_auth.rb
- lib/dinstaller/dbus/storage_service.rb
- lib/dinstaller/dbus/users.rb
- lib/dinstaller/dbus/users_service.rb
+- lib/dinstaller/dbus/with_path_generator.rb
- lib/dinstaller/dbus/with_service_status.rb
- lib/dinstaller/dbus/y2dir/manager/modules/Package.rb
- lib/dinstaller/dbus/y2dir/manager/modules/PackagesProposal.rb
@@ -295,6 +299,10 @@
- lib/dinstaller/storage/callbacks/activate.rb
- lib/dinstaller/storage/callbacks/activate_luks.rb
- lib/dinstaller/storage/callbacks/activate_multipath.rb
+- lib/dinstaller/storage/iscsi.rb
+- lib/dinstaller/storage/iscsi/initiator.rb
+- lib/dinstaller/storage/iscsi/manager.rb
+- lib/dinstaller/storage/iscsi/node.rb
- lib/dinstaller/storage/manager.rb
- lib/dinstaller/storage/proposal.rb
- lib/dinstaller/storage/proposal_settings.rb
@@ -332,7 +340,7 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubygems_version: 3.3.26
+rubygems_version: 3.4.6
signing_key:
specification_version: 4
summary: D-Installer Service
++++++ gem2rpm.yml ++++++
--- /var/tmp/diff_new_pack.O7NLkw/_old 2023-02-28 12:48:52.736572738 +0100
+++ /var/tmp/diff_new_pack.O7NLkw/_new 2023-02-28 12:48:52.740572764 +0100
@@ -1,6 +1,8 @@
---
:sourceurl: "%{mod_full_name}.gem"
:preamble: |-
+ # Override build.rpm, see also https://github.com/openSUSE/obs-build/blob/master/configs/
+ %global rb_build_versions %{rb_default_ruby}
BuildRequires: dbus-1-common
Requires: dbus-1-common
Requires: snapper
@@ -11,6 +13,7 @@
Requires: yast2-network
Requires: yast2-proxy
Requires: yast2-storage-ng
+ Requires: yast2-iscsi-client >= 4.5.7
Requires: yast2-users
# yast2 with ArchFilter
Requires: yast2 >= 4.5.20
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kexec-tools for openSUSE:Factory checked in at 2023-02-28 12:48:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kexec-tools (Old)
and /work/SRC/openSUSE:Factory/.kexec-tools.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kexec-tools"
Tue Feb 28 12:48:25 2023 rev:147 rq:1068013 version:2.0.26
Changes:
--------
--- /work/SRC/openSUSE:Factory/kexec-tools/kexec-tools.changes 2023-02-04 14:18:04.754430042 +0100
+++ /work/SRC/openSUSE:Factory/.kexec-tools.new.31432/kexec-tools.changes 2023-02-28 12:48:49.380550936 +0100
@@ -1,0 +2,5 @@
+Thu Feb 23 15:01:24 UTC 2023 - Michal Suchanek <msuchanek(a)suse.com>
+
+- kexec-bootloader: Add -a argument to load using kexec_load_file() when available (boo#1202820).
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kexec-bootloader ++++++
--- /var/tmp/diff_new_pack.Lyr4PC/_old 2023-02-28 12:48:50.128555795 +0100
+++ /var/tmp/diff_new_pack.Lyr4PC/_new 2023-02-28 12:48:50.132555821 +0100
@@ -193,7 +193,7 @@
my $cmd = "kexec";
# append image
-$cmd .= " -l '" . $image . "'";
+$cmd .= " -a -l '" . $image . "'";
# append initrd if available
if ($initrd) {
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libcbor for openSUSE:Factory checked in at 2023-02-28 12:48:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libcbor (Old)
and /work/SRC/openSUSE:Factory/.libcbor.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libcbor"
Tue Feb 28 12:48:24 2023 rev:7 rq:1067988 version:0.10.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libcbor/libcbor.changes 2023-02-25 19:54:22.898996631 +0100
+++ /work/SRC/openSUSE:Factory/.libcbor.new.31432/libcbor.changes 2023-02-28 12:48:48.052542308 +0100
@@ -1,0 +2,7 @@
+Mon Feb 27 10:43:10 UTC 2023 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- Update to 0.10.2:
+ * Fixed minor test bug causing failures for x86 Linux
+ * Made tests platform-independent
+
+-------------------------------------------------------------------
Old:
----
v0.10.1.tar.gz
New:
----
v0.10.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libcbor.spec ++++++
--- /var/tmp/diff_new_pack.lVXgqo/_old 2023-02-28 12:48:48.948548129 +0100
+++ /var/tmp/diff_new_pack.lVXgqo/_new 2023-02-28 12:48:48.956548181 +0100
@@ -18,7 +18,7 @@
%define socurrent 0
%define sorevision 10
-%define soage 1
+%define soage 2
%define lname libcbor%{socurrent}_%{sorevision}
%global flavor @BUILD_FLAVOR@%{nil}
@@ -38,7 +38,7 @@
%else
Name: libcbor
%endif
-Version: 0.10.1
+Version: 0.10.2
Release: 0
Summary: Library for parsing Concise Binary Object Representation (CBOR)
License: MIT
++++++ v0.10.1.tar.gz -> v0.10.2.tar.gz ++++++
++++ 5521 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openexr for openSUSE:Factory checked in at 2023-02-28 12:48:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openexr (Old)
and /work/SRC/openSUSE:Factory/.openexr.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openexr"
Tue Feb 28 12:48:21 2023 rev:54 rq:1067985 version:3.1.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/openexr/openexr.changes 2022-12-09 13:16:53.058715882 +0100
+++ /work/SRC/openSUSE:Factory/.openexr.new.31432/openexr.changes 2023-02-28 12:48:47.084536020 +0100
@@ -1,0 +2,5 @@
+Mon Feb 27 12:22:47 UTC 2023 - pgajdos(a)suse.com
+
+- fltk not needed (openexr-3.1.5/ASWF/tsc-meetings/2021-01-14.md)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openexr.spec ++++++
--- /var/tmp/diff_new_pack.sYMQDh/_old 2023-02-28 12:48:47.884541217 +0100
+++ /var/tmp/diff_new_pack.sYMQDh/_new 2023-02-28 12:48:47.888541243 +0100
@@ -1,7 +1,7 @@
#
# spec file for package openexr
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -31,7 +31,6 @@
Source0: https://github.com/openexr/openexr/archive/v%{version}.tar.gz
Source2: baselibs.conf
BuildRequires: cmake >= 3.12
-BuildRequires: fltk-devel
BuildRequires: freeglut-devel
BuildRequires: gcc-c++
BuildRequires: pkgconfig
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libgit2 for openSUSE:Factory checked in at 2023-02-28 12:48:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libgit2 (Old)
and /work/SRC/openSUSE:Factory/.libgit2.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libgit2"
Tue Feb 28 12:48:19 2023 rev:54 rq:1067979 version:1.5.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/libgit2/libgit2.changes 2023-01-23 18:30:49.523640524 +0100
+++ /work/SRC/openSUSE:Factory/.libgit2.new.31432/libgit2.changes 2023-02-28 12:48:43.176510631 +0100
@@ -1,0 +2,8 @@
+Sun Feb 26 17:14:29 UTC 2023 - Andreas Stieger <andreas.stieger(a)gmx.de>
+
+- update to 1.5.2:
+ * Improve SSH key handling functionality: examine all keys in
+ known_hosts files for matches, to support remote hosts with
+ multiple key types
+
+-------------------------------------------------------------------
Old:
----
libgit2-1.5.1.tar.gz
New:
----
libgit2-1.5.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libgit2.spec ++++++
--- /var/tmp/diff_new_pack.AF6N6q/_old 2023-02-28 12:48:43.780514555 +0100
+++ /var/tmp/diff_new_pack.AF6N6q/_new 2023-02-28 12:48:43.784514581 +0100
@@ -19,14 +19,14 @@
%define sover 1_5
Name: libgit2
-Version: 1.5.1
+Version: 1.5.2
Release: 0
Summary: C git library
License: GPL-2.0-only WITH GCC-exception-2.0
Group: Development/Libraries/C and C++
URL: https://libgit2.github.com/
Source0: https://github.com/libgit2/libgit2/archive/v%{version}.tar.gz#/%{name}-%{ve…
-BuildRequires: cmake >= 2.8
+BuildRequires: cmake >= 3.5.1
BuildRequires: pkgconfig
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(libpcre2-posix)
++++++ libgit2-1.5.1.tar.gz -> libgit2-1.5.2.tar.gz ++++++
++++ 1613 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package brotli for openSUSE:Factory checked in at 2023-02-28 12:48:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/brotli (Old)
and /work/SRC/openSUSE:Factory/.brotli.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "brotli"
Tue Feb 28 12:48:18 2023 rev:11 rq:1067977 version:1.0.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/brotli/brotli.changes 2020-09-05 23:56:28.299075646 +0200
+++ /work/SRC/openSUSE:Factory/.brotli.new.31432/brotli.changes 2023-02-28 12:48:42.308504992 +0100
@@ -1,0 +2,5 @@
+Sat Feb 25 10:48:18 UTC 2023 - Marcus Meissner <meissner(a)suse.com>
+
+- add 32bit devel package for Wine development.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ brotli.spec ++++++
--- /var/tmp/diff_new_pack.osrPLU/_old 2023-02-28 12:48:42.776508033 +0100
+++ /var/tmp/diff_new_pack.osrPLU/_new 2023-02-28 12:48:42.780508058 +0100
@@ -1,7 +1,7 @@
#
# spec file for package brotli
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2017 Buschmann <buschmann23(a)opensuse.org>
#
# All modifications and additions to the file contributed by third parties
++++++ baselibs.conf ++++++
--- /var/tmp/diff_new_pack.osrPLU/_old 2023-02-28 12:48:42.820508318 +0100
+++ /var/tmp/diff_new_pack.osrPLU/_new 2023-02-28 12:48:42.824508345 +0100
@@ -1,5 +1,9 @@
libbrotlicommon1
libbrotlidec1
libbrotlienc1
+libbrotli-devel
+ requires "libbrotlicommon1-<targettype> = <version>"
+ requires "libbrotlidec1-<targettype> = <version>"
+ requires "libbrotlienc1-<targettype> = <version>"
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libcontainers-common for openSUSE:Factory checked in at 2023-02-28 12:48:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libcontainers-common (Old)
and /work/SRC/openSUSE:Factory/.libcontainers-common.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libcontainers-common"
Tue Feb 28 12:48:16 2023 rev:57 rq:1067968 version:20230214
Changes:
--------
--- /work/SRC/openSUSE:Factory/libcontainers-common/libcontainers-common.changes 2023-02-21 15:36:05.664305055 +0100
+++ /work/SRC/openSUSE:Factory/.libcontainers-common.new.31432/libcontainers-common.changes 2023-02-28 12:48:40.828495377 +0100
@@ -1,0 +2,5 @@
+Mon Feb 27 10:30:12 UTC 2023 - Dan ��erm��k <dcermak(a)suse.com>
+
+- Add registry.suse.com to the unqualified-search-registries
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ registries.conf ++++++
--- /var/tmp/diff_new_pack.DHMDsB/_old 2023-02-28 12:48:41.888502263 +0100
+++ /var/tmp/diff_new_pack.DHMDsB/_new 2023-02-28 12:48:41.892502290 +0100
@@ -18,7 +18,7 @@
# of these registries, it should be added at the end of the list.
#
# # An array of host[:port] registries to try when pulling an unqualified image, in order.
-unqualified-search-registries = ["registry.opensuse.org", "docker.io"]
+unqualified-search-registries = ["registry.opensuse.org", "registry.suse.com", "docker.io"]
#
# [[registry]]
# # The "prefix" field is used to choose the relevant [[registry]] TOML table;
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ffmpeg-5 for openSUSE:Factory checked in at 2023-02-28 12:48:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ffmpeg-5 (Old)
and /work/SRC/openSUSE:Factory/.ffmpeg-5.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ffmpeg-5"
Tue Feb 28 12:48:14 2023 rev:14 rq:1067951 version:5.1.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/ffmpeg-5/ffmpeg-5.changes 2023-02-01 16:44:10.831508678 +0100
+++ /work/SRC/openSUSE:Factory/.ffmpeg-5.new.31432/ffmpeg-5.changes 2023-02-28 12:48:39.332485659 +0100
@@ -1,0 +2,5 @@
+Mon Feb 27 09:44:58 UTC 2023 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Add ``Requires: this-is-only-for-build-envs`` [boo#1208652]
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ffmpeg-5.spec ++++++
--- /var/tmp/diff_new_pack.r7j4qp/_old 2023-02-28 12:48:40.168491090 +0100
+++ /var/tmp/diff_new_pack.r7j4qp/_new 2023-02-28 12:48:40.172491115 +0100
@@ -848,6 +848,7 @@
Patch91: ffmpeg-dlopen-openh264.patch
Patch92: no-vk-video-decoding.patch
BuildRequires: c_compiler
+Requires: this-is-only-for-build-envs
%description
FFmpeg is a multimedia framework.
@@ -865,6 +866,7 @@
Conflicts: libpostproc56
Conflicts: libswresample4
Conflicts: libswscale6
+Requires: this-is-only-for-build-envs
%description libs
FFmpeg is a multimedia framework.
@@ -889,6 +891,7 @@
Provides: libswscale-devel = %version-%release
Conflicts: libswscale-devel
Requires: %name-libs = %version-%release
+Requires: this-is-only-for-build-envs
%description devel
FFmpeg is a multimedia framework.
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-apipkg for openSUSE:Factory checked in at 2023-02-28 12:48:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-apipkg (Old)
and /work/SRC/openSUSE:Factory/.python-apipkg.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-apipkg"
Tue Feb 28 12:48:13 2023 rev:10 rq:1067948 version:3.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-apipkg/python-apipkg.changes 2022-12-01 16:59:00.951091870 +0100
+++ /work/SRC/openSUSE:Factory/.python-apipkg.new.31432/python-apipkg.changes 2023-02-28 12:48:38.564480669 +0100
@@ -1,0 +2,5 @@
+Mon Feb 27 10:20:48 UTC 2023 - Matej Cepl <mcepl(a)suse.com>
+
+- Don't use fdupes -s, it hurts.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-apipkg.spec ++++++
--- /var/tmp/diff_new_pack.2Yehte/_old 2023-02-28 12:48:39.068483943 +0100
+++ /var/tmp/diff_new_pack.2Yehte/_new 2023-02-28 12:48:39.072483970 +0100
@@ -1,7 +1,7 @@
#
# spec file
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -74,7 +74,7 @@
%install
%if ! %{with test}
%pyproject_install
-%python_expand %fdupes -s %{buildroot}%{$python_sitelib}
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%endif
%check
1
0