* Created by: John T. Kohl
*
* $Source: /afs/dev.mit.edu/source/repository/athena/lib/zephyr/server/main.c,v $
- * $Author: zacheiss $
+ * $Author$
*
* Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology.
* For copying and distribution information, see the file
#ifndef lint
#ifndef SABER
static const char rcsid_main_c[] =
- "$Id: main.c,v 1.69 2001/02/27 04:50:08 zacheiss Exp $";
+ "$Id$";
#endif
#endif
#define EVER (;;) /* don't stop looping */
-static int do_net_setup __P((void));
-static int initialize __P((void));
-static void usage __P((void));
-static void do_reset __P((void));
-static RETSIGTYPE bye __P((int));
-static RETSIGTYPE dbug_on __P((int));
-static RETSIGTYPE dbug_off __P((int));
-static RETSIGTYPE sig_dump_db __P((int));
-static RETSIGTYPE sig_dump_strings __P((int));
-static RETSIGTYPE reset __P((int));
-static RETSIGTYPE reap __P((int));
-static void read_from_dump __P((char *dumpfile));
-static void dump_db __P((void));
-static void dump_strings __P((void));
+static int do_net_setup(void);
+static int initialize(void);
+static void usage(void);
+static void do_reset(void);
+static RETSIGTYPE bye(int);
+static RETSIGTYPE dbug_on(int);
+static RETSIGTYPE dbug_off(int);
+static RETSIGTYPE sig_dump_db(int);
+static RETSIGTYPE reset(int);
+static RETSIGTYPE reap(int);
+static void read_from_dump(char *dumpfile);
+static void dump_db(void);
+static void dump_strings(void);
#ifndef DEBUG
-static void detach __P((void));
+static void detach(void);
#endif
static short doreset = 0; /* if it becomes 1, perform
char *programname; /* set to the basename of argv[0] */
char myname[MAXHOSTNAMELEN]; /* my host name */
-#ifndef HAVE_HESIOD
char list_file[128];
+#ifdef HAVE_KRB5
+char keytab_file[128];
+static char tkt5_file[256];
#endif
#ifdef HAVE_KRB4
char srvtab_file[128];
struct in_addr my_addr;
char *bdump_version = "1.2";
+#ifdef HAVE_KRB5
+int bdump_auth_proto = 5;
+#else /* HAVE_KRB5 */
+#ifdef HAVE_KRB4
+int bdump_auth_proto = 4;
+#else /* HAVE_KRB4 */
+int bdump_auth_proto = 0;
+#endif /* HAVE_KRB4 */
+#endif /* HAVE_KRB5 */
+
+#ifdef HAVE_KRB5
+krb5_ccache Z_krb5_ccache;
+krb5_keyblock *__Zephyr_keyblock;
+#else
+#ifdef HAVE_KRB4
+C_Block __Zephyr_session;
+#endif
+#endif
+
int
-main(argc, argv)
- int argc;
- char **argv;
+main(int argc,
+ char **argv)
{
int nfound; /* #fildes ready on select */
fd_set readable;
extern char *optarg;
extern int optind;
-#ifndef HAVE_HESIOD
sprintf(list_file, "%s/zephyr/%s", SYSCONFDIR, SERVER_LIST_FILE);
-#endif
#ifdef HAVE_KRB4
sprintf(srvtab_file, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_SRVTAB);
sprintf(tkt_file, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_TKFILE);
+#endif
+#ifdef HAVE_KRB5
+ sprintf(keytab_file, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_KEYTAB);
+ sprintf(tkt5_file, "FILE:%s/zephyr/%s", SYSCONFDIR, ZEPHYR_TK5FILE);
#endif
sprintf(acl_dir, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_ACL_DIR);
sprintf(subs_file, "%s/zephyr/%s", SYSCONFDIR, DEFAULT_SUBS_FILE);
programname = (programname) ? programname + 1 : argv[0];
/* process arguments */
- while ((optchar = getopt(argc, argv, "dsnv:f:k:")) != EOF) {
+ while ((optchar = getopt(argc, argv, "dsnv4f:k:")) != EOF) {
switch(optchar) {
case 'd':
zdebug = 1;
init_from_dump = 0;
dumpfile = optarg;
break;
+ case '4':
+ bdump_auth_proto = 4;
+ break;
case '?':
default:
usage();
/* Reinitialize t_local now that initialization is done. */
gettimeofday(&t_local, NULL);
uptime = NOW;
-#ifdef HAVE_KRB4
- timer_set_rel(SWEEP_INTERVAL, sweep_ticket_hash_table, NULL);
-#endif
realm_wakeup();
#ifdef DEBUG_MALLOC
*/
static int
-initialize()
+initialize(void)
{
if (do_net_setup())
return(1);
ZSetServerState(1);
ZInitialize(); /* set up the library */
+#ifdef HAVE_KRB5
+ krb5_cc_resolve(Z_krb5_ctx, tkt5_file, &Z_krb5_ccache);
+#ifdef HAVE_KRB5_CC_SET_DEFAULT_NAME
+ krb5_cc_set_default_name(Z_krb5_ctx, tkt5_file);
+#else
+ {
+ /* Hack to make krb5_cc_default do something reasonable */
+ char *env=(char *)malloc(strlen(tkt5_file)+12);
+ if (!env) return(1);
+ sprintf(env, "KRB5CCNAME=%s", tkt5_file);
+ putenv(env);
+ }
+#endif
+#endif
#ifdef HAVE_KRB4
/* Override what Zinitialize set for ZGetRealm() */
if (*my_realm)
*/
static int
-do_net_setup()
+do_net_setup(void)
{
struct servent *sp;
struct hostent *hp;
if (srv_socket < 0) {
syslog(LOG_ERR, "client_sock failed: %m");
return 1;
+ } else {
+#ifdef SO_BSDCOMPAT
+ int on = 1;
+
+ /* Prevent Linux from giving us socket errors we don't care about. */
+ setsockopt(srv_socket, SOL_SOCKET, SO_BSDCOMPAT, &on, sizeof(on));
+#endif
}
if (bind(srv_socket, (struct sockaddr *) &srv_addr,
sizeof(srv_addr)) < 0) {
*/
static void
-usage()
+usage(void)
{
#ifdef DEBUG
fprintf(stderr, "Usage: %s [-d] [-s] [-n] [-k realm] [-f dumpfile]\n",
}
int
-packets_waiting()
+packets_waiting(void)
{
fd_set readable, initial;
struct timeval tv;
}
static RETSIGTYPE
-bye(sig)
- int sig;
+bye(int sig)
{
server_shutdown(); /* tell other servers */
#ifdef REALM_MGMT
}
static RETSIGTYPE
-dbug_on(sig)
- int sig;
+dbug_on(int sig)
{
syslog(LOG_DEBUG, "debugging turned on");
#ifdef DEBUG_MALLOC
}
static RETSIGTYPE
-dbug_off(sig)
- int sig;
+dbug_off(int sig)
{
syslog(LOG_DEBUG, "debugging turned off");
#ifdef DEBUG_MALLOC
int fork_for_dump = 0;
-static RETSIGTYPE
-sig_dump_strings(sig)
- int sig;
-{
- dump_strings_flag = 1;
-}
-
-static void dump_strings()
+static void dump_strings(void)
{
char filename[128];
}
static RETSIGTYPE
-sig_dump_db(sig)
- int sig;
+sig_dump_db(int sig)
{
dump_db_flag = 1;
}
-static void dump_db()
+static void
+dump_db(void)
{
/* dump the in-core database to human-readable form on disk */
FILE *fp;
}
static RETSIGTYPE
-reset(sig)
- int sig;
+reset(int sig)
{
#if 1
zdbug((LOG_DEBUG,"reset()"));
}
static RETSIGTYPE
-reap(sig)
- int sig;
+reap(int sig)
{
int pid, i = 0;
int oerrno = errno;
- Realm *rlm;
+ ZRealm *rlm;
#ifdef _POSIX_VERSION
int waitb;
#else
}
static void
-do_reset()
+do_reset(void)
{
int oerrno = errno;
#ifdef _POSIX_VERSION
*/
static void
-detach()
+detach(void)
{
/* detach from terminal and fork. */
int i;
#endif /* not DEBUG */
static void
-read_from_dump(dumpfile)
- char *dumpfile;
+read_from_dump(char *dumpfile)
{
/* Not yet implemented. */
return;