aboutsummaryrefslogtreecommitdiff
path: root/src/lib/kdb
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/kdb')
-rw-r--r--src/lib/kdb/Makefile.in14
-rw-r--r--src/lib/kdb/err_handle.c210
-rw-r--r--src/lib/kdb/err_handle.h37
-rw-r--r--src/lib/kdb/kdb5.c37
-rw-r--r--src/lib/kdb/kdb5.h22
-rw-r--r--src/lib/kdb/libkdb5.exports2
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