Addition of .maxscale support to override defaults for hostname, user name,
password and port
This commit is contained in:
@ -63,6 +63,7 @@ static void DoSource(int so, char *cmd);
|
|||||||
static void DoUsage();
|
static void DoUsage();
|
||||||
static int isquit(char *buf);
|
static int isquit(char *buf);
|
||||||
static void PrintVersion(const char *progname);
|
static void PrintVersion(const char *progname);
|
||||||
|
static void read_inifile(char **hostname, char **port, char **user, char **passwd);
|
||||||
|
|
||||||
#ifdef HISTORY
|
#ifdef HISTORY
|
||||||
static char *
|
static char *
|
||||||
@ -112,6 +113,8 @@ int so;
|
|||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
|
read_inifile(&hostname, &port, &user, &passwd);
|
||||||
|
|
||||||
while ((c = getopt_long(argc, argv, "h:p:P:u:v?",
|
while ((c = getopt_long(argc, argv, "h:p:P:u:v?",
|
||||||
long_options, &option_index))
|
long_options, &option_index))
|
||||||
>= 0)
|
>= 0)
|
||||||
@ -240,7 +243,7 @@ char c;
|
|||||||
*/
|
*/
|
||||||
el_source(el, NULL);
|
el_source(el, NULL);
|
||||||
|
|
||||||
while ((buf = el_gets(el, &num)) != NULL && num != 0)
|
while ((buf = (char *)el_gets(el, &num)) != NULL && num != 0)
|
||||||
{
|
{
|
||||||
#else
|
#else
|
||||||
while (printf("MaxScale> ") && fgets(buf, 1024, stdin) != NULL)
|
while (printf("MaxScale> ") && fgets(buf, 1024, stdin) != NULL)
|
||||||
@ -562,3 +565,68 @@ char *ptr = buf;
|
|||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trim whitespace from the right hand end of the string
|
||||||
|
*
|
||||||
|
* @param str String to trim
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
rtrim(char *str)
|
||||||
|
{
|
||||||
|
char *ptr = str + strlen(str);
|
||||||
|
|
||||||
|
if (ptr > str) // step back from the terminating null
|
||||||
|
ptr--; // If the string has more characters
|
||||||
|
while (ptr >= str && isspace(*ptr))
|
||||||
|
*ptr-- = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read defaults for hostname, port, user and password from
|
||||||
|
* the .maxadmin file in the users home directory.
|
||||||
|
*
|
||||||
|
* @param hostname Pointer the hostname to be updated
|
||||||
|
* @param port Pointer to the port to be updated
|
||||||
|
* @param user Pointer to the user to be updated
|
||||||
|
* @param passwd Pointer to the password to be updated
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
read_inifile(char **hostname, char **port, char **user, char **passwd)
|
||||||
|
{
|
||||||
|
char pathname[400];
|
||||||
|
char *home, *brkt;
|
||||||
|
char *name, *value;
|
||||||
|
FILE *fp;
|
||||||
|
char line[400];
|
||||||
|
|
||||||
|
if ((home = getenv("HOME")) == NULL)
|
||||||
|
return;
|
||||||
|
snprintf(pathname, 400, "%s/.maxadmin", home);
|
||||||
|
if ((fp = fopen(pathname, "r")) == NULL)
|
||||||
|
return;
|
||||||
|
while (fgets(line, 400, fp) != NULL)
|
||||||
|
{
|
||||||
|
rtrim(line);
|
||||||
|
if (line[0] == 0)
|
||||||
|
continue;
|
||||||
|
if (line[0] == '#')
|
||||||
|
continue;
|
||||||
|
name = strtok_r(line, "=", &brkt);
|
||||||
|
value = strtok_r(NULL, "=", &brkt);
|
||||||
|
if (strcmp(name, "hostname") == 0)
|
||||||
|
*hostname = strdup(value);
|
||||||
|
else if (strcmp(name, "port") == 0)
|
||||||
|
*port = strdup(value);
|
||||||
|
else if (strcmp(name, "user") == 0)
|
||||||
|
*user = strdup(value);
|
||||||
|
else if (strcmp(name, "passwd") == 0)
|
||||||
|
*passwd = strdup(value);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "WARNING: Unrecognised "
|
||||||
|
"parameter '%s' in .maxadmin file\n", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user