diff options
author | Christof Schmitt <christof.schmitt@us.ibm.com> | 2012-04-24 14:42:28 -0700 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2012-04-30 11:30:29 +0200 |
commit | 6e583c72cc0c235a997c700342e8dc14cb65ec29 (patch) | |
tree | abf20ddf92e6b0956ec1801964f7e0b0f06b5a09 /source3/passdb/pdb_interface.c | |
parent | dabb0562500bb83ded8243705065c4ef6ebb5049 (diff) | |
download | samba-6e583c72cc0c235a997c700342e8dc14cb65ec29.tar.gz samba-6e583c72cc0c235a997c700342e8dc14cb65ec29.tar.bz2 samba-6e583c72cc0c235a997c700342e8dc14cb65ec29.zip |
passdb: Do not panic in initialize_password_db
A call to initialize_password_db leads to smb_panic in case the backend
returns an error. All callers to initialize_password_db check the return
value, so this code path should return the status instead of calling
smb_panic.
Move the call to smb_panic from pdb_get_methods_reload pdb_get_methods
to get it out of the initialize code path. This allows printing the
proper error message for 'net getlocalsid' which is much nicer than
printing the panic stack trace.
Diffstat (limited to 'source3/passdb/pdb_interface.c')
-rw-r--r-- | source3/passdb/pdb_interface.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index c5fe56c87d..e2fc67981e 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -196,27 +196,13 @@ static struct pdb_methods *pdb_get_methods_reload( bool reload ) if ( pdb && reload ) { pdb->free_private_data( &(pdb->private_data) ); if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) { - char *msg = NULL; - if (asprintf(&msg, "pdb_get_methods_reload: " - "failed to get pdb methods for backend %s\n", - lp_passdb_backend()) > 0) { - smb_panic(msg); - } else { - smb_panic("pdb_get_methods_reload"); - } + return NULL; } } if ( !pdb ) { if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) { - char *msg = NULL; - if (asprintf(&msg, "pdb_get_methods_reload: " - "failed to get pdb methods for backend %s\n", - lp_passdb_backend()) > 0) { - smb_panic(msg); - } else { - smb_panic("pdb_get_methods_reload"); - } + return NULL; } } @@ -225,7 +211,21 @@ static struct pdb_methods *pdb_get_methods_reload( bool reload ) static struct pdb_methods *pdb_get_methods(void) { - return pdb_get_methods_reload(False); + struct pdb_methods *pdb; + + pdb = pdb_get_methods_reload(false); + if (!pdb) { + char *msg = NULL; + if (asprintf(&msg, "pdb_get_methods: " + "failed to get pdb methods for backend %s\n", + lp_passdb_backend()) > 0) { + smb_panic(msg); + } else { + smb_panic("pdb_get_methods"); + } + } + + return pdb; } struct pdb_domain_info *pdb_get_domain_info(TALLOC_CTX *mem_ctx) |