X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_query.c;h=ba8cd815343298edf1fa2cf161791c2825931d96;hb=43956697f21cfe794d1faf6ab019693356f25869;hp=32f21142664cb99873331d146ceb43c817369ba2;hpb=108f4ef89086484542f98f62dcb7d8c3be29070f;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_query.c b/bacula/src/dird/ua_query.c index 32f2114266..ba8cd81534 100644 --- a/bacula/src/dird/ua_query.c +++ b/bacula/src/dird/ua_query.c @@ -6,24 +6,18 @@ * * Version $Id$ */ - /* - Copyright (C) 2000-2003 Kern Sibbald and John Walker + 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 as - published by the Free Software Foundation; either version 2 of - the License, or (at your option) any later version. + modify it under the terms of the GNU General Public License + version 2 as amended 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 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., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + the file LICENSE for additional details. */ @@ -32,15 +26,15 @@ extern DIRRES *director; -static POOLMEM *substitute_prompts(UAContext *ua, - POOLMEM *query, char **prompt, int nprompt); +static POOLMEM *substitute_prompts(UAContext *ua, + POOLMEM *query, char **prompt, int nprompt); /* * Read a file containing SQL queries and prompt * the user to select which one. * * File format: - * # => comment + * # => comment * :prompt for query * *prompt for subst %1 * *prompt for subst %2 @@ -48,7 +42,7 @@ static POOLMEM *substitute_prompts(UAContext *ua, * SQL statement possibly terminated by ; * :next query prompt */ -int querycmd(UAContext *ua, char *cmd) +int querycmd(UAContext *ua, const char *cmd) { FILE *fd = NULL; POOLMEM *query = get_pool_memory(PM_MESSAGE); @@ -57,21 +51,21 @@ int querycmd(UAContext *ua, char *cmd) char *prompt[9]; int nprompt = 0;; char *query_file = director->query_file; - + if (!open_db(ua)) { goto bail_out; } if ((fd=fopen(query_file, "r")) == NULL) { - bsendmsg(ua, "Could not open %s: ERR=%s\n", query_file, - strerror(errno)); + bsendmsg(ua, _("Could not open %s: ERR=%s\n"), query_file, + strerror(errno)); goto bail_out; } start_prompt(ua, _("Available queries:\n")); while (fgets(line, sizeof(line), fd) != NULL) { if (line[0] == ':') { - strip_trailing_junk(line); - add_prompt(ua, line+1); + strip_trailing_junk(line); + add_prompt(ua, line+1); } } if ((item=do_prompt(ua, "", _("Choose a query"), NULL, 0)) < 0) { @@ -81,10 +75,10 @@ int querycmd(UAContext *ua, char *cmd) i = -1; while (fgets(line, sizeof(line), fd) != NULL) { if (line[0] == ':') { - i++; + i++; } if (i == item) { - break; + break; } } if (i != item) { @@ -97,40 +91,40 @@ int querycmd(UAContext *ua, char *cmd) } while (fgets(line, sizeof(line), fd) != NULL) { if (line[0] == '#') { - continue; + continue; } if (line[0] == ':') { - break; + break; } strip_trailing_junk(line); len = strlen(line); if (line[0] == '*') { /* prompt */ - if (nprompt >= 9) { + if (nprompt >= 9) { bsendmsg(ua, _("Too many prompts in query, max is 9.\n")); - } else { + } else { line[len++] = ' '; - line[len] = 0; - prompt[nprompt++] = bstrdup(line+1); - continue; - } - } + line[len] = 0; + prompt[nprompt++] = bstrdup(line+1); + continue; + } + } if (*query != 0) { - pm_strcat(&query, " "); + pm_strcat(query, " "); } - pm_strcat(&query, line); + pm_strcat(query, line); if (line[len-1] != ';') { - continue; + continue; } - line[len-1] = 0; /* zap ; */ + line[len-1] = 0; /* zap ; */ if (query[0] != 0) { - query = substitute_prompts(ua, query, prompt, nprompt); + query = substitute_prompts(ua, query, prompt, nprompt); Dmsg1(100, "Query2=%s\n", query); if (query[0] == '!') { - db_list_sql_query(ua->jcr, ua->db, query+1, prtit, ua, 0, VERT_LIST); - } else if (!db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST)) { + db_list_sql_query(ua->jcr, ua->db, query+1, prtit, ua, 0, VERT_LIST); + } else if (!db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST)) { bsendmsg(ua, "%s\n", query); - } - query[0] = 0; + } + query[0] = 0; } } /* end while */ @@ -138,10 +132,10 @@ int querycmd(UAContext *ua, char *cmd) query = substitute_prompts(ua, query, prompt, nprompt); Dmsg1(100, "Query2=%s\n", query); if (query[0] == '!') { - db_list_sql_query(ua->jcr, ua->db, query+1, prtit, ua, 0, VERT_LIST); - } else if (!db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST)) { + db_list_sql_query(ua->jcr, ua->db, query+1, prtit, ua, 0, VERT_LIST); + } else if (!db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST)) { bsendmsg(ua, "%s\n", query); - } + } } bail_out: @@ -155,8 +149,8 @@ bail_out: return 1; } -static POOLMEM *substitute_prompts(UAContext *ua, - POOLMEM *query, char **prompt, int nprompt) +static POOLMEM *substitute_prompts(UAContext *ua, + POOLMEM *query, char **prompt, int nprompt) { char *p, *q, *o; POOLMEM *new_query; @@ -173,14 +167,14 @@ static POOLMEM *substitute_prompts(UAContext *ua, o = new_query; for (q=query; (p=strchr(q, '%')); ) { if (p) { - olen = o - new_query; - new_query = check_pool_memory_size(new_query, olen + p - q + 10); - o = new_query + olen; - while (q < p) { /* copy up to % */ - *o++ = *q++; - } - p++; - switch (*p) { + olen = o - new_query; + new_query = check_pool_memory_size(new_query, olen + p - q + 10); + o = new_query + olen; + while (q < p) { /* copy up to % */ + *o++ = *q++; + } + p++; + switch (*p) { case '1': case '2': case '3': @@ -191,37 +185,37 @@ static POOLMEM *substitute_prompts(UAContext *ua, case '8': case '9': n = (int)(*p) - (int)'1'; - if (prompt[n]) { - if (!subst[n]) { - if (!get_cmd(ua, prompt[n])) { - q += 2; - break; - } - } - len = strlen(ua->cmd); - p = (char *)malloc(len * 2 + 1); - db_escape_string(p, ua->cmd, len); - subst[n] = p; - olen = o - new_query; - new_query = check_pool_memory_size(new_query, olen + strlen(p) + 10); - o = new_query + olen; - while (*p) { - *o++ = *p++; - } - } else { + if (prompt[n]) { + if (!subst[n]) { + if (!get_cmd(ua, prompt[n])) { + q += 2; + break; + } + } + len = strlen(ua->cmd); + p = (char *)malloc(len * 2 + 1); + db_escape_string(p, ua->cmd, len); + subst[n] = p; + olen = o - new_query; + new_query = check_pool_memory_size(new_query, olen + strlen(p) + 10); + o = new_query + olen; + while (*p) { + *o++ = *p++; + } + } else { bsendmsg(ua, _("Warning prompt %d missing.\n"), n+1); - } - q += 2; - break; + } + q += 2; + break; case '%': *o++ = '%'; - q += 2; - break; - default: + q += 2; + break; + default: *o++ = '%'; - q++; - break; - } + q++; + break; + } } } olen = o - new_query; @@ -233,7 +227,7 @@ static POOLMEM *substitute_prompts(UAContext *ua, *o = 0; for (i=0; i<9; i++) { if (subst[i]) { - free(subst[i]); + free(subst[i]); } } free_pool_memory(query); @@ -243,11 +237,11 @@ static POOLMEM *substitute_prompts(UAContext *ua, /* * Get general SQL query for Catalog */ -int sqlquerycmd(UAContext *ua, char *cmd) +int sqlquerycmd(UAContext *ua, const char *cmd) { POOLMEM *query = get_pool_memory(PM_MESSAGE); int len; - char *msg; + const char *msg; if (!open_db(ua)) { free_pool_memory(query); @@ -255,26 +249,26 @@ int sqlquerycmd(UAContext *ua, char *cmd) } *query = 0; - bsendmsg(ua, _("Entering SQL query mode.\n\ -Terminate each query with a semicolon.\n\ -Terminate query mode with a blank line.\n")); - msg = "Enter SQL query: "; + bsendmsg(ua, _("Entering SQL query mode.\n" +"Terminate each query with a semicolon.\n" +"Terminate query mode with a blank line.\n")); + msg = _("Enter SQL query: "); while (get_cmd(ua, msg)) { len = strlen(ua->cmd); Dmsg2(400, "len=%d cmd=%s:\n", len, ua->cmd); if (len == 0) { - break; + break; } query = check_pool_memory_size(query, len + 1); if (*query != 0) { - strcat(query, " "); + pm_strcat(query, " "); } - strcat(query, ua->cmd); + pm_strcat(query, ua->cmd); if (ua->cmd[len-1] == ';') { - ua->cmd[len-1] = 0; /* zap ; */ - /* Submit query */ - db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST); - *query = 0; /* start new query */ + ua->cmd[len-1] = 0; /* zap ; */ + /* Submit query */ + db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST); + *query = 0; /* start new query */ msg = _("Enter SQL query: "); } else { msg = _("Add to SQL query: "); @@ -282,5 +276,5 @@ Terminate query mode with a blank line.\n")); } free_pool_memory(query); bsendmsg(ua, _("End query mode.\n")); - return 1; + return 1; }