From 361034a8ce7fbd7f76d21fd8810f460ddd1aa886 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Fri, 26 Jan 2007 20:14:21 +0000 Subject: [PATCH] Add qt-console configuration git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4048 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/qt-console/.cvsignore | 2 +- bacula/src/qt-console/Makefile | 22 +- bacula/src/qt-console/authenticate.cpp | 115 ++++++ bacula/src/qt-console/console_conf.cpp | 337 ++++++++++++++++++ bacula/src/qt-console/console_conf.h | 111 ++++++ .../images/bat-natural-fullsize.png | Bin 0 -> 96268 bytes bacula/src/qt-console/main.cpp | 216 ++++++++++- bacula/src/qt-console/main.ui | 2 +- bacula/src/qt-console/mainwindow.cpp | 42 +++ bacula/src/qt-console/mainwindow.h | 7 + bacula/src/qt-console/qt-console.pro | 8 +- 11 files changed, 849 insertions(+), 13 deletions(-) create mode 100644 bacula/src/qt-console/authenticate.cpp create mode 100644 bacula/src/qt-console/console_conf.cpp create mode 100644 bacula/src/qt-console/console_conf.h create mode 100644 bacula/src/qt-console/images/bat-natural-fullsize.png diff --git a/bacula/src/qt-console/.cvsignore b/bacula/src/qt-console/.cvsignore index 9affc260e7..5131277be3 100644 --- a/bacula/src/qt-console/.cvsignore +++ b/bacula/src/qt-console/.cvsignore @@ -7,4 +7,4 @@ main.qrc mult-inheritance print-func qrc_main.cpp - +moc_*.cpp diff --git a/bacula/src/qt-console/Makefile b/bacula/src/qt-console/Makefile index 1c63a41fb7..433da70a2e 100644 --- a/bacula/src/qt-console/Makefile +++ b/bacula/src/qt-console/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: qt-console -# Generated by qmake (2.01a) (Qt 4.2.1) on: Fri Jan 26 15:30:33 2007 +# Generated by qmake (2.01a) (Qt 4.2.1) on: Fri Jan 26 20:53:56 2007 # Project: qt-console.pro # Template: app # Command: /usr/bin/qmake -unix -o Makefile qt-console.pro @@ -17,10 +17,10 @@ CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) LEXFLAGS = YACCFLAGS = -d -INCPATH = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I. -I. +INCPATH = -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I.. -I. -I. LINK = g++ LFLAGS = -LIBS = $(SUBLIBS) -L/usr/lib -lQtGui -L/usr/lib -L/usr/X11R6/lib -lpng -lSM -lICE -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -ldl -lpthread +LIBS = $(SUBLIBS) -L/usr/lib -L../lib -lbac -lssl -lcrypto -lQtGui -L/usr/lib -L/usr/X11R6/lib -lpng -lSM -lICE -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -ldl -lpthread AR = ar cqs RANLIB = QMAKE = /usr/bin/qmake @@ -46,9 +46,13 @@ OBJECTS_DIR = ./ ####### Files SOURCES = main.cpp \ + authenticate.cpp \ + console_conf.cpp \ mainwindow.cpp moc_mainwindow.cpp \ qrc_main.cpp OBJECTS = main.o \ + authenticate.o \ + console_conf.o \ mainwindow.o \ moc_mainwindow.o \ qrc_main.o @@ -142,7 +146,7 @@ qmake: FORCE dist: @$(CHK_DIR_EXISTS) .tmp/qt-console1.0.0 || $(MKDIR) .tmp/qt-console1.0.0 - $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents mainwindow.h .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.qrc .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.ui .tmp/qt-console1.0.0/ && (cd `dirname .tmp/qt-console1.0.0` && $(TAR) qt-console1.0.0.tar qt-console1.0.0 && $(COMPRESS) qt-console1.0.0.tar) && $(MOVE) `dirname .tmp/qt-console1.0.0`/qt-console1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/qt-console1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents mainwindow.h console_conf.h .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.qrc .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.cpp authenticate.cpp console_conf.cpp mainwindow.cpp .tmp/qt-console1.0.0/ && $(COPY_FILE) --parents main.ui .tmp/qt-console1.0.0/ && (cd `dirname .tmp/qt-console1.0.0` && $(TAR) qt-console1.0.0.tar qt-console1.0.0 && $(COMPRESS) qt-console1.0.0.tar) && $(MOVE) `dirname .tmp/qt-console1.0.0`/qt-console1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/qt-console1.0.0 yaccclean: @@ -180,6 +184,7 @@ compiler_rcc_clean: qrc_main.cpp: main.qrc \ /usr/bin/rcc \ images/new.png \ + images/bat-natural-fullsize.png \ images/copy.png \ images/cut.png \ images/save.png \ @@ -203,9 +208,16 @@ compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_image_coll ####### Compile main.o: main.cpp mainwindow.h \ - ui_main.h + ui_main.h \ + console_conf.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp +authenticate.o: authenticate.cpp console_conf.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o authenticate.o authenticate.cpp + +console_conf.o: console_conf.cpp console_conf.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o console_conf.o console_conf.cpp + mainwindow.o: mainwindow.cpp mainwindow.h \ ui_main.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp diff --git a/bacula/src/qt-console/authenticate.cpp b/bacula/src/qt-console/authenticate.cpp new file mode 100644 index 0000000000..4fdeba7ab3 --- /dev/null +++ b/bacula/src/qt-console/authenticate.cpp @@ -0,0 +1,115 @@ +/* + * + * Bacula UA authentication. Provides authentication with + * the Director. + * + * Kern Sibbald, June MMI + * + * Version $Id$ + * + * This routine runs as a thread and must be thread reentrant. + * + * Basic tasks done here: + * + */ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2007 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + +#include "mainwindow.h" +#include "bacula.h" +#include "console_conf.h" +#include "jcr.h" + + +/* Commands sent to Director */ +static char hello[] = "Hello %s calling\n"; + +/* Response from Director */ +static char OKhello[] = "1000 OK:"; + +/* Forward referenced functions */ + +/* + * Authenticate Director + */ +int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons) +{ + BSOCK *dir = jcr->dir_bsock; + int tls_local_need = BNET_TLS_NONE; + int tls_remote_need = BNET_TLS_NONE; + int compatible = true; + char bashed_name[MAX_NAME_LENGTH]; + char *password; + + /* + * Send my name to the Director then do authentication + */ + if (cons) { + bstrncpy(bashed_name, cons->hdr.name, sizeof(bashed_name)); + bash_spaces(bashed_name); + password = cons->password; + } else { + bstrncpy(bashed_name, "*UserAgent*", sizeof(bashed_name)); + password = director->password; + } + /* Timeout Hello after 5 mins */ + btimer_t *tid = start_bsock_timer(dir, 60 * 5); + bnet_fsend(dir, hello, bashed_name); + + /* respond to Dir challenge */ + if (!cram_md5_respond(dir, password, &tls_remote_need, &compatible) || + /* Now challenge dir */ + !cram_md5_challenge(dir, password, tls_local_need, compatible)) { + stop_bsock_timer(tid); + printf(_("%s: Director authorization problem.\n"), my_name); + set_text(_("Director authorization problem.\n")); + set_text(_( + "Please see http://www.bacula.org/rel-manual/faq.html#AuthorizationErrors for help.\n")); + return 0; + } + + Dmsg1(6, ">dird: %s", dir->msg); + if (bnet_recv(dir) <= 0) { + stop_bsock_timer(tid); + set_textf(_("Bad response to Hello command: ERR=%s\n"), + bnet_strerror(dir)); + printf(_("%s: Bad response to Hello command: ERR=%s\n"), + my_name, bnet_strerror(dir)); + set_text(_("The Director is probably not running.\n")); + return 0; + } + stop_bsock_timer(tid); + Dmsg1(10, "msg); + if (strncmp(dir->msg, OKhello, sizeof(OKhello)-1) != 0) { + set_text(_("Director rejected Hello command\n")); + return 0; + } else { + set_text(dir->msg); + } + return 1; +} diff --git a/bacula/src/qt-console/console_conf.cpp b/bacula/src/qt-console/console_conf.cpp new file mode 100644 index 0000000000..f1cd77ecf3 --- /dev/null +++ b/bacula/src/qt-console/console_conf.cpp @@ -0,0 +1,337 @@ +/* + * Main configuration file parser for Bacula User Agent + * some parts may be split into separate files such as + * the schedule configuration (sch_config.c). + * + * Note, the configuration file parser consists of three parts + * + * 1. The generic lexical scanner in lib/lex.c and lib/lex.h + * + * 2. The generic config scanner in lib/parse_config.c and + * lib/parse_config.h. + * These files contain the parser code, some utility + * routines, and the common store routines (name, int, + * string). + * + * 3. The daemon specific file, which contains the Resource + * definitions as well as any specific store routines + * for the resource records. + * + * Kern Sibbald, January MM, September MM + * + * Version $Id$ + */ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + +#include "bacula.h" +#include "console_conf.h" + +/* Define the first and last resource ID record + * types. Note, these should be unique for each + * daemon though not a requirement. + */ +int r_first = R_FIRST; +int r_last = R_LAST; +static RES *sres_head[R_LAST - R_FIRST + 1]; +RES **res_head = sres_head; + +/* Forward referenced subroutines */ + + +/* We build the current resource here as we are + * scanning the resource configuration definition, + * then move it to allocated memory when the resource + * scan is complete. + */ +URES res_all; +int res_all_size = sizeof(res_all); + +/* Definition of records permitted within each + * resource with the routine to process the record + * information. + */ +static RES_ITEM dir_items[] = { + {"name", store_name, ITEM(dir_res.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(dir_res.hdr.desc), 0, 0, 0}, + {"dirport", store_int, ITEM(dir_res.DIRport), 0, ITEM_DEFAULT, 9101}, + {"address", store_str, ITEM(dir_res.address), 0, ITEM_REQUIRED, 0}, + {"password", store_password, ITEM(dir_res.password), 0, 0, 0}, + {"tlsenable", store_bit, ITEM(dir_res.tls_enable), 1, 0, 0}, + {"tlsrequire", store_bit, ITEM(dir_res.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(dir_res.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(dir_res.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(dir_res.tls_certfile), 0, 0, 0}, + {"tlskey", store_dir, ITEM(dir_res.tls_keyfile), 0, 0, 0}, + {NULL, NULL, {0}, 0, 0, 0} +}; + +static RES_ITEM con_items[] = { + {"name", store_name, ITEM(con_res.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(con_res.hdr.desc), 0, 0, 0}, + {"password", store_password, ITEM(con_res.password), 0, ITEM_REQUIRED, 0}, + {"tlsenable", store_bit, ITEM(con_res.tls_enable), 1, 0, 0}, + {"tlsrequire", store_bit, ITEM(con_res.tls_require), 1, 0, 0}, + {"tlscacertificatefile", store_dir, ITEM(con_res.tls_ca_certfile), 0, 0, 0}, + {"tlscacertificatedir", store_dir, ITEM(con_res.tls_ca_certdir), 0, 0, 0}, + {"tlscertificate", store_dir, ITEM(con_res.tls_certfile), 0, 0, 0}, + {"tlskey", store_dir, ITEM(con_res.tls_keyfile), 0, 0, 0}, + {NULL, NULL, {0}, 0, 0, 0} +}; + +static RES_ITEM con_font_items[] = { + {"name", store_name, ITEM(con_font.hdr.name), 0, ITEM_REQUIRED, 0}, + {"description", store_str, ITEM(con_font.hdr.desc), 0, 0, 0}, + {"font", store_str, ITEM(con_font.fontface), 0, 0, 0}, + {"requiressl", store_bit, ITEM(con_font.require_ssl), 1, ITEM_DEFAULT, 0}, + {NULL, NULL, {0}, 0, 0, 0} +}; + + +/* + * This is the master resource definition. + * It must have one item for each of the resources. + */ +RES_TABLE resources[] = { + {"director", dir_items, R_DIRECTOR}, + {"console", con_items, R_CONSOLE}, + {"consolefont", con_font_items, R_CONSOLE_FONT}, + {NULL, NULL, 0} +}; + + +/* Dump contents of resource */ +void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fmt, ...), void *sock) +{ + URES *res = (URES *)reshdr; + bool recurse = true; + + if (res == NULL) { + printf(_("No record for %d %s\n"), type, res_to_str(type)); + return; + } + if (type < 0) { /* no recursion */ + type = - type; + recurse = false; + } + switch (type) { + case R_DIRECTOR: + printf(_("Director: name=%s address=%s DIRport=%d\n"), reshdr->name, + res->dir_res.address, res->dir_res.DIRport); + break; + case R_CONSOLE: + printf(_("Console: name=%s\n"), reshdr->name); + break; + case R_CONSOLE_FONT: + printf(_("ConsoleFont: name=%s font face=%s\n"), + reshdr->name, NPRT(res->con_font.fontface)); + break; + default: + printf(_("Unknown resource type %d\n"), type); + } + if (recurse && res->dir_res.hdr.next) { + dump_resource(type, res->dir_res.hdr.next, sendit, sock); + } +} + +/* + * Free memory of resource. + * NB, we don't need to worry about freeing any references + * to other resources as they will be freed when that + * resource chain is traversed. Mainly we worry about freeing + * allocated strings (names). + */ +void free_resource(RES *sres, int type) +{ + RES *nres; + URES *res = (URES *)sres; + + if (res == NULL) + return; + + /* common stuff -- free the resource name */ + nres = (RES *)res->dir_res.hdr.next; + if (res->dir_res.hdr.name) { + free(res->dir_res.hdr.name); + } + if (res->dir_res.hdr.desc) { + free(res->dir_res.hdr.desc); + } + + switch (type) { + case R_DIRECTOR: + if (res->dir_res.address) { + free(res->dir_res.address); + } + if (res->dir_res.tls_ctx) { + free_tls_context(res->dir_res.tls_ctx); + } + if (res->dir_res.tls_ca_certfile) { + free(res->dir_res.tls_ca_certfile); + } + if (res->dir_res.tls_ca_certdir) { + free(res->dir_res.tls_ca_certdir); + } + if (res->dir_res.tls_certfile) { + free(res->dir_res.tls_certfile); + } + if (res->dir_res.tls_keyfile) { + free(res->dir_res.tls_keyfile); + } + break; + case R_CONSOLE: + if (res->con_res.password) { + free(res->con_res.password); + } + if (res->con_res.tls_ctx) { + free_tls_context(res->con_res.tls_ctx); + } + if (res->con_res.tls_ca_certfile) { + free(res->con_res.tls_ca_certfile); + } + if (res->con_res.tls_ca_certdir) { + free(res->con_res.tls_ca_certdir); + } + if (res->con_res.tls_certfile) { + free(res->con_res.tls_certfile); + } + if (res->con_res.tls_keyfile) { + free(res->con_res.tls_keyfile); + } + break; + case R_CONSOLE_FONT: + if (res->con_font.fontface) { + free(res->con_font.fontface); + } + break; + default: + printf(_("Unknown resource type %d\n"), type); + } + /* Common stuff again -- free the resource, recurse to next one */ + free(res); + if (nres) { + free_resource(nres, type); + } +} + +/* Save the new resource by chaining it into the head list for + * the resource. If this is pass 2, we update any resource + * pointers (currently only in the Job resource). + */ +void save_resource(int type, RES_ITEM *items, int pass) +{ + URES *res; + int rindex = type - r_first; + int i, size = 0; + int error = 0; + + /* + * Ensure that all required items are present + */ + for (i=0; items[i].name; i++) { + if (items[i].flags & ITEM_REQUIRED) { + if (!bit_is_set(i, res_all.dir_res.hdr.item_present)) { + Emsg2(M_ABORT, 0, _("%s item is required in %s resource, but not found.\n"), + items[i].name, resources[rindex]); + } + } + } + + /* During pass 2, we looked up pointers to all the resources + * referrenced in the current resource, , now we + * must copy their address from the static record to the allocated + * record. + */ + if (pass == 2) { + switch (type) { + /* Resources not containing a resource */ + case R_DIRECTOR: + break; + + case R_CONSOLE: + case R_CONSOLE_FONT: + break; + + default: + Emsg1(M_ERROR, 0, _("Unknown resource type %d\n"), type); + error = 1; + break; + } + /* Note, the resoure name was already saved during pass 1, + * so here, we can just release it. + */ + if (res_all.dir_res.hdr.name) { + free(res_all.dir_res.hdr.name); + res_all.dir_res.hdr.name = NULL; + } + if (res_all.dir_res.hdr.desc) { + free(res_all.dir_res.hdr.desc); + res_all.dir_res.hdr.desc = NULL; + } + return; + } + + /* The following code is only executed during pass 1 */ + switch (type) { + case R_DIRECTOR: + size = sizeof(DIRRES); + break; + case R_CONSOLE_FONT: + size = sizeof(CONFONTRES); + break; + case R_CONSOLE: + size = sizeof(CONRES); + break; + default: + printf(_("Unknown resource type %d\n"), type); + error = 1; + break; + } + /* Common */ + if (!error) { + res = (URES *)malloc(size); + memcpy(res, &res_all, size); + if (!res_head[rindex]) { + res_head[rindex] = (RES *)res; /* store first entry */ + } else { + RES *next, *last; + /* Add new res to end of chain */ + for (last=next=res_head[rindex]; next; next=next->next) { + last = next; + if (strcmp(next->name, res->dir_res.hdr.name) == 0) { + Emsg2(M_ERROR_TERM, 0, + _("Attempt to define second %s resource named \"%s\" is not permitted.\n"), + resources[rindex].name, res->dir_res.hdr.name); + } + } + last->next = (RES *)res; + Dmsg2(90, "Inserting %s res: %s\n", res_to_str(type), + res->dir_res.hdr.name); + } + } +} diff --git a/bacula/src/qt-console/console_conf.h b/bacula/src/qt-console/console_conf.h new file mode 100644 index 0000000000..7a31004436 --- /dev/null +++ b/bacula/src/qt-console/console_conf.h @@ -0,0 +1,111 @@ +/* + * Bacula GNOME User Agent specific configuration and defines + * + * Kern Sibbald, March 2002 + * + * Version $Id$ + */ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2002-2006 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. + This program is Free Software; you can redistribute it and/or + modify it under the terms of version two of the GNU General Public + License as published by the Free Software Foundation plus additions + that are listed in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ + +#ifndef __CONSOLE_CONF_H_ +#define __CONSOLE_CONF_H_ + +/* + * Resource codes -- they must be sequential for indexing + */ + +enum { + R_DIRECTOR = 1001, + R_CONSOLE, + R_CONSOLE_FONT, + R_FIRST = R_DIRECTOR, + R_LAST = R_CONSOLE_FONT /* Keep this updated */ +}; + +/* + * Some resource attributes + */ +enum { + R_NAME = 1020, + R_ADDRESS, + R_PASSWORD, + R_TYPE, + R_BACKUP +}; + + +/* Definition of the contents of each Resource */ +struct DIRRES { + RES hdr; + int DIRport; /* UA server port */ + char *address; /* UA server address */ + char *password; /* UA server password */ + int tls_enable; /* Enable TLS */ + int tls_require; /* Require TLS */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ + + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ +}; + +struct CONFONTRES { + RES hdr; + char *fontface; /* Console Font specification */ + int require_ssl; /* Require SSL on all connections */ +}; + +struct CONRES { + RES hdr; + char *password; /* UA server password */ + int tls_enable; /* Enable TLS on all connections */ + int tls_require; /* Require TLS on all connections */ + char *tls_ca_certfile; /* TLS CA Certificate File */ + char *tls_ca_certdir; /* TLS CA Certificate Directory */ + char *tls_certfile; /* TLS Client Certificate File */ + char *tls_keyfile; /* TLS Client Key File */ + + TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ +}; + + +/* Define the Union of all the above + * resource structure definitions. + */ +union u_res { + DIRRES dir_res; + CONRES con_res; + CONFONTRES con_font; + RES hdr; +}; + +typedef union u_res URES; + +#endif diff --git a/bacula/src/qt-console/images/bat-natural-fullsize.png b/bacula/src/qt-console/images/bat-natural-fullsize.png new file mode 100644 index 0000000000000000000000000000000000000000..7812eea34fedd0a852d9d6b90fea88a4197e0389 GIT binary patch literal 96268 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 literal 0 HcmV?d00001 diff --git a/bacula/src/qt-console/main.cpp b/bacula/src/qt-console/main.cpp index 93ea84ec51..1933a0b949 100644 --- a/bacula/src/qt-console/main.cpp +++ b/bacula/src/qt-console/main.cpp @@ -26,17 +26,225 @@ Switzerland, email:ftf@fsfeurope.org. */ - #include "mainwindow.h" #include +#include "config.h" +#include "bacula.h" +#include "console_conf.h" +#include "jcr.h" + + +/* Imported functions */ +int authenticate_director(JCR *jcr, DIRRES *director, CONRES *cons); + +/* Forward referenced functions */ +void terminate_console(int sig); +static void usage(); +static int check_resources(); + +#define CONFIG_FILE "./qt-console.conf" /* default configuration file */ + +/* Static variables */ +static char *configfile = NULL; + +MainWindow *mainWin; int main(int argc, char *argv[]) { + + int ch; + bool no_signals = true; + bool test_config = false; + + QApplication app(argc, argv); app.setQuitOnLastWindowClosed(true); - - MainWindow *main = new MainWindow; - main->show(); + mainWin = new MainWindow; + + mainWin->show(); + +#ifdef ENABLE_NLS + setlocale(LC_ALL, ""); + bindtextdomain("bacula", LOCALEDIR); + textdomain("bacula"); +#endif + + init_stack_dump(); + my_name_is(argc, argv, "gnome-console"); + init_msg(NULL, NULL); + working_directory = "/tmp"; + + struct sigaction sigignore; + sigignore.sa_flags = 0; + sigignore.sa_handler = SIG_IGN; + sigfillset(&sigignore.sa_mask); + sigaction(SIGPIPE, &sigignore, NULL); + + while ((ch = getopt(argc, argv, "bc:d:r:st?")) != -1) { + switch (ch) { + case 'c': /* configuration file */ + if (configfile != NULL) { + free(configfile); + } + configfile = bstrdup(optarg); + break; + + case 'd': + debug_level = atoi(optarg); + if (debug_level <= 0) + debug_level = 1; + break; + + case 's': /* turn off signals */ + no_signals = true; + break; + + case 't': + test_config = true; + break; + + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + + + if (!no_signals) { + init_signals(terminate_console); + } + + if (argc) { + usage(); + } + + if (configfile == NULL) { + configfile = bstrdup(CONFIG_FILE); + } + + parse_config(configfile); + set_text("Configuration read.\n"); + + if (init_crypto() != 0) { + Emsg0(M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n")); + } + + if (!check_resources()) { + Emsg1(M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile); + } + return app.exec(); } + +void terminate_console(int sig) +{ + (void)sig; /* avoid compiler complaints */ + exit(0); +} + +static void usage() +{ + fprintf(stderr, _( +PROG_COPYRIGHT +"\nVersion: %s (%s) %s %s %s\n\n" +"Usage: qt-console [-s] [-c config_file] [-d debug_level] [config_file]\n" +" -c set configuration file to file\n" +" -dnn set debug level to nn\n" +" -s no signals\n" +" -t test - read configuration and exit\n" +" -? print this message.\n" +"\n"), 2007, VERSION, BDATE, HOST_OS, DISTNAME, DISTVER); + + exit(1); +} + +/* + * Call-back for reading a passphrase for an encrypted PEM file + * This function uses getpass(), which uses a static buffer and is NOT thread-safe. + */ +static int tls_pem_callback(char *buf, int size, const void *userdata) +{ +#ifdef HAVE_TLS + const char *prompt = (const char *) userdata; + char *passwd; + + passwd = getpass(prompt); + bstrncpy(buf, passwd, size); + return (strlen(buf)); +#else + buf[0] = 0; + return 0; +#endif +} + + +/* + * Make a quick check to see that we have all the + * resources needed. + */ +static int check_resources() +{ + bool ok = true; + DIRRES *director; + int numdir; + + LockRes(); + + numdir = 0; + foreach_res(director, R_DIRECTOR) { + numdir++; + /* tls_require implies tls_enable */ + if (director->tls_require) { + if (have_tls) { + director->tls_enable = true; + } else { + Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n")); + ok = false; + continue; + } + } + + if ((!director->tls_ca_certfile && !director->tls_ca_certdir) && director->tls_enable) { + Emsg2(M_FATAL, 0, _("Neither \"TLS CA Certificate\"" + " or \"TLS CA Certificate Dir\" are defined for Director \"%s\" in %s." + " At least one CA certificate store is required.\n"), + director->hdr.name, configfile); + ok = false; + } + } + + if (numdir == 0) { + Emsg1(M_FATAL, 0, _("No Director resource defined in %s\n" + "Without that I don't how to speak to the Director :-(\n"), configfile); + ok = false; + } + + CONRES *cons; + /* Loop over Consoles */ + foreach_res(cons, R_CONSOLE) { + /* tls_require implies tls_enable */ + if (cons->tls_require) { + if (have_tls) { + cons->tls_enable = true; + } else { + Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n")); + ok = false; + continue; + } + } + + if ((!cons->tls_ca_certfile && !cons->tls_ca_certdir) && cons->tls_enable) { + Emsg2(M_FATAL, 0, _("Neither \"TLS CA Certificate\"" + " or \"TLS CA Certificate Dir\" are defined for Console \"%s\" in %s.\n"), + cons->hdr.name, configfile); + ok = false; + } + } + + UnlockRes(); + + return ok; +} diff --git a/bacula/src/qt-console/main.ui b/bacula/src/qt-console/main.ui index e29f43f4c8..4298a143c7 100644 --- a/bacula/src/qt-console/main.ui +++ b/bacula/src/qt-console/main.ui @@ -14,7 +14,7 @@ qt-console - images/bat_icon.png + images/bat-natural-fullsize.png diff --git a/bacula/src/qt-console/mainwindow.cpp b/bacula/src/qt-console/mainwindow.cpp index 6a60c52bc2..3750f01133 100644 --- a/bacula/src/qt-console/mainwindow.cpp +++ b/bacula/src/qt-console/mainwindow.cpp @@ -55,3 +55,45 @@ void MainWindow::input_line() lineEdit->clear(); /* clear the lineEdit box */ textEdit->append(cmdStr); /* append text on screen */ } + +void set_textf(const char *fmt, ...) +{ + va_list arg_ptr; + char buf[1000]; + int len; + va_start(arg_ptr, fmt); + len = bvsnprintf(buf, sizeof(buf), fmt, arg_ptr); + va_end(arg_ptr); + mainWin->textEdit->append(buf); +} + +void set_text(const char *buf) +{ + mainWin->textEdit->append(buf); +} + +void set_statusf(const char *fmt, ...) +{ + va_list arg_ptr; + char buf[1000]; + int len; + va_start(arg_ptr, fmt); + len = bvsnprintf(buf, sizeof(buf), fmt, arg_ptr); + va_end(arg_ptr); +// gtk_label_set_text(GTK_LABEL(status1), buf); +// set_scroll_bar_to_end(); +// ready = false; +} + +void set_status_ready() +{ + mainWin->statusBar()->showMessage("Ready"); +// ready = true; +// set_scroll_bar_to_end(); +} + +void set_status(const char *buf) +{ + mainWin->statusBar()->showMessage(buf); +// ready = false; +} diff --git a/bacula/src/qt-console/mainwindow.h b/bacula/src/qt-console/mainwindow.h index 415ab8f2e4..f5bfe11217 100644 --- a/bacula/src/qt-console/mainwindow.h +++ b/bacula/src/qt-console/mainwindow.h @@ -49,3 +49,10 @@ public slots: private: QString m_UserInput; }; + +extern MainWindow *mainWin; + +void set_textf(const char *fmt, ...); +void set_text(const char *buf); + +int bvsnprintf(char *str, int32_t size, const char *format, va_list ap); diff --git a/bacula/src/qt-console/qt-console.pro b/bacula/src/qt-console/qt-console.pro index 5fe8daed77..f93e8448c4 100644 --- a/bacula/src/qt-console/qt-console.pro +++ b/bacula/src/qt-console/qt-console.pro @@ -6,10 +6,14 @@ TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . +INCLUDEPATH += .. +LIBS += -L../lib +LIBS += -lbac +LIBS += -lssl -lcrypto RESOURCES = main.qrc # Input FORMS += main.ui -HEADERS += mainwindow.h -SOURCES += main.cpp +HEADERS += mainwindow.h console_conf.h +SOURCES += main.cpp authenticate.cpp console_conf.cpp SOURCES += mainwindow.cpp -- 2.39.5