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
December 2022
- 1 participants
- 2264 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libime for openSUSE:Factory checked in at 2022-12-30 11:08:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libime (Old)
and /work/SRC/openSUSE:Factory/.libime.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libime"
Fri Dec 30 11:08:51 2022 rev:5 rq:1045773 version:1.0.16
Changes:
--------
--- /work/SRC/openSUSE:Factory/libime/libime.changes 2022-11-28 11:05:59.895441848 +0100
+++ /work/SRC/openSUSE:Factory/.libime.new.1563/libime.changes 2022-12-30 11:09:07.545314847 +0100
@@ -1,0 +2,7 @@
+Thu Dec 8 21:07:45 UTC 2022 - Dirk M��ller <dmueller(a)suse.com>
+
+- update to 1.0.16:
+ * Use our own hasher for std::string because boost stream may not
+ use a fixed implementation for string hash
+
+-------------------------------------------------------------------
Old:
----
libime-1.0.15_dict.tar.xz
New:
----
libime-1.0.16_dict.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libime.spec ++++++
--- /var/tmp/diff_new_pack.UndN8Z/_old 2022-12-30 11:09:08.033317765 +0100
+++ /var/tmp/diff_new_pack.UndN8Z/_new 2022-12-30 11:09:08.037317789 +0100
@@ -17,7 +17,7 @@
Name: libime
-Version: 1.0.15
+Version: 1.0.16
Release: 0
Summary: Generic input method implementation
License: LGPL-2.1-or-later
++++++ libime-1.0.15_dict.tar.xz -> libime-1.0.16_dict.tar.xz ++++++
/work/SRC/openSUSE:Factory/libime/libime-1.0.15_dict.tar.xz /work/SRC/openSUSE:Factory/.libime.new.1563/libime-1.0.16_dict.tar.xz differ: char 26, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package otpclient for openSUSE:Factory checked in at 2022-12-30 11:08:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/otpclient (Old)
and /work/SRC/openSUSE:Factory/.otpclient.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "otpclient"
Fri Dec 30 11:08:53 2022 rev:21 rq:1045797 version:3.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/otpclient/otpclient.changes 2022-12-20 20:21:03.782067662 +0100
+++ /work/SRC/openSUSE:Factory/.otpclient.new.1563/otpclient.changes 2022-12-30 11:09:08.201318769 +0100
@@ -1,0 +2,8 @@
+Fri Dec 30 07:06:40 UTC 2022 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- Update to 3.1.1:
+ * Fixed some memory leaks.
+ * Improved error handling.
+ * Use secure functions instead of standard ones .
+
+-------------------------------------------------------------------
Old:
----
v3.1.0.tar.gz
v3.1.0.tar.gz.asc
New:
----
v3.1.1.tar.gz
v3.1.1.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ otpclient.spec ++++++
--- /var/tmp/diff_new_pack.huiRqu/_old 2022-12-30 11:09:08.609321208 +0100
+++ /var/tmp/diff_new_pack.huiRqu/_new 2022-12-30 11:09:08.613321232 +0100
@@ -18,7 +18,7 @@
%define uclname OTPClient
Name: otpclient
-Version: 3.1.0
+Version: 3.1.1
Release: 0
Summary: Simple GTK+ client for managing TOTP and HOTP
License: GPL-3.0-or-later
++++++ v3.1.0.tar.gz -> v3.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/.github/workflows/codeql-analysis.yml new/OTPClient-3.1.1/.github/workflows/codeql-analysis.yml
--- old/OTPClient-3.1.0/.github/workflows/codeql-analysis.yml 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/.github/workflows/codeql-analysis.yml 2022-12-28 17:02:45.000000000 +0100
@@ -24,7 +24,7 @@
uses: actions/checkout@v2
- name: Initialize CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
@@ -41,4 +41,4 @@
make
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@v2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/CMakeLists.txt new/OTPClient-3.1.1/CMakeLists.txt
--- old/OTPClient-3.1.0/CMakeLists.txt 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/CMakeLists.txt 2022-12-28 17:02:45.000000000 +0100
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.10)
-project(OTPClient VERSION "3.1.0" LANGUAGES "C")
+project(OTPClient VERSION "3.1.1" LANGUAGES "C")
include(GNUInstallDirs)
configure_file("src/common/version.h.in" "version.h")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/README.md new/OTPClient-3.1.1/README.md
--- old/OTPClient-3.1.0/README.md 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/README.md 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,10 @@
<a href="https://circleci.com/gh/paolostivanin/OTPClient">
<img alt="CircleCI" src="https://circleci.com/gh/paolostivanin/OTPClient.svg?style=svg"/>
</a>
+<a href="https://scan.coverity.com/projects/paolostivanin-otpclient">
+ <img alt="Coverity Scan Build Status"
+ src="https://scan.coverity.com/projects/12749/badge.svg"/>
+</a>
Highly secure and easy to use GTK+ software for two-factor authentication that supports both Time-based One-time Passwords (TOTP) and HMAC-Based One-Time Passwords (HOTP).
@@ -42,7 +46,7 @@
- decrypted file is never saved (and hopefully never swapped) to disk. While the app is running, the decrypted content resides in a "secure memory" buffer allocated by Gcrypt
## Testing
-* Before each release, I run PVS Studio in order to catch even more errors and/or corner cases
+* Before each release, I run PVS Studio and Coverity in order to catch even more bugs.
* With every commit to master, OTPClient is compiled in CircleCI against different distros
## Protobuf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/data/com.github.paolostivanin.OTPClient.appdata.xml new/OTPClient-3.1.1/data/com.github.paolostivanin.OTPClient.appdata.xml
--- old/OTPClient-3.1.0/data/com.github.paolostivanin.OTPClient.appdata.xml 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/data/com.github.paolostivanin.OTPClient.appdata.xml 2022-12-28 17:02:45.000000000 +0100
@@ -83,6 +83,16 @@
</content_rating>
<releases>
+ <release version="3.1.1" date="2022-12-29">
+ <description>
+ <p>OTPClient 3.1.1 brings lots of small under-the-hood changes:</p>
+ <ul>
+ <li>Fixed some memory leaks</li>
+ <li>Improved error handling</li>
+ <li>Use secure functions instead of standard ones</li>
+ </ul>
+ </description>
+ </release>
<release version="3.1.0" date="2022-12-19">
<description>
<p>OTPClient 3.1.0 the following feature and fixes:</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/add-common.c new/OTPClient-3.1.1/src/add-common.c
--- old/OTPClient-3.1.0/src/add-common.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/add-common.c 2022-12-28 17:02:45.000000000 +0100
@@ -47,6 +47,7 @@
if (otp->period < 10 || otp->period > 120) {
gchar *msg = g_strconcat("[INFO]: invalid period for '", otp->account_name, "'. Defaulting back to 30 seconds.", NULL);
g_printerr ("%s\n", msg);
+ g_free (msg);
otp->period = 30;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/add-from-qr.c new/OTPClient-3.1.1/src/add-from-qr.c
--- old/OTPClient-3.1.0/src/add-from-qr.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/add-from-qr.c 2022-12-28 17:02:45.000000000 +0100
@@ -1,6 +1,7 @@
#include <gtk/gtk.h>
#include <gcrypt.h>
#include <glib/gstdio.h>
+#include <glib/gi18n.h>
#include "imports.h"
#include "qrcode-parser.h"
#include "message-dialogs.h"
@@ -169,7 +170,9 @@
gchar *filename = g_build_filename (g_get_tmp_dir (), "qrcode_from_cb_uri.png", NULL);
gdk_pixbuf_save (pbuf, filename, "png", &err, NULL);
parse_file_and_update_db (filename, app_data, FALSE);
- g_unlink (filename);
+ if (g_unlink (filename) == -1) {
+ g_printerr ("%s\n", _("Couldn't unlink the temp pixbuf."));
+ }
g_free (filename);
g_object_unref (pbuf);
}
@@ -196,7 +199,9 @@
} else {
parse_file_and_update_db (filename, app_data, FALSE);
}
- g_unlink (filename);
+ if (g_unlink (filename) == -1) {
+ g_printerr ("%s\n", _("Error while unlinking the temp png."));
+ }
g_free (filename);
} else {
show_message_dialog (app_data->main_window, "Couldn't get QR code image from clipboard", GTK_MESSAGE_ERROR);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/app.c new/OTPClient-3.1.1/src/app.c
--- old/OTPClient-3.1.0/src/app.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/app.c 2022-12-28 17:02:45.000000000 +0100
@@ -356,6 +356,7 @@
return kf;
}
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
}
g_free (cfg_file_path);
g_key_file_free (kf);
@@ -419,6 +420,7 @@
#endif
if (!g_key_file_save_to_file (kf, cfg_file_path, &err)) {
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
}
g_free (cfg_file_path);
g_key_file_free (kf);
@@ -492,9 +494,9 @@
#else
cfg_file_path = g_build_filename (g_get_user_data_dir (), "otpclient.cfg", NULL);
#endif
- g_key_file_save_to_file (kf, cfg_file_path, &err);
- if (err != NULL) {
+ if (!g_key_file_save_to_file (kf, cfg_file_path, &err)) {
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
}
g_free (cfg_file_path);
}
@@ -568,9 +570,10 @@
if (!g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, &err)) {
show_message_dialog (app_data->main_window, err->message, GTK_MESSAGE_ERROR);
g_key_file_free (kf);
+ g_clear_error (&err);
return NULL;
}
- db_path = g_key_file_get_string (kf, "config", "db_path", &err);
+ db_path = g_key_file_get_string (kf, "config", "db_path", NULL);
if (db_path == NULL) {
goto new_db;
}
@@ -601,9 +604,9 @@
if (res == GTK_RESPONSE_ACCEPT) {
db_path = gtk_file_chooser_get_filename (chooser);
g_key_file_set_string (kf, "config", "db_path", db_path);
- g_key_file_save_to_file (kf, cfg_file_path, &err);
- if (err != NULL) {
+ if (!g_key_file_save_to_file (kf, cfg_file_path, &err)) {
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
}
}
@@ -764,11 +767,13 @@
if (g_file_test (cfg_file_path, G_FILE_TEST_EXISTS)) {
if (!g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, &err)) {
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
} else {
g_key_file_set_integer (kf, "config", param1_name, param1_value);
g_key_file_set_integer (kf, "config", param2_name, param2_value);
if (!g_key_file_save_to_file (kf, cfg_file_path, &err)) {
g_printerr ("%s\n", err->message);
+ g_clear_error (&err);
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/change-file-cb.c new/OTPClient-3.1.1/src/change-file-cb.c
--- old/OTPClient-3.1.0/src/change-file-cb.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/change-file-cb.c 2022-12-28 17:02:45.000000000 +0100
@@ -1,5 +1,7 @@
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include "db-misc.h"
+#include "message-dialogs.h"
gboolean
change_file (AppData *app_data)
@@ -40,7 +42,13 @@
cfg_file_path = g_build_filename (g_get_user_data_dir (), "otpclient.cfg", NULL);
#endif
g_key_file_set_string (kf, "config", "db_path", db_path);
- g_key_file_save_to_file (kf, cfg_file_path, NULL);
+ GError *err = NULL;
+ if (!g_key_file_save_to_file (kf, cfg_file_path, &err)) {
+ gchar *err_msg = g_strconcat (_("Couldn't save the config file: "), err->message, NULL);
+ show_message_dialog (app_data->main_window, err_msg, GTK_MESSAGE_ERROR);
+ g_free (err_msg);
+ g_clear_error (&err);
+ }
g_free (app_data->db_data->db_path);
app_data->db_data->db_path = g_strdup (db_path);
g_free (db_path);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/change-pwd-cb.c new/OTPClient-3.1.1/src/change-pwd-cb.c
--- old/OTPClient-3.1.0/src/change-pwd-cb.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/change-pwd-cb.c 2022-12-28 17:02:45.000000000 +0100
@@ -27,6 +27,7 @@
GtkApplication *app = gtk_window_get_application (GTK_WINDOW(app_data->main_window));
destroy_cb (app_data->main_window, app_data);
g_application_quit (G_APPLICATION(app));
+ return;
}
show_message_dialog (app_data->main_window, "Password successfully changed", GTK_MESSAGE_INFO);
secret_password_store (OTPCLIENT_SCHEMA, SECRET_COLLECTION_DEFAULT, "main_pwd", app_data->db_data->key, NULL, on_password_stored, NULL, "string", "main_pwd", NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/cli/main.c new/OTPClient-3.1.1/src/cli/main.c
--- old/OTPClient-3.1.0/src/cli/main.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/cli/main.c 2022-12-28 17:02:45.000000000 +0100
@@ -206,9 +206,10 @@
if (!g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, &err)) {
g_printerr ("%s\n", err->message);
g_key_file_free (kf);
+ g_clear_error (&err);
return NULL;
}
- db_path = g_key_file_get_string (kf, "config", "db_path", &err);
+ db_path = g_key_file_get_string (kf, "config", "db_path", NULL);
if (db_path == NULL) {
goto type_db_path;
}
@@ -226,6 +227,7 @@
if (fgets (db_path, MAX_ABS_PATH_LEN, stdin) == NULL) {
g_printerr ("%s\n", _("Couldn't get db path from stdin"));
g_free (cfg_file_path);
+ g_free (db_path);
return NULL;
} else {
// remove the newline char
@@ -233,6 +235,7 @@
if (!g_file_test (db_path, G_FILE_TEST_EXISTS)) {
g_printerr (_("File '%s' does not exist\n"), db_path);
g_free (cfg_file_path);
+ g_free (db_path);
return NULL;
}
}
@@ -291,6 +294,7 @@
if (!g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, &err)) {
g_printerr ("%s\n", err->message);
g_key_file_free (kf);
+ g_clear_error (&err);
return FALSE;
}
disable_secret_service = g_key_file_get_boolean (kf, "config", "disable_secret_service", NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/common/aegis.c new/OTPClient-3.1.1/src/common/aegis.c
--- old/OTPClient-3.1.0/src/common/aegis.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/common/aegis.c 2022-12-28 17:02:45.000000000 +0100
@@ -90,12 +90,25 @@
guchar *key_tag = hexstr_to_bytes (json_string_value (json_object_get (kp, "tag")));
json_t *dbp = json_object_get(json_object_get(json, "header"), "params");
guchar *keybuf = gcry_malloc (KEY_SIZE);
- gcry_kdf_derive (password, strlen (password) + 1, GCRY_KDF_SCRYPT, n, salt, SALT_SIZE, p, KEY_SIZE, keybuf);
+ if (gcry_kdf_derive (password, strlen (password) + 1, GCRY_KDF_SCRYPT, n, salt, SALT_SIZE, p, KEY_SIZE, keybuf) != 0) {
+ g_printerr ("Error while deriving the key.\n");
+ g_free (salt);
+ g_free (enc_key);
+ g_free (key_nonce);
+ g_free (key_tag);
+ gcry_free (keybuf);
+ return NULL;
+ }
- gcry_cipher_hd_t hd;
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, keybuf, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, key_nonce, NONCE_SIZE);
+ gcry_cipher_hd_t hd = open_cipher_and_set_data (keybuf, key_nonce, NONCE_SIZE);
+ if (hd == NULL) {
+ g_free (salt);
+ g_free (enc_key);
+ g_free (key_nonce);
+ g_free (key_tag);
+ gcry_free (keybuf);
+ return NULL;
+ }
guchar *master_key = gcry_calloc_secure (KEY_SIZE, 1);
if (gcry_cipher_decrypt (hd, master_key, KEY_SIZE, enc_key, KEY_SIZE) != 0) {
@@ -104,8 +117,9 @@
g_free (enc_key);
g_free (key_nonce);
g_free (key_tag);
- gcry_cipher_close (hd);
gcry_free (master_key);
+ gcry_free (keybuf);
+ gcry_cipher_close (hd);
return NULL;
}
gpg_error_t gpg_err = gcry_cipher_checktag(hd, key_tag, TAG_SIZE);
@@ -115,8 +129,9 @@
g_free (enc_key);
g_free (key_nonce);
g_free (key_tag);
- gcry_cipher_close (hd);
gcry_free (master_key);
+ gcry_free (keybuf);
+ gcry_cipher_close (hd);
return NULL;
}
@@ -124,37 +139,55 @@
g_free (enc_key);
g_free (key_nonce);
g_free (key_tag);
+ gcry_free (keybuf);
gcry_cipher_close (hd);
guchar *nonce = hexstr_to_bytes (json_string_value (json_object_get (dbp, "nonce")));
guchar *tag = hexstr_to_bytes (json_string_value (json_object_get (dbp, "tag")));
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, master_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, nonce, 12);
+
+ hd = open_cipher_and_set_data (master_key, nonce, 12);
+ if (hd == NULL) {
+ g_free (tag);
+ g_free (nonce);
+ gcry_free (master_key);
+ return NULL;
+ }
+
gsize out_len;
- guchar *b64decoded_db = g_base64_decode (json_string_value (json_object_get(json, "db")), &out_len);
+ guchar *b64decoded_db = g_base64_decode_secure (json_string_value (json_object_get(json, "db")), &out_len);
if (out_len > max_file_size) {
g_set_error (err, file_too_big_gquark (), FILE_TOO_BIG, "File is too big");
- gcry_cipher_close (hd);
+ g_free (tag);
+ g_free (nonce);
gcry_free (master_key);
+ gcry_free (b64decoded_db);
+ gcry_cipher_close (hd);
return NULL;
}
+
gchar *decrypted_db = gcry_calloc_secure (out_len, 1);
- gcry_cipher_decrypt (hd, decrypted_db, out_len, b64decoded_db, out_len);
- gpg_err = gcry_cipher_checktag(hd, tag, TAG_SIZE);
+ gpg_err = gcry_cipher_decrypt (hd, decrypted_db, out_len, b64decoded_db, out_len);
+ if (gpg_err) {
+ goto clean_and_exit;
+ }
+ gpg_err = gcry_cipher_checktag (hd, tag, TAG_SIZE);
if (gpg_err != 0) {
g_set_error (err, bad_tag_gquark (), BAD_TAG_ERRCODE, "Invalid TAG (database). Either the password is wrong or the file is corrupted.");
- gcry_cipher_close (hd);
+ clean_and_exit:
+ g_free (nonce);
+ g_free (tag);
gcry_free (master_key);
- g_free (decrypted_db);
+ gcry_free (decrypted_db);
+ gcry_free (b64decoded_db);
+ gcry_cipher_close (hd);
return NULL;
}
- g_free (b64decoded_db);
g_free (nonce);
g_free (tag);
gcry_cipher_close (hd);
gcry_free (master_key);
+ gcry_free (b64decoded_db);
GSList *otps = parse_json_data (decrypted_db, err);
gcry_free (decrypted_db);
@@ -173,7 +206,7 @@
json_object_set (root, "version", json_integer(1));
gcry_cipher_hd_t hd;
- guchar *derived_master_key, *enc_master_key, *key_nonce, *key_tag, *db_nonce, *db_tag, *salt;
+ guchar *derived_master_key = NULL, *enc_master_key = NULL, *key_nonce = NULL, *key_tag = NULL, *db_nonce = NULL, *db_tag = NULL, *salt = NULL;
json_t *aegis_header_obj = json_object ();
if (password == NULL) {
json_object_set (aegis_header_obj, "slots", json_null ());
@@ -198,18 +231,32 @@
gcry_create_nonce (key_nonce, NONCE_SIZE);
derived_master_key = gcry_calloc_secure(KEY_SIZE, 1);
- gcry_kdf_derive (password, strlen (password) + 1, GCRY_KDF_SCRYPT, 32768, salt, SALT_SIZE, 1, KEY_SIZE, derived_master_key);
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, derived_master_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, key_nonce, NONCE_SIZE);
+ gpg_error_t gpg_err = gcry_kdf_derive (password, strlen (password) + 1, GCRY_KDF_SCRYPT, 32768, salt, SALT_SIZE, 1, KEY_SIZE, derived_master_key);
+ if (gpg_err) {
+ g_printerr ("Error while deriving the key\n");
+ gcry_free (derived_master_key);
+ return NULL;
+ }
+
+ hd = open_cipher_and_set_data (derived_master_key, key_nonce, NONCE_SIZE);
+ if (hd == NULL) {
+ gcry_free (derived_master_key);
+ g_free (key_nonce);
+ g_free (salt);
+ return NULL;
+ }
+
enc_master_key = gcry_malloc (KEY_SIZE);
if (gcry_cipher_encrypt (hd, enc_master_key, KEY_SIZE, derived_master_key, KEY_SIZE)) {
g_printerr ("Error while encrypting the master key.\n");
gcry_free (derived_master_key);
gcry_free (enc_master_key);
+ g_free (key_nonce);
+ g_free (salt);
gcry_cipher_close (hd);
return NULL;
}
+
key_tag = g_malloc0 (TAG_SIZE);
gcry_cipher_gettag (hd, key_tag, TAG_SIZE);
json_object_set (slot_1, "key", json_string (bytes_to_hexstr (enc_master_key, KEY_SIZE)));
@@ -282,9 +329,10 @@
}
if (password != NULL) {
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, derived_master_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, db_nonce, NONCE_SIZE);
+ hd = open_cipher_and_set_data (derived_master_key, db_nonce, NONCE_SIZE);
+ if (hd == NULL) {
+ goto clean_and_return;
+ }
size_t db_size = json_dumpb (aegis_db_obj, NULL, 0, 0);
guchar *enc_db = g_malloc0 (db_size);
gchar *dumped_db = g_malloc0 (db_size);
@@ -292,7 +340,9 @@
if (gcry_cipher_encrypt (hd, enc_db, db_size, dumped_db, db_size)) {
g_printerr ("Error while encrypting the db.\n");
g_free (enc_db);
- gcry_free (dumped_db);
+ g_free (dumped_db);
+ gcry_cipher_close (hd);
+ clean_and_return:
g_free (key_nonce);
g_free (key_tag);
g_free (db_nonce);
@@ -305,7 +355,7 @@
gcry_cipher_gettag (hd, db_tag, TAG_SIZE);
json_t *db_params = json_object_get (aegis_header_obj, "params");
json_object_set (db_params, "tag", json_string (bytes_to_hexstr (db_tag, TAG_SIZE)));
- gcry_free (dumped_db);
+ g_free (dumped_db);
gchar *b64enc_db = g_base64_encode (enc_db, db_size);
json_object_set (root, "db", json_string (b64enc_db));
@@ -318,6 +368,7 @@
g_free (salt);
gcry_free (derived_master_key);
gcry_free (enc_master_key);
+ gcry_cipher_close (hd);
}
FILE *fp = fopen (export_path, "w");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/common/andotp.c new/OTPClient-3.1.1/src/common/andotp.c
--- old/OTPClient-3.1.0/src/common/andotp.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/common/andotp.c 2022-12-28 17:02:45.000000000 +0100
@@ -3,6 +3,7 @@
#include <gcrypt.h>
#include <jansson.h>
#include <time.h>
+#include <glib/gi18n.h>
#include "../file-size.h"
#include "../imports.h"
#include "../gquarks.h"
@@ -114,8 +115,8 @@
g_set_error (err, file_too_big_gquark (), FILE_TOO_BIG, "File is too big");
return NULL;
}
- guchar *enc_buf = g_malloc0 (enc_buf_size);
+ guchar *enc_buf = g_malloc0 (enc_buf_size);
if (!g_seekable_seek (G_SEEKABLE (in_stream), 4 + ANDOTP_SALT_SIZE + ANDOTP_IV_SIZE, G_SEEK_SET, NULL, err)) {
g_object_unref (in_stream);
g_object_unref (in_file);
@@ -133,18 +134,28 @@
guchar *derived_key = get_derived_key (password, salt, be_iterations);
- gcry_cipher_hd_t hd;
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, GCRY_CIPHER_SECURE);
- gcry_cipher_setkey (hd, derived_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, iv, ANDOTP_IV_SIZE);
+ gcry_cipher_hd_t hd = open_cipher_and_set_data (derived_key, iv, ANDOTP_IV_SIZE);
+ if (hd == NULL) {
+ gcry_free (derived_key);
+ g_free (enc_buf);
+ return NULL;
+ }
gchar *decrypted_json = gcry_calloc_secure (enc_buf_size, 1);
- gcry_cipher_decrypt (hd, decrypted_json, enc_buf_size, enc_buf, enc_buf_size);
+ gpg_error_t gpg_err = gcry_cipher_decrypt (hd, decrypted_json, enc_buf_size, enc_buf, enc_buf_size);
+ if (gpg_err) {
+ g_free (enc_buf);
+ gcry_free (derived_key);
+ gcry_free (decrypted_json);
+ gcry_cipher_close (hd);
+ return NULL;
+ }
if (gcry_err_code (gcry_cipher_checktag (hd, tag, ANDOTP_TAG_SIZE)) == GPG_ERR_CHECKSUM) {
g_set_error (err, bad_tag_gquark (), BAD_TAG_ERRCODE, "Either the file is corrupted or the password is wrong");
gcry_cipher_close (hd);
- gcry_free (derived_key);
g_free (enc_buf);
+ gcry_free (derived_key);
+ gcry_free (decrypted_json);
return NULL;
}
@@ -240,14 +251,26 @@
guchar *salt = g_malloc0 (ANDOTP_SALT_SIZE);
gcry_create_nonce (salt, ANDOTP_SALT_SIZE);
- gcry_cipher_hd_t hd;
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, GCRY_CIPHER_SECURE);
guchar *derived_key = get_derived_key (password, salt, le_iterations);
- gcry_cipher_setkey (hd, derived_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, iv, ANDOTP_IV_SIZE);
+ gcry_cipher_hd_t hd = open_cipher_and_set_data (derived_key, iv, ANDOTP_IV_SIZE);
+ if (hd == NULL) {
+ gcry_free (derived_key);
+ g_free (iv);
+ g_free (salt);
+ return NULL;
+ }
gchar *enc_buf = gcry_calloc_secure (json_data_size, 1);
- gcry_cipher_encrypt (hd, enc_buf, json_data_size, json_data, json_data_size);
+ gpg_error_t gpg_err = gcry_cipher_encrypt (hd, enc_buf, json_data_size, json_data, json_data_size);
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while encrypting the data."));
+ gcry_free (derived_key);
+ gcry_free (enc_buf);
+ g_free (iv);
+ g_free (salt);
+ gcry_cipher_close (hd);
+ return NULL;
+ }
guchar tag[ANDOTP_TAG_SIZE];
gcry_cipher_gettag (hd, tag, ANDOTP_TAG_SIZE);
gcry_cipher_close (hd);
@@ -257,30 +280,27 @@
if (err != NULL) {
goto cleanup_before_exiting;
}
- g_output_stream_write (G_OUTPUT_STREAM (out_stream), &be_iterations, 4, NULL, &err);
- if (err != NULL) {
+ if (g_output_stream_write (G_OUTPUT_STREAM (out_stream), &be_iterations, 4, NULL, &err) == -1) {
goto cleanup_before_exiting;
}
- g_output_stream_write (G_OUTPUT_STREAM (out_stream), salt, ANDOTP_SALT_SIZE, NULL, &err);
- if (err != NULL) {
+ if (g_output_stream_write (G_OUTPUT_STREAM (out_stream), salt, ANDOTP_SALT_SIZE, NULL, &err) == -1) {
goto cleanup_before_exiting;
}
- g_output_stream_write (G_OUTPUT_STREAM (out_stream), iv, ANDOTP_IV_SIZE, NULL, &err);
- if (err != NULL) {
+ if (g_output_stream_write (G_OUTPUT_STREAM (out_stream), iv, ANDOTP_IV_SIZE, NULL, &err) == -1) {
goto cleanup_before_exiting;
}
- g_output_stream_write (G_OUTPUT_STREAM (out_stream), enc_buf, json_data_size, NULL, &err);
- if (err != NULL) {
+ if (g_output_stream_write (G_OUTPUT_STREAM (out_stream), enc_buf, json_data_size, NULL, &err) == -1) {
goto cleanup_before_exiting;
}
- g_output_stream_write (G_OUTPUT_STREAM (out_stream), tag, ANDOTP_TAG_SIZE, NULL, &err);
- if (err != NULL) {
+ if (g_output_stream_write (G_OUTPUT_STREAM (out_stream), tag, ANDOTP_TAG_SIZE, NULL, &err) == -1) {
goto cleanup_before_exiting;
}
cleanup_before_exiting:
g_free (iv);
+ g_free (salt);
gcry_free (json_data);
+ gcry_free (derived_key);
gcry_free (enc_buf);
json_array_clear (array);
g_object_unref (out_stream);
@@ -299,6 +319,7 @@
guchar *derived_key = gcry_malloc_secure (32);
if (gcry_kdf_derive (password, (gsize) g_utf8_strlen (password, -1), GCRY_KDF_PBKDF2, GCRY_MD_SHA1,
salt, ANDOTP_SALT_SIZE, iterations, 32, derived_key) != 0) {
+ gcry_free (derived_key);
return NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/common/common.c new/OTPClient-3.1.1/src/common/common.c
--- old/OTPClient-3.1.0/src/common/common.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/common/common.c 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,7 @@
#include <sys/resource.h>
#include <cotp.h>
#include <baseencode.h>
+#include <glib/gi18n.h>
#include "gcrypt.h"
#include "jansson.h"
#include "../google-migration.pb-c.h"
@@ -92,7 +93,9 @@
json_int_t v = json_integer_value (value);
g_snprintf (tmp_string + strlen (tmp_string), 256, "%ld", (gint64) v);
} else {
- g_strlcat (tmp_string, json_string_value (value), 256);
+ if (g_strlcat (tmp_string, json_string_value (value), 256) > 256) {
+ g_printerr ("%s\n", _("Truncation occurred."));
+ }
}
}
@@ -127,9 +130,9 @@
}
}
sec_buf[pos] = '\0';
- gcry_realloc (sec_buf, g_utf8_strlen(sec_buf, -1) + 1);
+ gchar *secubf_newpos = (gchar *)gcry_realloc (sec_buf, g_utf8_strlen(sec_buf, -1) + 1);
- return sec_buf;
+ return secubf_newpos;
}
@@ -169,6 +172,139 @@
}
+// Backported from Glib 2.68 in order to support Debian "bullseye" and Ubuntu 20.04
+guint
+g_string_replace_backported (GString *string,
+ const gchar *find,
+ const gchar *replace,
+ guint limit)
+{
+ gsize f_len, r_len, pos;
+ gchar *cur, *next;
+ guint n = 0;
+
+ g_return_val_if_fail (string != NULL, 0);
+ g_return_val_if_fail (find != NULL, 0);
+ g_return_val_if_fail (replace != NULL, 0);
+
+ f_len = strlen (find);
+ r_len = strlen (replace);
+ cur = string->str;
+
+ while ((next = strstr (cur, find)) != NULL)
+ {
+ pos = next - string->str;
+ g_string_erase (string, (gssize)pos, (gssize)f_len);
+ g_string_insert (string, (gssize)pos, replace);
+ cur = string->str + pos + r_len;
+ n++;
+ /* Only match the empty string once at any given position, to
+ * avoid infinite loops */
+ if (f_len == 0)
+ {
+ if (cur[0] == '\0')
+ break;
+ else
+ cur++;
+ }
+ if (n == limit)
+ break;
+ }
+
+ return n;
+}
+
+
+// Backported from Glib. The only difference is that it's using gcrypt to allocate a secure buffer.
+static int
+unescape_character (const char *scanner)
+{
+ int first_digit;
+ int second_digit;
+
+ first_digit = g_ascii_xdigit_value (*scanner++);
+ if (first_digit < 0)
+ return -1;
+
+ second_digit = g_ascii_xdigit_value (*scanner++);
+ if (second_digit < 0)
+ return -1;
+
+ return (first_digit << 4) | second_digit;
+}
+
+
+// Backported from Glib. The only difference is that it's using gcrypt to allocate a secure buffer.
+gchar *
+g_uri_unescape_string_secure (const gchar *escaped_string,
+ const gchar *illegal_characters)
+{
+ if (escaped_string == NULL)
+ return NULL;
+
+ const gchar *escaped_string_end = escaped_string + strlen (escaped_string);
+
+ gchar *result = gcry_calloc_secure (escaped_string_end - escaped_string + 1, 1);
+ gchar *out = result;
+
+ const gchar *in;
+ gint character;
+ for (in = escaped_string; in < escaped_string_end; in++) {
+ character = *in;
+
+ if (*in == '%') {
+ in++;
+ if (escaped_string_end - in < 2) {
+ // Invalid escaped char (to short)
+ gcry_free (result);
+ return NULL;
+ }
+
+ character = unescape_character (in);
+
+ // Check for an illegal character. We consider '\0' illegal here.
+ if (character <= 0 ||
+ (illegal_characters != NULL &&
+ strchr (illegal_characters, (char)character) != NULL)) {
+ gcry_free (result);
+ return NULL;
+ }
+
+ in++; // The other char will be eaten in the loop header
+ }
+ *out++ = (char)character;
+ }
+
+ *out = '\0';
+
+ return result;
+}
+
+
+guchar *
+g_base64_decode_secure (const gchar *text,
+ gsize *out_len)
+{
+ guchar *ret;
+ gsize input_length;
+ gint state = 0;
+ guint save = 0;
+
+ g_return_val_if_fail (text != NULL, NULL);
+ g_return_val_if_fail (out_len != NULL, NULL);
+
+ input_length = strlen (text);
+
+ /* We can use a smaller limit here, since we know the saved state is 0,
+ +1 used to avoid calling g_malloc0(0), and hence returning NULL */
+ ret = gcry_calloc_secure ((input_length / 4) * 3 + 1, 1);
+
+ *out_len = g_base64_decode_step (text, input_length, ret, &state, &save);
+
+ return ret;
+}
+
+
GSList *
decode_migration_data (const gchar *encoded_uri)
{
@@ -178,50 +314,58 @@
}
encoded_uri_copy += 33;
gsize out_len;
- guchar *data = g_base64_decode (g_uri_unescape_string ((encoded_uri_copy), NULL), &out_len);
+ gchar *unesc_str = g_uri_unescape_string_secure (encoded_uri_copy, NULL);
+ guchar *data = g_base64_decode_secure (unesc_str, &out_len);
+ gcry_free (unesc_str);
GSList *uris = NULL;
- gchar *uri = NULL;
+ GString *uri = NULL;
MigrationPayload *msg = migration_payload__unpack (NULL, out_len, data);
+ gcry_free (data);
for (gint i = 0; i < msg->n_otp_parameters; i++) {
- uri = g_strconcat ("otpauth://", NULL);
+ uri = g_string_new ("otpauth://");
if (msg->otp_parameters[i]->type == 1) {
- uri = g_strconcat (uri, "hotp/", NULL);
+ g_string_append (uri, "hotp/");
} else if (msg->otp_parameters[i]->type == 2) {
- uri = g_strconcat (uri, "totp/", NULL);
+ g_string_append (uri, "totp/");
} else {
g_printerr ("OTP type not recognized, skipping %s\n", msg->otp_parameters[i]->name);
goto end;
}
- uri = g_strconcat (uri, msg->otp_parameters[i]->name, "?", NULL);
+ g_string_append (uri, msg->otp_parameters[i]->name);
+ g_string_append (uri, "?");
if (msg->otp_parameters[i]->algorithm == 1) {
- uri = g_strconcat (uri, "algorithm=SHA1&", NULL);
+ g_string_append (uri, "algorithm=SHA1&");
} else if (msg->otp_parameters[i]->algorithm == 2) {
- uri = g_strconcat (uri, "algorithm=SHA256&", NULL);
+ g_string_append (uri, "algorithm=SHA256&");
} else if (msg->otp_parameters[i]->algorithm == 3) {
- uri = g_strconcat (uri, "algorithm=SHA512&", NULL);
+ g_string_append (uri, "algorithm=SHA512&");
} else {
g_printerr ("Algorithm type not supported, skipping %s\n", msg->otp_parameters[i]->name);
goto end;
}
if (msg->otp_parameters[i]->digits == 1) {
- uri = g_strconcat (uri, "digits=6&", NULL);
+ g_string_append (uri, "digits=6&");
} else if (msg->otp_parameters[i]->digits == 2) {
- uri = g_strconcat (uri, "digits=8&", NULL);
+ g_string_append (uri, "digits=8&");
} else {
g_printerr ("Algorithm type not supported, skipping %s\n", msg->otp_parameters[i]->name);
goto end;
}
if (msg->otp_parameters[i]->issuer != NULL) {
- uri = g_strconcat (uri, "issuer=", msg->otp_parameters[i]->issuer, "&", NULL);
+ g_string_append (uri, "issuer=");
+ g_string_append (uri, msg->otp_parameters[i]->issuer);
+ g_string_append (uri, "&");
}
if (msg->otp_parameters[i]->type == 1) {
- uri = g_strconcat (uri, "counter=", msg->otp_parameters[i]->counter, "&", NULL);
+ g_string_append (uri, "counter=");
+ g_string_append_printf(uri, "%ld", msg->otp_parameters[i]->counter);
+ g_string_append (uri, "&");
}
baseencode_error_t b_err;
@@ -231,56 +375,46 @@
goto end;
}
- uri = g_strconcat (uri, "secret=", b32_encoded_secret, NULL);
+ g_string_append (uri, "secret=");
+ g_string_append (uri, b32_encoded_secret);
- uris = g_slist_append (uris, g_strdup (uri));
+ uris = g_slist_append (uris, g_strdup (uri->str));
end:
- g_free (uri);
+ g_string_free (uri, TRUE);
}
+ migration_payload__free_unpacked (msg, NULL);
+
return uris;
}
-// Backported from Glib 2.68 in order to support Debian "bullseye" and Ubuntu 20.04
-guint
-g_string_replace_backported (GString *string,
- const gchar *find,
- const gchar *replace,
- guint limit)
-{
- gsize f_len, r_len, pos;
- gchar *cur, *next;
- guint n = 0;
-
- g_return_val_if_fail (string != NULL, 0);
- g_return_val_if_fail (find != NULL, 0);
- g_return_val_if_fail (replace != NULL, 0);
+gcry_cipher_hd_t
+open_cipher_and_set_data (guchar *derived_key,
+ guchar *iv,
+ gsize iv_len)
+{
+ gcry_cipher_hd_t hd;
+ gpg_error_t gpg_err = gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, GCRY_CIPHER_SECURE);
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while opening the cipher handle."));
+ return NULL;
+ }
- f_len = strlen (find);
- r_len = strlen (replace);
- cur = string->str;
+ gpg_err = gcry_cipher_setkey (hd, derived_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while setting the cipher key."));
+ gcry_cipher_close (hd);
+ return NULL;
+ }
- while ((next = strstr (cur, find)) != NULL)
- {
- pos = next - string->str;
- g_string_erase (string, pos, f_len);
- g_string_insert (string, pos, replace);
- cur = string->str + pos + r_len;
- n++;
- /* Only match the empty string once at any given position, to
- * avoid infinite loops */
- if (f_len == 0)
- {
- if (cur[0] == '\0')
- break;
- else
- cur++;
- }
- if (n == limit)
- break;
+ gpg_err = gcry_cipher_setiv (hd, iv, iv_len);
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while setting the cipher iv."));
+ gcry_cipher_close (hd);
+ return NULL;
}
- return n;
-}
+ return hd;
+}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/common/common.h new/OTPClient-3.1.1/src/common/common.h
--- old/OTPClient-3.1.0/src/common/common.h 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/common/common.h 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,7 @@
#include <glib.h>
#include <jansson.h>
+#include <gcrypt.h>
G_BEGIN_DECLS
@@ -38,4 +39,14 @@
const gchar *replace,
guint limit);
+gchar *g_uri_unescape_string_secure (const gchar *escaped_string,
+ const gchar *illegal_characters);
+
+guchar *g_base64_decode_secure (const gchar *text,
+ gsize *out_len);
+
+gcry_cipher_hd_t open_cipher_and_set_data (guchar *derived_key,
+ guchar *iv,
+ gsize iv_len);
+
G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/common/freeotp.c new/OTPClient-3.1.1/src/common/freeotp.c
--- old/OTPClient-3.1.0/src/common/freeotp.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/common/freeotp.c 2022-12-28 17:02:45.000000000 +0100
@@ -11,9 +11,15 @@
GError **err)
{
GSList *otps = NULL;
- gchar *sec_buf = gcry_calloc_secure (get_file_size (path), 1);
+ goffset fs = get_file_size (path);
+ if (fs < 10) {
+ g_printerr ("Couldn't get the file size (file doesn't exit or wrong file selected\n");
+ return NULL;
+ }
+ gchar *sec_buf = gcry_calloc_secure (fs, 1);
if (!g_file_get_contents (path, &sec_buf, NULL, err)) {
g_printerr("Couldn't read into memory the freeotp txt file\n");
+ gcry_free (sec_buf);
return NULL;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/db-actions.c new/OTPClient-3.1.1/src/db-actions.c
--- old/OTPClient-3.1.0/src/db-actions.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/db-actions.c 2022-12-28 17:02:45.000000000 +0100
@@ -1,4 +1,5 @@
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include "data.h"
#include "message-dialogs.h"
#include "db-actions.h"
@@ -36,8 +37,6 @@
void
update_cfg_file (AppData *app_data)
{
- GError *cfg_err = NULL;
- gchar *msg = NULL;
GKeyFile *kf = g_key_file_new ();
gchar *cfg_file_path;
#ifndef USE_FLATPAK_APP_FOLDER
@@ -45,15 +44,20 @@
#else
cfg_file_path = g_build_filename (g_get_user_data_dir (), "otpclient.cfg", NULL);
#endif
- g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, NULL);
+ if (!g_key_file_load_from_file (kf, cfg_file_path, G_KEY_FILE_NONE, NULL)) {
+ g_printerr ("%s\n", _("Error while loading the config file."));
+ }
g_key_file_set_string (kf, "config", "db_path", app_data->db_data->db_path);
- g_key_file_save_to_file (kf, cfg_file_path, &cfg_err);
- if (cfg_err != NULL) {
- msg = g_strconcat ("Couldn't save the change to the config file: ", &cfg_err->message, NULL);
- show_message_dialog (app_data->main_window, msg, GTK_MESSAGE_ERROR);
- g_free (msg);
- g_clear_error (&cfg_err);
+ GError *cfg_err = NULL;
+ if (!g_key_file_save_to_file (kf, cfg_file_path, &cfg_err)) {
+ if (cfg_err != NULL) {
+ gchar *msg = g_strconcat ("Couldn't save the change to the config file: ", &cfg_err->message, NULL);
+ show_message_dialog (app_data->main_window, msg, GTK_MESSAGE_ERROR);
+ g_free (msg);
+ g_clear_error (&cfg_err);
+ }
}
+
g_free (cfg_file_path);
g_key_file_free (kf);
}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/db-misc.c new/OTPClient-3.1.1/src/db-misc.c
--- old/OTPClient-3.1.0/src/db-misc.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/db-misc.c 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,7 @@
#include <gcrypt.h>
#include <jansson.h>
#include <glib/gstdio.h>
+#include <glib/gi18n.h>
#include "db-misc.h"
#include "otpclient.h"
#include "file-size.h"
@@ -166,7 +167,9 @@
} else {
g_printerr ("Couldn't update the database (encrypt_db failed)\n");
if (g_file_test (db_data->db_path, G_FILE_TEST_EXISTS)) {
- g_unlink (db_data->db_path);
+ if (g_unlink (db_data->db_path) == -1) {
+ g_printerr ("%s\n", _("Error while unlinking the file."));
+ }
}
}
} else {
@@ -193,7 +196,6 @@
GError **err)
{
GError *local_err = NULL;
- gcry_cipher_hd_t hd;
HeaderData *header_data = g_new0 (HeaderData, 1);
gcry_create_nonce (header_data->iv, IV_SIZE);
@@ -224,35 +226,64 @@
gsize input_data_len = strlen (in_memory_json) + 1;
guchar *enc_buffer = g_malloc0 (input_data_len);
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, derived_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, header_data->iv, IV_SIZE);
- gcry_cipher_authenticate (hd, header_data, sizeof (HeaderData));
- gcry_cipher_encrypt (hd, enc_buffer, input_data_len, in_memory_json, input_data_len);
+ gcry_cipher_hd_t hd = open_cipher_and_set_data (derived_key, header_data->iv, IV_SIZE);
+ if (hd == NULL) {
+ gcry_free (derived_key);
+ g_free (header_data);
+ g_free (enc_buffer);
+ return NULL;
+ }
+
+ gpg_error_t gpg_err = gcry_cipher_authenticate (hd, header_data, sizeof (HeaderData));
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while processing the authenticated data."));
+ gcry_free (derived_key);
+ g_free (header_data);
+ g_free (enc_buffer);
+ gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
+ gpg_err = gcry_cipher_encrypt (hd, enc_buffer, input_data_len, in_memory_json, input_data_len);
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while encrypting the data."));
+ gcry_free (derived_key);
+ g_free (enc_buffer);
+ g_free (header_data);
+ gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
guchar tag[TAG_SIZE];
- gcry_cipher_gettag (hd, tag, TAG_SIZE); //append tag to outfile
+ gpg_err = gcry_cipher_gettag (hd, tag, TAG_SIZE); //append tag to outfile
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while getting the tag."));
+ gcry_free (derived_key);
+ g_free (enc_buffer);
+ g_free (header_data);
+ gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
if (g_output_stream_write (G_OUTPUT_STREAM(out_stream), enc_buffer, input_data_len, NULL, &local_err) == -1) {
g_set_error (err, generic_error_gquark (), GENERIC_ERRCODE, "Failed while writing encrypted buffer to file");
cleanup (out_file, out_stream, header_data, local_err);
- gcry_cipher_close (hd);
g_free (enc_buffer);
gcry_free (derived_key);
+ gcry_cipher_close (hd);
return GENERIC_ERROR;
}
if (g_output_stream_write (G_OUTPUT_STREAM(out_stream), tag, TAG_SIZE, NULL, &local_err) == -1) {
g_set_error (err, generic_error_gquark (), GENERIC_ERRCODE, "Failed while writing tag data to file");
cleanup (out_file, out_stream, header_data, local_err);
- gcry_cipher_close (hd);
g_free (enc_buffer);
gcry_free (derived_key);
+ gcry_cipher_close (hd);
return GENERIC_ERROR;
}
- gcry_cipher_close (hd);
- gcry_free (derived_key);
g_free (enc_buffer);
+ gcry_free (derived_key);
+ gcry_cipher_close (hd);
cleanup (out_file, out_stream, header_data, NULL);
return NULL;
@@ -264,7 +295,6 @@
const gchar *password)
{
GError *err = NULL;
- gcry_cipher_hd_t hd;
HeaderData *header_data = g_new0 (HeaderData, 1);
goffset input_file_size = get_file_size (db_path);
@@ -319,19 +349,49 @@
return (gpointer)derived_key;
}
- gcry_cipher_open (&hd, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, 0);
- gcry_cipher_setkey (hd, derived_key, gcry_cipher_get_algo_keylen (GCRY_CIPHER_AES256));
- gcry_cipher_setiv (hd, header_data->iv, IV_SIZE);
- gcry_cipher_authenticate (hd, header_data, sizeof (HeaderData));
+ gcry_cipher_hd_t hd = open_cipher_and_set_data (derived_key, header_data->iv, IV_SIZE);
+ if (hd == NULL) {
+ gcry_free (derived_key);
+ g_free (enc_buf);
+ g_free (header_data);
+ return GENERIC_ERROR;
+ }
+
+ gpg_error_t gpg_err = gcry_cipher_authenticate (hd, header_data, sizeof (HeaderData));
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while processing the authenticated data."));
+ gcry_free (derived_key);
+ g_free (header_data);
+ g_free (enc_buf);
+ gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
gchar *dec_buf = gcry_calloc_secure (enc_buf_size, 1);
- gcry_cipher_decrypt (hd, dec_buf, enc_buf_size, enc_buf, enc_buf_size);
- if (gcry_err_code (gcry_cipher_checktag (hd, tag, TAG_SIZE)) == GPG_ERR_CHECKSUM) {
+ if (dec_buf == NULL) {
+ g_printerr ("%s\n", _("Error while allocating secure memory."));
+ gcry_free (derived_key);
+ g_free (header_data);
+ g_free (enc_buf);
gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
+ gpg_err = gcry_cipher_decrypt (hd, dec_buf, enc_buf_size, enc_buf, enc_buf_size);
+ if (gpg_err) {
+ g_printerr ("%s\n", _("Error while decrypting the data."));
gcry_free (derived_key);
+ gcry_free (dec_buf);
g_free (header_data);
g_free (enc_buf);
+ gcry_cipher_close (hd);
+ return GENERIC_ERROR;
+ }
+ if (gcry_err_code (gcry_cipher_checktag (hd, tag, TAG_SIZE)) == GPG_ERR_CHECKSUM) {
+ gcry_cipher_close (hd);
+ gcry_free (derived_key);
gcry_free (dec_buf);
+ g_free (header_data);
+ g_free (enc_buf);
return TAG_MISMATCH;
}
@@ -353,14 +413,14 @@
guchar *derived_key = gcry_malloc_secure (key_len);
if (derived_key == NULL) {
- g_printerr ("Couldn't allocate secure memory\n");
+ g_printerr ("%s\n", _("Couldn't allocate the needed secure memory."));
return SECURE_MEMORY_ALLOC_ERR;
}
gpg_error_t ret = gcry_kdf_derive (pwd, pwd_len, GCRY_KDF_PBKDF2, GCRY_MD_SHA512, header_data->salt, KDF_SALT_SIZE, KDF_ITERATIONS, key_len, derived_key);
if (ret != 0) {
gcry_free (derived_key);
- g_printerr ("Error during key derivation\n");
+ g_printerr ("%s\n", _("Error during key derivation."));
return KEY_DERIV_ERR;
}
return derived_key;
@@ -396,7 +456,7 @@
g_printerr ("Couldn't restore the backup file: %s\n", err->message);
g_clear_error (&err);
} else {
- g_print ("Backup copy successfully restored.\n");
+ g_print ("%s\n", _("Backup copy successfully restored."));
}
g_object_unref (src);
g_object_unref (dst);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/exports.c new/OTPClient-3.1.1/src/exports.c
--- old/OTPClient-3.1.0/src/exports.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/exports.c 2022-12-28 17:02:45.000000000 +0100
@@ -1,5 +1,6 @@
#include <gtk/gtk.h>
#include <jansson.h>
+#include <gcrypt.h>
#include "password-cb.h"
#include "message-dialogs.h"
#include "common/exports.h"
@@ -54,6 +55,9 @@
}
g_free (ret_msg);
g_free (exported_file_path);
+ if (encrypted == TRUE) {
+ gcry_free (password);
+ }
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/imports.c new/OTPClient-3.1.1/src/imports.c
--- old/OTPClient-3.1.0/src/imports.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/imports.c 2022-12-28 17:02:45.000000000 +0100
@@ -120,6 +120,12 @@
}
show_message_dialog (app_data->main_window, msg, GTK_MESSAGE_ERROR);
g_free (msg_with_err);
+ if (err != NULL){
+ g_clear_error (&err);
+ }
+ if (pwd != NULL) {
+ gcry_free (pwd);
+ }
return FALSE;
}
@@ -127,6 +133,9 @@
if (err_msg != NULL) {
show_message_dialog (app_data->main_window, err_msg, GTK_MESSAGE_ERROR);
g_free (err_msg);
+ if (pwd != NULL) {
+ gcry_free (pwd);
+ }
return FALSE;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/parse-uri.c new/OTPClient-3.1.1/src/parse-uri.c
--- old/OTPClient-3.1.0/src/parse-uri.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/parse-uri.c 2022-12-28 17:02:45.000000000 +0100
@@ -74,7 +74,7 @@
gchar *escaped_label = g_uri_escape_string (constructed_label, NULL, FALSE);
g_string_append (uri, escaped_label);
g_string_append (uri, "?secret=");
- g_string_append (uri,json_string_value (json_object_get (db_obj, "secret")));
+ g_string_append (uri, json_string_value (json_object_get (db_obj, "secret")));
if (issuer != NULL && g_ascii_strcasecmp (issuer, "steam") == 0) {
g_string_append (uri, "&issuer=Steam");
}
@@ -83,27 +83,32 @@
g_string_append (uri, json_string_value (json_object_get (db_obj, "issuer")));
}
+ gchar *str_to_append = NULL;
g_string_append (uri, "&digits=");
- g_string_append (uri,g_strdup_printf ("%lld", json_integer_value ( json_object_get (db_obj, "digits"))));
+ str_to_append = g_strdup_printf ("%lld", json_integer_value ( json_object_get (db_obj, "digits")));
+ g_string_append (uri,str_to_append);
+ g_free (str_to_append);
g_string_append (uri, "&algorithm=");
g_string_append (uri, json_string_value ( json_object_get (db_obj, "algo")));
if (g_ascii_strcasecmp (json_string_value (json_object_get (db_obj, "type")), "TOTP") == 0) {
g_string_append (uri, "&period=");
- g_string_append (uri, g_strdup_printf ("%lld",json_integer_value ( json_object_get (db_obj, "period"))));
+ str_to_append = g_strdup_printf ("%lld", json_integer_value ( json_object_get (db_obj, "period")));
+ g_string_append (uri, str_to_append);
+ g_free (str_to_append);
} else {
g_string_append (uri, "&counter=");
- g_string_append (uri, g_strdup_printf ("%lld",json_integer_value ( json_object_get (db_obj, "counter"))));
+ str_to_append = g_strdup_printf ("%lld", json_integer_value ( json_object_get (db_obj, "counter")));
+ g_string_append (uri, str_to_append);
+ g_free (str_to_append);
}
g_string_append (uri, "\n");
- gchar *ret_uri = g_strdup (uri->str);
g_free (constructed_label);
g_free (escaped_label);
- g_string_free (uri, TRUE);
- return ret_uri;
+ return g_string_free (uri, FALSE);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/qrcode-parser.c new/OTPClient-3.1.1/src/qrcode-parser.c
--- old/OTPClient-3.1.0/src/qrcode-parser.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/qrcode-parser.c 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,7 @@
#include <zbar.h>
#include <png.h>
#include <glib/gstdio.h>
+#include <gcrypt.h>
#include "common/common.h"
typedef struct image_data_t {
@@ -46,7 +47,9 @@
const zbar_symbol_t *symbol = zbar_image_first_symbol (image);
for (; symbol; symbol = zbar_symbol_next (symbol)) {
- *otpauth_uri = secure_strdup (g_uri_unescape_string (zbar_symbol_get_data (symbol), NULL));
+ gchar *unesc_str = g_uri_unescape_string_secure (zbar_symbol_get_data (symbol), NULL);
+ *otpauth_uri = secure_strdup (unesc_str);
+ gcry_free (unesc_str);
}
zbar_image_destroy (image);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/settings-cb.c new/OTPClient-3.1.1/src/settings-cb.c
--- old/OTPClient-3.1.0/src/settings-cb.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/settings-cb.c 2022-12-28 17:02:45.000000000 +0100
@@ -1,4 +1,5 @@
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include "otpclient.h"
#include "message-dialogs.h"
#include "get-builder.h"
@@ -24,6 +25,7 @@
g_free (msg);
g_free (cfg_file_path);
g_key_file_free (kf);
+ g_clear_error (&err);
return;
}
@@ -79,7 +81,9 @@
g_key_file_set_integer (kf, "config", "inactivity_timeout", app_data->inactivity_timeout);
g_key_file_set_boolean (kf, "config", "dark_theme", app_data->use_dark_theme);
g_key_file_set_boolean (kf, "config", "disable_secret_service", app_data->disable_secret_service);
- g_key_file_save_to_file (kf, cfg_file_path, NULL);
+ if (!g_key_file_save_to_file (kf, cfg_file_path, NULL)) {
+ g_printerr ("%s\n", _("Error while saving the config file."));
+ }
gtk_tree_view_set_search_column (GTK_TREE_VIEW(app_data->tree_view), app_data->search_column + 1);
break;
case GTK_RESPONSE_CANCEL:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/show-qr-cb.c new/OTPClient-3.1.1/src/show-qr-cb.c
--- old/OTPClient-3.1.0/src/show-qr-cb.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/show-qr-cb.c 2022-12-28 17:02:45.000000000 +0100
@@ -2,6 +2,7 @@
#include <png.h>
#include <qrencode.h>
#include <glib/gstdio.h>
+#include <glib/gi18n.h>
#include "data.h"
#include "parse-uri.h"
#include "get-builder.h"
@@ -45,7 +46,9 @@
gtk_widget_destroy (diag);
g_object_unref (pbuf);
g_object_unref (builder);
- g_unlink (PNG_OUT);
+ if (g_unlink (PNG_OUT) == -1) {
+ g_printerr ("%s\n", _("Couldn't unlink the PNG file."));
+ }
}
}
@@ -62,40 +65,37 @@
write_png (const QRcode *qrcode)
{
guint realwidth = (qrcode->width + MARGIN * 2) * SIZE;
- guchar *row = (guchar *)malloc ((size_t)((realwidth + 7) / 8));
+ guchar *row = (guchar *)g_malloc0 ((size_t)((realwidth + 7) / 8));
if (row == NULL) {
g_printerr ("Failed to allocate memory.\n");
return -1;
}
- FILE *fp = fopen (PNG_OUT, "wb");
- if (fp == NULL) {
- g_printerr ("Failed to create file: %s\n", PNG_OUT);
- perror(NULL);
- return -1;
- }
-
png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr == NULL) {
g_printerr ("Failed to initialize PNG writer.\n");
+ g_free (row);
return -1;
}
png_infop info_ptr = png_create_info_struct (png_ptr);
if (info_ptr == NULL) {
g_printerr ("Failed to initialize PNG write.\n");
+ g_free (row);
return -1;
}
if (setjmp (png_jmpbuf(png_ptr))) {
png_destroy_write_struct (&png_ptr, &info_ptr);
g_printerr ("Failed to write PNG image.\n");
+ g_free (row);
return -1;
}
- png_colorp palette = (png_colorp)malloc(sizeof (png_color) * 2);
+ png_colorp palette = (png_colorp)g_malloc0 (sizeof (png_color) * 2);
if (palette == NULL) {
g_printerr ("Failed to allocate memory.\n");
+ g_free (row);
return -1;
}
@@ -114,6 +114,12 @@
png_set_PLTE(png_ptr, info_ptr, palette, 2);
png_set_tRNS(png_ptr, info_ptr, alpha_values, 2, NULL);
+ FILE *fp = fopen (PNG_OUT, "wb");
+ if (fp == NULL) {
+ g_printerr ("Failed to create file: %s\n", PNG_OUT);
+ g_free (row);
+ return -1;
+ }
png_init_io (png_ptr, fp);
png_set_IHDR (png_ptr, info_ptr,
(guint)realwidth, (guint)realwidth,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/OTPClient-3.1.0/src/webcam-add-cb.c new/OTPClient-3.1.1/src/webcam-add-cb.c
--- old/OTPClient-3.1.0/src/webcam-add-cb.c 2022-12-19 14:16:00.000000000 +0100
+++ new/OTPClient-3.1.1/src/webcam-add-cb.c 2022-12-28 17:02:45.000000000 +0100
@@ -111,7 +111,9 @@
ConfigData *cfg_data = (ConfigData *)user_data;
const zbar_symbol_t *symbol = zbar_image_first_symbol (image);
for (; symbol; symbol = zbar_symbol_next (symbol)) {
- cfg_data->otp_uri = secure_strdup (g_uri_unescape_string (zbar_symbol_get_data (symbol), NULL));
+ gchar *unesc_str = g_uri_unescape_string_secure (zbar_symbol_get_data (symbol), NULL);
+ cfg_data->otp_uri = secure_strdup (unesc_str);
cfg_data->qrcode_found = TRUE;
+ gcry_free (unesc_str);
}
}
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package crmsh for openSUSE:Factory checked in at 2022-12-30 11:08:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/crmsh (Old)
and /work/SRC/openSUSE:Factory/.crmsh.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crmsh"
Fri Dec 30 11:08:50 2022 rev:274 rq:1045770 version:4.4.1+20221228.326c28fd
Changes:
--------
--- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes 2022-12-27 11:55:12.703364570 +0100
+++ /work/SRC/openSUSE:Factory/.crmsh.new.1563/crmsh.changes 2022-12-30 11:09:05.937305235 +0100
@@ -1,0 +2,15 @@
+Wed Dec 28 09:46:54 UTC 2022 - XLiang(a)suse.com
+
+- Update to version 4.4.1+20221228.326c28fd:
+ * Dev: report: 'crm report' to collect journal.log in microseconds
+ * Dev: doc: Add deprecated note for 'crm configure erase'
+ * Dev: ui_configure: Deprecate configure erase sub-command
+
+-------------------------------------------------------------------
+Wed Dec 28 04:00:43 UTC 2022 - XLiang(a)suse.com
+
+- Update to version 4.4.1+20221228.7c16362c:
+ * Dev: unittest: Adjust unit test for previous changes
+ * Dev: ui_cluster: Improve cluster start/stop INFO
+
+-------------------------------------------------------------------
Old:
----
crmsh-4.4.1+20221227.bd7d326e.tar.bz2
New:
----
crmsh-4.4.1+20221228.326c28fd.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ crmsh.spec ++++++
--- /var/tmp/diff_new_pack.sO4leb/_old 2022-12-30 11:09:06.445308271 +0100
+++ /var/tmp/diff_new_pack.sO4leb/_new 2022-12-30 11:09:06.449308296 +0100
@@ -36,7 +36,7 @@
Summary: High Availability cluster command-line interface
License: GPL-2.0-or-later
Group: %{pkg_group}
-Version: 4.4.1+20221227.bd7d326e
+Version: 4.4.1+20221228.326c28fd
Release: 0
URL: http://crmsh.github.io
Source0: %{name}-%{version}.tar.bz2
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.sO4leb/_old 2022-12-30 11:09:06.497308582 +0100
+++ /var/tmp/diff_new_pack.sO4leb/_new 2022-12-30 11:09:06.497308582 +0100
@@ -9,7 +9,7 @@
</service>
<service name="tar_scm">
<param name="url">https://github.com/ClusterLabs/crmsh.git</param>
- <param name="changesrevision">bd7d326e7b0c684c3f93a95851474fcb263a5689</param>
+ <param name="changesrevision">326c28fd1b60f5e1a0c71006e799989869431a75</param>
</service>
</servicedata>
(No newline at EOF)
++++++ crmsh-4.4.1+20221227.bd7d326e.tar.bz2 -> crmsh-4.4.1+20221228.326c28fd.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.4.1+20221227.bd7d326e/crmsh/report/utillib.py new/crmsh-4.4.1+20221228.326c28fd/crmsh/report/utillib.py
--- old/crmsh-4.4.1+20221227.bd7d326e/crmsh/report/utillib.py 2022-12-27 09:04:26.000000000 +0100
+++ new/crmsh-4.4.1+20221228.326c28fd/crmsh/report/utillib.py 2022-12-28 10:33:36.000000000 +0100
@@ -342,7 +342,7 @@
logger.debug("journalctl from: '%d' until: '%d' from_time: '%s' to_time: '%s' > %s",
from_t, to_t, from_time, to_time, outf)
- cmd = 'journalctl -o short-iso --since "%s" --until "%s" --no-pager | tail -n +2' % \
+ cmd = 'journalctl -o short-iso-precise --since "%s" --until "%s" --no-pager | tail -n +2' % \
(from_time, to_time)
crmutils.str2file(get_command_info(cmd)[1], outf)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.4.1+20221227.bd7d326e/crmsh/ui_cluster.py new/crmsh-4.4.1+20221228.326c28fd/crmsh/ui_cluster.py
--- old/crmsh-4.4.1+20221227.bd7d326e/crmsh/ui_cluster.py 2022-12-27 09:04:26.000000000 +0100
+++ new/crmsh-4.4.1+20221228.326c28fd/crmsh/ui_cluster.py 2022-12-28 10:33:36.000000000 +0100
@@ -90,7 +90,7 @@
@command.skill_level('administrator')
def do_start(self, context, *args):
'''
- Starts the cluster services on all nodes or specific node(s)
+ Starts the cluster stack on all nodes or specific node(s)
'''
service_check_list = ["pacemaker.service"]
start_qdevice = False
@@ -101,7 +101,7 @@
node_list = parse_option_for_nodes(context, *args)
for node in node_list[:]:
if all([utils.service_is_active(srv, remote_addr=node) for srv in service_check_list]):
- logger.info("Cluster services already started on {}".format(node))
+ logger.info("The cluster stack already started on {}".format(node))
node_list.remove(node)
if not node_list:
return
@@ -112,25 +112,25 @@
if start_qdevice:
qdevice.QDevice.check_qdevice_vote()
for node in node_list:
- logger.info("Cluster services started on {}".format(node))
+ logger.info("The cluster stack started on {}".format(node))
@command.skill_level('administrator')
def do_stop(self, context, *args):
'''
- Stops the cluster services on all nodes or specific node(s)
+ Stops the cluster stack on all nodes or specific node(s)
'''
node_list = parse_option_for_nodes(context, *args)
for node in node_list[:]:
if not utils.service_is_active("corosync.service", remote_addr=node):
if utils.service_is_active("sbd.service", remote_addr=node):
utils.stop_service("corosync", remote_addr=node)
- logger.info("Cluster services stopped on {}".format(node))
+ logger.info("The cluster stack stopped on {}".format(node))
else:
- logger.info("Cluster services already stopped on {}".format(node))
+ logger.info("The cluster stack already stopped on {}".format(node))
node_list.remove(node)
elif not utils.service_is_active("pacemaker.service", remote_addr=node):
utils.stop_service("corosync", remote_addr=node)
- logger.info("Cluster services stopped on {}".format(node))
+ logger.info("The cluster stack stopped on {}".format(node))
node_list.remove(node)
if not node_list:
return
@@ -158,12 +158,12 @@
node_list = utils.stop_service("corosync", node_list=node_list)
for node in node_list:
- logger.info("Cluster services stopped on {}".format(node))
+ logger.info("The cluster stack stopped on {}".format(node))
@command.skill_level('administrator')
def do_restart(self, context, *args):
'''
- Restarts the cluster services on all nodes or specific node(s)
+ Restarts the cluster stack on all nodes or specific node(s)
'''
parse_option_for_nodes(context, *args)
self.do_stop(context, *args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.4.1+20221227.bd7d326e/crmsh/ui_configure.py new/crmsh-4.4.1+20221228.326c28fd/crmsh/ui_configure.py
--- old/crmsh-4.4.1+20221227.bd7d326e/crmsh/ui_configure.py 2022-12-27 09:04:26.000000000 +0100
+++ new/crmsh-4.4.1+20221228.326c28fd/crmsh/ui_configure.py 2022-12-28 10:33:36.000000000 +0100
@@ -866,6 +866,9 @@
@command.completers(compl.choice(['nodes']))
def do_erase(self, context, nodes=None):
"usage: erase [nodes]"
+ if not options.regression_tests:
+ logger.warning("`crm configure erase` is deprecated. The replacement could be `crm cluster remove [node]`")
+ return True
cib_factory.ensure_cib_updated()
if nodes is None:
return cib_factory.erase()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.4.1+20221227.bd7d326e/doc/crm.8.adoc new/crmsh-4.4.1+20221228.326c28fd/doc/crm.8.adoc
--- old/crmsh-4.4.1+20221227.bd7d326e/doc/crm.8.adoc 2022-12-27 09:04:26.000000000 +0100
+++ new/crmsh-4.4.1+20221228.326c28fd/doc/crm.8.adoc 2022-12-28 10:33:36.000000000 +0100
@@ -2904,6 +2904,12 @@
[[cmdhelp_configure_erase,erase the CIB]]
==== `erase`
+.Deprecation note
+****************************
+`crm configure erase` is deprecated.
+The replacement could be `crm cluster remove [node]`
+****************************
+
The `erase` clears all configuration. Apart from nodes. To remove
nodes, you have to specify an additional keyword `nodes`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.4.1+20221227.bd7d326e/test/unittests/test_ui_cluster.py new/crmsh-4.4.1+20221228.326c28fd/test/unittests/test_ui_cluster.py
--- old/crmsh-4.4.1+20221227.bd7d326e/test/unittests/test_ui_cluster.py 2022-12-27 09:04:26.000000000 +0100
+++ new/crmsh-4.4.1+20221228.326c28fd/test/unittests/test_ui_cluster.py 2022-12-28 10:33:36.000000000 +0100
@@ -52,8 +52,8 @@
mock.call("pacemaker.service", remote_addr="node2")
])
mock_info.assert_has_calls([
- mock.call("Cluster services already started on node1"),
- mock.call("Cluster services already started on node2")
+ mock.call("The cluster stack already started on node1"),
+ mock.call("The cluster stack already started on node2")
])
@mock.patch('crmsh.qdevice.QDevice.check_qdevice_vote')
@@ -78,7 +78,7 @@
])
mock_start.assert_called_once_with("corosync-qdevice", node_list=["node1"])
mock_qdevice_configured.assert_called_once_with()
- mock_info.assert_called_once_with("Cluster services started on node1")
+ mock_info.assert_called_once_with("The cluster stack started on node1")
@mock.patch('logging.Logger.info')
@mock.patch('crmsh.utils.service_is_active')
@@ -92,7 +92,7 @@
mock.call("corosync.service", remote_addr="node1"),
mock.call("sbd.service", remote_addr="node1")
])
- mock_info.assert_called_once_with("Cluster services already stopped on node1")
+ mock_info.assert_called_once_with("The cluster stack already stopped on node1")
@mock.patch('logging.Logger.debug')
@mock.patch('logging.Logger.info')
@@ -126,6 +126,6 @@
mock.call("corosync-qdevice.service", node_list=["node1"]),
mock.call("corosync", node_list=["node1"])
])
- mock_info.assert_called_once_with("Cluster services stopped on node1")
+ mock_info.assert_called_once_with("The cluster stack stopped on node1")
mock_debug.assert_called_once_with("Quorum is lost; Set enable_quorum_fencing=0 and enable_quorum_lockspace=0 for dlm")
mock_check.assert_called_once_with(mock_get_dc, wait_timeout=25)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ddclient for openSUSE:Factory checked in at 2022-12-30 11:08:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ddclient (Old)
and /work/SRC/openSUSE:Factory/.ddclient.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ddclient"
Fri Dec 30 11:08:48 2022 rev:54 rq:1045767 version:3.10.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ddclient/ddclient.changes 2022-07-13 13:45:43.810060935 +0200
+++ /work/SRC/openSUSE:Factory/.ddclient.new.1563/ddclient.changes 2022-12-30 11:09:04.593297199 +0100
@@ -1,0 +2,44 @@
+Tue Dec 27 12:40:48 UTC 2022 - Paolo Stivanin <info(a)paolostivanin.com>
+
+- Update to 3.10.0:
+ * Added support for domaindiscount24.com
+ * Added support for njal.la
+ * Added support for Cloudflare API tokens
+ * Added support for OVH DynHost.
+ * Added support for ClouDNS.
+ * Added support for dinahosting.
+ * Added support for Gandi LiveDNS.
+ * The freedns protocol (for https://freedns.afraid.org) now supports IPv6
+ addresses.
+ * New ssl_ca_dir and ssl_ca_file options to specify the location of CA
+ certificates.
+ * New built-in IP discovery service shorthands:
+ + googledomains from https://domains.google
+ + he from https://he.net
+ ip+4only.me, ip6only.me from http://whatismyv6.com
+ + ipify-ipv4 and ipify-ipv6 from https://www.ipify.org
+ + myonlineportal from https://myonlineportal.net
+ + noip-ipv4 and noip-ipv6 from https://www.noip.com
+ + nsupdate.info-ipv4 and nsupdate.info-ipv6 from
+ + https://www.nsupdate.info
+ + zoneedit from https://www.zoneedit.com
+ * Added option -curl to access network with system Curl command instead
+ of the Perl built-in IO::Socket classes.
+ * Added option -{no}web-ssl-validate and -{no}fw-ssl-validateto provide
+ option to disable SSL certificate validation. Note that these only apply for
+ network access when obtaining an IP address with use=web or use=fw
+ (any firewall). Network access to Dynamic DNS servers to set or retrieve
+ IP address will always require certificate validation.
+ * The fw-banlocal option is deprecated and no longer does anything.
+ * The if-skip option is deprecated and no longer does anything.
+ * The default server for the dslreports1 protocol changed from
+ members.dyndns.org to www.dslreports.com.
+ * Removed support for defunct dnsspark service
+ * Removed support for defunct dtdns service
+ * Removed support for defunct Hammernode service
+- Add fix-configure_ac.patch
+- Add disable-ip-test.patch
+- Rebase ddclient-config.patch
+- Rebase ddclient-delay-main-process-for-systemd.patch
+
+-------------------------------------------------------------------
Old:
----
ddclient-3.9.1.tar.gz
New:
----
ddclient-3.10.0.tar.gz
disable-ip-test.patch
fix-configure_ac.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ddclient.spec ++++++
--- /var/tmp/diff_new_pack.LOlQqo/_old 2022-12-30 11:09:05.101300236 +0100
+++ /var/tmp/diff_new_pack.LOlQqo/_new 2022-12-30 11:09:05.105300261 +0100
@@ -1,7 +1,7 @@
#
# spec file for package ddclient
#
-# Copyright (c) 2022 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,12 +12,12 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: ddclient
-Version: 3.9.1
+Version: 3.10.0
Release: 0
Summary: A Perl Client to Update Dynamic DNS Entries
License: GPL-2.0-or-later
@@ -29,8 +29,17 @@
Source3: %{name}-tmpfiles.conf
Patch0: %{name}-config.patch
Patch1: %{name}-delay-main-process-for-systemd.patch
-Requires: perl >= 5.004
-Requires: perl-Data-Validate-IP
+Patch2: fix-configure_ac.patch
+Patch3: disable-ip-test.patch
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: make
+BuildRequires: perl(HTTP::Daemon)
+BuildRequires: perl(HTTP::Message::PSGI)
+BuildRequires: perl(IO::Socket::SSL)
+BuildRequires: perl(Test::MockModule)
+BuildRequires: perl(Test::Warnings)
+Requires: perl >= 5.10.1
Requires(pre): %fillup_prereq
Requires(pre): shadow
Recommends: perl-IO-Socket-SSL
@@ -50,21 +59,22 @@
cron.
%prep
-%setup -q
-%patch0
-%patch1
+%autosetup -p1
rm -f sample-etc_ddclient.conf.orig
chmod a-x sample-*
mkdir examples
mv sample-* examples
%build
-:
+./autogen
+%configure
+make
%install
-#%%make_install
-install -D -m 755 %{name} %{buildroot}%{_sbindir}/%{name}
-install -D -m 600 examples/sample-etc_ddclient.conf %{buildroot}%{_sysconfdir}/%{name}.conf
+%make_install
+find examples -name *exe -delete
+mkdir -p %{buildroot}%{_sbindir}/
+mv %{buildroot}%{_bindir}/%{name} %{buildroot}%{_sbindir}/%{name}
sed -i -e "s,%{_localstatedir}/run/,/run/%{name}/," %{buildroot}%{_sysconfdir}/%{name}.conf
install -D -m 644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}.service
install -D -m 644 %{SOURCE3} %{buildroot}%{_tmpfilesdir}/%{name}.conf
@@ -74,6 +84,9 @@
install -d -m 755 %{buildroot}%{_localstatedir}/cache/%{name}
install -d -m 755 %{buildroot}/run/%{name}
+%check
+make VERBOSE=1 check
+
%pre
getent group %{name} >/dev/null || %{_sbindir}/groupadd -r %{name}
getent passwd %{name} >/dev/null || \
++++++ ddclient-3.9.1.tar.gz -> ddclient-3.10.0.tar.gz ++++++
++++ 41772 lines of diff (skipped)
++++++ ddclient-config.patch ++++++
--- /var/tmp/diff_new_pack.LOlQqo/_old 2022-12-30 11:09:05.269301241 +0100
+++ /var/tmp/diff_new_pack.LOlQqo/_new 2022-12-30 11:09:05.273301265 +0100
@@ -1,35 +1,21 @@
-Index: sample-etc_ddclient.conf
-===================================================================
---- sample-etc_ddclient.conf.orig
-+++ sample-etc_ddclient.conf
-@@ -16,12 +16,16 @@
- ## are mentioned here.
- ##
+--- ddclient-3.10.0/ddclient.conf.in.bak 2022-12-27 12:41:54.160794070 +0100
++++ ddclient-3.10.0/ddclient.conf.in 2022-12-27 12:43:39.501317859 +0100
+@@ -18,10 +18,10 @@
######################################################################
-+# daemon: consider to use /etc/sysconfig/ddclient instead of modifying here
-+#
daemon=300 # check every 300 seconds
-+#
-+######################################################################
syslog=yes # log update msgs to syslog
-mail=root # mail all msgs to root
+#mail=root # mail all msgs to root
- mail-failure=root # mail failed update msgs to root
--pid=/var/run/ddclient.pid # record PID in file.
+ mail-failure=root # mail failed update msgs to root
+-pid=@runstatedir@/ddclient.pid # record PID in file.
-ssl=yes # use ssl-support. Works with
+pid=/run/ddclient/ddclient.pid # record PID in file.
+ssl=no # use ssl-support. Works with
- # ssl-library
- # postscript=script # run script after updating. The
- # new IP is added as argument.
-@@ -54,10 +58,18 @@ ssl=yes # use ssl-support. Works wi
- ## get banned from their service.
- #use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address
+ # ssl-library
+ # postscript=script # run script after updating. The
+ # new IP is added as argument.
+@@ -56,6 +56,9 @@
#
-+######################################################################
-+# you do not need to define use= if you are using DSL (ppp0)
-+# rc.ddclient is using "use=if, if=ppp0" as default
-+#
#use=ip, ip=127.0.0.1 # via static IP's
#use=if, if=eth0 # via interfaces
+#use=if, if=ippp0 # when using ISDN
@@ -37,38 +23,23 @@
+#use=if, if=tun0 # when using tunnel device
#use=web # via web
#
-+######################################################################
#protocol=dyndns2 # default protocol
- #proxy=fasthttp.sympatico.ca:80 # default proxy
- #server=members.dyndns.org # default server
-@@ -70,6 +82,16 @@ ssl=yes # use ssl-support. Works wi
+@@ -69,6 +72,17 @@
+ #backupmx=yes|no # host is primary MX?
#wildcard=yes|no # add wildcard CNAME?
- ##
+## selfhost dynamic addresses
+## http://cms.selfhost.de/cgi-bin/selfhost?p=faq&show=113
+##
-+# server=carol.selfhost.de, \
-+# protocol=dyndns2, \
-+# login=your-selfhost-login, \
-+# password=your-selfhost-password \
++# server=carol.selfhost.de, \
++# protocol=dyndns2, \
++# login=your-selfhost-login, \
++# password=your-selfhost-password \
+# your.selfhost.bz
+
+##
++
+ ##
## dyndns.org dynamic addresses
##
- ## (supports variables: wildcard,mx,backupmx)
-Index: ddclient
-===================================================================
---- ddclient.orig
-+++ ddclient
-@@ -33,7 +33,7 @@ my $program = $programd;
- $program =~ s/d$//;
- my $now = time;
- my $hostname = hostname();
--my $etc = ($program =~ /test/i) ? './' : '/etc/ddclient/';
-+my $etc = ($program =~ /test/i) ? './' : '/etc/';
- my $cachedir = ($program =~ /test/i) ? './' : '/var/cache/ddclient/';
- my $savedir = ($program =~ /test/i) ? 'URL/' : '/tmp/';
- my $msgs = '';
++++++ ddclient-delay-main-process-for-systemd.patch ++++++
--- /var/tmp/diff_new_pack.LOlQqo/_old 2022-12-30 11:09:05.285301337 +0100
+++ /var/tmp/diff_new_pack.LOlQqo/_new 2022-12-30 11:09:05.289301360 +0100
@@ -1,13 +1,11 @@
-Index: ddclient
-===================================================================
---- ddclient.orig
-+++ ddclient
-@@ -847,6 +847,7 @@ if (opt('foreground') || opt('force')) {
- print STDERR "${program}: can not fork ($!)\n";
- exit -1;
- } elsif ($pid) {
-+ sleep(1);
- exit 0;
- }
- $SIG{'CHLD'} = 'DEFAULT';
+--- ddclient-3.10.0/ddclient.in.bak 2022-12-27 12:47:57.318599529 +0100
++++ ddclient-3.10.0/ddclient.in 2022-12-27 12:48:06.902647037 +0100
+@@ -1051,6 +1051,7 @@
+ print STDERR "${program}: can not fork ($!)\n";
+ exit -1;
+ } elsif ($pid) {
++ sleep(1);
+ exit 0;
+ }
+ $SIG{'CHLD'} = 'DEFAULT';
++++++ disable-ip-test.patch ++++++
--- ddclient-3.10.0/Makefile.am.bak 2022-12-27 13:47:28.996235989 +0100
+++ ddclient-3.10.0/Makefile.am 2022-12-27 13:47:34.848264936 +0100
@@ -69,7 +69,6 @@
-I'$(abs_top_srcdir)'/t/lib \
-MDevel::Autoflush
handwritten_tests = \
- t/get_ip_from_if.pl \
t/geturl_ssl.pl \
t/is-and-extract-ipv4.pl \
t/is-and-extract-ipv6.pl \
++++++ fix-configure_ac.patch ++++++
--- ddclient-3.10.0/configure.ac.bak 2022-12-27 13:40:09.982064952 +0100
+++ ddclient-3.10.0/configure.ac 2022-12-27 13:39:58.258006975 +0100
@@ -1,5 +1,5 @@
AC_PREREQ([2.63])
-AC_INIT([ddclient], [3.10.0_2])
+AC_INIT([ddclient], [3.10.0])
AC_CONFIG_SRCDIR([ddclient.in])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package neovim for openSUSE:Factory checked in at 2022-12-30 11:08:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/neovim (Old)
and /work/SRC/openSUSE:Factory/.neovim.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "neovim"
Fri Dec 30 11:08:46 2022 rev:48 rq:1045759 version:0.8.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/neovim/neovim.changes 2022-12-20 20:21:51.438328796 +0100
+++ /work/SRC/openSUSE:Factory/.neovim.new.1563/neovim.changes 2022-12-30 11:09:03.509290720 +0100
@@ -1,0 +2,33 @@
+Thu Dec 29 22:31:16 UTC 2022 - Matej Cepl <mcepl(a)suse.com>
+
+- Update to version 0.8.2:
+ - This primarily a bug fix release but some improvements to
+ documentation has been back-ported as well.
+ - Features
+ help: Highlighted codeblocks
+ - Documentation
+ - lua: Add guide to using Lua in Neovim
+ - Mention how to remove the "How-to disable mouse" menu item
+ - Fix order of numbers in syntax.txt
+ - lua: Correct the tags for vim.opt_local and vim.opt_global
+ - Bug Fixes
+ - api: Set correct curbuf when temporarily changing curwin
+ - api: "emsg_silent" should imply "silent" in nvim_cmd
+ - decoration: Do not reset must_redraw after calling
+ providers
+ - diagnostic: Clear stale cache on reset
+ - events: Save v:event for cmdline autocommands separately
+ - float: Fix ml_get error with bufpos
+ - float: Fix crash with bufpos and non-existent window
+ - folds: Use long for number of folded lines
+ - mappings: Use all buckets in second round of unmap
+ - memory: Fix memory alignment for dynamic allocation
+ - options: Fix local 'sidescrolloff' doesn't work for mouse
+ - options: Restore exists() behavior for options
+ - terminal: Fix 'mousescroll' not respected in terminal mode
+ - tui: Set cursor color parameter as string when required
+ - win_close: Remove float grid after closing buffer
+ - Build System Fixes
+ - Restrict git describe to top level source directory
+
+-------------------------------------------------------------------
Old:
----
neovim-0.8.1.tar.gz
New:
----
neovim-0.8.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ neovim.spec ++++++
--- /var/tmp/diff_new_pack.w4kba3/_old 2022-12-30 11:09:04.217294951 +0100
+++ /var/tmp/diff_new_pack.w4kba3/_new 2022-12-30 11:09:04.221294976 +0100
@@ -26,7 +26,7 @@
%define luaver 5.1
%define luaver_nopoint 51
Name: neovim
-Version: 0.8.1
+Version: 0.8.2
Release: 0
Summary: Vim-fork focused on extensibility and agility
License: Apache-2.0 AND Vim
++++++ neovim-0.8.1.tar.gz -> neovim-0.8.2.tar.gz ++++++
/work/SRC/openSUSE:Factory/neovim/neovim-0.8.1.tar.gz /work/SRC/openSUSE:Factory/.neovim.new.1563/neovim-0.8.2.tar.gz differ: char 15, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-dj-database-url for openSUSE:Factory checked in at 2022-12-30 11:08:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dj-database-url (Old)
and /work/SRC/openSUSE:Factory/.python-dj-database-url.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dj-database-url"
Fri Dec 30 11:08:45 2022 rev:7 rq:1045761 version:1.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-dj-database-url/python-dj-database-url.changes 2020-11-23 10:42:40.734134653 +0100
+++ /work/SRC/openSUSE:Factory/.python-dj-database-url.new.1563/python-dj-database-url.changes 2022-12-30 11:09:02.689285817 +0100
@@ -1,0 +2,24 @@
+Thu Dec 22 19:19:28 UTC 2022 - Torsten Gruner <simmphonie(a)opensuse.org>
+
+- Update to version 1.2.0
+ * Add the ability to add test databases.
+ * Improve url parsing and encoding.
+ * Fix missing parameter conn_health_check in check function.
+- Version 1.1.0
+ * Option for connection health checks parameter.
+ * Update supported version python 3.11.
+ * Code changes, various improvments.
+ * Add project links to setup.py
+
+-------------------------------------------------------------------
+Sun Jul 31 14:37:49 UTC 2022 - Torsten Gruner <simmphonie(a)opensuse.org>
+
+- Update to 1.0.0
+ * Add support for cockroachdb.
+ * Add support for the offical MSSQL connector.
+ * Update License to be compatible with Jazzband.
+ * Remove support for Python < 3.5 including Python 2.7
+ * Update source code to Black format.
+ * Update CI using pre-commit
+
+-------------------------------------------------------------------
Old:
----
v0.5.0.tar.gz
New:
----
dj-database-url-1.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-dj-database-url.spec ++++++
--- /var/tmp/diff_new_pack.ksYj5L/_old 2022-12-30 11:09:03.069288089 +0100
+++ /var/tmp/diff_new_pack.ksYj5L/_new 2022-12-30 11:09:03.073288113 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-dj-database-url
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,20 +16,26 @@
#
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-dj-database-url
-Version: 0.5.0
+Version: 1.2.0
Release: 0
Summary: Utility to use database URLs in Django applications
License: BSD-3-Clause
Group: Development/Languages/Python
-URL: https://github.com/kennethreitz/dj-database-url
-Source: https://github.com/kennethreitz/dj-database-url/archive/v%{version}.tar.gz
-BuildRequires: %{python_module Django}
-BuildRequires: %{python_module pytest}
+URL: https://github.com/jazzband/dj-database-url
+Source: https://files.pythonhosted.org/packages/source/d/dj-database-url/dj-databas…
+BuildRequires: %{python_module Django > 3.2}
+BuildRequires: %{python_module devel >= 3.6}
+BuildRequires: %{python_module packaging}
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
+Requires: python-Django > 3.2
+%if 0%{?python_version_nodots} < 38
+Requires: python-typing_extensions >= 3.10
+%endif
BuildArch: noarch
%python_subpackages
@@ -54,18 +60,17 @@
%setup -q -n dj-database-url-%{version}
%build
-%python_build
+%pyproject_wheel
%install
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
-%check
-%pytest
-
%files %{python_files}
%license LICENSE
%doc README.rst
-%{python_sitelib}/*
+%{python_sitelib}/dj_database_url.py
+%{python_sitelib}/dj_database_url-%{version}.dist-info
+%pycache_only %{python_sitelib}/__pycache__
%changelog
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-phonenumbers for openSUSE:Factory checked in at 2022-12-30 11:08:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-phonenumbers (Old)
and /work/SRC/openSUSE:Factory/.python-phonenumbers.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-phonenumbers"
Fri Dec 30 11:08:44 2022 rev:19 rq:1045760 version:8.13.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-phonenumbers/python-phonenumbers.changes 2022-12-15 19:25:08.076032205 +0100
+++ /work/SRC/openSUSE:Factory/.python-phonenumbers.new.1563/python-phonenumbers.changes 2022-12-30 11:09:01.385278022 +0100
@@ -1,0 +2,6 @@
+Thu Dec 29 12:27:00 UTC 2022 - Michael Str��der <michael(a)stroeder.com>
+
+- Update to version 8.13.3
+ * Metadata changes
+
+-------------------------------------------------------------------
Old:
----
phonenumbers-8.13.2.tar.gz
New:
----
phonenumbers-8.13.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-phonenumbers.spec ++++++
--- /var/tmp/diff_new_pack.tGQZCx/_old 2022-12-30 11:09:01.893281059 +0100
+++ /var/tmp/diff_new_pack.tGQZCx/_new 2022-12-30 11:09:01.897281083 +0100
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-phonenumbers
-Version: 8.13.2
+Version: 8.13.3
Release: 0
Summary: Python version of Google's common library for international phone numbers
License: Apache-2.0
++++++ phonenumbers-8.13.2.tar.gz -> phonenumbers-8.13.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/PKG-INFO new/phonenumbers-8.13.3/PKG-INFO
--- old/phonenumbers-8.13.2/PKG-INFO 2022-12-08 08:05:02.000000000 +0100
+++ new/phonenumbers-8.13.3/PKG-INFO 2022-12-22 09:55:17.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: phonenumbers
-Version: 8.13.2
+Version: 8.13.3
Summary: Python version of Google's common library for parsing, formatting, storing and validating international phone numbers.
Home-page: https://github.com/daviddrysdale/python-phonenumbers
Author: David Drysdale
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/__init__.py new/phonenumbers-8.13.3/phonenumbers/__init__.py
--- old/phonenumbers-8.13.2/phonenumbers/__init__.py 2022-12-08 07:43:29.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/__init__.py 2022-12-22 09:50:31.000000000 +0100
@@ -146,7 +146,7 @@
# Version number is taken from the upstream libphonenumber version
# together with an indication of the version of the Python-specific code.
-__version__ = "8.13.2"
+__version__ = "8.13.3"
__all__ = ['PhoneNumber', 'CountryCodeSource', 'FrozenPhoneNumber',
'REGION_CODE_FOR_NON_GEO_ENTITY', 'NumberFormat', 'PhoneNumberDesc', 'PhoneMetadata',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/carrierdata/data0.py new/phonenumbers-8.13.3/phonenumbers/carrierdata/data0.py
--- old/phonenumbers-8.13.2/phonenumbers/carrierdata/data0.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/carrierdata/data0.py 2022-12-22 09:50:31.000000000 +0100
@@ -3513,10 +3513,10 @@
'4207702':{'en': 'Vodafone'},
'4207703':{'en': 'Vodafone'},
'4207704':{'en': 'Vodafone'},
+ '4207705':{'en': 'O2'},
'42077050':{'en': 'Compatel'},
'42077051':{'en': '3ton s.r.o.'},
'42077052':{'en': '3ton s.r.o.'},
- '42077055':{'en': 'ASTELNET'},
'4207706':{'en': 'Vodafone'},
'42077070':{'en': 'O2'},
'42077071':{'en': 'Cesky bezdrat'},
@@ -3577,6 +3577,12 @@
'42079191':{'en': 'T-Mobile'},
'42079192':{'en': '3ton s.r.o.'},
'42079193':{'en': 'GOPE Systems a.s.'},
+ '42079194':{'en': 'O2'},
+ '42079195':{'en': 'O2'},
+ '42079196':{'en': 'O2'},
+ '42079197':{'en': 'O2'},
+ '42079198':{'en': 'O2'},
+ '42079199':{'en': 'O2'},
'420792':{'en': 'O2'},
'42079234':{'en': 'Tesco Mobile CR'},
'42079235':{'en': 'Tesco Mobile CR'},
@@ -3718,6 +3724,8 @@
'4473684':{'en': 'Sky'},
'4473685':{'en': 'Sky'},
'4473686':{'en': 'Sky'},
+ '4473690':{'en': 'Telet Research'},
+ '4473692':{'en': 'Sky'},
'4473699':{'en': 'Anywhere Sim'},
'447375':{'en': 'EE'},
'447376':{'en': 'EE'},
@@ -10011,12 +10019,4 @@
'553199744':{'en': 'Telemig Celular'},
'553199745':{'en': 'Telemig Celular'},
'553199746':{'en': 'Telemig Celular'},
- '553199747':{'en': 'Telemig Celular'},
- '553199748':{'en': 'Telemig Celular'},
- '553199749':{'en': 'Telemig Celular'},
- '553199751':{'en': 'Telemig Celular'},
- '553199752':{'en': 'Telemig Celular'},
- '553199753':{'en': 'Telemig Celular'},
- '553199755':{'en': 'Telemig Celular'},
- '553199756':{'en': 'Telemig Celular'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/carrierdata/data1.py new/phonenumbers-8.13.3/phonenumbers/carrierdata/data1.py
--- old/phonenumbers-8.13.2/phonenumbers/carrierdata/data1.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/carrierdata/data1.py 2022-12-22 09:50:31.000000000 +0100
@@ -19,6 +19,14 @@
# limitations under the License.
data = {
+ '553199747':{'en': 'Telemig Celular'},
+ '553199748':{'en': 'Telemig Celular'},
+ '553199749':{'en': 'Telemig Celular'},
+ '553199751':{'en': 'Telemig Celular'},
+ '553199752':{'en': 'Telemig Celular'},
+ '553199753':{'en': 'Telemig Celular'},
+ '553199755':{'en': 'Telemig Celular'},
+ '553199756':{'en': 'Telemig Celular'},
'553199757':{'en': 'Telemig Celular'},
'553199758':{'en': 'Telemig Celular'},
'553199759':{'en': 'Telemig Celular'},
@@ -10011,12 +10019,4 @@
'57305265':{'en': 'Tigo'},
'57305266':{'en': 'Tigo'},
'573052670':{'en': 'Tigo'},
- '573052671':{'en': 'Tigo'},
- '5730527':{'en': 'Tigo'},
- '5730528':{'en': 'Tigo'},
- '5730529':{'en': 'Tigo'},
- '573053':{'en': 'Tigo'},
- '5730540':{'en': 'Movil Exito'},
- '5730541':{'en': 'Movil Exito'},
- '5730542':{'en': 'Movil Exito'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/carrierdata/data2.py new/phonenumbers-8.13.3/phonenumbers/carrierdata/data2.py
--- old/phonenumbers-8.13.2/phonenumbers/carrierdata/data2.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/carrierdata/data2.py 2022-12-22 09:50:31.000000000 +0100
@@ -19,6 +19,14 @@
# limitations under the License.
data = {
+ '573052671':{'en': 'Tigo'},
+ '5730527':{'en': 'Tigo'},
+ '5730528':{'en': 'Tigo'},
+ '5730529':{'en': 'Tigo'},
+ '573053':{'en': 'Tigo'},
+ '5730540':{'en': 'Movil Exito'},
+ '5730541':{'en': 'Movil Exito'},
+ '5730542':{'en': 'Movil Exito'},
'5730543':{'en': 'Movil Exito'},
'5730544':{'en': 'Movil Exito'},
'5730545':{'en': 'Movil Exito'},
@@ -1079,6 +1087,7 @@
'658056':{'en': 'Simba'},
'658057':{'en': 'Simba'},
'658058':{'en': 'Simba'},
+ '658059':{'en': 'M1'},
'65806':{'en': 'Simba'},
'6581':{'en': 'StarHub'},
'65810':{'en': 'M1'},
@@ -4352,8 +4361,8 @@
'882342':{'en': 'BebbiCell AG'},
'882347':{'en': 'BebbiCell AG'},
'88237':{'en': 'AT&T Cingular Wireless Network'},
- '8824':{'en': 'Monaco Telecom'},
- '8825':{'en': 'Phonegroup'},
+ '88249':{'en': 'Monaco Telecom'},
+ '88250':{'en': 'Phonegroup'},
'8864000':{'en': 'Chunghwa Telecom'},
'886900':{'en': 'FarEasTone'},
'8869006':{'en': 'Chunghwa Telecom'},
@@ -7990,6 +7999,7 @@
'96771':{'en': 'SabaFon'},
'96773':{'en': 'MTN'},
'96777':{'en': 'Yemen Mobile'},
+ '96778':{'en': 'Yemen Mobile'},
'9681':{'en': 'Ooredoo'},
'96871':{'en': 'Omantel'},
'96872':{'en': 'Omantel'},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_882.py new/phonenumbers-8.13.3/phonenumbers/data/region_882.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_882.py 2022-12-08 07:43:24.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_882.py 2022-12-22 09:50:27.000000000 +0100
@@ -2,15 +2,15 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_882 = PhoneMetadata(id='001', country_code=882, international_prefix=None,
- general_desc=PhoneNumberDesc(national_number_pattern='[13]\\d{6}(?:\\d{2,5})?|(?:285|50\\d)\\d{9}|(?:[19]\\d|49)\\d{6}', possible_length=(7, 8, 9, 10, 11, 12)),
+ general_desc=PhoneNumberDesc(national_number_pattern='[13]\\d{6}(?:\\d{2,5})?|[19]\\d{7}|(?:[25]\\d\\d|4)\\d{7}(?:\\d{2})?', possible_length=(7, 8, 9, 10, 11, 12)),
mobile=PhoneNumberDesc(national_number_pattern='342\\d{4}|(?:337|49)\\d{6}|(?:3(?:2|47|7\\d{3})|50\\d{3})\\d{7}', example_number='3421234', possible_length=(7, 8, 9, 10, 12)),
- voip=PhoneNumberDesc(national_number_pattern='1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:(?:285\\d\\d|3(?:45|[69]\\d{3}))\\d|9[89])\\d{6}', example_number='390123456789', possible_length=(7, 8, 9, 10, 11, 12)),
+ voip=PhoneNumberDesc(national_number_pattern='1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:345\\d|9[89])\\d{6}|(?:10|2(?:3|85\\d)|3(?:[15]|[69]\\d\\d)|4[15-8]|51)\\d{8}', example_number='390123456789', possible_length=(7, 8, 9, 10, 11, 12)),
voicemail=PhoneNumberDesc(national_number_pattern='348[57]\\d{7}', example_number='34851234567', possible_length=(11,)),
number_format=[NumberFormat(pattern='(\\d{2})(\\d{5})', format='\\1 \\2', leading_digits_pattern=['16|342']),
- NumberFormat(pattern='(\\d{2})(\\d{6})', format='\\1 \\2', leading_digits_pattern=['4']),
- NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['[19]']),
+ NumberFormat(pattern='(\\d{2})(\\d{6})', format='\\1 \\2', leading_digits_pattern=['49']),
+ NumberFormat(pattern='(\\d{2})(\\d{2})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['1[36]|9']),
NumberFormat(pattern='(\\d{2})(\\d{4})(\\d{3})', format='\\1 \\2 \\3', leading_digits_pattern=['3[23]']),
- NumberFormat(pattern='(\\d{2})(\\d{3,4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['1']),
- NumberFormat(pattern='(\\d{2})(\\d{4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['34[57]']),
+ NumberFormat(pattern='(\\d{2})(\\d{3,4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['16']),
+ NumberFormat(pattern='(\\d{2})(\\d{4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['10|23|3(?:[15]|4[57])|4|51']),
NumberFormat(pattern='(\\d{3})(\\d{4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['34']),
NumberFormat(pattern='(\\d{2})(\\d{4,5})(\\d{5})', format='\\1 \\2 \\3', leading_digits_pattern=['[1-35]'])])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_883.py new/phonenumbers-8.13.3/phonenumbers/data/region_883.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_883.py 2022-12-08 07:43:24.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_883.py 2022-12-22 09:50:27.000000000 +0100
@@ -2,9 +2,10 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_883 = PhoneMetadata(id='001', country_code=883, international_prefix=None,
- general_desc=PhoneNumberDesc(national_number_pattern='2\\d{9}(?:\\d{2})?|51\\d{7}|(?:370|51\\d)\\d{9}', possible_length=(9, 10, 12)),
- voip=PhoneNumberDesc(national_number_pattern='(?:2(?:00\\d\\d|10)|(?:370[1-9]|51[013]0)\\d)\\d{7}|5100\\d{5}', example_number='510012345', possible_length=(9, 10, 12)),
- number_format=[NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3', leading_digits_pattern=['510']),
+ general_desc=PhoneNumberDesc(national_number_pattern='(?:[1-4]\\d|51)\\d{6,10}', possible_length=(8, 9, 10, 11, 12)),
+ voip=PhoneNumberDesc(national_number_pattern='(?:2(?:00\\d\\d|10)|(?:370[1-9]|51\\d0)\\d)\\d{7}|51(?:00\\d{5}|[24-9]0\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\d{5,9}', example_number='510012345', possible_length=(8, 9, 10, 11, 12)),
+ number_format=[NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{2,8})', format='\\1 \\2 \\3', leading_digits_pattern=['[14]|2[24-689]|3[02-689]|51[24-9]']),
+ NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3', leading_digits_pattern=['510']),
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['21']),
NumberFormat(pattern='(\\d{4})(\\d{4})(\\d{4})', format='\\1 \\2 \\3', leading_digits_pattern=['51[13]']),
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3 \\4', leading_digits_pattern=['[235]'])])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_AT.py new/phonenumbers-8.13.3/phonenumbers/data/region_AT.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_AT.py 2022-12-08 07:43:24.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_AT.py 2022-12-22 09:50:27.000000000 +0100
@@ -11,7 +11,8 @@
voip=PhoneNumberDesc(national_number_pattern='5(?:0[1-9]|17|[79]\\d)\\d{2,10}|7[28]0\\d{6,10}', example_number='780123456', possible_length=(5, 6, 7, 8, 9, 10, 11, 12, 13)),
national_prefix='0',
national_prefix_for_parsing='0',
- number_format=[NumberFormat(pattern='(\\d)(\\d{3,12})', format='\\1 \\2', leading_digits_pattern=['1(?:11|[2-9])'], national_prefix_formatting_rule='0\\1'),
+ number_format=[NumberFormat(pattern='(\\d{4})', format='\\1', leading_digits_pattern=['14']),
+ NumberFormat(pattern='(\\d)(\\d{3,12})', format='\\1 \\2', leading_digits_pattern=['1(?:11|[2-9])'], national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d{3})(\\d{2})', format='\\1 \\2', leading_digits_pattern=['517'], national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d{2})(\\d{3,5})', format='\\1 \\2', leading_digits_pattern=['5[079]'], national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d{6})', format='\\1', leading_digits_pattern=['[18]']),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_GP.py new/phonenumbers-8.13.3/phonenumbers/data/region_GP.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_GP.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_GP.py 2022-12-22 09:50:27.000000000 +0100
@@ -3,7 +3,7 @@
PHONE_METADATA_GP = PhoneMetadata(id='GP', country_code=590, international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='(?:590|(?:69|80)\\d|976)\\d{6}', possible_length=(9,)),
- fixed_line=PhoneNumberDesc(national_number_pattern='590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1289]|5[3-579]|6[0-289]|7[08]|8[0-689]|9\\d)\\d{4}', example_number='590201234', possible_length=(9,)),
+ fixed_line=PhoneNumberDesc(national_number_pattern='590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1289]|5[3-579]|6[0-389]|7[08]|8[0-689]|9\\d)\\d{4}', example_number='590201234', possible_length=(9,)),
mobile=PhoneNumberDesc(national_number_pattern='69(?:0\\d\\d|1(?:2[2-9]|3[0-5]))\\d{4}', example_number='690001234', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='80[0-5]\\d{6}', example_number='800012345', possible_length=(9,)),
voip=PhoneNumberDesc(national_number_pattern='976[01]\\d{5}', example_number='976012345', possible_length=(9,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_MX.py new/phonenumbers-8.13.3/phonenumbers/data/region_MX.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_MX.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_MX.py 2022-12-22 09:50:27.000000000 +0100
@@ -2,9 +2,9 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_MX = PhoneMetadata(id='MX', country_code=52, international_prefix='0[09]',
- general_desc=PhoneNumberDesc(national_number_pattern='1(?:(?:44|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[017]\\d|[235][1-9]|4[0-35-9]|6[0-46-9]|8[1-79]|9[1-8])|[2-9]\\d)\\d{8}', possible_length=(10, 11), possible_length_local_only=(7, 8)),
- fixed_line=PhoneNumberDesc(national_number_pattern='657[12]\\d{6}|(?:2(?:0[01]|2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', example_number='2001234567', possible_length=(10,), possible_length_local_only=(7, 8)),
- mobile=PhoneNumberDesc(national_number_pattern='657[12]\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', example_number='12221234567', possible_length=(10, 11), possible_length_local_only=(7, 8)),
+ general_desc=PhoneNumberDesc(national_number_pattern='1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\d{7}|(?:1(?:[01]\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\d)\\d{8}', possible_length=(10, 11), possible_length_local_only=(7, 8)),
+ fixed_line=PhoneNumberDesc(national_number_pattern='657[12]\\d{6}|(?:2(?:0[01]|2\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', example_number='2001234567', possible_length=(10,), possible_length_local_only=(7, 8)),
+ mobile=PhoneNumberDesc(national_number_pattern='657[12]\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\d|8[1-35-9]|9[2-689])|5(?:[56]\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\d))\\d{7}', example_number='12221234567', possible_length=(10, 11), possible_length_local_only=(7, 8)),
toll_free=PhoneNumberDesc(national_number_pattern='8(?:00|88)\\d{7}', example_number='8001234567', possible_length=(10,)),
premium_rate=PhoneNumberDesc(national_number_pattern='900\\d{7}', example_number='9001234567', possible_length=(10,)),
shared_cost=PhoneNumberDesc(national_number_pattern='300\\d{7}', example_number='3001234567', possible_length=(10,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_QA.py new/phonenumbers-8.13.3/phonenumbers/data/region_QA.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_QA.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_QA.py 2022-12-22 09:50:27.000000000 +0100
@@ -2,10 +2,10 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_QA = PhoneMetadata(id='QA', country_code=974, international_prefix='00',
- general_desc=PhoneNumberDesc(national_number_pattern='[2-7]\\d{7}|800\\d{4}(?:\\d{2})?|2\\d{6}', possible_length=(7, 8, 9)),
- fixed_line=PhoneNumberDesc(national_number_pattern='414[1-4]\\d{4}|(?:23|4[04])\\d{6}', example_number='44123456', possible_length=(8,)),
+ general_desc=PhoneNumberDesc(national_number_pattern='(?:0080|[2-7])\\d{7}|800\\d{4}(?:\\d{2})?|2\\d{6}', possible_length=(7, 8, 9, 11)),
+ fixed_line=PhoneNumberDesc(national_number_pattern='4(?:1111|2022)\\d{3}|(?:23\\d\\d|4(?:[04]\\d\\d|14[0-6]|999))\\d{4}', example_number='44123456', possible_length=(8,)),
mobile=PhoneNumberDesc(national_number_pattern='(?:2[89]|[35-7]\\d)\\d{6}', example_number='33123456', possible_length=(8,)),
- toll_free=PhoneNumberDesc(national_number_pattern='800\\d{4}(?:\\d{2})?', example_number='8001234', possible_length=(7, 9)),
+ toll_free=PhoneNumberDesc(national_number_pattern='800\\d{4}|(?:0080[01]|800)\\d{6}', example_number='8001234', possible_length=(7, 9, 11)),
pager=PhoneNumberDesc(national_number_pattern='2(?:[12]\\d|61)\\d{4}', example_number='2123456', possible_length=(7,)),
number_format=[NumberFormat(pattern='(\\d{3})(\\d{4})', format='\\1 \\2', leading_digits_pattern=['2[126]|8']),
NumberFormat(pattern='(\\d{4})(\\d{4})', format='\\1 \\2', leading_digits_pattern=['[2-7]'])],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_RE.py new/phonenumbers-8.13.3/phonenumbers/data/region_RE.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_RE.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_RE.py 2022-12-22 09:50:27.000000000 +0100
@@ -3,7 +3,7 @@
PHONE_METADATA_RE = PhoneMetadata(id='RE', country_code=262, international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='976\\d{6}|(?:26|[68]\\d)\\d{7}', possible_length=(9,)),
- fixed_line=PhoneNumberDesc(national_number_pattern='26(?:2\\d\\d|3(?:0\\d|1[01]))\\d{4}', example_number='262161234', possible_length=(9,)),
+ fixed_line=PhoneNumberDesc(national_number_pattern='26(?:2\\d\\d|3(?:0\\d|1[0-2]))\\d{4}', example_number='262161234', possible_length=(9,)),
mobile=PhoneNumberDesc(national_number_pattern='(?:69(?:2\\d\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|976(?:2[27]|3[0-37]|9\\d))\\d{4}', example_number='692123456', possible_length=(9,)),
toll_free=PhoneNumberDesc(national_number_pattern='80\\d{7}', example_number='801234567', possible_length=(9,)),
premium_rate=PhoneNumberDesc(national_number_pattern='89[1-37-9]\\d{6}', example_number='891123456', possible_length=(9,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_SG.py new/phonenumbers-8.13.3/phonenumbers/data/region_SG.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_SG.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_SG.py 2022-12-22 09:50:27.000000000 +0100
@@ -4,7 +4,7 @@
PHONE_METADATA_SG = PhoneMetadata(id='SG', country_code=65, international_prefix='0[0-3]\\d',
general_desc=PhoneNumberDesc(national_number_pattern='(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}', possible_length=(8, 10, 11)),
fixed_line=PhoneNumberDesc(national_number_pattern='662[0-24-9]\\d{4}|6(?:[0-578]\\d|6[013-57-9]|9[0-35-9])\\d{5}', example_number='61234567', possible_length=(8,)),
- mobile=PhoneNumberDesc(national_number_pattern='(?:8(?:0(?:[1-4]\\d|5[0-8]|6[0-6])|[1-8]\\d\\d|9(?:[0-4]\\d|5[0-2]))|9[0-8]\\d\\d)\\d{4}', example_number='81234567', possible_length=(8,)),
+ mobile=PhoneNumberDesc(national_number_pattern='8(?:06[0-6]|95[0-2])\\d{4}|(?:8(?:0[1-5]|[1-8]\\d|9[0-4])|9[0-8]\\d)\\d{5}', example_number='81234567', possible_length=(8,)),
toll_free=PhoneNumberDesc(national_number_pattern='(?:18|8)00\\d{7}', example_number='18001234567', possible_length=(10, 11)),
premium_rate=PhoneNumberDesc(national_number_pattern='1900\\d{7}', example_number='19001234567', possible_length=(11,)),
voip=PhoneNumberDesc(national_number_pattern='(?:3[12]\\d|666)\\d{5}', example_number='31234567', possible_length=(8,)),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/data/region_YE.py new/phonenumbers-8.13.3/phonenumbers/data/region_YE.py
--- old/phonenumbers-8.13.2/phonenumbers/data/region_YE.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/data/region_YE.py 2022-12-22 09:50:27.000000000 +0100
@@ -4,8 +4,8 @@
PHONE_METADATA_YE = PhoneMetadata(id='YE', country_code=967, international_prefix='00',
general_desc=PhoneNumberDesc(national_number_pattern='(?:1|7\\d)\\d{7}|[1-7]\\d{6}', possible_length=(7, 8, 9), possible_length_local_only=(6,)),
fixed_line=PhoneNumberDesc(national_number_pattern='78[0-7]\\d{4}|17\\d{6}|(?:[12][2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-6])\\d{5}', example_number='1234567', possible_length=(7, 8), possible_length_local_only=(6,)),
- mobile=PhoneNumberDesc(national_number_pattern='7[0137]\\d{7}', example_number='712345678', possible_length=(9,)),
+ mobile=PhoneNumberDesc(national_number_pattern='7[01378]\\d{7}', example_number='712345678', possible_length=(9,)),
national_prefix='0',
national_prefix_for_parsing='0',
- number_format=[NumberFormat(pattern='(\\d)(\\d{3})(\\d{3,4})', format='\\1 \\2 \\3', leading_digits_pattern=['[1-6]|7[24-68]'], national_prefix_formatting_rule='0\\1'),
+ number_format=[NumberFormat(pattern='(\\d)(\\d{3})(\\d{3,4})', format='\\1 \\2 \\3', leading_digits_pattern=['[1-6]|7(?:[24-6]|8[0-7])'], national_prefix_formatting_rule='0\\1'),
NumberFormat(pattern='(\\d{3})(\\d{3})(\\d{3})', format='\\1 \\2 \\3', leading_digits_pattern=['7'], national_prefix_formatting_rule='0\\1')])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data10.py new/phonenumbers-8.13.3/phonenumbers/geodata/data10.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data10.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data10.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '61348110':{'en': 'Moulamein'},
+ '61348111':{'en': 'Nathalia'},
'61348112':{'en': 'Numurkah'},
'61348113':{'en': 'Picola'},
'61348114':{'en': 'Rushworth'},
@@ -10017,6 +10019,4 @@
'61389032':{'en': 'Dandenong'},
'61390':{'en': 'Melbourne'},
'61390070':{'en': 'Eltham'},
- '61390090':{'en': 'Eltham'},
- '61390091':{'en': 'Eltham'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data11.py new/phonenumbers-8.13.3/phonenumbers/geodata/data11.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data11.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data11.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '61390090':{'en': 'Eltham'},
+ '61390091':{'en': 'Eltham'},
'61390092':{'en': 'Eltham'},
'6139100':{'en': 'Melbourne'},
'61391011':{'en': 'Melbourne'},
@@ -10017,6 +10019,4 @@
'61749743':{'en': 'Turkey Beach'},
'61749744':{'en': 'Miriam Vale'},
'61749745':{'en': 'Miriam Vale'},
- '61749746':{'en': 'Miriam Vale'},
- '61749747':{'en': 'Agnes Water'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data12.py new/phonenumbers-8.13.3/phonenumbers/geodata/data12.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data12.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data12.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '61749746':{'en': 'Miriam Vale'},
+ '61749747':{'en': 'Agnes Water'},
'61749748':{'en': 'Gayfield'},
'61749749':{'en': 'Agnes Water'},
'6174975':{'en': 'Calliope'},
@@ -10017,6 +10019,4 @@
'618854901':{'en': 'Mypolonga'},
'618854902':{'en': 'Mypolonga'},
'618854903':{'en': 'Mypolonga'},
- '618854904':{'en': 'Mypolonga'},
- '618854905':{'en': 'Mypolonga'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data13.py new/phonenumbers-8.13.3/phonenumbers/geodata/data13.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data13.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data13.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '618854904':{'en': 'Mypolonga'},
+ '618854905':{'en': 'Mypolonga'},
'618854906':{'en': 'Mypolonga'},
'618854907':{'en': 'Mypolonga'},
'618854908':{'en': 'Mypolonga'},
@@ -10017,6 +10019,4 @@
'618989353':{'en': 'Beaufort River'},
'618989356':{'en': 'Beaufort River'},
'618989357':{'en': 'Beaufort River'},
- '618989358':{'en': 'Beaufort River'},
- '618989360':{'en': 'Dongolocking'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data14.py new/phonenumbers-8.13.3/phonenumbers/geodata/data14.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data14.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data14.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '618989358':{'en': 'Beaufort River'},
+ '618989360':{'en': 'Dongolocking'},
'618989363':{'en': 'Dongolocking'},
'618989366':{'en': 'Dongolocking'},
'618989367':{'en': 'Dongolocking'},
@@ -10017,6 +10019,4 @@
'861306937':{'en': 'Xinxiang, Henan', 'zh': u('\u6cb3\u5357\u7701\u65b0\u4e61\u5e02')},
'861306938':{'en': 'Xinxiang, Henan', 'zh': u('\u6cb3\u5357\u7701\u65b0\u4e61\u5e02')},
'861306939':{'en': 'Xinxiang, Henan', 'zh': u('\u6cb3\u5357\u7701\u65b0\u4e61\u5e02')},
- '86130694':{'en': 'Jiaozuo, Henan', 'zh': u('\u6cb3\u5357\u7701\u7126\u4f5c\u5e02')},
- '861306950':{'en': 'Xuchang, Henan', 'zh': u('\u6cb3\u5357\u7701\u8bb8\u660c\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data15.py new/phonenumbers-8.13.3/phonenumbers/geodata/data15.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data15.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data15.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '86130694':{'en': 'Jiaozuo, Henan', 'zh': u('\u6cb3\u5357\u7701\u7126\u4f5c\u5e02')},
+ '861306950':{'en': 'Xuchang, Henan', 'zh': u('\u6cb3\u5357\u7701\u8bb8\u660c\u5e02')},
'861306951':{'en': 'Xuchang, Henan', 'zh': u('\u6cb3\u5357\u7701\u8bb8\u660c\u5e02')},
'861306952':{'en': 'Xuchang, Henan', 'zh': u('\u6cb3\u5357\u7701\u8bb8\u660c\u5e02')},
'861306953':{'en': 'Xuchang, Henan', 'zh': u('\u6cb3\u5357\u7701\u8bb8\u660c\u5e02')},
@@ -10017,6 +10019,4 @@
'861323893':{'en': 'Liaoyang, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u8fbd\u9633\u5e02')},
'861323894':{'en': 'Jinzhou, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u9526\u5dde\u5e02')},
'861323895':{'en': 'Huludao, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u846b\u82a6\u5c9b\u5e02')},
- '861323896':{'en': 'Panjin, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u76d8\u9526\u5e02')},
- '861323897':{'en': 'Anshan, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u978d\u5c71\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data16.py new/phonenumbers-8.13.3/phonenumbers/geodata/data16.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data16.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data16.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861323896':{'en': 'Panjin, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u76d8\u9526\u5e02')},
+ '861323897':{'en': 'Anshan, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u978d\u5c71\u5e02')},
'861323898':{'en': 'Anshan, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u978d\u5c71\u5e02')},
'861323899':{'en': 'Anshan, Liaoning', 'zh': u('\u8fbd\u5b81\u7701\u978d\u5c71\u5e02')},
'861323900':{'en': 'Changji, Xinjiang', 'zh': u('\u65b0\u7586\u660c\u5409\u56de\u65cf\u81ea\u6cbb\u5dde')},
@@ -10017,6 +10019,4 @@
'861340325':{'en': 'Tangshan, Hebei', 'zh': u('\u6cb3\u5317\u7701\u5510\u5c71\u5e02')},
'861340326':{'en': 'Baoding, Hebei', 'zh': u('\u6cb3\u5317\u7701\u4fdd\u5b9a\u5e02')},
'861340327':{'en': 'Cangzhou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u6ca7\u5dde\u5e02')},
- '861340328':{'en': 'Hengshui, Hebei', 'zh': u('\u6cb3\u5317\u7701\u8861\u6c34\u5e02')},
- '861340329':{'en': 'Xingtai, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90a2\u53f0\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data17.py new/phonenumbers-8.13.3/phonenumbers/geodata/data17.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data17.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data17.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861340328':{'en': 'Hengshui, Hebei', 'zh': u('\u6cb3\u5317\u7701\u8861\u6c34\u5e02')},
+ '861340329':{'en': 'Xingtai, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90a2\u53f0\u5e02')},
'861340330':{'en': 'Handan, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90af\u90f8\u5e02')},
'861340331':{'en': 'Shijiazhuang, Hebei', 'zh': u('\u6cb3\u5317\u7701\u77f3\u5bb6\u5e84\u5e02')},
'861340332':{'en': 'Baoding, Hebei', 'zh': u('\u6cb3\u5317\u7701\u4fdd\u5b9a\u5e02')},
@@ -10017,6 +10019,4 @@
'861365317':{'en': 'Cangzhou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u6ca7\u5dde\u5e02')},
'861365318':{'en': 'Hengshui, Hebei', 'zh': u('\u6cb3\u5317\u7701\u8861\u6c34\u5e02')},
'861365319':{'en': 'Xingtai, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90a2\u53f0\u5e02')},
- '861365320':{'en': 'Handan, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90af\u90f8\u5e02')},
- '861365321':{'en': 'Shijiazhuang, Hebei', 'zh': u('\u6cb3\u5317\u7701\u77f3\u5bb6\u5e84\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data18.py new/phonenumbers-8.13.3/phonenumbers/geodata/data18.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data18.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data18.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861365320':{'en': 'Handan, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90af\u90f8\u5e02')},
+ '861365321':{'en': 'Shijiazhuang, Hebei', 'zh': u('\u6cb3\u5317\u7701\u77f3\u5bb6\u5e84\u5e02')},
'861365322':{'en': 'Baoding, Hebei', 'zh': u('\u6cb3\u5317\u7701\u4fdd\u5b9a\u5e02')},
'861365323':{'en': 'Zhangjiakou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u5f20\u5bb6\u53e3\u5e02')},
'861365324':{'en': 'Chengde, Hebei', 'zh': u('\u6cb3\u5317\u7701\u627f\u5fb7\u5e02')},
@@ -10017,6 +10019,4 @@
'861394891':{'en': 'Hohhot, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u547c\u548c\u6d69\u7279\u5e02')},
'861394892':{'en': 'Baotou, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u5305\u5934\u5e02')},
'861394893':{'en': 'Hinggan, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u5174\u5b89\u76df')},
- '861394894':{'en': 'Ulanqab, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u4e4c\u5170\u5bdf\u5e03\u5e02')},
- '861394895':{'en': 'Tongliao, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u901a\u8fbd\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data19.py new/phonenumbers-8.13.3/phonenumbers/geodata/data19.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data19.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data19.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861394894':{'en': 'Ulanqab, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u4e4c\u5170\u5bdf\u5e03\u5e02')},
+ '861394895':{'en': 'Tongliao, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u901a\u8fbd\u5e02')},
'861394896':{'en': 'Chifeng, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u8d64\u5cf0\u5e02')},
'861394897':{'en': 'Hinggan, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u5174\u5b89\u76df')},
'861394898':{'en': 'Bayannur, Inner Mongolia', 'zh': u('\u5185\u8499\u53e4\u5df4\u5f66\u6dd6\u5c14\u5e02')},
@@ -10017,6 +10019,4 @@
'861506545':{'en': 'Yantai, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u70df\u53f0\u5e02')},
'861506546':{'en': 'Dongying, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u4e1c\u8425\u5e02')},
'861506547':{'en': 'Jining, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6d4e\u5b81\u5e02')},
- '861506548':{'en': 'TaiAn, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6cf0\u5b89\u5e02')},
- '861506549':{'en': 'Linyi, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u4e34\u6c82\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data20.py new/phonenumbers-8.13.3/phonenumbers/geodata/data20.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data20.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data20.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861506548':{'en': 'TaiAn, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6cf0\u5b89\u5e02')},
+ '861506549':{'en': 'Linyi, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u4e34\u6c82\u5e02')},
'86150655':{'en': 'Rizhao, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u65e5\u7167\u5e02')},
'861506550':{'en': 'Weihai, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u5a01\u6d77\u5e02')},
'861506551':{'en': 'Weihai, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u5a01\u6d77\u5e02')},
@@ -10017,6 +10019,4 @@
'861533730':{'en': 'Enshi, Hubei', 'zh': u('\u6e56\u5317\u7701\u6069\u65bd\u571f\u5bb6\u65cf\u82d7\u65cf\u81ea\u6cbb\u5dde')},
'861533731':{'en': 'Huanggang, Hubei', 'zh': u('\u6e56\u5317\u7701\u9ec4\u5188\u5e02')},
'861533732':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
- '861533733':{'en': 'Suizhou, Hubei', 'zh': u('\u6e56\u5317\u7701\u968f\u5dde\u5e02')},
- '861533734':{'en': 'Xiangfan, Hubei', 'zh': u('\u6e56\u5317\u7701\u8944\u6a0a\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data21.py new/phonenumbers-8.13.3/phonenumbers/geodata/data21.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data21.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data21.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861533733':{'en': 'Suizhou, Hubei', 'zh': u('\u6e56\u5317\u7701\u968f\u5dde\u5e02')},
+ '861533734':{'en': 'Xiangfan, Hubei', 'zh': u('\u6e56\u5317\u7701\u8944\u6a0a\u5e02')},
'861533735':{'en': 'Shiyan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5341\u5830\u5e02')},
'861533736':{'en': 'Xianning, Hubei', 'zh': u('\u6e56\u5317\u7701\u54b8\u5b81\u5e02')},
'861533737':{'en': 'Xiantao, Hubei', 'zh': u('\u6e56\u5317\u7701\u4ed9\u6843\u5e02')},
@@ -10017,6 +10019,4 @@
'861567191':{'en': 'Shiyan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5341\u5830\u5e02')},
'861567192':{'en': 'Shiyan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5341\u5830\u5e02')},
'861567193':{'en': 'Shiyan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5341\u5830\u5e02')},
- '861567194':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
- '861567195':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data22.py new/phonenumbers-8.13.3/phonenumbers/geodata/data22.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data22.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data22.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861567194':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
+ '861567195':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
'861567196':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
'861567197':{'en': 'Xiaogan, Hubei', 'zh': u('\u6e56\u5317\u7701\u5b5d\u611f\u5e02')},
'861567198':{'en': 'Ezhou, Hubei', 'zh': u('\u6e56\u5317\u7701\u9102\u5dde\u5e02')},
@@ -10017,6 +10019,4 @@
'86159479':{'en': 'Jilin, Jilin', 'zh': u('\u5409\u6797\u7701\u5409\u6797\u5e02')},
'86159480':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
'86159481':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
- '86159482':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
- '86159483':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data23.py new/phonenumbers-8.13.3/phonenumbers/geodata/data23.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data23.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data23.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '86159482':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
+ '86159483':{'en': 'Changchun, Jilin', 'zh': u('\u5409\u6797\u7701\u957f\u6625\u5e02')},
'86159484':{'en': 'Jilin, Jilin', 'zh': u('\u5409\u6797\u7701\u5409\u6797\u5e02')},
'86159485':{'en': 'Jilin, Jilin', 'zh': u('\u5409\u6797\u7701\u5409\u6797\u5e02')},
'86159486':{'en': 'Jilin, Jilin', 'zh': u('\u5409\u6797\u7701\u5409\u6797\u5e02')},
@@ -10017,6 +10019,4 @@
'861785839':{'en': 'Huzhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u6e56\u5dde\u5e02')},
'861785840':{'en': 'Hangzhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u676d\u5dde\u5e02')},
'861785841':{'en': 'Hangzhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u676d\u5dde\u5e02')},
- '861785842':{'en': 'Hangzhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u676d\u5dde\u5e02')},
- '861785843':{'en': 'Jiaxing, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u5609\u5174\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data24.py new/phonenumbers-8.13.3/phonenumbers/geodata/data24.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data24.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data24.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861785842':{'en': 'Hangzhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u676d\u5dde\u5e02')},
+ '861785843':{'en': 'Jiaxing, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u5609\u5174\u5e02')},
'861785844':{'en': 'Ningbo, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u5b81\u6ce2\u5e02')},
'861785845':{'en': 'Shaoxing, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u7ecd\u5174\u5e02')},
'861785846':{'en': 'Taizhou, Zhejiang', 'zh': u('\u6d59\u6c5f\u7701\u53f0\u5dde\u5e02')},
@@ -10017,6 +10019,4 @@
'861820324':{'en': 'Chengde, Hebei', 'zh': u('\u6cb3\u5317\u7701\u627f\u5fb7\u5e02')},
'861820325':{'en': 'Tangshan, Hebei', 'zh': u('\u6cb3\u5317\u7701\u5510\u5c71\u5e02')},
'861820326':{'en': 'Langfang, Hebei', 'zh': u('\u6cb3\u5317\u7701\u5eca\u574a\u5e02')},
- '861820327':{'en': 'Cangzhou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u6ca7\u5dde\u5e02')},
- '861820328':{'en': 'Hengshui, Hebei', 'zh': u('\u6cb3\u5317\u7701\u8861\u6c34\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data25.py new/phonenumbers-8.13.3/phonenumbers/geodata/data25.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data25.py 2022-12-08 07:43:27.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data25.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861820327':{'en': 'Cangzhou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u6ca7\u5dde\u5e02')},
+ '861820328':{'en': 'Hengshui, Hebei', 'zh': u('\u6cb3\u5317\u7701\u8861\u6c34\u5e02')},
'861820329':{'en': 'Xingtai, Hebei', 'zh': u('\u6cb3\u5317\u7701\u90a2\u53f0\u5e02')},
'861820330':{'en': 'Cangzhou, Hebei', 'zh': u('\u6cb3\u5317\u7701\u6ca7\u5dde\u5e02')},
'861820331':{'en': 'Shijiazhuang, Hebei', 'zh': u('\u6cb3\u5317\u7701\u77f3\u5bb6\u5e84\u5e02')},
@@ -10017,6 +10019,4 @@
'86185535':{'en': 'Yantai, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u70df\u53f0\u5e02')},
'86185536':{'en': 'Weifang, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6f4d\u574a\u5e02')},
'86185537':{'en': 'Jining, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6d4e\u5b81\u5e02')},
- '86185538':{'en': 'TaiAn, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6cf0\u5b89\u5e02')},
- '86185539':{'en': 'Linyi, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u4e34\u6c82\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data26.py new/phonenumbers-8.13.3/phonenumbers/geodata/data26.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data26.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data26.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '86185538':{'en': 'TaiAn, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6cf0\u5b89\u5e02')},
+ '86185539':{'en': 'Linyi, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u4e34\u6c82\u5e02')},
'86185540':{'en': 'Yantai, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u70df\u53f0\u5e02')},
'861855400':{'en': 'Jinan, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6d4e\u5357\u5e02')},
'861855401':{'en': 'Jinan, Shandong', 'zh': u('\u5c71\u4e1c\u7701\u6d4e\u5357\u5e02')},
@@ -10017,6 +10019,4 @@
'861882436':{'en': 'Dongguan, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u4e1c\u839e\u5e02')},
'861882437':{'en': 'Dongguan, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u4e1c\u839e\u5e02')},
'861882438':{'en': 'Maoming, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u8302\u540d\u5e02')},
- '861882439':{'en': 'Shenzhen, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u6df1\u5733\u5e02')},
- '861882440':{'en': 'Zhanjiang, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u6e5b\u6c5f\u5e02')},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data27.py new/phonenumbers-8.13.3/phonenumbers/geodata/data27.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data27.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data27.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '861882439':{'en': 'Shenzhen, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u6df1\u5733\u5e02')},
+ '861882440':{'en': 'Zhanjiang, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u6e5b\u6c5f\u5e02')},
'861882441':{'en': 'Dongguan, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u4e1c\u839e\u5e02')},
'861882442':{'en': 'Dongguan, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u4e1c\u839e\u5e02')},
'861882443':{'en': 'Jieyang, Guangdong', 'zh': u('\u5e7f\u4e1c\u7701\u63ed\u9633\u5e02')},
@@ -10017,6 +10019,4 @@
'9168533':{'en': 'Sunabeda, Odisha'},
'9168534':{'en': 'Sunabeda, Odisha'},
'9168535':{'en': 'Sunabeda, Odisha'},
- '9168536':{'en': 'Sunabeda, Odisha'},
- '9168537':{'en': 'Sunabeda, Odisha'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data28.py new/phonenumbers-8.13.3/phonenumbers/geodata/data28.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data28.py 2022-12-08 07:43:28.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data28.py 2022-12-22 09:50:30.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '9168536':{'en': 'Sunabeda, Odisha'},
+ '9168537':{'en': 'Sunabeda, Odisha'},
'9168542':{'en': 'Jeypore, Odisha'},
'9168543':{'en': 'Jeypore, Odisha'},
'9168544':{'en': 'Jeypore, Odisha'},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data6.py new/phonenumbers-8.13.3/phonenumbers/geodata/data6.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data6.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data6.py 2022-12-22 09:50:29.000000000 +0100
@@ -2996,6 +2996,7 @@
'5182':{'en': 'Madre de Dios'},
'5183':{'en': u('Apur\u00edmac')},
'5184':{'en': 'Cusco'},
+ '52220':{'en': 'Puebla', 'es': 'Puebla'},
'52221':{'en': 'Puebla', 'es': 'Puebla'},
'52222':{'en': 'Puebla', 'es': 'Puebla'},
'52223':{'en': 'Puebla', 'es': 'Puebla'},
@@ -3233,6 +3234,7 @@
'52717':{'en': 'Estado de Mexico', 'es': u('Estado de M\u00e9xico')},
'52718':{'en': 'Estado de Mexico', 'es': u('Estado de M\u00e9xico')},
'52719':{'en': 'San Francisco Xonacatlan/Temoaya, MEX', 'es': u('San Francisco Xonacatl\u00e1n/Temoaya, MEX')},
+ '52720':{'en': 'Toluca', 'es': 'Toluca'},
'52721':{'en': 'Ixtapan de la Sal, MEX', 'es': 'Ixtapan de la Sal, MEX'},
'52722':{'en': 'Estado de Mexico', 'es': u('Estado de M\u00e9xico')},
'52723':{'en': 'Coatepec Harinas, MEX', 'es': 'Coatepec Harinas, MEX'},
@@ -10017,6 +10019,4 @@
'55493358':{'en': 'Cordilheira Alta - SC', 'pt': 'Cordilheira Alta - SC'},
'55493361':{'en': u('Chapec\u00f3 - SC'), 'pt': u('Chapec\u00f3 - SC')},
'55493362':{'en': 'Novo Horizonte - SC', 'pt': 'Novo Horizonte - SC'},
- '55493363':{'en': 'Bom Jesus do Oeste - SC', 'pt': 'Bom Jesus do Oeste - SC'},
- '55493364':{'en': 'Serra Alta - SC', 'pt': 'Serra Alta - SC'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data7.py new/phonenumbers-8.13.3/phonenumbers/geodata/data7.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data7.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data7.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '55493363':{'en': 'Bom Jesus do Oeste - SC', 'pt': 'Bom Jesus do Oeste - SC'},
+ '55493364':{'en': 'Serra Alta - SC', 'pt': 'Serra Alta - SC'},
'55493365':{'en': 'Modelo - SC', 'pt': 'Modelo - SC'},
'55493366':{'en': 'Pinhalzinho - SC', 'pt': 'Pinhalzinho - SC'},
'55493367':{'en': 'Sul Brasil - SC', 'pt': 'Sul Brasil - SC'},
@@ -10017,6 +10019,4 @@
'609714':{'en': 'Kota Bharu'},
'609718':{'en': 'Kota Bharu'},
'609719':{'en': 'Kota Bharu'},
- '609721':{'en': 'Kota Bharu'},
- '609725':{'en': 'Kota Bharu'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data8.py new/phonenumbers-8.13.3/phonenumbers/geodata/data8.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data8.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data8.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '609721':{'en': 'Kota Bharu'},
+ '609725':{'en': 'Kota Bharu'},
'609726':{'en': 'Kota Bharu'},
'609732':{'en': 'Kota Bharu'},
'609735':{'en': 'Kota Bharu'},
@@ -10017,6 +10019,4 @@
'61263075':{'en': 'Frogmore'},
'61263076':{'en': 'Galong'},
'61263077':{'en': 'Galong'},
- '61263078':{'en': 'Galong'},
- '612630790':{'en': 'Limekilns'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/geodata/data9.py new/phonenumbers-8.13.3/phonenumbers/geodata/data9.py
--- old/phonenumbers-8.13.2/phonenumbers/geodata/data9.py 2022-12-08 07:43:26.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/geodata/data9.py 2022-12-22 09:50:29.000000000 +0100
@@ -19,6 +19,8 @@
# limitations under the License.
data = {
+ '61263078':{'en': 'Galong'},
+ '612630790':{'en': 'Limekilns'},
'612630791':{'en': 'Limekilns'},
'612630792':{'en': 'Limekilns'},
'612630793':{'en': 'Limekilns'},
@@ -10017,6 +10019,4 @@
'61348107':{'en': 'Logie Brae'},
'61348108':{'en': 'Mabins Well'},
'61348109':{'en': 'Mathoura'},
- '61348110':{'en': 'Moulamein'},
- '61348111':{'en': 'Nathalia'},
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/shortdata/region_AT.py new/phonenumbers-8.13.3/phonenumbers/shortdata/region_AT.py
--- old/phonenumbers-8.13.2/phonenumbers/shortdata/region_AT.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/shortdata/region_AT.py 2022-12-22 09:50:27.000000000 +0100
@@ -2,9 +2,9 @@
from ..phonemetadata import NumberFormat, PhoneNumberDesc, PhoneMetadata
PHONE_METADATA_AT = PhoneMetadata(id='AT', country_code=None, international_prefix=None,
- general_desc=PhoneNumberDesc(national_number_pattern='[168]\\d\\d(?:\\d{3})?', possible_length=(3, 6)),
- toll_free=PhoneNumberDesc(national_number_pattern='116\\d{3}|1(?:[12]2|33|44)', example_number='112', possible_length=(3, 6)),
+ general_desc=PhoneNumberDesc(national_number_pattern='[168]\\d\\d(?:\\d(?:\\d{2})?)?', possible_length=(3, 4, 6)),
+ toll_free=PhoneNumberDesc(national_number_pattern='1(?:12|2[0238]|3[03]|4[0-247])|1(?:16\\d\\d|4[58])\\d', example_number='112', possible_length=(3, 4, 6)),
emergency=PhoneNumberDesc(national_number_pattern='1(?:[12]2|33|44)', example_number='112', possible_length=(3,)),
- short_code=PhoneNumberDesc(national_number_pattern='116(?:00[06]|1(?:17|23))|(?:61|8108[1-3])0|1(?:[12]2|33|44)', example_number='112', possible_length=(3, 6)),
+ short_code=PhoneNumberDesc(national_number_pattern='1(?:1(?:2|6(?:00[06]|1(?:17|23)))|2[0238]|3[03]|4(?:[0-247]|5[05]|84))|(?:61|8108[1-3])0', example_number='112', possible_length=(3, 4, 6)),
carrier_specific=PhoneNumberDesc(national_number_pattern='610|810\\d{3}', example_number='610', possible_length=(3, 6)),
short_data=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers/shortdata/region_BE.py new/phonenumbers-8.13.3/phonenumbers/shortdata/region_BE.py
--- old/phonenumbers-8.13.2/phonenumbers/shortdata/region_BE.py 2022-12-08 07:43:25.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers/shortdata/region_BE.py 2022-12-22 09:50:27.000000000 +0100
@@ -3,9 +3,9 @@
PHONE_METADATA_BE = PhoneMetadata(id='BE', country_code=None, international_prefix=None,
general_desc=PhoneNumberDesc(national_number_pattern='[1-9]\\d\\d(?:\\d(?:\\d{2})?)?', possible_length=(3, 4, 6)),
- toll_free=PhoneNumberDesc(national_number_pattern='1(?:0[0-35-8]|1[02]|7(?:12|77)|813)|(?:116|8)\\d{3}', example_number='100', possible_length=(3, 4, 6)),
+ toll_free=PhoneNumberDesc(national_number_pattern='1(?:0[0-35-8]|1[0269]|7(?:12|77)|813)|(?:116|8)\\d{3}', example_number='100', possible_length=(3, 4, 6)),
premium_rate=PhoneNumberDesc(national_number_pattern='1(?:2[03]|40)4|(?:1(?:[24]1|3[01])|[2-79]\\d\\d)\\d', example_number='1204', possible_length=(4,)),
emergency=PhoneNumberDesc(national_number_pattern='1(?:0[01]|12)', example_number='100', possible_length=(3,)),
- short_code=PhoneNumberDesc(national_number_pattern='1(?:0[0-8]|1(?:[027]|6117)|2(?:12|3[0-24])|313|414|5(?:1[05]|5[15]|66|95)|6(?:1[167]|36|6[16])|7(?:[07][017]|1[27-9]|22|33|65)|81[39])|[2-9]\\d{3}|1(?:1600|45)0|1(?:[2-4]9|78)9|1[2-4]0[47]', example_number='100', possible_length=(3, 4, 6)),
+ short_code=PhoneNumberDesc(national_number_pattern='1(?:0[0-8]|16117|2(?:12|3[0-24])|313|414|5(?:1[05]|5[15]|66|95)|6(?:1[167]|36|6[16])|7(?:[07][017]|1[27-9]|22|33|65)|81[39])|[2-9]\\d{3}|11[02679]|1(?:1600|45)0|1(?:[2-4]9|78)9|1[2-4]0[47]', example_number='100', possible_length=(3, 4, 6)),
sms_services=PhoneNumberDesc(national_number_pattern='[2-9]\\d{3}', example_number='2000', possible_length=(4,)),
short_data=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/phonenumbers-8.13.2/phonenumbers.egg-info/PKG-INFO new/phonenumbers-8.13.3/phonenumbers.egg-info/PKG-INFO
--- old/phonenumbers-8.13.2/phonenumbers.egg-info/PKG-INFO 2022-12-08 08:05:02.000000000 +0100
+++ new/phonenumbers-8.13.3/phonenumbers.egg-info/PKG-INFO 2022-12-22 09:55:17.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: phonenumbers
-Version: 8.13.2
+Version: 8.13.3
Summary: Python version of Google's common library for parsing, formatting, storing and validating international phone numbers.
Home-page: https://github.com/daviddrysdale/python-phonenumbers
Author: David Drysdale
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-nbdime for openSUSE:Factory checked in at 2022-12-30 11:08:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-nbdime (Old)
and /work/SRC/openSUSE:Factory/.python-nbdime.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-nbdime"
Fri Dec 30 11:08:42 2022 rev:9 rq:1045758 version:unknown
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-nbdime/python-nbdime.changes 2021-11-13 22:49:13.217281916 +0100
+++ /work/SRC/openSUSE:Factory/.python-nbdime.new.1563/python-nbdime.changes 2022-12-30 11:09:00.561273095 +0100
@@ -1,0 +2,5 @@
+Thu Dec 29 20:15:44 UTC 2022 - Ben Greiner <code(a)bnavigator.de>
+
+- Modernize jupyter packaging: alternatives, config, provides
+
+-------------------------------------------------------------------
Old:
----
nbdime-3.1.1-py2.py3-none-any.whl
New:
----
nbdime-3.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-nbdime.spec ++++++
--- /var/tmp/diff_new_pack.oGSHR6/_old 2022-12-30 11:09:01.133276514 +0100
+++ /var/tmp/diff_new_pack.oGSHR6/_new 2022-12-30 11:09:01.137276539 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-nbdime
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,18 +16,26 @@
#
-%{?!python_module:%define python_module() python3-%{**}}
+%if 0%{?suse_version} > 1500
+%bcond_without libalternatives
+%else
+%bcond_with libalternatives
+%endif
+
%define skip_python2 1
%define mainver 3.1.1
%define jupver 6.1.2
%define labver 2.1.1
+%define mainbins nbdime nbshow nbdiff nbdiff-web nbmerge nbmerge-web
+%define gitbins git-nbdifftool git-nbmergetool git-nbdiffdriver git-nbmergedriver
+%define hgbins hg-nbdiff hg-nbdiffweb hg-nbmerge hg-nbmergeweb
Name: python-nbdime
Version: %{mainver}
Release: 0
Summary: Tools for diffing and merging Jupyter Notebooks
License: BSD-3-Clause
URL: https://github.com/jupyter/nbdime
-Source: https://files.pythonhosted.org/packages/py2.py3/n/nbdime/nbdime-%{mainver}-…
+Source: https://files.pythonhosted.org/packages/source/n/nbdime/nbdime-%{mainver}.t…
BuildRequires: %{python_module GitPython >= 2.1.6}
BuildRequires: %{python_module Jinja2 >= 2.9}
BuildRequires: %{python_module Pygments}
@@ -38,9 +46,11 @@
BuildRequires: %{python_module nbformat}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module requests}
+BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module tornado}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
-BuildRequires: jupyter-jupyterlab-filesystem
+BuildRequires: jupyter-rpm-macros
BuildRequires: python-rpm-macros
# SECTION test requirements
BuildRequires: %{python_module jupyter-server-test}
@@ -61,12 +71,19 @@
Requires: python-nbformat
Requires: python-requests
Requires: python-tornado
+%if %{with libalternatives}
+BuildRequires: alts
+Requires: alts
+%else
+Requires(post): update-alternatives
+Requires(postun):update-alternatives
+%endif
Conflicts: python-jupyter_nbdime-git < 1.0.5
Conflicts: python-jupyter_nbdime-hg < 1.0.5
Recommends: python-tabulate
Suggests: python-notebook
-Provides: python-jupyter_nbdime = %{mainver}
-Obsoletes: python-jupyter_nbdime < %{mainver}
+Provides: python-jupyter_nbdime = %{mainver}-%{release}
+Obsoletes: python-jupyter_nbdime < %{mainver}-%{release}
BuildArch: noarch
%python_subpackages
@@ -79,9 +96,7 @@
%package -n jupyter-nbdime
Version: %{jupver}
Summary: A JupyterLab extension for showing Notebook diffs
-Requires: jupyter-nbformat
-Requires: jupyter-notebook
-Requires: python3-nbdime = %{mainver}
+Requires: (%(echo "%{python_module nbdime = %{mainver}@or@}" | sed "s/@or@/ or /g" | sed 's/ or\s*$//'))
Conflicts: python3-jupyter_nbdime < 1.0.5
%description -n jupyter-nbdime
@@ -95,9 +110,7 @@
Release: 0
Summary: A JupyterLab extension for showing Notebook diffs
Requires: jupyter-jupyterlab
-Requires: python3-nbdime = %{mainver}
-Provides: python3-jupyter_nbdime_jupyterlab = %{labver}
-Obsoletes: python3-jupyter_nbdime_jupyterlab < %{labver}
+Requires: (%(echo "%{python_module nbdime = %{mainver}@or@}" | sed "s/@or@/ or /g" | sed 's/ or\s*$//'))
%description -n jupyter-nbdime-jupyterlab
The nbdime package provides tools for diffing and merging of
@@ -105,97 +118,169 @@
This package provides the JupyterLab extension.
-%package -n jupyter-nbdime-git
-Version: %{jupver}
-Summary: Git integration for jupyter-nbdime
+%package git
+Version: %{mainver}
+Summary: Git integration for python-nbdime
Requires: git-core
-Requires: jupyter-nbdime = %{jupver}
-Provides: python3-jupyter_nbdime-git = %{jupver}
-Obsoletes: python3-jupyter_nbdime-git < %{jupver}
+Requires: python-nbdime = %{mainver}
+# python3-jupyter_nbdime-git = JUPVER (!) was provided by a jupyter-nbdime-git package until end of 2022
+Provides: python-jupyter_nbdime-git = %{jupver}-%{release}
+Obsoletes: python-jupyter_nbdime-git < %{jupver}-%{release}
+%if "%{python_flavor}" == "python3" || "%{python_provides}" == "python3"
+Provides: jupyter-nbdime-git = %{jupver}-%{release}
+Obsoletes: jupyter-nbdime-git < %{jupver}-%{release}
+%else
+Conflicts: jupyter-nbdime-git < %{jupver}-%{release}
+%endif
+%if %{with libalternatives}
+Requires: alts
+%else
+Requires(post): update-alternatives
+Requires(postun):update-alternatives
+%endif
-%description -n jupyter-nbdime-git
+%description git
The nbdime package provides tools for diffing and merging of
Jupyter Notebooks.
This package provides git integration.
-%package -n jupyter-nbdime-hg
-Version: %{jupver}
-Summary: Mercurial integration for jupyter-nbdime
-Requires: jupyter-nbdime = %{jupver}
+%package hg
+Version: %{mainver}
+Summary: Mercurial integration for python-nbdime
Requires: mercurial
-Provides: python3-jupyter_nbdime-hg = %{jupver}
-Obsoletes: python3-jupyter_nbdime-hg < %{jupver}
+Requires: python-nbdime = %{mainver}
+# python3-jupyter_nbdime-hg = JUPVER (!) was provided by a jupyter-nbdime-git package until end of 2022
+Provides: python-jupyter_nbdime-hg = %{jupver}-%{release}
+Obsoletes: python-jupyter_nbdime-hg < %{jupver}-%{release}
+%if "%{python_flavor}" == "python3" || "%{python_provides}" == "python3"
+Provides: jupyter-nbdime-hg = %{jupver}-%{release}
+Obsoletes: jupyter-nbdime-hg < %{jupver}-%{release}
+%else
+Conflicts: jupyter-nbdime-hg < %{jupver}-%{release}
+%endif
+%if %{with libalternatives}
+Requires: alts
+%else
+Requires(post): update-alternatives
+Requires(postun):update-alternatives
+%endif
-%description -n jupyter-nbdime-hg
+%description hg
The nbdime package provides tools for diffing and merging of
Jupyter Notebooks.
This package provides mercurial integration.
%prep
-%setup -q -c -T
+%autosetup -p1 -n nbdime-%{mainver}
+sed -i 's/^import mock/from unittest import mock/' nbdime/tests/test_*.py
+find . -type f -name "*.py" -exec sed -i 's/\r$//' {} +
+find . -type f -name "*.ipynb" -exec sed -i 's/\r$//' {} +
+find ./nbdime/ -type f -name "*.py" -exec sed -i -e '/^#!\//, 1d' {} +
+rm nbdime/labextension/schemas/nbdime-jupyterlab/package.json.orig
%build
-:
+%pyproject_wheel
%install
-%pyproject_install %{SOURCE0}
-
+%pyproject_install
+for b in %mainbins %gitbins %hgbins; do
+ %python_clone -a %{buildroot}%{_bindir}/$b
+done
%{jupyter_move_config}
-%python_expand sed -i 's/^import mock/from unittest import mock/' %{buildroot}%{$python_sitelib}/nbdime/tests/test_*.py
-%python_expand find %{buildroot}%{$python_sitelib} -type f -name "*.py" -exec sed -i 's/\r$//' {} +
-%python_expand find %{buildroot}%{$python_sitelib} -type f -name "*.ipynb" -exec sed -i 's/\r$//' {} +
-%python_expand find %{buildroot}%{$python_sitelib}/nbdime/ -type f -name "*.py" -exec sed -i -e '/^#!\//, 1d' {} +
-%python_expand rm %{buildroot}%{$python_sitelib}/nbdime/labextension/schemas/nbdime-jupyterlab/package.json.orig
-%python_compileall
-rm %{buildroot}%{_jupyter_prefix}/labextensions/nbdime-jupyterlab/schemas/nbdime-jupyterlab/package.json.orig
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%fdupes %{buildroot}%{_jupyter_prefix}
-cp %{buildroot}%{python3_sitelib}/nbdime-%{mainver}.dist-info/LICENSE.md .
%check
-export PATH=$PATH:%{buildroot}%{_bindir}
+# freshly to be install libalternatives commands are not yet flavorbinned automatically
+%if %{with libalternatives}
+%{python_expand mkdir -p build/flavorbin
+for b in %mainbins %gitbins %hgbins; do
+ ln -s %{buildroot}%{_bindir}/$b-%{$python_bin_suffix} build/flavorbin/$b
+done
+}
+%endif
git config --global user.email "test(a)test.com"
git config --global user.name "tester"
+git config --global init.defaultBranch master
%pytest --pyargs nbdime
+%pre
+# remove any non-symlink bin before installing the alternative links
+for b in %mainbins; do
+ [ -f %{_bindir}/$b -a ! -h %{_bindir}/$b ] && rm %{_bindir}/$b
+done
+%python_libalternatives_reset_alternative nbdime
+
+%post
+%python_install_alternative %mainbins
+
+%postun
+%python_uninstall_alternative nbdime
+
+%pre git
+# remove any non-symlink bin before installing the alternative links
+for b in %gitbins; do
+ [ -f %{_bindir}/$b -a ! -h %{_bindir}/$b ] && rm %{_bindir}/$b
+done
+%python_libalternatives_reset_alternative git-nbdifftool
+
+%post git
+%python_install_alternative %gitbins
+
+%postun git
+%python_uninstall_alternative git-nbdifftool
+
+%pre hg
+# remove any non-symlink bin before installing the alternative links
+for b in %hgbins; do
+ [ -f %{_bindir}/$b -a ! -h %{_bindir}/$b ] && rm %{_bindir}/$b
+done
+%python_libalternatives_reset_alternative hg-nbdiff
+
+%post hg
+%python_install_alternative %hgbins
+
+%postun hg
+%python_uninstall_alternative hg-nbdiff
+
%files %{python_files}
%license LICENSE.md
+%python_alternative %{_bindir}/nbdime
+%python_alternative %{_bindir}/nbshow
+%python_alternative %{_bindir}/nbdiff
+%python_alternative %{_bindir}/nbdiff-web
+%python_alternative %{_bindir}/nbmerge
+%python_alternative %{_bindir}/nbmerge-web
%{python_sitelib}/nbdime/
%{python_sitelib}/nbdime-%{mainver}.dist-info/
-%files -n jupyter-nbdime
+%files %{python_files git}
%license LICENSE.md
-%{_bindir}/nbdime
-%{_bindir}/nbshow
-%{_bindir}/nbdiff
-%{_bindir}/nbdiff-web
-%{_bindir}/nbmerge
-%{_bindir}/nbmerge-web
-%{_jupyter_nbextension_dir}/nbdime/
-%config %{_jupyter_server_confdir}/nbdime.json
-%config %{_jupyter_servextension_confdir}/nbdime.json
-%config %{_jupyter_nb_notebook_confdir}/nbdime.json
+%python_alternative %{_bindir}/git-nbdiffdriver
+%python_alternative %{_bindir}/git-nbdifftool
+%python_alternative %{_bindir}/git-nbmergedriver
+%python_alternative %{_bindir}/git-nbmergetool
-%files -n jupyter-nbdime-jupyterlab
+%files %{python_files hg}
%license LICENSE.md
-%dir %{_jupyter_prefix}/labextensions
-%{_jupyter_prefix}/labextensions/nbdime-jupyterlab
-%{_jupyter_prefix}/lab/extensions/nbdime-jupyterlab-%{labver}.tgz
+%python_alternative %{_bindir}/hg-nbdiff
+%python_alternative %{_bindir}/hg-nbdiffweb
+%python_alternative %{_bindir}/hg-nbmerge
+%python_alternative %{_bindir}/hg-nbmergeweb
-%files -n jupyter-nbdime-git
+%files -n jupyter-nbdime
%license LICENSE.md
-%{_bindir}/git-nbdiffdriver
-%{_bindir}/git-nbdifftool
-%{_bindir}/git-nbmergedriver
-%{_bindir}/git-nbmergetool
+%{_jupyter_nbextension_dir}/nbdime/
+%_jupyter_config %{_jupyter_server_confdir}/nbdime.json
+%_jupyter_config %{_jupyter_servextension_confdir}/nbdime.json
+%_jupyter_config %{_jupyter_nb_notebook_confdir}/nbdime.json
-%files -n jupyter-nbdime-hg
+%files -n jupyter-nbdime-jupyterlab
%license LICENSE.md
-%{_bindir}/hg-nbdiff
-%{_bindir}/hg-nbdiffweb
-%{_bindir}/hg-nbmerge
-%{_bindir}/hg-nbmergeweb
+%dir %{_jupyter_prefix}/labextensions
+%{_jupyter_labextensions_dir3}/nbdime-jupyterlab
+%{_jupyter_labextensions_dir}/nbdime-jupyterlab-%{labver}.tgz
%changelog
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ser2net for openSUSE:Factory checked in at 2022-12-30 11:08:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ser2net (Old)
and /work/SRC/openSUSE:Factory/.ser2net.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ser2net"
Fri Dec 30 11:08:41 2022 rev:21 rq:1045748 version:4.3.11
Changes:
--------
--- /work/SRC/openSUSE:Factory/ser2net/ser2net.changes 2022-01-27 23:18:24.926377708 +0100
+++ /work/SRC/openSUSE:Factory/.ser2net.new.1563/ser2net.changes 2022-12-30 11:08:59.589267284 +0100
@@ -1,0 +2,18 @@
+Thu Dec 29 13:59:09 UTC 2022 - Dominique Leuenberger <dimstar(a)opensuse.org>
+
+- Update to version 4.3.11:
+ + Shut off write ready on a network write error.
+ + Shut down device write on a device error.
+- Changes from version 4.3.10:
+ + Retry port startup on gensio allocation failure.
+- Changes from version 4.3.9:
+ + Add link to libgensioosh.
+- Changes from version 4.3.8:
+ + Update ser2net.yaml.5.
+ + Add libgensiomdns if the mdns code is not in libgensio.
+- Changes from version 4.3.7:
+ + Fix issues disabling PAM support.
+- Changes from version 4.3.6:
+ + Add PAM authentication support.
+
+-------------------------------------------------------------------
Old:
----
ser2net-4.3.5.tar.gz
New:
----
ser2net-4.3.11.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ser2net.spec ++++++
--- /var/tmp/diff_new_pack.J620Wh/_old 2022-12-30 11:09:00.069270154 +0100
+++ /var/tmp/diff_new_pack.J620Wh/_new 2022-12-30 11:09:00.073270178 +0100
@@ -17,7 +17,7 @@
Name: ser2net
-Version: 4.3.5
+Version: 4.3.11
Release: 0
Summary: Serial port to network proxy
License: GPL-2.0-or-later
++++++ ser2net-4.3.5.tar.gz -> ser2net-4.3.11.tar.gz ++++++
++++ 17662 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/addsysattrs.c new/ser2net-4.3.11/addsysattrs.c
--- old/ser2net-4.3.5/addsysattrs.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/addsysattrs.c 2022-09-07 04:18:42.000000000 +0200
@@ -26,6 +26,7 @@
*/
#include <gensio/gensio.h>
+#include "absout.h"
#ifdef linux
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/ar-lib new/ser2net-4.3.11/ar-lib
--- old/ser2net-4.3.5/ar-lib 2020-02-05 15:31:03.000000000 +0100
+++ new/ser2net-4.3.11/ar-lib 2022-03-18 14:09:08.000000000 +0100
@@ -2,9 +2,9 @@
# Wrapper for Microsoft lib.exe
me=ar-lib
-scriptversion=2012-03-01.08; # UTC
+scriptversion=2019-07-04.01; # UTC
-# Copyright (C) 2010-2018 Free Software Foundation, Inc.
+# Copyright (C) 2010-2021 Free Software Foundation, Inc.
# Written by Peter Rosin <peda(a)lysator.liu.se>.
#
# This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,7 @@
MINGW*)
file_conv=mingw
;;
- CYGWIN*)
+ CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
@@ -65,7 +65,7 @@
mingw)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
- cygwin)
+ cygwin | msys)
file=`cygpath -m "$file" || echo "$file"`
;;
wine)
@@ -224,10 +224,11 @@
esac
done
else
- $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
- do
- $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
- done
+ $AR -NOLOGO -LIST "$archive" | tr -d '\r' | sed -e 's/\\/\\\\/g' \
+ | while read member
+ do
+ $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+ done
fi
elif test -n "$quick$replace"; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/auth.c new/ser2net-4.3.11/auth.c
--- old/ser2net-4.3.5/auth.c 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/auth.c 2022-11-01 22:27:57.000000000 +0100
@@ -29,9 +29,26 @@
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
+#include <pwd.h>
+#include <dirent.h>
#include <gensio/gensio.h>
+#include <gensio/gensio_list.h>
#include "ser2net.h"
+#if defined(USE_PAM)
+#include <security/pam_appl.h>
+#endif
+
+/*
+ * Ambiguity in spec: is it an array of pointers or a pointer to an array?
+ * Stolen from openssh.
+ */
+#ifdef PAM_SUN_CODEBASE
+# define PAM_MSG_MEMBER(msg, n, member) ((*(msg))[(n)].member)
+#else
+# define PAM_MSG_MEMBER(msg, n, member) ((msg)[(n)]->member)
+#endif
+
struct user {
struct gensio_link link;
char *name;
@@ -118,7 +135,7 @@
* The next few functions are for authentication handling.
*/
static int
-handle_auth_begin(struct gensio *net, const char *authdir,
+handle_auth_begin(struct gensio *net, const char *authdir, const char *pamauth,
const struct gensio_list *allowed_users)
{
gensiods len;
@@ -139,6 +156,33 @@
return GE_AUTHREJECT;
}
+#if defined(USE_PAM)
+ /* set user-specific authdir if it exists. */
+ if (pamauth) {
+ char userauthdir[1000];
+ DIR *dir;
+ struct passwd *pw;
+
+ pw = getpwnam(username);
+ if (pw) {
+ len = snprintf(userauthdir, sizeof(userauthdir),
+ "%s/.gtlssh/allowed_certs/", pw->pw_dir);
+ dir = opendir(userauthdir);
+ if (dir) {
+ closedir(dir);
+
+ err = gensio_control(net, 0, GENSIO_CONTROL_SET,
+ GENSIO_CONTROL_CERT_AUTH, userauthdir, &len);
+ if (err) {
+ syslog(LOG_ERR, "Could not set authdir %s: %s", userauthdir,
+ gensio_err_to_str(err));
+ return GE_NOTSUP;
+ }
+ }
+ }
+ }
+#endif
+
return GE_NOTSUP;
}
@@ -238,8 +282,112 @@
return GE_NOTSUP;
}
+#if defined(USE_PAM)
+static int
+pam_conversation_cb(int num_msg, const struct pam_message **msg,
+ struct pam_response **pam_response, void *appdata_ptr)
+{
+ int i;
+ const char *password = appdata_ptr;
+ struct pam_response *resp = NULL;
+
+ if (password == NULL) {
+ return PAM_CONV_ERR;
+ }
+
+ resp = calloc(num_msg, sizeof(struct pam_response));
+ if (resp == NULL) {
+ return PAM_BUF_ERR;
+ }
+
+ for (i = 0; i < num_msg; i++) {
+ resp[i].resp_retcode = 0;
+
+ switch(PAM_MSG_MEMBER(msg, i, msg_style)) {
+ case PAM_PROMPT_ECHO_ON:
+ case PAM_PROMPT_ECHO_OFF:
+ resp[i].resp = strdup(password);
+ if(resp[i].resp == NULL) {
+ goto error;
+ }
+ }
+ }
+
+ *pam_response = resp;
+ return PAM_SUCCESS;
+
+error:
+ if (resp) {
+ for (i = 0; i < num_msg; i++) {
+ free(resp[i].resp);
+ }
+ free(resp);
+ }
+ return PAM_BUF_ERR;
+}
+
+static int
+handle_password_pam(struct gensio *net, const char *pamauth, const char *password)
+{
+ int ret = GE_AUTHREJECT;
+ char username[100];
+ gensiods len;
+ int err, pam_err = 0;
+ pam_handle_t *pamh = NULL;
+ struct pam_conv pam_conv;
+
+ len = sizeof(username);
+ err = gensio_control(net, 0, true, GENSIO_CONTROL_USERNAME, username,
+ &len);
+ if (err) {
+ syslog(LOG_ERR, "No username provided by remote: %s",
+ gensio_err_to_str(err));
+ goto exit;
+ }
+
+ pam_conv.conv = pam_conversation_cb;
+ pam_conv.appdata_ptr = (char *)password;
+ pam_err = pam_start(pamauth, username, &pam_conv, &pamh);
+ if (pam_err != PAM_SUCCESS) {
+ syslog(LOG_ERR, "Unable to start PAM transaction: %s",
+ pam_strerror(pamh, pam_err));
+ goto exit;
+ }
+
+ pam_err = pam_authenticate(pamh, PAM_SILENT);
+ if (pam_err != PAM_SUCCESS) {
+ syslog(LOG_ERR, "PAM authentication failed: %s",
+ pam_strerror(pamh, pam_err)
+ );
+ goto exit;
+ } else {
+ syslog(LOG_INFO, "Accepted password for %s\n", username);
+ }
+
+ pam_err = pam_acct_mgmt(pamh, 0);
+ if (pam_err == PAM_NEW_AUTHTOK_REQD) {
+ syslog(LOG_ERR, "user %s password expired", username);
+ goto exit;
+ }
+ if (pam_err != PAM_SUCCESS) {
+ syslog(LOG_ERR, "pam_acct_mgmt failed for %s: %s",
+ username, pam_strerror(pamh, pam_err)
+ );
+ goto exit;
+ }
+
+ ret = 0;
+
+exit:
+ if (pamh) {
+ pam_end(pamh, pam_err);
+ }
+ return ret;
+}
+#endif
+
int
-handle_acc_auth_event(const char *authdir,
+handle_acc_auth_event(const char *authdir, const char *pamauth,
const struct gensio_list *allowed_users,
int event, void *data)
{
@@ -247,7 +395,7 @@
case GENSIO_ACC_EVENT_AUTH_BEGIN:
if (!authdir)
return 0;
- return handle_auth_begin(data, authdir, allowed_users);
+ return handle_auth_begin(data, authdir, pamauth, allowed_users);
case GENSIO_ACC_EVENT_PRECERT_VERIFY:
if (!authdir)
@@ -256,10 +404,17 @@
case GENSIO_ACC_EVENT_PASSWORD_VERIFY: {
struct gensio_acc_password_verify_data *pwdata;
- if (!authdir)
- return 0;
pwdata = (struct gensio_acc_password_verify_data *) data;
- return handle_password(pwdata->io, authdir, pwdata->password);
+#if defined(USE_PAM)
+ if (pamauth) {
+ return handle_password_pam(pwdata->io, pamauth, pwdata->password);
+ } else
+#endif
+ if (authdir) {
+ return handle_password(pwdata->io, authdir, pwdata->password);
+ } else {
+ return 0;
+ }
}
default:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/compile new/ser2net-4.3.11/compile
--- old/ser2net-4.3.5/compile 2020-02-05 15:31:03.000000000 +0100
+++ new/ser2net-4.3.11/compile 2022-03-18 14:09:08.000000000 +0100
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey(a)cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,7 @@
MINGW*)
file_conv=mingw
;;
- CYGWIN*)
+ CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
@@ -67,7 +67,7 @@
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
- cygwin/*)
+ cygwin/* | msys/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/configure.ac new/ser2net-4.3.11/configure.ac
--- old/ser2net-4.3.5/configure.ac 2022-01-18 01:21:26.000000000 +0100
+++ new/ser2net-4.3.11/configure.ac 2022-12-21 16:28:54.000000000 +0100
@@ -1,4 +1,4 @@
-AC_INIT([ser2net], [4.3.5], [minyard(a)acm.org]
+AC_INIT([ser2net], [4.3.11], [minyard(a)acm.org]
AM_INIT_AUTOMAKE([-Wall])
AC_PROG_CC
AM_PROG_AR
@@ -27,6 +27,34 @@
fi])
fi
+use_pam=check
+AC_ARG_WITH(pam,
+[ --with-pam=yes|no Support PAM authentication or not.],
+ if test "x$withval" = "xyes"; then
+ use_pam=yes
+ elif test "x$withval" = "xno"; then
+ use_pam=no
+ else
+ [AC_MSG_FAILURE([Unknown option to --with-pam, use yes or no])]
+ fi,
+)
+
+if test "$use_pam" != "no"; then
+ have_pam=yes
+ AC_CHECK_HEADER(security/pam_appl.h, [], [have_pam=no])
+ if test "$have_pam" = "yes"; then
+ AC_CHECK_LIB(pam, pam_start, [], [have_pam=no])
+ fi
+ if test "$use_pam" = "yes" -a "$have_pam" = "no"; then
+ AC_MSG_ERROR([Pam enabled, but no pam support found])
+ fi
+ use_pam=$have_pam
+fi
+if test "x$use_pam" != "xno"; then
+ LIBS="$LIBS -lpam"
+ AC_DEFINE([USE_PAM], [], [Enable PAM support])
+fi
+
AC_ARG_WITH(sysfs-led-support,
[ --with-sysfs-led-support Enable LED support (Linux only)],
sysfs_led_support_flag="$withval",
@@ -50,12 +78,22 @@
AC_CHECK_HEADERS([wordexp.h])
AC_CHECK_FUNCS(wordexp)
-PKG_CHECK_MODULES(GENSIO, libgensio, [LIBS=$GENSIO_LIBS],
+PKG_CHECK_MODULES(GENSIO, libgensio, [LIBS="$LIBS $GENSIO_LIBS"],
[AC_CHECK_HEADER(gensio/gensio.h, [],
[AC_MSG_ERROR([gensio.h not found, please install gensio dev package])])
AC_CHECK_LIB(gensio, str_to_gensio, [],
[AC_MSG_ERROR([libgensio won't link, please install gensio dev package])])])
+AC_CHECK_LIB(gensio, gensio_list_add_tail, [],
+ [PKG_CHECK_MODULES(GENSIOOSH, libgensioosh, [LIBS="$LIBS $GENSIOOSH_LIBS"],
+ [AC_CHECK_LIB(gensioosh, gensio_list_add_tail, [],
+ [AC_MSG_ERROR([libgensioosh won't link, please install gensio dev package])])])])
+
+AC_CHECK_LIB(gensio, gensio_alloc_mdns, [],
+ [PKG_CHECK_MODULES(GENSIOMDNS, libgensiomdns, [LIBS="$LIBS $GENSIOMDNS_LIBS"],
+ [AC_CHECK_LIB(gensiomdns, gensio_alloc_mdns, [],
+ [AC_MSG_ERROR([libgensiomdns won't link, please install gensio dev package])])])])
+
AC_CHECK_HEADER(yaml.h, [],
[AC_MSG_ERROR([yaml.h not found, please install libyaml dev package])])
AC_CHECK_LIB(yaml, yaml_document_initialize, [],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/controller.c new/ser2net-4.3.11/controller.c
--- old/ser2net-4.3.5/controller.c 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/controller.c 2022-07-19 21:53:30.000000000 +0200
@@ -44,6 +44,7 @@
static struct gensio_lock *cntlr_lock;
static struct gensio_accepter *controller_accepter;
static char *controller_authdir;
+static char *controller_pamauth;
static struct gensio_waiter *accept_waiter;
static int max_controller_ports = 4; /* How many control connections
@@ -1074,7 +1075,10 @@
return controller_acc_new_child(data);
default:
- return handle_acc_auth_event(controller_authdir, NULL, event, data);
+ return handle_acc_auth_event(
+ controller_authdir, controller_pamauth,
+ NULL, event, data
+ );
}
}
@@ -1106,6 +1110,9 @@
if (find_default_str("authdir-admin", &controller_authdir))
goto out_nomem;
+ if (find_default_str("pamauth-admin", &controller_pamauth))
+ goto out_nomem;
+
for (i = 0; options && options[i]; i++) {
if (gensio_check_keyvalue(options[i], "authdir-admin", &val) > 0) {
char *s = strdup(val);
@@ -1117,6 +1124,16 @@
controller_authdir = s;
continue;
}
+ if (gensio_check_keyvalue(options[i], "pamauth-admin", &val) > 0) {
+ char *s = strdup(val);
+
+ if (!s)
+ goto out_nomem;
+ if (controller_pamauth)
+ free(controller_pamauth);
+ controller_pamauth = s;
+ continue;
+ }
if (eout)
eout->out(eout, "Invalid option to admin port: %s", options[i]);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/dataxfer.c new/ser2net-4.3.11/dataxfer.c
--- old/ser2net-4.3.5/dataxfer.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/dataxfer.c 2022-11-21 14:39:23.000000000 +0100
@@ -708,7 +708,7 @@
}
out_unlock:
- if (rv > 0)
+ if (rv != 0)
gensio_set_write_callback_enable(netcon->net, false);
if (rv >= 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/defaults.c new/ser2net-4.3.11/defaults.c
--- old/ser2net-4.3.5/defaults.c 2021-01-23 04:01:13.000000000 +0100
+++ new/ser2net-4.3.11/defaults.c 2022-07-19 21:53:30.000000000 +0200
@@ -71,6 +71,8 @@
DATAROOT "/ser2net/auth" },
{ "authdir-admin", GENSIO_DEFAULT_STR, .def.strval =
SYSCONFDIR "/ser2net/auth" },
+ { "pamauth", GENSIO_DEFAULT_STR, .def.strval = NULL },
+ { "pamauth-admin", GENSIO_DEFAULT_STR, .def.strval = NULL },
{ "allowed-users", GENSIO_DEFAULT_STR, .def.strval = NULL },
{ "signature", GENSIO_DEFAULT_STR, .def.strval = "ser2net" },
{ "openstr", GENSIO_DEFAULT_STR, .def.strval = NULL },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/m4/libtool.m4 new/ser2net-4.3.11/m4/libtool.m4
--- old/ser2net-4.3.5/m4/libtool.m4 2020-03-02 10:35:42.000000000 +0100
+++ new/ser2net-4.3.11/m4/libtool.m4 2022-03-24 17:13:52.000000000 +0100
@@ -1071,11 +1071,11 @@
# to the OS version, if on x86, and 10.4, the deployment
# target defaults to 10.4. Don't you love it?
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ 10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
10.[[012]][[,.]]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*)
+ 10.*|11.*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/missing new/ser2net-4.3.11/missing
--- old/ser2net-4.3.5/missing 2020-02-05 15:31:03.000000000 +0100
+++ new/ser2net-4.3.11/missing 2022-03-18 14:09:08.000000000 +0100
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard(a)iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/port.c new/ser2net-4.3.11/port.c
--- old/ser2net-4.3.5/port.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/port.c 2022-11-21 15:00:41.000000000 +0100
@@ -122,13 +122,22 @@
port_start_timer(port_info_t *port)
{
gensio_time timeout;
- unsigned int timeout_sec = 1;
+ unsigned int timeout_sec;
- if (port->dev_to_net_state == PORT_UNCONNECTED)
+ switch (port->dev_to_net_state) {
+ case PORT_UNCONNECTED:
timeout_sec = port->connector_retry_time;
+ break;
- if (port->dev_to_net_state == PORT_CLOSED)
+ case PORT_CLOSED:
+ case PORT_NOT_STARTED:
timeout_sec = port->accepter_retry_time;
+ break;
+
+ default:
+ timeout_sec = 1;
+ break;
+ }
#ifdef gensio_version_major
timeout.secs = timeout_sec;
@@ -273,8 +282,8 @@
return port_new_con(port, data);
default:
- return handle_acc_auth_event(port->authdir, port->allowed_users,
- event, data);
+ return handle_acc_auth_event(port->authdir, port->pamauth,
+ port->allowed_users, event, data);
}
}
@@ -497,6 +506,11 @@
{
int err;
+ if (port->dev_to_net_state == PORT_NOT_STARTED) {
+ port_start_timer(port);
+ return GE_NOTREADY;
+ }
+
if (port->dev_to_net_state != PORT_CLOSED)
return GE_INUSE;
@@ -869,6 +883,7 @@
/* An error occurred and we are in a non-err shutdown. Convert it. */
port->shutdown_reason = errreason;
port->net_to_dev_state = PORT_CLOSING;
+ gensio_set_read_callback_enable(port->io, false);
return 0;
}
@@ -882,6 +897,9 @@
/* It's an error, force a shutdown. Don't set dev_to_net_state yet. */
port->shutdown_reason = errreason;
port->net_to_dev_state = PORT_CLOSING;
+
+ /* Shut down write on an error. */
+ gensio_set_read_callback_enable(port->io, false);
} else {
port->shutdown_reason = "All users disconnected";
}
@@ -914,6 +932,66 @@
return false;
}
+static int
+port_startup(port_info_t *new_port, struct absout *eout, bool retry)
+{
+ int err;
+
+ err = str_to_gensio(new_port->devname, so, handle_dev_event, new_port,
+ &new_port->io);
+ if (err) {
+ if (!retry || new_port->retry_startup_counter % 64 == 0)
+ eout->out(eout, "device configuration %s invalid: %s",
+ new_port->devname, gensio_err_to_str(err));
+ goto out_err;
+ }
+
+ err = str_to_gensio_accepter(new_port->accstr, so,
+ handle_port_child_event, new_port,
+ &new_port->accepter);
+ if (err) {
+ gensio_free(new_port->io);
+ new_port->io = NULL;
+ if (!retry || new_port->retry_startup_counter % 64 == 0)
+ eout->out(eout, "Invalid accepter port name/number '%s': %s",
+ new_port->accstr, gensio_err_to_str(err));
+ goto out_err;
+ }
+
+ if (new_port->enabled && new_port->do_telnet) {
+ const char *str = "telnet";
+ struct gensio_accepter *parent;
+
+ if (new_port->allow_2217)
+ str = "telnet(rfc2217=true)";
+ err = str_to_gensio_accepter_child(new_port->accepter, str,
+ so,
+ handle_port_child_event,
+ new_port, &parent);
+ if (err) {
+ gensio_free(new_port->io);
+ new_port->io = NULL;
+ gensio_acc_free(new_port->accepter);
+ new_port->accepter = NULL;
+ if (!retry || new_port->retry_startup_counter % 64 == 0)
+ eout->out(eout, "Could not allocate telnet gensio: %s",
+ gensio_err_to_str(err));
+ goto out_err;
+ }
+ new_port->accepter = parent;
+ }
+
+ new_port->dev_to_net_state = PORT_CLOSED;
+ if (retry)
+ eout->out(eout, "port accepter '%s' is now started",
+ new_port->accstr);
+ return 0;
+
+ out_err:
+ new_port->retry_startup_counter++;
+ return err;
+}
+
static void
port_timeout(struct gensio_timer *timer, void *data)
{
@@ -922,6 +1000,12 @@
int err;
so->lock(port->lock);
+ if (port->dev_to_net_state == PORT_NOT_STARTED) {
+ err = port_startup(port, &syslog_absout, true);
+ if (err)
+ goto out;
+ }
+
if (port->dev_to_net_state == PORT_CLOSED) {
if (port->enabled)
startup_port(&syslog_absout, port);
@@ -989,7 +1073,7 @@
if (curr->deleted)
continue;
- if (curr->enabled) {
+ if (curr->enabled && curr->accepter) {
/*
* This unlock is a little strange, but we don't want to
* do any waiting while holding the ports lock, otherwise
@@ -1112,8 +1196,6 @@
for (curr = ports; curr; curr = curr->next) {
so->lock(curr->lock);
if (!curr->deleted) {
- curr->dev_to_net_state = PORT_CLOSED;
- curr->net_to_dev_state = PORT_CLOSED;
if (curr->accepter_stopped) {
curr->accepter_stopped = false;
if (curr->enabled) {
@@ -1134,11 +1216,8 @@
}
int
-dataxfer_setup_port(port_info_t *new_port, struct absout *eout,
- bool do_telnet)
+dataxfer_setup_port(port_info_t *new_port, struct absout *eout)
{
- int err;
-
new_port->timer = so->alloc_timer(so, port_timeout, new_port);
if (!new_port->timer) {
eout->out(eout, "Could not allocate timer data");
@@ -1158,40 +1237,10 @@
return -1;
}
- err = str_to_gensio(new_port->devname, so, handle_dev_event, new_port,
- &new_port->io);
- if (err) {
- eout->out(eout, "device configuration %s invalid: %s",
- new_port->devname, gensio_err_to_str(err));
- return -1;
- }
+ new_port->dev_to_net_state = PORT_NOT_STARTED;
+ new_port->net_to_dev_state = PORT_CLOSED;
- err = str_to_gensio_accepter(new_port->accstr, so,
- handle_port_child_event, new_port,
- &new_port->accepter);
- if (err) {
- eout->out(eout, "Invalid accepter port name/number '%s': %s",
- new_port->accstr, gensio_err_to_str(err));
- return -1;
- }
-
- if (new_port->enabled && do_telnet) {
- const char *str = "telnet";
- struct gensio_accepter *parent;
-
- if (new_port->allow_2217)
- str = "telnet(rfc2217=true)";
- err = str_to_gensio_accepter_child(new_port->accepter, str,
- so,
- handle_port_child_event,
- new_port, &parent);
- if (err) {
- eout->out(eout, "Could not allocate telnet gensio: %s",
- gensio_err_to_str(err));
- return -1;
- }
- new_port->accepter = parent;
- }
+ port_startup(new_port, eout, false);
return 0;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/port.h new/ser2net-4.3.11/port.h
--- old/ser2net-4.3.5/port.h 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/port.h 2022-11-08 13:02:42.000000000 +0100
@@ -28,6 +28,7 @@
#include <netdb.h>
#include <sys/time.h>
+#include <sys/socket.h>
#include "gbuf.h"
#include "absout.h"
#include <gensio/gensio.h>
@@ -38,14 +39,15 @@
#endif
/* States for the net_to_dev_state and dev_to_net_state. */
-#define PORT_CLOSED 0 /* The accepter is disabled. */
-#define PORT_UNCONNECTED 1 /* The TCP port is not connected
+#define PORT_NOT_STARTED 0 /* The dataxfer_start_port failed. */
+#define PORT_CLOSED 1 /* The accepter is disabled. */
+#define PORT_UNCONNECTED 2 /* The TCP port is not connected
to anything right now. */
-#define PORT_WAITING_INPUT 2 /* Waiting for input from the
+#define PORT_WAITING_INPUT 3 /* Waiting for input from the
input side. */
-#define PORT_WAITING_OUTPUT_CLEAR 3 /* Waiting for output to clear
+#define PORT_WAITING_OUTPUT_CLEAR 4 /* Waiting for output to clear
so I can send data. */
-#define PORT_CLOSING 4 /* Waiting for output close
+#define PORT_CLOSING 5 /* Waiting for output close
string to be sent. */
typedef struct trace_info_s
{
@@ -122,6 +124,12 @@
void (*port_op_done)(struct port_info *, void *);
void *port_op_data;
+ /* FIXME - remove this with old config. An old config specified telnet. */
+ bool do_telnet;
+
+ /* Keeps a count of retried port startups. */
+ unsigned int retry_startup_counter;
+
/* The port has been deleted, but still has connections in use. */
bool deleted;
@@ -330,6 +338,11 @@
char *authdir;
/*
+ * Enable PAM authentication
+ */
+ char *pamauth;
+
+ /*
* List of authorized users. If NULL, all users are authorized.
* If no allowed users are specified, the default is taken.
*/
@@ -390,8 +403,7 @@
netcon < &(port->netcons[port->max_connections]); \
netcon++)
void shutdown_one_netcon(net_info_t *netcon, const char *reason);
-int dataxfer_setup_port(port_info_t *new_port, struct absout *eout,
- bool do_telnet);
+int dataxfer_setup_port(port_info_t *new_port, struct absout *eout);
int startup_port(struct absout *eout, port_info_t *port);
int shutdown_port(port_info_t *port, const char *errreason);
void port_start_timer(port_info_t *port);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/portconfig.c new/ser2net-4.3.11/portconfig.c
--- old/ser2net-4.3.5/portconfig.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/portconfig.c 2022-11-03 21:44:35.000000000 +0100
@@ -591,6 +591,15 @@
if (port->authdir)
free(port->authdir);
port->authdir = fval;
+ } else if (gensio_check_keyvalue(pos, "pamauth", &val) > 0) {
+ fval = strdup(val);
+ if (!fval) {
+ eout->out(eout, "Out of memory allocating pamauth");
+ return -1;
+ }
+ if (port->pamauth)
+ free(port->pamauth);
+ port->pamauth = fval;
} else if (gensio_check_keyvalue(pos, "allowed-users", &val) > 0) {
rv = add_allowed_users(&port->allowed_users, val, eout);
if (rv)
@@ -836,6 +845,8 @@
port->accepter_retry_time = find_default_int("accepter-retry-time");
if (find_default_str("authdir", &port->authdir))
return ENOMEM;
+ if (find_default_str("pamauth", &port->pamauth))
+ return ENOMEM;
if (find_default_str("allowed-users", &port->default_allowed_users))
return ENOMEM;
if (find_default_str("signature", &port->signaturestr))
@@ -883,7 +894,6 @@
net_info_t *netcon;
enum str_type str_type;
int err;
- bool do_telnet = false;
bool write_only = false;
unsigned int i;
struct port_remaddr *r;
@@ -963,7 +973,7 @@
} else if (strcmp(state, "telnet") == 0) {
/* FIXME - remove this someday. */
new_port->enabled = true;
- do_telnet = true;
+ new_port->do_telnet = true;
} else if (strcmp(state, "off") == 0) {
new_port->enabled = false;
} else {
@@ -1009,7 +1019,7 @@
new_port->default_allowed_users = NULL;
}
- if (dataxfer_setup_port(new_port, eout, do_telnet))
+ if (dataxfer_setup_port(new_port, eout))
goto errout;
if (gbuf_init(&new_port->dev_to_net, new_port->dev_to_net.maxsize))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/portinfo.c new/ser2net-4.3.11/portinfo.c
--- old/ser2net-4.3.5/portinfo.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/portinfo.c 2022-09-07 04:18:42.000000000 +0200
@@ -26,6 +26,7 @@
#include <string.h>
#include <stdio.h>
#include <errno.h>
+#include <arpa/inet.h>
#include <gensio/gensio.h>
#include <gensio/sergensio.h>
#include "ser2net.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/rotator.c new/ser2net-4.3.11/rotator.c
--- old/ser2net-4.3.5/rotator.c 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/rotator.c 2022-07-19 21:53:30.000000000 +0200
@@ -46,6 +46,7 @@
struct gensio_accepter *accepter;
char *authdir;
+ char *pamauth;
struct gensio_list *allowed_users;
char *default_allowed_users;
@@ -150,8 +151,8 @@
return rot_new_con(rot, data);
default:
- return handle_acc_auth_event(rot->authdir, rot->allowed_users,
- event, data);
+ return handle_acc_auth_event(rot->authdir, rot->pamauth,
+ rot->allowed_users, event, data);
}
}
@@ -195,6 +196,8 @@
gensio_acc_free(rot->accepter);
if (rot->authdir)
free(rot->authdir);
+ if (rot->pamauth)
+ free(rot->pamauth);
free_user_list(rot->allowed_users);
if (rot->default_allowed_users)
free(rot->default_allowed_users);
@@ -277,6 +280,9 @@
if (find_default_str("authdir", &rot->authdir))
goto out_nomem;
+ if (find_default_str("pamauth", &rot->pamauth))
+ goto out_nomem;
+
if (find_default_str("allowed-users", &rot->default_allowed_users))
goto out_nomem;
@@ -297,6 +303,16 @@
goto out_nomem;
}
continue;
+ } else if (gensio_check_keyvalue(options[i], "pamauth", &str) > 0) {
+ if (rot->pamauth)
+ free(rot->pamauth);
+ rot->pamauth = strdup(str);
+ if (!rot->pamauth) {
+ eout->out(eout, "Out of memory allocating rotator"
+ " pamauth on line %d\n", lineno);
+ goto out_nomem;
+ }
+ continue;
} else if (gensio_check_keyvalue(options[i],
"allowed-users", &str) > 0) {
rv = add_allowed_users(&rot->allowed_users, str, eout);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/ser2net.c new/ser2net-4.3.11/ser2net.c
--- old/ser2net-4.3.5/ser2net.c 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/ser2net.c 2022-08-10 21:13:01.000000000 +0200
@@ -89,7 +89,7 @@
" -s - specify a default signature for RFC2217 protocol\n"
" -Y - Handle a yaml configuration string. This may be specified multiple\n"
" times; these strings are strung together as if they were one input\n"
-" string. This disables the defalt config file, you must specify -c\n"
+" string. This disables the default config file, you must specify -c\n"
" after the last -Y. The config file will be processed first, if it\n"
" is specified, then the -Y strings in order, as if they are one\n"
" continguous file. '#' characters outside of quotes will be converted\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/ser2net.h new/ser2net-4.3.11/ser2net.h
--- old/ser2net-4.3.5/ser2net.h 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/ser2net.h 2022-07-19 21:53:30.000000000 +0200
@@ -65,7 +65,7 @@
/*
* Handle authorization events from accepters.
*/
-int handle_acc_auth_event(const char *authdir,
+int handle_acc_auth_event(const char *authdir, const char *pamauth,
const struct gensio_list *allowed_users,
int event, void *data);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/ser2net.yaml new/ser2net-4.3.11/ser2net.yaml
--- old/ser2net-4.3.5/ser2net.yaml 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/ser2net.yaml 2022-07-19 21:53:30.000000000 +0200
@@ -280,6 +280,7 @@
# net-to-dev-bufsize: 64
# max-connections: 1
# authdir: <authentication directory>
+# pamauth: ""
# allowed-users: <space separated list of names>
# remaddr: <remote address>
# connback: <remote connector string>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/ser2net.yaml.5 new/ser2net-4.3.11/ser2net.yaml.5
--- old/ser2net-4.3.5/ser2net.yaml.5 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/ser2net.yaml.5 2022-08-14 23:39:32.000000000 +0200
@@ -15,7 +15,7 @@
YAML has the ability to create aliases that can be used elsewhere in
the configuration file. These can be used for tying things together
between parts of the file, or (as an extension to YAML) for string
-subtitution.
+substitution.
You define an alias with the following:
.IP
@@ -129,7 +129,7 @@
.RS
connection: &toS0telnet
.RS
-accepter: telnet(rfc2217)tcp,1234
+accepter: telnet(rfc2217),tcp,1234
.br
connector: serialdev,/dev/ttyS0,local
.RE
@@ -364,7 +364,7 @@
sets the number of serial port characters, in tenths of a character,
to wait after receiving from the connection gensio and sending to the
accepted gensio. So setting this to 25 will cause ser2net to wait the
-amount of time it takes to recieve 2.5 serial port characters before
+amount of time it takes to receive 2.5 serial port characters before
sending the data on to the TCP port. The default value is 20.
.I chardelay-min: <number>
@@ -421,11 +421,11 @@
.I no-con-to-acc: true|false
If true, do not transfer any data from the connector to the accepter.
-Throw any data recevied from the connecter away.
+Throw any data received from the connecter away.
.I no-acc-to-con: true|false
If true, do not transfer any data from the accepter to the connecter.
-Throw any data recevied from the accepter away.
+Throw any data received from the accepter away.
.I connback: <connector>[;<connector>[;...]]
specifies reverse connections that will be made when data comes in on
@@ -453,6 +453,9 @@
.I authdir: <directory string>
specified the authentication directory to use for this connection.
+.I pamauth: <service name>
+Enables PAM authentication and sets the PAM service name.
+
.I allowed-users: <space separated list of names>
The users that are allowed to use this connections. This has no
meaning if authentication is not enabled on the connections. If this
@@ -536,7 +539,7 @@
.RE
.RE
-A rotator has three possible options, "authdir", "allowed-users", and
+A rotator has four possible options, "authdir", "pamauth", "allowed-users", and
"accepter-retry-time", both same as connections.
You should use YAML aliases for the connections.
@@ -634,7 +637,7 @@
sets the number of serial port characters, in tenths of a character,
to wait after receiving from the serial port and sending to the TCP
port. So setting this to 25 will cause ser2net to wait the amount
-of time it takes to recieve 2.5 serial port characters before sending
+of time it takes to receive 2.5 serial port characters before sending
the data on to the TCP port. This can range from 1-1000.
.TP
.B chardelay-min: 1000
@@ -678,6 +681,13 @@
The authentication directory for ser2net for admin connections. The
"ADMIN_CONNECTIONS" for more details.
.TP
+.B pamauth: <NULL>
+The PAM service name for ser2net PAM authentication (<NULL> for disabled).
+.TP
+.B pamauth-admin: <NULL>
+The PAM service name for ser2net admin connection PAM authentication (<NULL>
+for disabled). See "ADMIN_CONNECTIONS" for more details.
+.TP
.B mdns-interface: -1
The default mDNS interface.
.TP
@@ -707,10 +717,10 @@
.RE
.RE
-The only option available is "authdir-admin", which sets the
-authentication directory for the admin port. This is different than
-the authdir for connections and rotators, though you can set it to the
-same value.
+The only options available are "authdir-admin", which sets the authentication
+directory for the admin port and "pamauth-admin" which sets the PAM service
+name and enables PAM authentication. Both are different than "authdir" resp.
+"pamauth" for connections, though you can set it to the same value.
.SH LEDS
.B ser2net
@@ -1137,14 +1147,18 @@
ask you to verify it, much like ssh does. If certificates, IP
address, etc. change, gtlssh will tell you about it.
-If you do not want to use a certificate (certificates are certainly
-preferred, but may not alway be workable) you can use a password
-login, too. Put a password in authdir/username/password. When
-you connect with gtlssh, if certificate validate fails, you will
-be prompted for the password. If it matches the first line in the
-password file, then authentication will succeed. You must set
-enable-password in the certauth gensio options for passwords
-to work.
+If you do not want to use a certificate (certificates are certainly preferred,
+but may not always be workable) you can use a password login, too. You must set
+enable-password in the certauth gensio options for passwords to work. When you
+connect with gtlssh, if certificate validate fails, you will be prompted for
+the password. Password authentication can be performed in two different ways.
+Both are mutually exclusive, depending on whether pamauth is set or not:
+.IP \(bu
+To authenticate using the PAM library set the PAM service name via pamauth
+option.
+.IP \(bu
+Put a password in authdir/username/password. If it matches the first line in
+the password file and pamauth is not set, then authentication will succeed.
.SS "AUTHENTICATION AND ROTATORS"
Rotators are a special case. BE CAREFUL. A rotator has its own
authentication. If you set up authentication on a port that is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/test-driver new/ser2net-4.3.11/test-driver
--- old/ser2net-4.3.5/test-driver 2020-02-05 15:31:03.000000000 +0100
+++ new/ser2net-4.3.11/test-driver 2022-03-18 14:09:08.000000000 +0100
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -42,11 +42,13 @@
{
cat <<END
Usage:
- test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--]
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
END
}
@@ -103,8 +105,11 @@
trap "st=141; $do_exit" 13
trap "st=143; $do_exit" 15
-# Test script is run here.
-"$@" >$log_file 2>&1
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+"$@" >>"$log_file" 2>&1
estatus=$?
if test $enable_hard_errors = no && test $estatus -eq 99; then
@@ -126,7 +131,7 @@
# know whether the test passed or failed simply by looking at the '.log'
# file, without the need of also peaking into the corresponding '.trs'
# file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>$log_file
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_ipmisol.py new/ser2net-4.3.11/tests/test_xfer_basic_ipmisol.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_ipmisol.py 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_ipmisol.py 2022-07-19 21:53:30.000000000 +0200
@@ -28,5 +28,5 @@
" accepter: tcp,3023",
" connector: ipmisol,lan -U ipmiusr -P test -p %d localhost,9600" % ipmisimdaemon.ipmisol_port),
"tcp,localhost,3023",
- "serialdev,/dev/ttyPipeA0,9600N81,LOCAL",
+ "serialdev,/dev/ttyPipeA0,9600N81,local",
switch_delay = 0.25)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_sctp.py new/ser2net-4.3.11/tests/test_xfer_basic_sctp.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_sctp.py 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_sctp.py 2022-07-19 21:53:30.000000000 +0200
@@ -12,7 +12,7 @@
test_write_drain("basic sctp", "This is a write drain test!",
("connection: &con",
" accepter: sctp,3023",
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
"sctp,localhost,3023",
"serialdev,/dev/ttyPipeB0,9600N81")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_ssl_tcp.py new/ser2net-4.3.11/tests/test_xfer_basic_ssl_tcp.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_ssl_tcp.py 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_ssl_tcp.py 2022-07-19 21:53:30.000000000 +0200
@@ -15,7 +15,7 @@
("connection: &con",
" accepter: ssl(key=%s/key.pem,cert=%s/cert.pem),tcp,3023"
% (utils.keydir, utils.keydir),
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
"ssl(CA=%s/CA.pem),tcp,localhost,3023" % utils.keydir,
"serialdev,/dev/ttyPipeB0,9600N81")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_stdio.py new/ser2net-4.3.11/tests/test_xfer_basic_stdio.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_stdio.py 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_stdio.py 2022-07-19 21:53:30.000000000 +0200
@@ -12,6 +12,6 @@
test_write_drain("basic stdio", "This is a write drain test!",
("connection: &con",
" accepter: stdio",
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
None,
"serialdev,/dev/ttyPipeB0,9600N81")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_tcp.py new/ser2net-4.3.11/tests/test_xfer_basic_tcp.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_tcp.py 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_tcp.py 2022-07-19 21:53:30.000000000 +0200
@@ -12,9 +12,9 @@
test_write_drain("basic tcp", "This is a write drain test!",
("connection: &con",
" accepter: tcp,3023",
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
"tcp,localhost,3023",
- "serialdev,/dev/ttyPipeB0,9600N81")
+ "serialdev,/dev/ttyPipeB0,9600N81,local")
test_connect_back("basic tcp", "TCP Connect back test!",
("connection: &con",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_telnet.py new/ser2net-4.3.11/tests/test_xfer_basic_telnet.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_telnet.py 2020-10-27 02:49:45.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_telnet.py 2022-07-19 21:53:30.000000000 +0200
@@ -12,7 +12,7 @@
test_write_drain("basic telnet", "This is a write drain test!",
("connection: &con",
" accepter: telnet,tcp,3023",
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
"telnet,tcp,localhost,3023",
"serialdev,/dev/ttyPipeB0,9600N81")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/test_xfer_basic_udp.py new/ser2net-4.3.11/tests/test_xfer_basic_udp.py
--- old/ser2net-4.3.5/tests/test_xfer_basic_udp.py 2022-01-17 18:59:00.000000000 +0100
+++ new/ser2net-4.3.11/tests/test_xfer_basic_udp.py 2022-07-19 21:53:30.000000000 +0200
@@ -15,7 +15,7 @@
test_write_drain("basic udp", "This is a write drain test!",
("connection: &con",
" accepter: udp,3023",
- " connector: serialdev,/dev/ttyPipeA0,9600N81"),
+ " connector: serialdev,/dev/ttyPipeA0,9600N81,local"),
"udp,localhost,3023",
"serialdev,/dev/ttyPipeB0,9600N81",
initial_write_io1 = "A")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ser2net-4.3.5/tests/utils.py new/ser2net-4.3.11/tests/utils.py
--- old/ser2net-4.3.5/tests/utils.py 2022-01-17 20:10:01.000000000 +0100
+++ new/ser2net-4.3.11/tests/utils.py 2022-11-02 15:54:47.000000000 +0100
@@ -196,7 +196,7 @@
else:
iolen = None
- if (debug or self.debug) and iolen != None:
+ if (debug or self.debug) and buf is not None and iolen != None:
print("%s: Got %d bytes at pos %d of %d" % (self.name, len(buf),
self.compared, iolen))
if (debug >= 2 or self.debug >= 2):
@@ -485,7 +485,10 @@
self.waiter.wake()
return
-import collections
+try:
+ import collections.abc as seqholder
+except:
+ import collections as seqholder
PY3 = sys.version_info[0] == 3
@@ -497,7 +500,7 @@
def is_nonstr_sequence(obj):
if isinstance(obj, string_types):
return False
- return isinstance(obj, collections.Sequence)
+ return isinstance(obj, seqholder.Sequence)
class Ser2netDaemon:
"""Create a ser2net daemon instance and start it up
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kdenlive for openSUSE:Factory checked in at 2022-12-30 11:08:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kdenlive (Old)
and /work/SRC/openSUSE:Factory/.kdenlive.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kdenlive"
Fri Dec 30 11:08:39 2022 rev:111 rq:1045745 version:22.12.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/kdenlive/kdenlive.changes 2022-12-09 16:59:19.056266759 +0100
+++ /work/SRC/openSUSE:Factory/.kdenlive.new.1563/kdenlive.changes 2022-12-30 11:08:58.573261211 +0100
@@ -1,0 +2,6 @@
+Thu Dec 29 19:13:15 UTC 2022 - Christophe Marin <christophe(a)krop.fr>
+
+- Add patch to prevent a designer-qt5 crash (boo#1206680):
+ * 0001-Fix-designer-plugin-crash.patch
+
+-------------------------------------------------------------------
New:
----
0001-Fix-designer-plugin-crash.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kdenlive.spec ++++++
--- /var/tmp/diff_new_pack.S4B2tx/_old 2022-12-30 11:08:59.273265395 +0100
+++ /var/tmp/diff_new_pack.S4B2tx/_new 2022-12-30 11:08:59.277265419 +0100
@@ -31,6 +31,8 @@
Source1: https://download.kde.org/stable/release-service/%{version}/src/%{name}-%{ve…
Source2: applications.keyring
%endif
+# PATCH-FIX-UPSTREAM
+Patch0: 0001-Fix-designer-plugin-crash.patch
BuildRequires: desktop-file-utils
BuildRequires: extra-cmake-modules
BuildRequires: fdupes
++++++ 0001-Fix-designer-plugin-crash.patch ++++++
From 78c216161f01fae3ebda62bcb27446ba386d1bbe Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Mardelle <jb(a)kdenlive.org>
Date: Mon, 12 Dec 2022 08:29:53 +0100
Subject: [PATCH] Fix designer plugin crash
---
src/widgets/colorpickerwidget.cpp | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/widgets/colorpickerwidget.cpp b/src/widgets/colorpickerwidget.cpp
index 18bb2e308..69bb7d3d1 100644
--- a/src/widgets/colorpickerwidget.cpp
+++ b/src/widgets/colorpickerwidget.cpp
@@ -84,14 +84,16 @@ ColorPickerWidget::ColorPickerWidget(QWidget *parent)
// Check wether grabWindow() works. On some systems like with Wayland it does.
// We fallback to the Freedesktop portal with DBus which has less features than
// our custom implementation (eg. preview and avarage color are missing)
- QPoint p(pCore->window()->geometry().center());
- foreach (QScreen *screen, QGuiApplication::screens()) {
- QRect screenRect = screen->geometry();
- if (screenRect.contains(p)) {
- QPixmap pm = screen->grabWindow(pCore->window()->winId(), p.x(), p.y(), 1, 1);
- qDebug() << "got pixmap that is not null";
- m_useDBus = pm.isNull();
- break;
+ if (pCore) {
+ QPoint p(pCore->window()->geometry().center());
+ foreach (QScreen *screen, QGuiApplication::screens()) {
+ QRect screenRect = screen->geometry();
+ if (screenRect.contains(p)) {
+ QPixmap pm = screen->grabWindow(pCore->window()->winId(), p.x(), p.y(), 1, 1);
+ qDebug() << "got pixmap that is not null";
+ m_useDBus = pm.isNull();
+ break;
+ }
}
}
--
2.39.0
1
0