]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
Fix Darwin prototype add -u and -g options
[bacula/bacula] / bacula / src / dird / dird.c
index 20824a2a63de9f2fddcab9e47ba34f802e33e87a..c8ad804153902e7c9676180e86caa5b2639d3cda 100644 (file)
@@ -7,7 +7,7 @@
  *   Version $Id$
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2000-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -49,7 +49,6 @@ extern void init_job_server(int max_workers);
 
 static char *configfile = NULL;
 static char *runjob = NULL;
-
 static int background = 1;
 
 /* Globals Exported */
@@ -62,14 +61,16 @@ int SDConnectTimeout;
 static void usage()
 {
    fprintf(stderr, _(
-"\nVersion: " VERSION " (" DATE ")\n\n"
+"\nVersion: " VERSION " (" BDATE ")\n\n"
 "Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n"
 "       -c <file>   set configuration file to file\n"
 "       -dnn        set debug level to nn\n"
 "       -f          run in foreground (for debugging)\n"
+"       -g          groupid\n"
 "       -r <job>    run <job> now\n"
 "       -s          no signals\n"
 "       -t          test - read configuration and exit\n"
+"       -u          userid\n"
 "       -?          print this message.\n"  
 "\n"));
 
@@ -88,6 +89,8 @@ int main (int argc, char *argv[])
    JCR *jcr;
    int no_signals = FALSE;
    int test_config = FALSE;
+   char *uid = NULL;
+   char *gid = NULL;
 
    init_stack_dump();
    my_name_is(argc, argv, "bacula-dir");
@@ -95,7 +98,7 @@ int main (int argc, char *argv[])
    daemon_start_time = time(NULL);
    memset(&last_job, 0, sizeof(last_job));
 
-   while ((ch = getopt(argc, argv, "c:d:fr:st?")) != -1) {
+   while ((ch = getopt(argc, argv, "c:d:fg:r:stu:?")) != -1) {
       switch (ch) {
          case 'c':                    /* specify config file */
            if (configfile != NULL) {
@@ -116,6 +119,10 @@ int main (int argc, char *argv[])
            background = FALSE;
            break;
 
+         case 'g':                    /* set group id */
+           gid = optarg;
+           break;
+
          case 'r':                    /* run job */
            if (runjob != NULL) {
               free(runjob);
@@ -133,6 +140,10 @@ int main (int argc, char *argv[])
            test_config = TRUE;
            break;
 
+         case 'u':                    /* set uid */
+           uid = optarg;
+           break;
+
          case '?':
         default:
            usage();
@@ -175,14 +186,16 @@ int main (int argc, char *argv[])
 
    my_name_is(0, NULL, director->hdr.name);    /* set user defined name */
 
-   FDConnectTimeout = director->FDConnectTimeout;
-   SDConnectTimeout = director->SDConnectTimeout;
+   FDConnectTimeout = (int)director->FDConnectTimeout;
+   SDConnectTimeout = (int)director->SDConnectTimeout;
 
    if (background) {
       daemon_start();
       init_stack_dump();             /* grab new pid */
    }
 
+   drop(uid, gid);                   /* reduce priveleges if requested */
+
    /* Create pid must come after we are a daemon -- so we have our final pid */
    create_pid_file(director->pid_directory, "bacula-dir", director->DIRport);
 
@@ -353,16 +366,16 @@ Without that I don't know who I am :-(\n"), configfile);
          */
         db = db_init_database(NULL, catalog->db_name, catalog->db_user,
                            catalog->db_password);
-        if (!db_open_database(db)) {
+        if (!db_open_database(NULL, db)) {
             Jmsg(NULL, M_FATAL,  0, "%s", db_strerror(db));
         } else {
            /* If a pool is defined for this job, create the pool DB       
             *  record if it is not already created. 
             */
            if (job->pool) {
-              create_pool(db, job->pool);
+              create_pool(NULL, db, job->pool);
            }
-           db_close_database(db);
+           db_close_database(NULL, db);
         }
 
       } else {