X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_input.c;h=3c9af2500e407c108ad22e8b09cd0f22012941d4;hb=6fa75d791efc5530f4fe9ffc4d21b8866d1543aa;hp=e9058692a7df0fb44b283caa264aeac371c26f14;hpb=fb2e4145eaa9d0c19135e0af83a0cd9aefcfe450;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_input.c b/bacula/src/dird/ua_input.c index e9058692a7..3c9af2500e 100644 --- a/bacula/src/dird/ua_input.c +++ b/bacula/src/dird/ua_input.c @@ -1,3 +1,30 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2001-2008 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 and included + 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. +*/ /* * * Bacula Director -- User Agent Input and scanning code @@ -6,20 +33,6 @@ * * Version $Id$ */ -/* - Copyright (C) 2001-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 - version 2 as ammended with additional clauses defined in the - file LICENSE in the main source directory. - - 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 - the file LICENSE for additional details. - - */ #include "bacula.h" #include "dird.h" @@ -36,13 +49,13 @@ int get_cmd(UAContext *ua, const char *prompt) int stat; ua->cmd[0] = 0; - if (!sock) { /* No UA */ + if (!sock || ua->batch) { /* No UA or batch mode */ return 0; } - bnet_fsend(sock, "%s", prompt); - bnet_sig(sock, BNET_PROMPT); /* request more input */ + sock->fsend("%s", prompt); + sock->signal(BNET_PROMPT); /* request more input */ for ( ;; ) { - stat = bnet_recv(sock); + stat = sock->recv(); if (stat == BNET_SIGNAL) { continue; /* ignore signals */ } @@ -79,17 +92,17 @@ bool get_pint(UAContext *ua, const char *prompt) return false; } /* Kludge for slots blank line => 0 */ - if (ua->cmd[0] == 0 && strncmp(prompt, "Enter slot", 10) == 0) { + if (ua->cmd[0] == 0 && strncmp(prompt, _("Enter slot"), strlen(_("Enter slot"))) == 0) { return true; } if (!is_a_number(ua->cmd)) { - bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd); + ua->warning_msg(_("Expected a positive integer, got: %s\n"), ua->cmd); continue; } errno = 0; dval = strtod(ua->cmd, NULL); if (errno != 0 || dval < 0) { - bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd); + ua->warning_msg(_("Expected a positive integer, got: %s\n"), ua->cmd); continue; } ua->pint32_val = (uint32_t)dval; @@ -98,6 +111,30 @@ bool get_pint(UAContext *ua, const char *prompt) } } +/* + * Test a yes or no response + * Returns: false if failure + * true if success => ret == 1 for yes + * ret == 0 for no + */ +bool is_yesno(char *val, int *ret) +{ + *ret = 0; + if ((strcasecmp(val, _("yes")) == 0) || + (strcasecmp(val, NT_("yes")) == 0)) + { + *ret = 1; + } else if ((strcasecmp(val, _("no")) == 0) || + (strcasecmp(val, NT_("no")) == 0)) + { + *ret = 0; + } else { + return false; + } + + return true; +} + /* * Gets a yes or no response * Returns: false if failure @@ -107,9 +144,10 @@ bool get_pint(UAContext *ua, const char *prompt) bool get_yesno(UAContext *ua, const char *prompt) { int len; - + int ret; ua->pint32_val = 0; for (;;) { + if (ua->api) ua->UA_sock->signal(BNET_YESNO); if (!get_cmd(ua, prompt)) { return false; } @@ -117,17 +155,38 @@ bool get_yesno(UAContext *ua, const char *prompt) if (len < 1 || len > 3) { continue; } - if (strncasecmp(ua->cmd, _("yes"), len) == 0) { - ua->pint32_val = 1; - return true; - } - if (strncasecmp(ua->cmd, _("no"), len) == 0) { + if (is_yesno(ua->cmd, &ret)) { + ua->pint32_val = ret; return true; } - bsendmsg(ua, _("Invalid response. You must answer yes or no.\n")); + ua->warning_msg(_("Invalid response. You must answer yes or no.\n")); } } +/* + * Gets an Enabled value => 0, 1, 2, yes, no, archived + * Returns: 0, 1, 2 if OK + * -1 on error + */ +int get_enabled(UAContext *ua, const char *val) +{ + int Enabled = -1; + + if (strcasecmp(val, "yes") == 0 || strcasecmp(val, "true") == 0) { + Enabled = 1; + } else if (strcasecmp(val, "no") == 0 || strcasecmp(val, "false") == 0) { + Enabled = 0; + } else if (strcasecmp(val, "archived") == 0) { + Enabled = 2; + } else { + Enabled = atoi(val); + } + if (Enabled < 0 || Enabled > 2) { + ua->error_msg(_("Invalid Enabled value, it must be yes, no, archived, 0, 1, or 2\n")); + return -1; + } + return Enabled; +} void parse_ua_args(UAContext *ua) {