X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_server.c;h=b602e0a1e0e7e63989e8cfcaedc9c3462fcc067a;hb=87187e5526cf427d78cbc3763a8d15df70c2ea3b;hp=2cb78457a8d61be3d87412acfe341ca553c75b92;hpb=653a27487beed62f2cf1f74c0862985e0124a724;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_server.c b/bacula/src/dird/ua_server.c index 2cb78457a8..b602e0a1e0 100644 --- a/bacula/src/dird/ua_server.c +++ b/bacula/src/dird/ua_server.c @@ -6,7 +6,7 @@ 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 + modify it under the terms of version three of the GNU Affero General Public License as published by the Free Software Foundation and included in the file LICENSE. @@ -15,12 +15,12 @@ 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 + You should have received a copy of the GNU Affero 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. + Bacula® is a registered trademark of Kern Sibbald. The licensor of Bacula is the Free Software Foundation Europe (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. @@ -38,9 +38,6 @@ #include "dird.h" /* Imported variables */ -extern int r_first; -extern int r_last; -extern struct s_res resources[]; /* Forward referenced functions */ @@ -79,9 +76,10 @@ extern "C" void *connect_thread(void *arg) { pthread_detach(pthread_self()); + set_jcr_in_tsd(INVALID_JCR); - /* Permit 20 console connections */ - bnet_thread_server((dlist*)arg, 20, &ua_workq, handle_UA_client_request); + /* Permit MaxConsoleConnect console connections */ + bnet_thread_server((dlist*)arg, director->MaxConsoleConnect, &ua_workq, handle_UA_client_request); return NULL; } @@ -105,9 +103,9 @@ JCR *new_control_jcr(const char *base_name, int job_type) jcr->sd_auth_key = bstrdup("dummy"); /* dummy Storage daemon key */ create_unique_job_name(jcr, base_name); jcr->sched_time = jcr->start_time; - jcr->JobType = job_type; - jcr->JobLevel = L_NONE; - set_jcr_job_status(jcr, JS_Running); + jcr->setJobType(job_type); + jcr->setJobLevel(L_NONE); + jcr->setJobStatus(JS_Running); jcr->JobId = 0; return jcr; } @@ -129,6 +127,7 @@ static void *handle_UA_client_request(void *arg) ua = new_ua_context(jcr); ua->UA_sock = user; + set_jcr_in_tsd(INVALID_JCR); user->recv(); /* Get first message */ if (!authenticate_user_agent(ua)) { @@ -142,9 +141,9 @@ static void *handle_UA_client_request(void *arg) pm_strcpy(ua->cmd, ua->UA_sock->msg); parse_ua_args(ua); if (ua->argc > 0 && ua->argk[0][0] == '.') { - do_a_dot_command(ua, ua->cmd); + do_a_dot_command(ua); } else { - do_a_command(ua, ua->cmd); + do_a_command(ua); } dequeue_messages(ua->jcr); if (!ua->quit) { @@ -196,6 +195,7 @@ UAContext *new_ua_context(JCR *jcr) ua->db = jcr->db; ua->cmd = get_pool_memory(PM_FNAME); ua->args = get_pool_memory(PM_FNAME); + ua->errmsg = get_pool_memory(PM_FNAME); ua->verbose = true; ua->automount = true; return ua; @@ -209,10 +209,12 @@ void free_ua_context(UAContext *ua) if (ua->args) { free_pool_memory(ua->args); } + if (ua->errmsg) { + free_pool_memory(ua->errmsg); + } if (ua->prompt) { free(ua->prompt); } - if (ua->UA_sock) { bnet_close(ua->UA_sock); ua->UA_sock = NULL;