]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/filed.c
- Copy latest config.sub and config.guess from autoconf.
[bacula/bacula] / bacula / src / filed / filed.c
index 3d8e788d22ecd4ea7e410224f1e93b6a6901b3ad..37a1d3547cecf098e8de2b5de7e829efffca6aba 100644 (file)
@@ -7,7 +7,7 @@
  *
  */
 /*
-   Copyright (C) 2000-2004 Kern Sibbald and John Walker
+   Copyright (C) 2000-2005 Kern Sibbald
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -62,9 +62,10 @@ static pthread_t server_tid;
 
 static void usage()
 {
-   fprintf(stderr, _(
+   Pmsg0(-1, _(
+"Copyright (C) 2000-2005 Kern Sibbald\n"
 "\nVersion: " VERSION " (" BDATE ")\n\n"
-"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n"  
+"Usage: bacula-fd [-f -s] [-c config_file] [-d debug_level]\n"
 "        -c <file>   use <file> as configuration file\n"
 "        -dnn        set debug level to nn\n"
 "        -f          run in foreground (for debugging)\n"
@@ -75,14 +76,14 @@ static void usage()
 "        -u          userid\n"
 "        -v          verbose user messages\n"
 "        -?          print this message.\n"
-"\n"));         
+"\n"));
    exit(1);
 }
 
 
-/********************************************************************* 
+/*********************************************************************
  *
- *  Main Bacula Unix Client Program                       
+ *  Main Bacula Unix Client Program
  *
  */
 #if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
@@ -115,7 +116,7 @@ int main (int argc, char *argv[])
       case 'd':                    /* debug level */
         debug_level = atoi(optarg);
         if (debug_level <= 0) {
-           debug_level = 1; 
+           debug_level = 1;
         }
         break;
 
@@ -150,7 +151,7 @@ int main (int argc, char *argv[])
       default:
         usage();
 
-      }  
+      }
    }
    argc -= optind;
    argv += optind;
@@ -159,13 +160,14 @@ int main (int argc, char *argv[])
       if (configfile != NULL)
         free(configfile);
       configfile = bstrdup(*argv);
-      argc--; 
+      argc--;
       argv++;
    }
    if (argc) {
       usage();
    }
 
+   server_tid = pthread_self();
    if (!no_signals) {
       init_signals(terminate_filed);
    } else {
@@ -191,8 +193,8 @@ int main (int argc, char *argv[])
    me = (CLIENT *)GetNextRes(R_CLIENT, NULL);
    UnlockRes();
    if (!me) {
-      Emsg1(M_ABORT, 0, _("No File daemon resource defined in %s\n\
-Without that I don't know who I am :-(\n"), configfile);
+      Emsg1(M_ABORT, 0, _("No File daemon resource defined in %s\n"
+"Without that I don't know who I am :-(\n"), configfile);
    } else {
       my_name_is(0, NULL, me->hdr.name);
       if (!me->messages) {
@@ -219,8 +221,8 @@ Without that I don't know who I am :-(\n"), configfile);
    }
 
    /* Maximum 1 daemon at a time */
-   create_pid_file(me->pid_directory, "bacula-fd", me->FDport);
-   read_state_file(me->working_directory, "bacula-fd", me->FDport);
+   create_pid_file(me->pid_directory, "bacula-fd", get_first_port_host_order(me->FDaddrs));
+   read_state_file(me->working_directory, "bacula-fd", get_first_port_host_order(me->FDaddrs));
 
    drop(uid, gid);
 
@@ -237,17 +239,23 @@ Without that I don't know who I am :-(\n"), configfile);
    server_tid = pthread_self();
 
    if (inetd_request) {
-      /* Socket is on fd 0 */         
-      struct sockaddr_in client_addr;
-      memset(&client_addr, 0, sizeof(client_addr));
-      BSOCK *bs = init_bsock(NULL, 0, "client", "unknown client", me->FDport, 
-                            &client_addr);
+      /* Socket is on fd 0 */
+      struct sockaddr client_addr;
+      int port = -1;
+      socklen_t client_addr_len = sizeof(client_addr);
+      if (getsockname(0, &client_addr, &client_addr_len) == 0) {
+               /* MA BUG 6 remove ifdefs */
+               port = sockaddr_get_port_net_order(&client_addr);
+      }
+      BSOCK *bs = init_bsock(NULL, 0, "client", "unknown client", port, &client_addr);
       handle_client_request((void *)bs);
    } else {
       /* Become server, and handle requests */
-      Dmsg1(10, "filed: listening on port %d\n", me->FDport);
-      bnet_thread_server(me->FDaddr, me->FDport, me->MaxConcurrentJobs, 
-                     &dir_workq, handle_client_request);
+      IPADDR *p;
+      foreach_dlist(p, me->FDaddrs) {
+         Dmsg1(10, "filed: listening on port %d\n", p->get_port_host_order());
+      }
+      bnet_thread_server(me->FDaddrs, me->MaxConcurrentJobs, &dir_workq, handle_client_request);
    }
 
    terminate_filed(0);
@@ -257,13 +265,13 @@ Without that I don't know who I am :-(\n"), configfile);
 void terminate_filed(int sig)
 {
    bnet_stop_thread_server(server_tid);
-   write_state_file(me->working_directory, "bacula-fd", me->FDport);
-   delete_pid_file(me->pid_directory, "bacula-fd", me->FDport);
+   write_state_file(me->working_directory, "bacula-fd", get_first_port_host_order(me->FDaddrs));
+   delete_pid_file(me->pid_directory, "bacula-fd", get_first_port_host_order(me->FDaddrs));
    if (configfile != NULL) {
       free(configfile);
    }
    if (debug_level > 5) {
-      print_memory_pool_stats(); 
+      print_memory_pool_stats();
    }
    free_config_resources();
    term_msg();