diff options
Diffstat (limited to 'src/lib/kdb')
-rw-r--r-- | src/lib/kdb/Makefile.in | 14 | ||||
-rw-r--r-- | src/lib/kdb/err_handle.c | 210 | ||||
-rw-r--r-- | src/lib/kdb/err_handle.h | 37 | ||||
-rw-r--r-- | src/lib/kdb/kdb5.c | 37 | ||||
-rw-r--r-- | src/lib/kdb/kdb5.h | 22 | ||||
-rw-r--r-- | src/lib/kdb/libkdb5.exports | 2 |
6 files changed, 35 insertions, 287 deletions
diff --git a/src/lib/kdb/Makefile.in b/src/lib/kdb/Makefile.in index 78c2970..5efd65b 100644 --- a/src/lib/kdb/Makefile.in +++ b/src/lib/kdb/Makefile.in @@ -25,8 +25,6 @@ SHLIB_EXPLIBS=-lkrb5 -lcom_err -lk5crypto $(SUPPORT_LIB) $(DL_LIB) $(LIBS) SHLIB_DIRS=-L$(TOPLIBD) SHLIB_RDIRS=$(KRB5_LIBDIR) -all:: - adb_err.$(OBJEXT): adb_err.c adb_err.c adb_err.h: $(srcdir)/adb_err.et @@ -37,7 +35,6 @@ SRCS= \ $(srcdir)/kdb_default.c \ $(srcdir)/kdb_cpw.c \ adb_err.c \ - $(srcdir)/err_handle.c \ $(srcdir)/keytab.c STOBJLISTS=OBJS.ST @@ -48,7 +45,6 @@ STLIBOBJS= \ kdb_default.o \ kdb_cpw.o \ adb_err.o \ - err_handle.o \ keytab.o all-unix:: all-liblinks @@ -70,7 +66,7 @@ kdb5.so kdb5.po $(OUTPRE)kdb5.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/kdb.h \ $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - adb_err.h err_handle.h kdb5.c kdb5.h + adb_err.h kdb5.c kdb5.h encrypt_key.so encrypt_key.po $(OUTPRE)encrypt_key.$(OBJEXT): \ $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5.h \ $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ @@ -105,14 +101,6 @@ kdb_cpw.so kdb_cpw.po $(OUTPRE)kdb_cpw.$(OBJEXT): $(BUILDTOP)/include/autoconf.h kdb_cpw.c adb_err.so adb_err.po $(OUTPRE)adb_err.$(OBJEXT): $(COM_ERR_DEPS) \ adb_err.c -err_handle.so err_handle.po $(OUTPRE)err_handle.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-locate.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - err_handle.c err_handle.h keytab.so keytab.po $(OUTPRE)keytab.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ $(BUILDTOP)/include/krb5.h $(BUILDTOP)/include/osconf.h \ $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-err.h \ diff --git a/src/lib/kdb/err_handle.c b/src/lib/kdb/err_handle.c deleted file mode 100644 index 50b8a2a..0000000 --- a/src/lib/kdb/err_handle.c +++ /dev/null @@ -1,210 +0,0 @@ -/********************************************************************** -* -* C %name: err_handle.c % -* Instance: idc_sec_1 -* Description: -* %created_by: spradeep % -* %date_created: Thu Apr 7 14:05:00 2005 % -* -**********************************************************************/ -#ifndef lint -static char *_csrc = - "@(#) %filespec: err_handle.c~1 % (%full_filespec: err_handle.c~1:csrc:idc_sec#1 %)"; -#endif - -/* This file should be ideally be in util/et. But, for now thread - safety requirement stops me from putting there. if I do, then all - the applications have to link to pthread. */ - -#include "autoconf.h" -#if defined(ENABLE_THREADS) && defined(HAVE_PTHREAD_H) -#include <pthread.h> -#endif -#include "err_handle.h" -#include <assert.h> - -#ifdef NOVELL -krb5_errcode_2_string_func old_error_2_string = NULL; -#endif - -typedef struct -{ - char krb5_err_str[KRB5_MAX_ERR_STR + 1]; - long err_code; - krb5_err_subsystem subsystem; - krb5_context kcontext; -} krb5_err_struct_t; - -#if defined(ENABLE_THREADS) && defined(HAVE_PTHREAD_H) -static void -tsd_key_destructor(void *data) -{ - free(data); -} - -static void -init_err_handling(void) -{ - assert(!k5_key_register(K5_KEY_KDB_ERR_HANDLER, tsd_key_destructor)); -#ifdef NOVELL - old_error_2_string = error_message; - error_message = krb5_get_err_string; -#endif -} - -static pthread_once_t krb5_key_create = PTHREAD_ONCE_INIT; - -krb5_error_code -krb5_set_err(krb5_context kcontext, krb5_err_subsystem subsystem, - long err_code, char *str) -{ - int ret; - krb5_err_struct_t *err_struct; - pthread_once(&krb5_key_create, init_err_handling); - - err_struct = (krb5_err_struct_t *) k5_getspecific(K5_KEY_KDB_ERR_HANDLER); - if (err_struct == NULL) { - err_struct = calloc(sizeof(krb5_err_struct_t), 1); - if (err_struct == NULL) - return ENOMEM; - - if ((ret = k5_setspecific(K5_KEY_KDB_ERR_HANDLER, err_struct))) { - free(err_struct); - return ret; - } - } - - err_struct->subsystem = subsystem; - err_struct->err_code = err_code; - err_struct->kcontext = kcontext; - if (err_struct->subsystem == krb5_err_have_str) { - strncpy(err_struct->krb5_err_str, str, - sizeof(err_struct->krb5_err_str)); - err_struct->krb5_err_str[KRB5_MAX_ERR_STR] = '\0'; - } - - return 0; -} - -const char *KRB5_CALLCONV -krb5_get_err_string(long err_code) -{ - krb5_err_struct_t *err_struct; - pthread_once(&krb5_key_create, init_err_handling); - - err_struct = (krb5_err_struct_t *) k5_getspecific(K5_KEY_KDB_ERR_HANDLER); - if (err_struct && (err_struct->subsystem == krb5_err_have_str) - && (err_code == err_struct->err_code)) { - /* Checking error code is for safety. - In case, the caller ignores a database error and calls - other calls before doing com_err. Though not perfect, - caller should call krb5_clr_error before this. */ - err_struct->subsystem = krb5_err_unknown; - return err_struct->krb5_err_str; - } - - if (err_struct && (err_struct->subsystem == krb5_err_db) - && (err_code == err_struct->err_code)) { - err_struct->subsystem = krb5_err_unknown; - return krb5_db_errcode2string(err_struct->kcontext, err_code); - } - - /* Error strings are not generated here. the remaining two cases - are handled by the default error string convertor. */ -#ifdef NOVELL - return old_error_2_string(err_code); -#else - return error_message(err_code); -#endif -} - -void -krb5_clr_error() -{ - krb5_err_struct_t *err_struct; - pthread_once(&krb5_key_create, init_err_handling); - - err_struct = (krb5_err_struct_t *) k5_getspecific(K5_KEY_KDB_ERR_HANDLER); - if (err_struct) - err_struct->subsystem = krb5_err_unknown; -} - -#else -krb5_err_struct_t krb5_err = { {0}, 0, 0, 0 }; -krb5_boolean krb5_init_once = TRUE; - -static void -init_err_handling(void) -{ - if (krb5_init_once) { -#ifdef NOVELL - old_error_2_string = error_message; - error_message = krb5_get_err_string; -#endif - krb5_init_once = FALSE; - } -} - -krb5_error_code -krb5_set_err(krb5_context kcontext, krb5_err_subsystem subsystem, - long err_code, char *str) -{ - krb5_err_struct_t *err_struct = &krb5_err; - - init_err_handling(); /* takes care for multiple inits */ - - err_struct->subsystem = subsystem; - err_struct->err_code = err_code; - err_struct->kcontext = kcontext; - if (err_struct->subsystem == krb5_err_have_str) { - strncpy(err_struct->krb5_err_str, str, - sizeof(err_struct->krb5_err_str)); - err_struct->krb5_err_str[KRB5_MAX_ERR_STR] = '\0'; - } - - return 0; -} - -const char *KRB5_CALLCONV -krb5_get_err_string(long err_code) -{ - krb5_err_struct_t *err_struct = &krb5_err; - - init_err_handling(); /* takes care for multiple inits */ - - if ((err_struct->subsystem == krb5_err_have_str) - && (err_code == err_struct->err_code)) { - /* checking error code is for safety. - In case, the caller ignores a database error and calls - other calls before doing com_err. Though not perfect, - caller should call krb5_clr_error before this. */ - err_struct->subsystem = krb5_err_unknown; - return err_struct->krb5_err_str; - } - - if ((err_struct->subsystem == krb5_err_db) - && (err_code == err_struct->err_code)) { - err_struct->subsystem = krb5_err_unknown; - return krb5_db_errcode2string(err_struct->kcontext, err_code); - } - - /* It is not generated here. the remaining two cases are handled - by the default error string convertor. */ -#ifdef NOVELL - return old_error_2_string(err_code); -#else - return error_message(err_code); -#endif -} - -void -krb5_clr_error() -{ - krb5_err_struct_t *err_struct = &krb5_err; - - init_err_handling(); /* takes care for multiple inits */ - - err_struct->subsystem = krb5_err_unknown; -} - -#endif diff --git a/src/lib/kdb/err_handle.h b/src/lib/kdb/err_handle.h deleted file mode 100644 index ba1e320..0000000 --- a/src/lib/kdb/err_handle.h +++ /dev/null @@ -1,37 +0,0 @@ -/********************************************************************** -* -* C Header: err_handle.h -* Instance: idc_sec_1 -* Description: -* %created_by: spradeep % -* %date_created: Thu Apr 7 14:05:33 2005 % -* -**********************************************************************/ -#ifndef _idc_sec_1_err_handle_h_H -#define _idc_sec_1_err_handle_h_H -#include <k5-int.h> - -/* Everything else goes here */ - -#define KRB5_MAX_ERR_STR 1024 -typedef enum krb5_err_subsystem { - krb5_err_unknown = 0, /* no error or unknown system. Has to be probed */ - krb5_err_system, /* error in system call */ - krb5_err_krblib, /* error in kerberos library call, should lookup in the error table */ - krb5_err_have_str, /* error message is available in the string */ - krb5_err_db /* error is a database error, should be handled by calling DB */ -} krb5_err_subsystem; - -typedef krb5_error_code(*krb5_set_err_func_t) (krb5_context, - krb5_err_subsystem, long, - char *); - -krb5_error_code krb5_set_err(krb5_context kcontext, - krb5_err_subsystem subsystem, long err_code, - char *str); - -const char *KRB5_CALLCONV krb5_get_err_string(long err_code); - -void krb5_clr_error(void); - -#endif diff --git a/src/lib/kdb/kdb5.c b/src/lib/kdb/kdb5.c index ad5cb05..ce66474 100644 --- a/src/lib/kdb/kdb5.c +++ b/src/lib/kdb/kdb5.c @@ -273,7 +273,7 @@ kdb_load_library(krb5_context kcontext, char *lib_name, db_library * lib) kdb_setup_opt_functions(*lib); - if ((status = (*lib)->vftabl.init_library(krb5_set_err))) { + if ((status = (*lib)->vftabl.init_library())) { /* ERROR. library not initialized cleanly */ sprintf(buf, "%s library initialization failed, error code %ld\n", lib_name, status); @@ -365,14 +365,17 @@ kdb_load_library(krb5_context kcontext, char *lib_name, db_library * lib) kdb_setup_opt_functions(*lib); - if ((status = (*lib)->vftabl.init_library(krb5_set_err))) { + if ((status = (*lib)->vftabl.init_library())) { /* ERROR. library not initialized cleanly */ goto clean_n_exit; } } else { + err_str = dlerror(); + if(err_str == NULL) + err_str = ""; status = KRB5_KDB_DBTYPE_INIT; - krb5_set_err(kcontext, krb5_err_have_str, status, dlerror()); + krb5_set_error_message (kcontext, status, "%s", err_str); goto clean_n_exit; } break; @@ -385,8 +388,8 @@ kdb_load_library(krb5_context kcontext, char *lib_name, db_library * lib) if (!(*lib)->dl_handle) { /* library not found in the given list. Error str is already set */ - status = KRB5_KDB_DBTYPE_NOTFOUND; - krb5_set_err(kcontext, krb5_err_have_str, status, err_str); + status = KRB5_KDB_DBTYPE_NOTFOUND; + krb5_set_error_message (kcontext, status, "%s", err_str); goto clean_n_exit; } @@ -568,27 +571,19 @@ kdb_free_lib_handle(krb5_context kcontext) /* * External functions... DAL API */ -void -krb5_db_clr_error() -{ - krb5_clr_error(); -} - krb5_error_code krb5_db_open(krb5_context kcontext, char **db_args, int mode) { krb5_error_code status = 0; char *section = NULL; kdb5_dal_handle *dal_handle; - char buf[KRB5_MAX_ERR_STR]; section = kdb_get_conf_section(kcontext); if (section == NULL) { - sprintf(buf, + status = KRB5_KDB_SERVER_INTERNAL_ERR; + krb5_set_error_message (kcontext, status, "unable to determine configuration section for realm %s\n", kcontext->default_realm ? kcontext->default_realm : "[UNSET]"); - status = -1; - krb5_set_err(kcontext, krb5_err_have_str, status, buf); goto clean_n_exit; } @@ -658,15 +653,13 @@ krb5_db_create(krb5_context kcontext, char **db_args) krb5_error_code status = 0; char *section = NULL; kdb5_dal_handle *dal_handle; - char buf[KRB5_MAX_ERR_STR]; section = kdb_get_conf_section(kcontext); if (section == NULL) { - sprintf(buf, + status = KRB5_KDB_SERVER_INTERNAL_ERR; + krb5_set_error_message (kcontext, status, "unable to determine configuration section for realm %s\n", kcontext->default_realm); - status = -1; - krb5_set_err(kcontext, krb5_err_have_str, status, buf); goto clean_n_exit; } @@ -731,15 +724,13 @@ krb5_db_destroy(krb5_context kcontext, char **db_args) krb5_error_code status = 0; char *section = NULL; kdb5_dal_handle *dal_handle; - char buf[KRB5_MAX_ERR_STR]; section = kdb_get_conf_section(kcontext); if (section == NULL) { - sprintf(buf, + status = KRB5_KDB_SERVER_INTERNAL_ERR; + krb5_set_error_message (kcontext, status, "unable to determine configuration section for realm %s\n", kcontext->default_realm); - status = -1; - krb5_set_err(kcontext, krb5_err_have_str, status, buf); goto clean_n_exit; } diff --git a/src/lib/kdb/kdb5.h b/src/lib/kdb/kdb5.h index cc4992b..3e4701a 100644 --- a/src/lib/kdb/kdb5.h +++ b/src/lib/kdb/kdb5.h @@ -10,12 +10,12 @@ #include <utime.h> #include <k5-int.h> #include "kdb.h" -#include "err_handle.h" #define KDB_MAX_DB_NAME 128 #define KDB_REALM_SECTION "realms" #define KDB_MODULE_POINTER "database_module" -#define KDB_MODULE_SECTION "db_modules" +#define KDB_MODULE_DEF_SECTION "dbdefaults" +#define KDB_MODULE_SECTION "dbmodules" #define KDB_LIB_POINTER "db_library" #define KDB_DATABASE_CONF_FILE DEFAULT_SECURE_PROFILE_PATH #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV @@ -23,6 +23,22 @@ #define KRB5_KDB_OPEN_RW 0 #define KRB5_KDB_OPEN_RO 1 +#ifndef KRB5_KDB_SRV_TYPE_KDC +#define KRB5_KDB_SRV_TYPE_KDC 0x0100 +#endif + +#ifndef KRB5_KDB_SRV_TYPE_ADMIN +#define KRB5_KDB_SRV_TYPE_ADMIN 0x0200 +#endif + +#ifndef KRB5_KDB_SRV_TYPE_PASSWD +#define KRB5_KDB_SRV_TYPE_PASSWD 0x0300 +#endif + +#ifndef KRB5_KDB_SRV_TYPE_OTHER +#define KRB5_KDB_SRV_TYPE_OTHER 0x0400 +#endif + #define KRB5_KDB_OPT_SET_DB_NAME 0 #define KRB5_KDB_OPT_SET_LOCK_MODE 1 @@ -50,7 +66,7 @@ typedef struct _kdb_vftabl{ short int maj_ver; short int min_ver; - krb5_error_code (*init_library)(krb5_set_err_func_t); + krb5_error_code (*init_library)(); krb5_error_code (*fini_library)(); krb5_error_code (*init_module) ( krb5_context kcontext, char * conf_section, diff --git a/src/lib/kdb/libkdb5.exports b/src/lib/kdb/libkdb5.exports index c4d2c88..fe2fae6 100644 --- a/src/lib/kdb/libkdb5.exports +++ b/src/lib/kdb/libkdb5.exports @@ -1,6 +1,5 @@ krb5_db_open krb5_db_inited -krb5_db_clr_error krb5_db_alloc krb5_db_free krb5_db_create @@ -48,3 +47,4 @@ krb5_db_put_policy krb5_db_iter_policy krb5_db_delete_policy krb5_db_free_policy +krb5_def_store_mkey |