summaryrefslogtreecommitdiff
path: root/source3/passdb/pdb_interface.c
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@us.ibm.com>2012-04-24 14:42:28 -0700
committerVolker Lendecke <vl@samba.org>2012-04-30 11:30:29 +0200
commit6e583c72cc0c235a997c700342e8dc14cb65ec29 (patch)
treeabf20ddf92e6b0956ec1801964f7e0b0f06b5a09 /source3/passdb/pdb_interface.c
parentdabb0562500bb83ded8243705065c4ef6ebb5049 (diff)
downloadsamba-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.c34
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)