summaryrefslogtreecommitdiffstats
path: root/src/kadmin/server
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-09-02 17:07:59 +0000
committerGreg Hudson <ghudson@mit.edu>2011-09-02 17:07:59 +0000
commit138f243f1e21a7c80b63345e02dc851a9b81ad4d (patch)
tree2db85b47d8271a0fe1152563434b65090c8fed11 /src/kadmin/server
parent55b8963cc08ce8005f513f3ad912b6cc3302218b (diff)
downloadkrb5-138f243f1e21a7c80b63345e02dc851a9b81ad4d.tar.gz
krb5-138f243f1e21a7c80b63345e02dc851a9b81ad4d.tar.xz
krb5-138f243f1e21a7c80b63345e02dc851a9b81ad4d.zip
Migrate net-server loop to use libverto
From npmccallum@redhat.com. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25132 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/server')
-rw-r--r--src/kadmin/server/Makefile.in4
-rw-r--r--src/kadmin/server/ovsec_kadmd.c129
2 files changed, 33 insertions, 100 deletions
diff --git a/src/kadmin/server/Makefile.in b/src/kadmin/server/Makefile.in
index 7872872d5..f063e25d3 100644
--- a/src/kadmin/server/Makefile.in
+++ b/src/kadmin/server/Makefile.in
@@ -16,8 +16,8 @@ SRCS = kadm_rpc_svc.c server_stubs.c ovsec_kadmd.c schpw.c misc.c ipropd_svc.c
all:: $(PROG)
-$(PROG): $(OBJS) $(KADMSRV_DEPLIBS) $(KRB5_BASE_DEPLIBS) $(APPUTILS_DEPLIB)
- $(CC_LINK) -o $(PROG) $(OBJS) $(APPUTILS_LIB) $(KADMSRV_LIBS) $(KDB_DEP_LIB) $(KRB5_BASE_LIBS)
+$(PROG): $(OBJS) $(KADMSRV_DEPLIBS) $(KRB5_BASE_DEPLIBS) $(APPUTILS_DEPLIB) $(VERTO_DEPLIB)
+ $(CC_LINK) -o $(PROG) $(OBJS) $(APPUTILS_LIB) $(KADMSRV_LIBS) $(KDB_DEP_LIB) $(KRB5_BASE_LIBS) $(VERTO_LIBS)
install::
$(INSTALL_PROGRAM) $(PROG) ${DESTDIR}$(SERVER_BINDIR)/$(PROG)
diff --git a/src/kadmin/server/ovsec_kadmd.c b/src/kadmin/server/ovsec_kadmd.c
index 91cd255ec..2800f8778 100644
--- a/src/kadmin/server/ovsec_kadmd.c
+++ b/src/kadmin/server/ovsec_kadmd.c
@@ -63,15 +63,6 @@
extern int daemon(int, int);
#endif
-void setup_signal_handlers(iprop_role iproprole);
-void request_exit(int);
-void request_hup(int);
-
-#ifdef POSIX_SIGNALS
-static struct sigaction s_action;
-#endif /* POSIX_SIGNALS */
-
-
#define TIMEOUT 15
gss_name_t gss_changepw_name = NULL, gss_oldchangepw_name = NULL;
@@ -235,6 +226,8 @@ int main(int argc, char *argv[])
kdb_log_context *log_ctx;
+ verto_ctx *ctx;
+
setlocale(LC_MESSAGES, "");
setvbuf(stderr, NULL, _IONBF, 0);
@@ -364,6 +357,18 @@ int main(int argc, char *argv[])
exit(1);
}
+ ctx = loop_init(VERTO_EV_TYPE_SIGNAL, global_server_handle, NULL);
+ if (!ctx) {
+ krb5_klog_syslog(LOG_ERR,
+ _("%s: could not initialize loop, aborting"),
+ whoami);
+ fprintf(stderr, _("%s: could not initialize loop, aborting\n"),
+ whoami);
+ kadm5_destroy(global_server_handle);
+ krb5_klog_close(context);
+ exit(1);
+ }
+
#define server_handle ((kadm5_server_handle_t)global_server_handle)
if ((ret = loop_add_udp_port(server_handle->params.kpasswd_port))
|| (ret = loop_add_tcp_port(server_handle->params.kpasswd_port))
@@ -377,12 +382,14 @@ int main(int argc, char *argv[])
: 0)
#endif
#undef server_handle
- || (ret = loop_setup_network(global_server_handle, whoami, 0))) {
+ || (ret = loop_setup_routing_socket(ctx, global_server_handle, whoami))
+ || (ret = loop_setup_network(ctx, global_server_handle, whoami))) {
const char *e_txt = krb5_get_error_message (context, ret);
krb5_klog_syslog(LOG_ERR, _("%s: %s while initializing network, "
"aborting"), whoami, e_txt);
fprintf(stderr, _("%s: %s while initializing network, aborting\n"),
whoami, e_txt);
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -395,6 +402,7 @@ int main(int argc, char *argv[])
"names, failing."));
fprintf(stderr, _("%s: Cannot build GSS-API authentication names.\n"),
whoami);
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -429,6 +437,7 @@ kterr:
if (ret) {
krb5_klog_syslog(LOG_ERR, "%s", krb5_get_error_message (context, ret));
fprintf(stderr, _("%s: Can't set up keytab for RPC.\n"), whoami);
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -440,6 +449,7 @@ kterr:
fprintf(stderr, _("%s: Cannot set GSS-API authentication names.\n"),
whoami);
svcauth_gssapi_unset_names();
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -462,6 +472,7 @@ kterr:
if (svcauth_gss_set_svc_name(GSS_C_NO_NAME) != TRUE) {
fprintf(stderr, _("%s: Cannot initialize RPCSEC_GSS service name.\n"),
whoami);
+ loop_free(ctx);
exit(1);
}
@@ -471,6 +482,7 @@ kterr:
fprintf(stderr, _("%s: Cannot initialize acl file: %s\n"),
whoami, errmsg);
svcauth_gssapi_unset_names();
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -482,6 +494,7 @@ kterr:
krb5_klog_syslog(LOG_ERR, _("Cannot detach from tty: %s"), errmsg);
fprintf(stderr, _("%s: Cannot detach from tty: %s\n"), whoami, errmsg);
svcauth_gssapi_unset_names();
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -493,6 +506,7 @@ kterr:
krb5_klog_syslog(LOG_ERR, _("Cannot create PID file %s: %s"),
pid_file, errmsg);
svcauth_gssapi_unset_names();
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -505,6 +519,7 @@ kterr:
krb5_klog_syslog(LOG_ERR, _("Error getting random seed: %s, aborting"),
krb5_get_error_message(context, ret));
svcauth_gssapi_unset_names();
+ loop_free(ctx);
kadm5_destroy(global_server_handle);
krb5_klog_close(context);
exit(1);
@@ -530,6 +545,7 @@ kterr:
krb5_klog_syslog(LOG_ERR,
_("%s while mapping update log (`%s.ulog')"),
error_message(ret), params.dbname);
+ loop_free(ctx);
krb5_klog_close(context);
exit(1);
}
@@ -551,6 +567,7 @@ kterr:
krb5_klog_syslog(LOG_ERR,
_("Cannot create IProp RPC service (PROG=%d, VERS=%d), failing."),
KRB5_IPROP_PROG, KRB5_IPROP_VERS);
+ loop_free(ctx);
krb5_klog_close(context);
exit(1);
}
@@ -566,6 +583,7 @@ kterr:
fprintf(stderr,
_("%s: %s while getting IProp svc name, failing\n"),
whoami, error_message(ret));
+ loop_free(ctx);
krb5_klog_close(context);
exit(1);
}
@@ -601,24 +619,24 @@ kterr:
err.system_error);
}
+ loop_free(ctx);
exit(1);
}
free(kiprop_name);
#endif
}
- setup_signal_handlers(log_ctx->iproprole);
krb5_klog_syslog(LOG_INFO, _("starting"));
if (nofork)
fprintf(stderr, _("%s: starting...\n"), whoami);
- loop_listen_and_process(global_server_handle, whoami, NULL);
+ verto_run(ctx);
krb5_klog_syslog(LOG_INFO, _("finished, exiting"));
/* Clean up memory, etc */
svcauth_gssapi_unset_names();
kadm5_destroy(global_server_handle);
- loop_closedown_network();
+ loop_free(ctx);
kadm5int_acl_finish(context, 0);
if(gss_changepw_name) {
(void) gss_release_name(&OMret, &gss_changepw_name);
@@ -638,91 +656,6 @@ kterr:
}
/*
- * Function: setup_signal_handlers
- *
- * Purpose: Setup signal handling functions using POSIX's sigaction()
- * if possible, otherwise with System V's signal().
- */
-
-void setup_signal_handlers(iprop_role iproprole) {
-#ifdef POSIX_SIGNALS
- (void) sigemptyset(&s_action.sa_mask);
- s_action.sa_handler = request_exit;
- (void) sigaction(SIGINT, &s_action, (struct sigaction *) NULL);
- (void) sigaction(SIGTERM, &s_action, (struct sigaction *) NULL);
- (void) sigaction(SIGQUIT, &s_action, (struct sigaction *) NULL);
- s_action.sa_handler = request_hup;
- (void) sigaction(SIGHUP, &s_action, (struct sigaction *) NULL);
- s_action.sa_handler = SIG_IGN;
- (void) sigaction(SIGPIPE, &s_action, (struct sigaction *) NULL);
-
- /*
- * IProp will fork for a full-resync, we don't want to
- * wait on it and we don't want the living dead procs either.
- */
- if (iproprole == IPROP_MASTER) {
- s_action.sa_handler = SIG_IGN;
- (void) sigaction(SIGCHLD, &s_action, (struct sigaction *) NULL);
- }
-#else /* POSIX_SIGNALS */
- signal(SIGINT, request_exit);
- signal(SIGTERM, request_exit);
- signal(SIGQUIT, request_exit);
- signal(SIGHUP, request_hup);
- signal(SIGPIPE, SIG_IGN);
-
- /*
- * IProp will fork for a full-resync, we don't want to
- * wait on it and we don't want the living dead procs either.
- */
- if (iproprole == IPROP_MASTER)
- (void) signal(SIGCHLD, SIG_IGN);
-#endif /* POSIX_SIGNALS */
-}
-
-/*
- * Function: request_hup
- *
- * Purpose: sets flag saying the server got a signal and that it should
- * reset the database files when convenient.
- *
- * Arguments:
- * Requires:
- * Effects:
- * Modifies:
- * sets signal_requests_reset to one
- */
-
-void request_hup(int signum)
-{
- signal_requests_reset = 1;
- return;
-}
-
-/*
- * Function: request_exit
- *
- * Purpose: sets flags saying the server got a signal and that it
- * should exit when convient.
- *
- * Arguments:
- * Requires:
- * Effects:
- * modifies signal_requests_exit which ideally makes the server exit
- * at some point.
- *
- * Modifies:
- * signal_requests_exit
- */
-
-void request_exit(int signum)
-{
- krb5_klog_syslog(LOG_DEBUG, _("Got signal to request exit"));
- signal_requests_exit = 1;
- return;
-}
-
-/*
* Function: build_princ_name
*
* Purpose: takes a name and a realm and builds a string that can be