osmo-hlr (1.3.1) unstable; urgency=medium

  * debian/control: remove dh-systemd build-depend

 -- Oliver Smith <osmith@sysmocom.de>  Mon, 06 Sep 2021 15:48:52 +0200

osmo-hlr (1.3.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * hlr: respect the num_auth_vectors requested
  * hlr: remove unused internal USSD list

  [ Oliver Smith ]
  * add libosmo-mslookup abstract client
  * add mDNS lookup method to libosmo-mslookup
  * Makefile.am: fix pkgconfig_DATA
  * add mDNS lookup method to libosmo-mslookup (#2)
  * contrib/dgsm/ add example esme and dialplan
  * mslookup_client.c: fix dereferencing null pointer
  * mdns_msg.c: always call va_end
  * mslookup_client_mdns.c: fix dereferencing null
  * osmo-mslookup-client.c: fix dereferencing null
  * osmo-mslookup-client: fix dereferencing null
  * mdns_sock.c: fix resource leak of sock
  * mdns_rfc.c: fix possible access of uninit. mem
  * mslookup_client_mdns_test: disable by default
  * mslookup_client_mdns_test: no automatic skip
  * Cosmetic: mention OS#4491 in location cancel code
  * hlr_vty_subscr: prettier output for last LU seen
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
  * contrib/jenkins: don't build osmo-gsm-manuals
  * configure.ac: set -std=gnu11

  [ Neels Hofmeyr ]
  * add osmo-mslookup-client program
  * add osmo-mslookup-client program (#2)
  * fix missing braces in LOGP_GSUP_FWD
  * gsup_client.c: fix deprecation for client create func
  * 1/2: refactor: add and use lu_fsm, osmo_gsup_req, osmo_ipa_name
  * 2/2: wrap ipa_name in osmo_cni_peer_id with type enum and union
  * gsup client: add up_down_cb(), add osmo_gsup_client_create3()
  * db v5: prep for D-GSM: add vlr_via_proxy and sgsn_via_proxy
  * enlarge the GSUP message headroom
  * test_nodes.vty: remove cruft
  * D-GSM 1/n: add mslookup server in osmo-hlr
  * D-GSM 2/n: implement mDNS method of mslookup server
  * D-GSM 3/n: implement roaming by mslookup in osmo-hlr
  * gsup_server: send routing error back to the correct peer
  * adoc: add D-GSM chapter to osmohlr-usermanual
  * drop error log for when a subscriber does not exist
  * vty: show subscriber: change format of 'last LU seen'
  * vty: show subscriber: show lu d,h,m,s ago, not just seconds
  * auc3g: officially wrap IND around IND_bitlen space
  * make osmo_cni_peer_id_cmp() NULL safe
  * osmo_gsup_req_new(): require from_peer != NULL
  * gsup_server.c: properly handle negative rc from osmo_gsup_conn_ccm_get()
  * osmo_mslookup_server_mdns_rx(): handle read() rc == 0
  * hlr_subscr_nam(): fix condition to fix nam=false notifications
  * esme_dgsm.py: add --always-fail option for debugging SMPP
  * osmo-mslookup-client: fix segfault for respond_error() caller
  * manual: describe subscriber import by SQL

  [ Harald Welte ]
  * Revert "add osmo-mslookup-client program"
  * Revert "add mDNS lookup method to libosmo-mslookup"
  * Use OSMO_FD_* instead of deprecated BSC_FD_*
  * support the XOR algorithm for UMTS AKA
  * auc_test.c: Add some comments on what the test cases actually do
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * manuals: generate vty reference xml at build time

  [ Vadim Yanitskiy ]
  * db: fix possible SQLite3 allocated memory leak in db_open()
  * gsup_server: fix typo: s/omso_gsup_message/osmo_gsup_message/
  * debian/control: change maintainer to the Osmocom team / mailing list
  * cosmetic: fix spelling in logging message: existAnt -> existEnt
  * doc/manuals: fix s/There/The/ in 'USSD Configuration'
  * doc/manuals: re-organize description of internal USSD handlers
  * USSD: fix handle_ussd(): do not free() unconditionally
  * USSD: add special 'idle' handler to IUSE for testing

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer

  [ Philipp Maier ]
  * doc: do not use loglevel info for log category ss

  [ Pau Espin Pedrol ]
  * configure.ac: Fix trailing whitespace
  * doc: Update VTY reference xml file
  * Support setting rt-prio and cpu-affinity mask through VTY
  * Set TCP NODELAY sockopt to GSUP cli and srv connections
  * contrib/jenkins: Enable parallel make in make distcheck
  * .gitignore: Ignore new autofoo tmp files
  * tests: Replace deprecated API log_set_print_filename

  [ Keith ]
  * osmo-hlr-db-tool: Make import from osmo-nitb less "lossy"
  * Correct vty inline help for show subscriber
  * Add vty command to show summary of all or filtered subscribers
  * Fix Coverity Warnings

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 23 Feb 2021 18:13:53 +0100

osmo-hlr (1.2.0) unstable; urgency=medium

  [ Ruben Undheim ]
  * Fix test for return codes on mipsel and alpha archs

  [ Thorsten Alteholz ]
  * fix spelling errors detected by lintian

  [ Pau Espin Pedrol ]
  * tests: Fix db_test err file to expect error code name instead of value

  [ Oliver Smith ]
  * tests/test_nodes.vty: check less libosmocore cmds
  * tests/db_upgrade: disable for old sqlite versions
  * gitignore: add tests/db_upgrade/*.dump
  * gsup_client.h: fix license header: GPLv2+
  * tests/auc: change back to python3

  [ Neels Hofmeyr ]
  * fix double free in osmo_gsup_client_enc_send()
  * db upgrade to v2: log version 2, not 1
  * fix upgrade to version 2: imei column default value
  * add --db-check option
  * hlr.sql: move comment
  * add db_upgrade test
  * hlr db schema 3: hlr_number -> msc_number
  * db.c: code dup: add db_run_statements() for arrays of statements
  * move headers to include/osmocom/hlr
  * fix upgrade test in presence of ~/.sqliterc
  * db upgrade: remove some code dup
  * add osmo_gsup_msgb_alloc()
  * Makefile convenience: add VTY_TEST var to run only one test
  * remove gsup_test
  * test_nodes.vty: tweak: add some '?' checks
  * db v4: add column last_lu_seen_ps

  [ Harald Welte ]
  * AUC: Add support for setting the AMF separation bit to '1' for EUTRAN
  * hlr: exit(2) on unsupported positional arguments on command line

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 12:37:35 +0100

osmo-hlr (1.1.0) unstable; urgency=medium

  [ Oliver Smith ]
  * docs: running: document --db-upgrade
  * Add IMEI column to subscriber table
  * Optionally store IMEI in subscriber table
  * VTY tests: fill DB before running test
  * VTY: integrate IMEI
  * hlr.c: replace deprecated osmo_gsup_get_err_msg_type()
  * hlr.c: move hlr_ctx to the top
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * Cosmetic: gsup_route_find: comment addr, addrlen
  * USSD: save MO USSD's originating MSC's vlr_number
  * USSD: don't use gsm0480_msgb_alloc_name()
  * hlr.c: forward GSUP messages between clients
  * db_hlr.c: db_subscr_create(): add flags argument
  * db_hlr.c: add db_subscr_exists_by_imsi()
  * Create subscribers on demand
  * Document subscribers create on demand feature
  * debian: create -doc subpackage with pdf manuals
  * db_test: set timezone to work around mktime bug
  * db_hlr: zero-initialize "struct tm"
  * rx_check_imei_req(): fix IMEI bounds checking
  * contrib/jenkins.sh: run "make maintainer-clean"
  * VTY: add subscriber update network-access-mode
  * manuals: improve subscribers create on demand
  * gitignore: ignore everything generated in db_test
  * db_auc.c: verify hex key sizes read from DB

  [ Max ]
  * Log ip:port when adding GSUP routes
  * Add link to project wiki to .service file
  * Enable statsd support

  [ Vadim Yanitskiy ]
  * hlr.c: properly terminate the process on SIGTERM
  * hlr.c: fix: also store the session state in read_cb_forward()
  * hlr.c: fix: properly print the original message type in read_cb_forward()
  * hlr.c: check the presence of msgb->l2h in read_cb()
  * hlr.c: fix possible msgb memleaks in read_cb()
  * db_hlr.c: add db_subscr_exists_by_msisdn()
  * src/db.h: use GSM23003_MSISDN_MAX_DIGITS for MSISDN buffer size
  * src/hlr.c: fix deprecation warning: use gsm48_decode_bcd_number2()
  * hlr_ussd.c: fix: properly pass invokeID in handle_ussd_own_msisdn()
  * hlr_ussd.c: rx_proc_ss_req(): fix NULL pointer dereference
  * build: fix mess with 'db_test_SOURCES' and 'db_test_LDADD'
  * tests/db_test: close the database when test is finished
  * src/db.c: integrate SQLite3 with talloc allocator

  [ Neels Hofmeyr ]
  * USSD: fix routing to multiple MSC
  * fix error logging for GSUP route
  * add missing error log: invalid IMSI
  * osmo-hlr: allow configuring db path from cfg file
  * use new OSMO_IMSI_BUF_SIZE

  [ Daniel Willmann ]
  * manuals: Add script to update vty/counter documentation from docker
  * manuals: Update vty documentation

  [ Pau Espin Pedrol ]
  * Remove undefined param passed to logging_vty_add_cmds
  * configure.ac: Require libosmocore 1.2.0

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 16:14:23 +0200

osmo-hlr (1.0.0) unstable; urgency=medium

  [ Stefan Sperling ]
  * move creation of insert subscriber data messages to a common function

  [ Harald Welte ]
  * Return proper GSUP error in case of too short IMSI
  * disable blind subscriber insertion into every VLR/SGSN
  * gsup_server: Add "priv" pointer and make it point to 'struct hlr'
  * move osmo_gsup_addr_send() declaration from luop.h to gsup_router.h
  * gsup_router: Use "#pragma once" and add missing #includes
  * Add "show gsup-connections" VTY command
  * import gsup_client.c as new libosmo-gsup-client
  * gsup_client: rename gsup_client_* to osmo_gsup_client_*
  * GSUP: Log GSUP route add/remove
  * hlr: Export + Declare global g_hlr symbol
  * USSD: Add Core USSD handling + VTY routing config to HLR
  * USSD: Add basic dispatch + decode of GSUP-encapsulated SS/USSD
  * hlr_ussd: Introduce LOGPSS() macro
  * USSD: Send ReturnError component if USSD Code unknown / EUSE disconnected
  * USSD: Further unification of log output; Use LOGPSS when possible
  * osmo-hlr.cfg: Don't enable DEBUG logging by default
  * USSD: Add new "DSS" logging category and use it appropriately
  * USSD: fix null-pointer deref in "default-route" vty/config cmd
  * Add osmo-euse-demo as minimalistic test of a External USSD (EUSE) handler
  * USSD: Add support for internal USSD handlers
  * debian: Add sub-package for libosmo-gsup-client
  * pkg-config: Fix libosmo-gsup-client pkg-config file
  * gitignore: Add .tarball-version
  * debian: Make libosmo-gsup-client-dev depend on libosmo-gsup-client0
  * USSD: Fix "ussd default-route"
  * libosmo-gsup-client: License is GPLv2-or-later
  * osmo-hlr.cfg: Ensure well-formed config file example
  * test_nodes.vty: Since libosmocore 1.0.0, we only have one space

  [ Martin Hauke ]
  * sql/Makefile.am: Make docsdir completely configurable
  * debian: Fix typo in package description

  [ Pau Espin Pedrol ]
  * debian: Avoid installing duplicate cfg file in /etc
  * sql/Makefile: Install hlr_data.sql as example together with hlr.sql
  * sql/Makefile: Install sql files under doc/.../sql subdir
  * sql/Makefile: Create empty /var/lib/osmocom directory at install time
  * Install systemd services with autotools
  * Move doc/Makefile.am to doc/examples/Makefile.am
  * Install sample cfg file to /etc/osmocom

  [ Vadim Yanitskiy ]
  * hlr.c: move deinitialization code from SIGINT handler
  * hlr.c: free root talloc context on exit
  * hlr.c: track the use of talloc NULL memory contexts
  * src/db.c: fix: make sure the database is properly closed
  * src/db.c: don't ignore the result of db_bootstrap()
  * hlr_vty_subscr.c: fix subscriber creation command help
  * Update .gitignore: add missing build products
  * tests/Makefile.am: also remove temporary sqlite files
  * hlr_ussd.h: add #pragma once include guard
  * hlr_ussd.h: use proper libc headers
  * Update .gitignore: ignore osmo-euse-demo
  * hlr_ussd.h: drop meaningless forward declaration
  * USSD/hlr_vty.c: print error if EUSE is not found
  * hlr_ussd.c: fix: properly print a EUSE / IUSE name
  * hlr_ussd.c: avoid using CR and NL in IUSE responses

  [ Neels Hofmeyr ]
  * fix build: adjust test_nodes.vty to logging change
  * tweak example config
  * make: always allow running python tests manually

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 19:29:58 +0100

osmo-hlr (0.2.1) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * fix luop crash: use buffer for APN that remains valid
  * add gsup_test to catch OS#3231
  * add error handling to osmo_gsup_configure_wildcard_apn()

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 04 May 2018 18:41:35 +0200

osmo-hlr (0.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * vty: skip installing cmds now always installed by default
  * hlr_db_tool: fix error log strerror invocation
  * cosmetic: add comment on ignored return value
  * db-tool: add command 'create'
  * db-tool: cosmetic: tweak printf output
  * db-tool: error-exit on too many arguments
  * add --enable-sanitize config option
  * db_test: don't verify SQLite issued error messages, they might change
  * cosmetic: rx_send_auth_info(): decide error cause with switch()
  * return GMM_CAUSE_IMSI_UNKNOWN if there is no auth data
  * db_get_auth_data / db_get_auc: clarify return values
  * osmo-hlr: log details for unknown IMSI / no auth data / db error
  * db_test: also test db_get_auc() return values
  * fix test_subscriber_errors.ctrl after libosmocore change
  * fix debug log: put 'deriving 2G from 3G' in proper place
  * ctrl test: fix: adjust expectations after stricter ctrl parsing
  * fix build: db_test: missing LIBOSMOABIS_CFLAGS and _LIBS
  * configure: add --enable-werror
  * jenkins.sh: use --enable-werror configure flag, not CFLAGS

  [ Harald Welte ]
  * hlr.c: Avoid overflow of lu_operation.subscr.imsi
  * Fix expected test output after new 'logging print file 1' vty command
  * osmo-hlr: Add talloc context introspection via VTY
  * vty: Don't print error if removing auth data while none present
  * Fix responses to PURGE MS

  [ Alexander Couzens ]
  * debian: include systemd service osmo-hlr.service
  * doc: install example .cfg files to $(docdir)/examples/
  * debian: install osmo-hlr.cfg to /etc/osmocom

  [ Max ]
  * Remove unused check
  * Remove unused ipa.py
  * Enable sanitize for CI tests

  [ Pau Espin Pedrol ]
  * luop.c: Transform FIXME from warning to pragma message
  * contrib:jenkins.sh: Enable Werror
  * use osmo_init_logging2
  * Remove unused src/db_test.c

  [ Alexander Huemer ]
  * Add missing build products in .gitignore

  [ Stefan Sperling ]
  * more robust usage of osmo_timer API for osmo-hlr luop timer
  * notify GSUP clients when HLR subscriber information changes
  * rewrite subscriber_update_notify() without calls into luop
  * don't forget to mark luop as a packet switched connection

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 16:27:13 +0200

osmo-hlr (0.1.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * build with autoconf/automake, add jenkins.sh script
  * fix build on FreeBSD: eliminate implicitly declared functions
  * fix various compiler warnings
  * fix DLGSUP logging cat after change in libosmocore
  * build: recoin db_test as non-installable program
  * build: actually make sqlite mandatory
  * bump required libosmocore version to 0.9.5
  * gsup: send subscriber MSISDN
  * debug log: log computed vector kinds
  * log: move a log from info to debug level
  * hlr.sql: typo in comment
  * auc.c: typo in comment
  * main: add and use root talloc ctx
  * main: add option parsing with db file and default options
  * main: add VTY and '-c config-file' option
  * sql: fix 3g_auc's column K data type
  * cosmetic: sql: indicate VARCHAR size of key columns as 32
  * sql: auc_3g: set sqn NOT NULL DEFAULT 0
  * comment: sql: describe auc_2g and auc_3g columns
  * Add test suite skeleton with empty test (auc_3g_test)
  * tests: auc_3g_test: implement vector generation test
  * auth: verify test sets from 3GPP TS 55.205
  * sql: add unique constraints to IMSI and MSISDN
  * UMTS AKA resync: fix argument ordering
  * auc_3g_test: add AUTS resync test
  * auc_gen_vectors(): ensure sane arguments, test
  * auc_3g_test: allow to inc fake rand bytes upon rand request
  * auc_3g_test: add AUTS test with N vectors, to show bug
  * cosmetic: refactor auc_compute_vectors(), add debug log
  * auc_compute_vectors(): fix AUTS resync for multiple vectors
  * cosmetic: auc_3g_test: improve test debugging tools
  * cosmetic: rename auc_3g_test.c to auc_test.c
  * fix: properly handle error rc by osmo_gsup_conn_ccm_get()
  * auc tests: adjust cosmetically to prepare for SQN changes
  * auc tests: fix after SQN scheme changes from libosmocore
  * fix debug log: adjust to new SQN increment scheme
  * UMTS AKA: implement SQN increment according to SEQ and IND
  * debug log: output ind slot, previous sqn, and sqn db update
  * jenkins: add value_string termination check
  * fix db_subscr_ps error handling
  * add config example (mostly empty)
  * install hlr.sql in prefix/doc/osmo-hlr/
  * use OSMO_GSUP_PORT == 4222 instead of hardcoded 2222
  * add basic CTRL interface tests
  * add CTRL tests for enable-/disable-/status-ps
  * cosmetic: prepend DB_STMT_ to enum stmt_idx entries
  * cosmetic: rename db_subscr_get() to db_subscr_get_by_imsi()
  * cosmetic: refactor db_bind_imsi() as db_bind_text()
  * cosmetic: multi-line DB_STMT_AUC_BY_IMSI
  * cosmetic: log IMSI='<imsi>', log "no such subscriber"
  * cosmetic: log: "SQLite" with capital L
  * cosmetic: db_hlr: SL3_TXT: clarify indenting
  * ctrl_test_runner.py: use proper constant as test db path
  * gitignore: tests/package.m4
  * cosmetic: don't log about missing SQLite log cb
  * add db_bind_int() and db_bind_int64()
  * add db_subscr_create(), db_subscr_delete(), db_subscr_update_msisdn_by_imsi()
  * add initial db_test: creating and deleting subscribers
  * less noise: simplify db_remove_reset()
  * db: use int64_t as subscriber id
  * add db_subscr_get_by_msisdn() and db_subscr_get_by_id()
  * refactor db_subscr_ps() to db_subscr_nam()
  * refactor db_subscr_lu()
  * refactor db_subscr_purge
  * add db_subscr_update_aud_by_id(), complete db_subscr_delete_by_id()
  * refactor db_get_auth_data return val
  * code undup: use db_remove_reset() in db_auc.c
  * fix db_update_sqn(): reset stmt in all error cases
  * code undup: use db_bind_text() in db_get_auth_data()
  * debian: 'make check' needs sqlite3, add to Build-Depends
  * fix db_subscr_get_by_*(): clear output data; test in db_test.c
  * implement subscriber vty interface, tests
  * add test_nodes.vty
  * replace ctrl_test_runner.py with transcript test_subscriber.ctrl
  * add lu_op_free(), use in luop.c
  * luop: fix mem leak upon error in lu_op_alloc_conn()
  * fix mem leak in handle_cmd_ps(): free luop
  * api doc: say that lu_op_tx_del_subscr_data() doesn't free
  * add hlr_subsrc_nam to put GSUP client notification in proper API
  * vty: fix output of empty IMSI
  * db api: fix/add API docs
  * cosmetic: tweak params of hlr_controlif_setup()
  * ctrl: completely replace all CTRL commands
  * test_subscriber.ctrl: test against octal/hex interpretation of id
  * jenkins: use osmo-clean-workspace.sh before and after build
  * tests/Makefile: use test db var instead of repeating the path
  * db_test: fix *FLAGS
  * automatically create db tables on osmo-hlr invocation
  * cosmetic: sql/hlr.sql: move comments
  * cosmetic: rename SL3_TXT macro, use osmo_strlcpy()
  * fix default logging levels to NOTICE, not DEBUG
  * add osmo-hlr-db-tool, program to migrate from osmo-nitb db

  [ Max ]
  * Add gerrit settings
  * Add hardcoded APN
  * Log error cause as a string
  * Move GSUP msg init into separate function
  * Use strings for GSUP message type
  * Move lu_operation into separate file
  * db: move duplicated code into helper functions
  * Fix compiler's warning about printf security
  * Add routines to update nam_ps
  * Add global HLR struct
  * Make subscr parameter to db_subscr_get() optional
  * Add CTRL interface
  * CTRL: add enable/disable packet service cmds
  * Add .deb packaging
  * deb: fix OBS build
  * debian: remove obsolete dependency
  * Attempt to fix .deb package
  * deb: use python in shebang
  * Another attempt at fixing .deb
  * Use release helper from libosmocore
  * Use value string check from osmo-ci

  [ Daniel Willmann ]
  * Add systemd service file
  * hlr_data.sql: Insert ki and opc instead of op to example data
  * tests/auc: Don't require python3

  [ Pau Espin Pedrol ]
  * VTY: Add hlr node and bind ip field
  * debian: remove unneeded dependency libdbd-sqlite3

  [ Harald Welte ]
  * jenkins.sh: Proper error message if local environment isn't set up

  [ Alexander Couzens ]
  * debian/rules: show testsuite.log when tests are failing

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 20:37:33 +0200

osmo-hlr (0.0.1) UNRELEASED; urgency=low

     * Initial release (Closes: OS#1948)

 -- Max Suraev <msuraev@sysmocom.de>  Mon, 13 Mar 2017 16:26:41 +0200
