26
26
#include <sys/stat.h>
28
28
/* Added this for string translation. */
29
#include <libdrizzle/gettext.h>
29
#include <drizzled/gettext.h>
31
31
#define ADMIN_VERSION "8.42"
32
32
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
34
34
char *host= NULL, *user= NULL, *opt_password= NULL;
35
static bool interrupted= false, opt_verbose= false,tty_password= false;
35
static bool interrupted= false, opt_verbose= false,tty_password= false;
36
36
static uint32_t tcp_port= 0, option_wait= 0, option_silent= 0;
37
37
static uint32_t my_end_arg;
38
38
static uint32_t opt_connect_timeout, opt_shutdown_timeout;
39
static myf error_flags; /* flags to pass to my_printf_error, like ME_BELL */
44
45
static void usage(void);
45
46
static void print_version(void);
46
extern "C" RETSIGTYPE endprog(int signal_number);
47
extern "C" void endprog(int signal_number);
47
48
extern "C" bool get_one_option(int optid, const struct my_option *opt,
49
50
static int execute_commands(DRIZZLE *drizzle,int argc, char **argv);
50
static bool sql_connect(DRIZZLE *drizzle, uint wait);
51
static bool sql_connect(DRIZZLE *drizzle, uint32_t wait);
53
54
The order of commands must be the same as command_names,
74
75
NO_ARG, 0, 0, 0, 0, 0, 0},
75
76
{"host", 'h', N_("Connect to host."), (char**) &host, (char**) &host, 0, GET_STR,
76
77
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
78
79
N_("Password to use when connecting to server. If password is not given it's asked from the tty."),
79
80
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
80
{"port", 'P', N_("Port number to use for connection or 0 for default to, in "
81
"order of preference, my.cnf, $DRIZZLE_TCP_PORT, "
81
{"port", 'p', N_("Port number to use for connection or 0 for default to, in "
82
"order of preference, drizzle.cnf, $DRIZZLE_TCP_PORT, "
82
83
"built-in default (" STRINGIFY_ARG(DRIZZLE_PORT) ")."),
84
(char**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
84
0, 0, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
85
85
{"silent", 's', N_("Silently exit if one can't connect to server."),
86
86
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
87
87
#ifndef DONT_ALLOW_USER_CHANGE
107
107
static const char *load_default_groups[]= { "drizzleadmin","client",0 };
110
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
110
get_one_option(int optid, const struct my_option *, char *argument)
113
uint64_t temp_drizzle_port= 0;
118
temp_drizzle_port= (uint64_t) strtoul(argument, &endchar, 10);
119
/* if there is an alpha character this is not a valid port */
120
if (strlen(endchar) != 0)
122
fprintf(stderr, _("Non-integer value supplied for port. If you are trying to enter a password please use --password instead.\n"));
125
/* If the port number is > 65535 it is not a valid port
126
This also helps with potential data loss casting unsigned long to a
128
if ((temp_drizzle_port == 0) || (temp_drizzle_port > 65535))
130
fprintf(stderr, _("Value supplied for port is not valid.\n"));
135
tcp_port= (uint32_t) temp_drizzle_port;
119
141
char *start=argument;
121
opt_password= my_strdup(argument,MYF(MY_FAE));
122
while (*argument) *argument++= 'x'; /* Destroy argument */
145
opt_password= strdup(argument);
146
if (opt_password == NULL)
148
fprintf(stderr, _("Memory allocation error while copying password. "
154
/* Overwriting password with 'x' */
124
start[1]=0; /* Cut length of argument */
159
/* Cut length of argument */
164
200
char **commands, **save_argv;
166
202
MY_INIT(argv[0]);
167
drizzle_create(&drizzle);
168
load_defaults("my",load_default_groups,&argc,&argv);
203
drizzleclient_create(&drizzle);
204
load_defaults("drizzle",load_default_groups,&argc,&argv);
169
205
save_argv = argv; /* Save for free_defaults */
170
206
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
183
219
if (tty_password)
184
opt_password = get_tty_password(NULL);
220
opt_password = drizzleclient_get_tty_password(NULL);
186
222
signal(SIGINT,endprog); /* Here if abort */
187
223
signal(SIGTERM,endprog); /* Here if abort */
189
225
if (opt_connect_timeout)
191
uint tmp=opt_connect_timeout;
192
drizzle_options(&drizzle,DRIZZLE_OPT_CONNECT_TIMEOUT, (char*) &tmp);
227
uint32_t tmp=opt_connect_timeout;
228
drizzleclient_options(&drizzle,DRIZZLE_OPT_CONNECT_TIMEOUT, (char*) &tmp);
197
231
if (sql_connect(&drizzle, option_wait))
199
unsigned int err= drizzle_errno(&drizzle);
233
unsigned int err= drizzleclient_errno(&drizzle);
200
234
if (err >= CR_MIN_ERROR && err <= CR_MAX_ERROR)
217
251
error=execute_commands(&drizzle,argc,commands);
218
drizzle_close(&drizzle);
252
drizzleclient_close(&drizzle);
220
254
free(opt_password);
222
256
free_defaults(save_argv);
223
257
my_end(my_end_arg);
258
return error ? 1 : 0;
227
RETSIGTYPE endprog(int signal_number __attribute__((unused)))
232
static bool sql_connect(DRIZZLE *drizzle, uint wait)
266
static bool sql_connect(DRIZZLE *drizzle, uint32_t wait)
238
if (drizzle_connect(drizzle,host,user,opt_password,NULL,tcp_port,NULL,0))
272
if (drizzleclient_connect(drizzle,host,user,opt_password,NULL,tcp_port,NULL,0))
240
274
drizzle->reconnect= 1;
254
288
host= (char*) LOCAL_HOST;
256
my_printf_error(0,_("connect to server at '%s' failed\nerror: '%s'"),
257
error_flags, host, drizzle_error(drizzle));
290
fprintf(stderr,_("connect to server at '%s' failed\nerror: '%s'"),
291
host, drizzleclient_error(drizzle));
259
if (drizzle_errno(drizzle) == CR_CONN_HOST_ERROR ||
260
drizzle_errno(drizzle) == CR_UNKNOWN_HOST)
293
if (drizzleclient_errno(drizzle) == CR_CONN_HOST_ERROR ||
294
drizzleclient_errno(drizzle) == CR_UNKNOWN_HOST)
262
296
fprintf(stderr,_("Check that drizzled is running on %s"),host);
263
297
fprintf(stderr,_(" and that the port is %d.\n"),
264
tcp_port ? tcp_port: drizzle_get_default_port());
298
tcp_port ? tcp_port: drizzleclient_get_default_port());
265
299
fprintf(stderr,_("You can check this by doing 'telnet %s %d'\n"),
266
host, tcp_port ? tcp_port: drizzle_get_default_port());
300
host, tcp_port ? tcp_port: drizzleclient_get_default_port());
271
305
if (wait != UINT32_MAX)
272
306
wait--; /* One less retry */
273
if ((drizzle_errno(drizzle) != CR_CONN_HOST_ERROR) &&
274
(drizzle_errno(drizzle) != CR_CONNECTION_ERROR))
307
if ((drizzleclient_errno(drizzle) != CR_CONN_HOST_ERROR) &&
308
(drizzleclient_errno(drizzle) != CR_CONNECTION_ERROR))
276
fprintf(stderr,_("Got error: %s\n"), drizzle_error(drizzle));
310
fprintf(stderr,_("Got error: %s\n"), drizzleclient_error(drizzle));
278
312
else if (!option_silent)
316
350
printf(_("shutting down drizzled...\n"));
318
if (drizzle_shutdown(drizzle))
352
if (drizzleclient_shutdown(drizzle))
320
my_printf_error(0, _("shutdown failed; error: '%s'"), error_flags,
321
drizzle_error(drizzle));
354
fprintf(stderr, _("shutdown failed; error: '%s'"),
355
drizzleclient_error(drizzle));
324
drizzle_close(drizzle); /* Close connection to avoid error messages */
358
drizzleclient_close(drizzle); /* Close connection to avoid error messages */
327
361
printf(_("done\n"));
333
367
drizzle->reconnect=0; /* We want to know of reconnects */
334
if (!drizzle_ping(drizzle))
368
if (!drizzleclient_ping(drizzle))
336
370
if (option_silent < 2)
337
371
puts(_("drizzled is alive"));
341
if (drizzle_errno(drizzle) == CR_SERVER_GONE_ERROR)
375
if (drizzleclient_errno(drizzle) == CR_SERVER_GONE_ERROR)
343
377
drizzle->reconnect=1;
344
if (!drizzle_ping(drizzle))
378
if (!drizzleclient_ping(drizzle))
345
379
puts(_("connection was down, but drizzled is now alive"));
349
my_printf_error(0,_("drizzled doesn't answer to ping, error: '%s'"),
350
error_flags, drizzle_error(drizzle));
383
fprintf(stderr,_("drizzled doesn't answer to ping, error: '%s'"),
384
drizzleclient_error(drizzle));
365
399
static void print_version(void)
367
401
printf(_("%s Ver %s Distrib %s, for %s on %s\n"),my_progname,ADMIN_VERSION,
368
drizzle_get_client_info(),SYSTEM_TYPE,MACHINE_TYPE);
402
drizzleclient_get_client_info(),SYSTEM_TYPE,MACHINE_TYPE);
371
405
static void usage(void)