« 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)
38 lines
1.4 KiB
Bash
Executable file
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
|
|
}
|