erplibre/script/lib_odoo_rc.sh
Mathieu Benoit b7d68cd199 [FIX] odoo_bin : lire le config.conf du dépôt, pas le ~/.odoorc
« odoo_bin.sh db --drop » échoue par AccessDenied à chaque palier de
migration, et le clone bute ensuite sur « database already exists ».

db_restore.py lit ./config.conf, y voit « admin_passwd = admin » et
n'envoie donc aucun mot de passe ; odoo_bin.sh ne passait pas de « -c »,
donc Odoo lisait ~/.odoorc, qui porte un mot de passe haché.

ODOO_RC ferme la couture en un point plutôt qu'à vingt sites d'appel :
les versions 12 à 18 le lisent après « -c » et avant ~/.odoorc, donc un
choix explicite l'emporte. Vérifié : le drop passe, la précédence est testée.

--- EN ---

"odoo_bin.sh db --drop" fails with AccessDenied at every migration step,
and the clone then hits "database already exists".

db_restore.py reads ./config.conf, sees "admin_passwd = admin" and so
sends no master password; odoo_bin.sh passed no "-c", so Odoo read
~/.odoorc, which carries a hashed password.

ODOO_RC closes the seam in one place instead of twenty call sites:
versions 12 to 18 read it after "-c" and before ~/.odoorc, so an explicit
choice wins. Verified: the drop succeeds, and a test covers precedence.

Assisted-by: Claude Opus 5
(cherry picked from commit 9503d80982b725034513b610b527f29d49025381)
2026-08-29 02:11:04 -04:00

38 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
#
# Quel fichier de configuration Odoo doit lire, quand personne ne le dit.
#
# Sans cela, Odoo retombe sur ~/.odoorc — un fichier PERSONNEL, hors du
# dépôt, que rien ne synchronise avec `config.conf`. Mesuré : un ~/.odoorc
# portant un mot de passe maître haché faisait échouer
# « odoo_bin.sh db --drop » par AccessDenied, alors que db_restore.py
# venait de lire `admin_passwd = admin` dans config.conf et d'en conclure
# qu'aucun mot de passe n'était nécessaire. Les deux avaient raison : ils
# ne parlaient pas du même fichier.
#
# La précédence d'Odoo est la même en 12 et en 18 (tools/config.py) :
#
# self.config_file or opt.config or ODOO_RC or OPENERP_SERVER or ~/.odoorc
#
# Poser ODOO_RC ne retire donc rien à personne : un « -c » explicite
# l'emporte toujours, et un ODOO_RC déjà posé n'est pas écrasé.
#
# L'ordre des candidats est celui de db_restore.py, pour que la
# vérification qu'il fait porte sur le fichier qu'Odoo lira vraiment.
odoo_rc_resolve() {
if [[ -n "${ODOO_RC:-}" ]]; then
return 0
fi
local racine="${1:-$(pwd)}"
local candidat
for candidat in "${racine}/config.conf" /etc/odoo/odoo.conf; do
if [[ -f "${candidat}" ]]; then
export ODOO_RC="${candidat}"
return 0
fi
done
return 0
}