Formatted maxadmin.c

Formatted maxadmin.c according to the style guide.
This commit is contained in:
Markus Makela
2016-01-21 19:41:32 +02:00
parent 608924beba
commit cceeb2d234

View File

@ -73,6 +73,7 @@ static void PrintVersion(const char *progname);
static void read_inifile(char **hostname, char **port, char **user, char **passwd, int*); static void read_inifile(char **hostname, char **port, char **user, char **passwd, int*);
#ifdef HISTORY #ifdef HISTORY
static char * static char *
prompt(EditLine *el __attribute__((__unused__))) prompt(EditLine *el __attribute__((__unused__)))
{ {
@ -82,7 +83,8 @@ prompt(EditLine *el __attribute__((__unused__)))
} }
#endif #endif
static struct option long_options[] = { static struct option long_options[] =
{
{"host", required_argument, 0, 'h'}, {"host", required_argument, 0, 'h'},
{"user", required_argument, 0, 'u'}, {"user", required_argument, 0, 'u'},
{"password", required_argument, 0, 'p'}, {"password", required_argument, 0, 'p'},
@ -127,28 +129,34 @@ char c;
read_inifile(&hostname, &port, &user, &passwd, &use_emacs); read_inifile(&hostname, &port, &user, &passwd, &use_emacs);
while ((c = getopt_long(argc, argv, "h:p:P:u:v?e", while ((c = getopt_long(argc, argv, "h:p:P:u:v?e",
long_options, &option_index)) long_options, &option_index)) >= 0)
>= 0) {
switch (c)
{ {
switch (c) {
case 'h': case 'h':
hostname = strdup(optarg); hostname = strdup(optarg);
break; break;
case 'p': case 'p':
passwd = strdup(optarg); passwd = strdup(optarg);
break; break;
case 'P': case 'P':
port = strdup(optarg); port = strdup(optarg);
break; break;
case 'u': case 'u':
user = strdup(optarg); user = strdup(optarg);
break; break;
case 'v': case 'v':
PrintVersion(*argv); PrintVersion(*argv);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
case 'e': case 'e':
use_emacs = 1; use_emacs = 1;
break; break;
case '?': case '?':
DoUsage(*argv); DoUsage(*argv);
exit(optopt ? EXIT_FAILURE : EXIT_SUCCESS); exit(optopt ? EXIT_FAILURE : EXIT_SUCCESS);
@ -161,30 +169,45 @@ char c;
tcflag_t c_lflag; tcflag_t c_lflag;
if (tcgetattr(STDIN_FILENO, &tty_attr) < 0) if (tcgetattr(STDIN_FILENO, &tty_attr) < 0)
{
return -1; return -1;
}
c_lflag = tty_attr.c_lflag; c_lflag = tty_attr.c_lflag;
tty_attr.c_lflag &= ~ICANON; tty_attr.c_lflag &= ~ICANON;
tty_attr.c_lflag &= ~ECHO; tty_attr.c_lflag &= ~ECHO;
if (tcsetattr(STDIN_FILENO, 0, &tty_attr) < 0) if (tcsetattr(STDIN_FILENO, 0, &tty_attr) < 0)
{
return -1; return -1;
}
printf("Password: "); printf("Password: ");
passwd = malloc(80); passwd = malloc(80);
fgets(passwd, 80, stdin); fgets(passwd, 80, stdin);
tty_attr.c_lflag = c_lflag; tty_attr.c_lflag = c_lflag;
if (tcsetattr(STDIN_FILENO, 0, &tty_attr) < 0) if (tcsetattr(STDIN_FILENO, 0, &tty_attr) < 0)
{
return -1; return -1;
}
i = strlen(passwd); i = strlen(passwd);
if (i > 1) if (i > 1)
{
passwd[i - 1] = '\0'; passwd[i - 1] = '\0';
}
printf("\n"); printf("\n");
} }
if ((so = connectMaxScale(hostname, port)) == -1) if ((so = connectMaxScale(hostname, port)) == -1)
{
exit(1); exit(1);
}
if (!authMaxScale(so, user, passwd)) if (!authMaxScale(so, user, passwd))
{ {
fprintf(stderr, "Failed to connect to MaxScale. " fprintf(stderr, "Failed to connect to MaxScale. "
@ -192,11 +215,13 @@ char c;
exit(1); exit(1);
} }
if (optind < argc) { if (optind < argc)
{
int i, len = 0; int i, len = 0;
char *cmd; char *cmd;
for (i = optind; i < argc; i++) { for (i = optind; i < argc; i++)
{
len += strlen(argv[i]) + 1; len += strlen(argv[i]) + 1;
} }
@ -215,13 +240,19 @@ char c;
strcat(cmd, "\""); strcat(cmd, "\"");
} }
else else
{
strcat(cmd, argv[i]); strcat(cmd, argv[i]);
} }
}
if (access(cmd, R_OK) == 0) if (access(cmd, R_OK) == 0)
{
DoSource(so, cmd); DoSource(so, cmd);
}
else else
{
sendCommand(so, cmd); sendCommand(so, cmd);
}
free(cmd); free(cmd);
exit(0); exit(0);
@ -239,9 +270,13 @@ char c;
el = el_init(*argv, stdin, stdout, stderr); el = el_init(*argv, stdin, stdout, stderr);
if (use_emacs) if (use_emacs)
{
el_set(el, EL_EDITOR, emacs); /** Editor is emacs */ el_set(el, EL_EDITOR, emacs); /** Editor is emacs */
}
else else
{
el_set(el, EL_EDITOR, vi); /* Default editor is vi */ el_set(el, EL_EDITOR, vi); /* Default editor is vi */
}
el_set(el, EL_SIGNAL, 1); /* Handle signals gracefully */ el_set(el, EL_SIGNAL, 1); /* Handle signals gracefully */
el_set(el, EL_PROMPT, prompt); /* Set the prompt function */ el_set(el, EL_PROMPT, prompt); /* Set the prompt function */
@ -269,7 +304,9 @@ char c;
#endif #endif
/* Strip trailing \n\r */ /* Strip trailing \n\r */
for (i = num - 1; buf[i] == '\r' || buf[i] == '\n'; i--) for (i = num - 1; buf[i] == '\r' || buf[i] == '\n'; i--)
{
buf[i] = 0; buf[i] = 0;
}
#ifdef HISTORY #ifdef HISTORY
el_line(el); el_line(el);
@ -285,8 +322,10 @@ char c;
#ifdef HISTORY #ifdef HISTORY
for (rv = history(hist, &ev, H_LAST); rv != -1; for (rv = history(hist, &ev, H_LAST); rv != -1;
rv = history(hist, &ev, H_PREV)) rv = history(hist, &ev, H_PREV))
{
fprintf(stdout, "%4d %s\n", fprintf(stdout, "%4d %s\n",
ev.num, ev.str); ev.num, ev.str);
}
#else #else
fprintf(stderr, "History not supported in this version.\n"); fprintf(stderr, "History not supported in this version.\n");
#endif #endif
@ -298,7 +337,9 @@ char c;
/* Find the filename */ /* Find the filename */
ptr = &buf[strlen("source")]; ptr = &buf[strlen("source")];
while (*ptr && isspace(*ptr)) while (*ptr && isspace(*ptr))
{
ptr++; ptr++;
}
DoSource(so, ptr); DoSource(so, ptr);
} }
@ -345,6 +386,7 @@ int keepalive = 1;
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
setipaddress(&addr.sin_addr, hostname); setipaddress(&addr.sin_addr, hostname);
addr.sin_port = htons(atoi(port)); addr.sin_port = htons(atoi(port));
if (connect(so, (struct sockaddr *) &addr, sizeof(addr)) < 0) if (connect(so, (struct sockaddr *) &addr, sizeof(addr)) < 0)
{ {
char errbuf[STRERROR_BUFLEN]; char errbuf[STRERROR_BUFLEN];
@ -353,14 +395,15 @@ int keepalive = 1;
close(so); close(so);
return -1; return -1;
} }
if (setsockopt(so, SOL_SOCKET,
SO_KEEPALIVE, &keepalive , sizeof(keepalive ))) if (setsockopt(so, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)))
{
perror("setsockopt"); perror("setsockopt");
}
return so; return so;
} }
/** /**
* Set IP address in socket structure in_addr * Set IP address in socket structure in_addr
* *
@ -381,12 +424,14 @@ setipaddress(struct in_addr *a, char *p)
hint.ai_flags = AI_CANONNAME; hint.ai_flags = AI_CANONNAME;
hint.ai_family = AF_INET; hint.ai_family = AF_INET;
if ((rc = getaddrinfo(p, NULL, &hint, &ai)) != 0) { if ((rc = getaddrinfo(p, NULL, &hint, &ai)) != 0)
{
return 0; return 0;
} }
/* take the first one */ /* take the first one */
if (ai != NULL) { if (ai != NULL)
{
res_addr = (struct sockaddr_in *) (ai->ai_addr); res_addr = (struct sockaddr_in *) (ai->ai_addr);
memcpy(a, &res_addr->sin_addr, sizeof(struct in_addr)); memcpy(a, &res_addr->sin_addr, sizeof(struct in_addr));
@ -401,11 +446,15 @@ setipaddress(struct in_addr *a, char *p)
h = gethostbyname(p); h = gethostbyname(p);
spinlock_release(&tmplock); spinlock_release(&tmplock);
if (h == NULL) { if (h == NULL)
if ((a->s_addr = inet_addr(p)) == -1) { {
if ((a->s_addr = inet_addr(p)) == -1)
{
return 0; return 0;
} }
} else { }
else
{
/* take the first one */ /* take the first one */
memcpy(a, h->h_addr, h->h_length); memcpy(a, h->h_addr, h->h_length);
@ -429,13 +478,23 @@ authMaxScale(int so, char *user, char *password)
char buf[20]; char buf[20];
if (read(so, buf, 4) != 4) if (read(so, buf, 4) != 4)
{
return 0; return 0;
}
write(so, user, strlen(user)); write(so, user, strlen(user));
if (read(so, buf, 8) != 8) if (read(so, buf, 8) != 8)
{
return 0; return 0;
}
write(so, password, strlen(password)); write(so, password, strlen(password));
if (read(so, buf, 6) != 6) if (read(so, buf, 6) != 6)
{
return 0; return 0;
}
return strncmp(buf, "FAILED", 6); return strncmp(buf, "FAILED", 6);
} }
@ -457,15 +516,23 @@ char buf[80];
int i, j, newline = 1; int i, j, newline = 1;
if (write(so, cmd, strlen(cmd)) == -1) if (write(so, cmd, strlen(cmd)) == -1)
{
return 0; return 0;
}
while (1) while (1)
{ {
if ((i = read(so, buf, 80)) <= 0) if ((i = read(so, buf, 80)) <= 0)
{
return 0; return 0;
}
for (j = 0; j < i; j++) for (j = 0; j < i; j++)
{ {
if (newline == 1 && buf[j] == 'O') if (newline == 1 && buf[j] == 'O')
{
newline = 2; newline = 2;
}
else if ((newline == 2 && buf[j] == 'K' && j == i - 1) || else if ((newline == 2 && buf[j] == 'K' && j == i - 1) ||
(j == i - 2 && buf[j] == 'O' && buf[j + 1] == 'K')) (j == i - 2 && buf[j] == 'O' && buf[j + 1] == 'K'))
{ {
@ -551,7 +618,8 @@ DoUsage(const char *progname)
{ {
PrintVersion(progname); PrintVersion(progname);
printf("The MaxScale administrative and monitor client.\n\n"); printf("The MaxScale administrative and monitor client.\n\n");
printf("Usage: %s [-u user] [-p password] [-h hostname] [-P port] [<command file> | <command>]\n\n", progname); printf("Usage: %s [-u user] [-p password] [-h hostname] [-P port] "
"[<command file> | <command>]\n\n", progname);
printf(" -u|--user=... The user name to use for the connection, default\n"); printf(" -u|--user=... The user name to use for the connection, default\n");
printf(" is admin.\n"); printf(" is admin.\n");
printf(" -p|--password=... The user password, if not given the password will\n"); printf(" -p|--password=... The user password, if not given the password will\n");
@ -578,11 +646,20 @@ isquit(char *buf)
char *ptr = buf; char *ptr = buf;
if (!buf) if (!buf)
{
return 0; return 0;
}
while (*ptr && isspace(*ptr)) while (*ptr && isspace(*ptr))
{
ptr++; ptr++;
}
if (strncasecmp(ptr, "quit", 4) == 0 || strncasecmp(ptr, "exit", 4) == 0) if (strncasecmp(ptr, "quit", 4) == 0 || strncasecmp(ptr, "exit", 4) == 0)
{
return 1; return 1;
}
return 0; return 0;
} }
@ -597,10 +674,15 @@ rtrim(char *str)
char *ptr = str + strlen(str); char *ptr = str + strlen(str);
if (ptr > str) // step back from the terminating null if (ptr > str) // step back from the terminating null
{
ptr--; // If the string has more characters ptr--; // If the string has more characters
}
while (ptr >= str && isspace(*ptr)) while (ptr >= str && isspace(*ptr))
{
*ptr-- = 0; *ptr-- = 0;
} }
}
/** /**
* Read defaults for hostname, port, user and password from * Read defaults for hostname, port, user and password from
@ -621,40 +703,62 @@ FILE *fp;
char line[400]; char line[400];
if ((home = getenv("HOME")) == NULL) if ((home = getenv("HOME")) == NULL)
{
return; return;
snprintf(pathname, 400, "%s/.maxadmin", home); }
snprintf(pathname, sizeof(pathname), "%s/.maxadmin", home);
if ((fp = fopen(pathname, "r")) == NULL) if ((fp = fopen(pathname, "r")) == NULL)
{
return; return;
while (fgets(line, 400, fp) != NULL) }
while (fgets(line, sizeof(line), fp) != NULL)
{ {
rtrim(line); rtrim(line);
if (line[0] == 0) if (line[0] == 0 || line[0] == '#')
continue; {
if (line[0] == '#')
continue; continue;
}
name = strtok_r(line, "=", &brkt); name = strtok_r(line, "=", &brkt);
value = strtok_r(NULL, "=", &brkt); value = strtok_r(NULL, "=", &brkt);
if (name && value) if (name && value)
{ {
if (strcmp(name, "hostname") == 0) if (strcmp(name, "hostname") == 0)
{
*hostname = strdup(value); *hostname = strdup(value);
}
else if (strcmp(name, "port") == 0) else if (strcmp(name, "port") == 0)
{
*port = strdup(value); *port = strdup(value);
}
else if (strcmp(name, "user") == 0) else if (strcmp(name, "user") == 0)
{
*user = strdup(value); *user = strdup(value);
}
else if (strcmp(name, "passwd") == 0) else if (strcmp(name, "passwd") == 0)
{
*passwd = strdup(value); *passwd = strdup(value);
}
else if (strcmp(name, "editor") == 0) else if (strcmp(name, "editor") == 0)
{ {
if (strcmp(value, "vi") == 0) if (strcmp(value, "vi") == 0)
{
*editor = 0; *editor = 0;
}
else if (strcmp(value, "emacs") == 0) else if (strcmp(value, "emacs") == 0)
{
*editor = 1; *editor = 1;
}
else else
{
fprintf(stderr, "WARNING: Unrecognised " fprintf(stderr, "WARNING: Unrecognised "
"parameter '%s=%s' in .maxadmin file\n", name, value); "parameter '%s=%s' in .maxadmin file\n", name, value);
} }
}
else else
{ {
fprintf(stderr, "WARNING: Unrecognised " fprintf(stderr, "WARNING: Unrecognised "