]> asedeno.scripts.mit.edu Git - 1ts-debian.git/blobdiff - zephyr/server/main.c
r4275@bucket (orig r265): kcr | 2008-01-21 02:57:32 -0500
[1ts-debian.git] / zephyr / server / main.c
index 352c6079f0a8c08fff67eb7b93cff42d38d59787..30bb0f9e47a57d305029d4e0f6328204ac38abe6 100644 (file)
@@ -4,7 +4,7 @@
  *     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
@@ -19,7 +19,7 @@
 #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
 
@@ -52,23 +52,22 @@ static const char rcsid_main_c[] =
 
 #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
@@ -91,8 +90,10 @@ unsigned short hm_srv_port;          /* host manager server sending port */
 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];
@@ -122,10 +123,28 @@ static int nofork;
 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;
@@ -139,12 +158,14 @@ main(argc, argv)
     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);
@@ -154,7 +175,7 @@ main(argc, argv)
     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;
@@ -179,6 +200,9 @@ main(argc, argv)
            init_from_dump = 0;
            dumpfile = optarg;
            break;
+       case '4':
+           bdump_auth_proto = 4;
+           break;
          case '?':
          default:
            usage();
@@ -297,9 +321,6 @@ main(argc, argv)
     /* 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
@@ -371,7 +392,7 @@ main(argc, argv)
    */
 
 static int
-initialize()
+initialize(void)
 {
     if (do_net_setup())
        return(1);
@@ -385,6 +406,20 @@ initialize()
     
     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) 
@@ -414,7 +449,7 @@ initialize()
  */
 
 static int
-do_net_setup()
+do_net_setup(void)
 {
     struct servent *sp;
     struct hostent *hp;
@@ -451,6 +486,13 @@ do_net_setup()
     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) {
@@ -477,7 +519,7 @@ do_net_setup()
  */
 
 static void
-usage()
+usage(void)
 {
 #ifdef DEBUG
        fprintf(stderr, "Usage: %s [-d] [-s] [-n] [-k realm] [-f dumpfile]\n",
@@ -490,7 +532,7 @@ usage()
 }
 
 int
-packets_waiting()
+packets_waiting(void)
 {
     fd_set readable, initial;
     struct timeval tv;
@@ -505,8 +547,7 @@ packets_waiting()
 }
 
 static RETSIGTYPE
-bye(sig)
-    int sig;
+bye(int sig)
 {
     server_shutdown();         /* tell other servers */
 #ifdef REALM_MGMT
@@ -522,8 +563,7 @@ bye(sig)
 }
 
 static RETSIGTYPE
-dbug_on(sig)
-    int sig;
+dbug_on(int sig)
 {
     syslog(LOG_DEBUG, "debugging turned on");
 #ifdef DEBUG_MALLOC
@@ -533,8 +573,7 @@ dbug_on(sig)
 }
 
 static RETSIGTYPE
-dbug_off(sig)
-    int sig;
+dbug_off(int sig)
 {
     syslog(LOG_DEBUG, "debugging turned off");
 #ifdef DEBUG_MALLOC
@@ -545,14 +584,7 @@ dbug_off(sig)
 
 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];
 
@@ -579,13 +611,13 @@ static void dump_strings()
 }
 
 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;
@@ -622,8 +654,7 @@ static void dump_db()
 }
 
 static RETSIGTYPE
-reset(sig)
-    int sig;
+reset(int sig)
 {
 #if 1
     zdbug((LOG_DEBUG,"reset()"));
@@ -632,12 +663,11 @@ reset(sig)
 }
 
 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
@@ -675,7 +705,7 @@ reap(sig)
 }
 
 static void
-do_reset()
+do_reset(void)
 {
     int oerrno = errno;
 #ifdef _POSIX_VERSION
@@ -714,7 +744,7 @@ do_reset()
  */
 
 static void
-detach()
+detach(void)
 {
     /* detach from terminal and fork. */
     int i;
@@ -748,8 +778,7 @@ detach()
 #endif /* not DEBUG */
 
 static void
-read_from_dump(dumpfile)
-    char *dumpfile;
+read_from_dump(char *dumpfile)
 {
     /* Not yet implemented. */
     return;