- use safe_strncpy where applicable
- replace hard-coded string lengths with some defines
+#define MAX_STRING_SIZE 2048
+
static struct {
const char *name;
unsigned long code;
static struct {
const char *name;
unsigned long code;
static int drop_index = 0;
static char mds_server[1024] = {0, };
static int drop_index = 0;
static char mds_server[1024] = {0, };
+static char ssh_cmd[MAX_STRING_SIZE] = {0,};
int do_stat(const char *name, struct stat *buf)
{
int do_stat(const char *name, struct stat *buf)
{
+ char cmd[MAX_STRING_SIZE]; \
int rc; \
\
if (drop_arr[drop_index].name) { \
printf("server drops next %s\n", drop_arr[drop_index].name); \
sprintf(cmd, \
int rc; \
\
if (drop_arr[drop_index].name) { \
printf("server drops next %s\n", drop_arr[drop_index].name); \
sprintf(cmd, \
- "ssh %s \"echo %lu > /proc/sys/lustre/fail_loc\"", \
- mds_server, drop_arr[drop_index].code); \
+ "%s %s \"echo %lu > /proc/sys/lustre/fail_loc\"", \
+ ssh_cmd, mds_server, drop_arr[drop_index].code); \
if (system(cmd)) { \
printf("error excuting remote command: %d\n", rc); \
exit(rc); \
if (system(cmd)) { \
printf("error excuting remote command: %d\n", rc); \
exit(rc); \
char cmd[1024]; \
\
if (drop_arr[drop_index].name) { \
char cmd[1024]; \
\
if (drop_arr[drop_index].name) { \
- sprintf(cmd, "ssh %s \"echo 0 > /proc/sys/lustre/fail_loc\"", \
- mds_server); \
+ sprintf(cmd, "%s %s \"echo 0 > /proc/sys/lustre/fail_loc\"", \
+ ssh_cmd, mds_server); \
system(cmd); \
} \
} while (0)
system(cmd); \
} \
} while (0)
static struct option long_opts[] = {
{"target", 1, 0, 0},
{"dumpfile", 1, 0, 0},
static struct option long_opts[] = {
{"target", 1, 0, 0},
{"dumpfile", 1, 0, 0},
setenv(ENV_LUSTRE_MNTTGT, optarg, 1);
} else if (!strcmp(long_opts[opt_index].name, "dumpfile")) {
setenv(ENV_LUSTRE_DUMPFILE, optarg, 1);
setenv(ENV_LUSTRE_MNTTGT, optarg, 1);
} else if (!strcmp(long_opts[opt_index].name, "dumpfile")) {
setenv(ENV_LUSTRE_DUMPFILE, optarg, 1);
+ } else if (!strcmp(long_opts[opt_index].name, "ssh")) {
+ safe_strncpy(ssh_cmd, optarg, MAX_STRING_SIZE);
} else
usage(argv[0]);
break;
}
case 's':
} else
usage(argv[0]);
break;
}
case 's':
- strcpy(mds_server, optarg);
+ safe_strncpy(mds_server, optarg, MAX_STRING_SIZE);
break;
default:
usage(argv[0]);
break;
default:
usage(argv[0]);
if (strlen(mds_server) == 0)
usage(argv[0]);
if (strlen(mds_server) == 0)
usage(argv[0]);
- sprintf(cmd, "ssh %s cat /dev/null", mds_server);
+ /* default to using ssh */
+ if (!strlen(ssh_cmd)) {
+ safe_strncpy(ssh_cmd, "ssh", MAX_STRING_SIZE);
+ }
+
+ sprintf(cmd, "%s %s cat /dev/null", ssh_cmd, mds_server);
- printf("can't access server node: %s\n", mds_server);
+ printf("Can't access server node: %s using method: %s\n", mds_server, ssh_cmd);
+#define MAX_STRING_SIZE 2048
-
-static char mds_server[1024] = {0,};
-static char barrier_script[1024] = {0,};
-static char failover_script[1024] = {0,};
-static char barrier_cmd[1024] = {0,};
-static char failover_cmd[1024] = {0,};
+static char mds_server[MAX_STRING_SIZE] = {0,};
+static char barrier_script[MAX_STRING_SIZE] = {0,};
+static char failover_script[MAX_STRING_SIZE] = {0,};
+static char barrier_cmd[MAX_STRING_SIZE] = {0,};
+static char failover_cmd[MAX_STRING_SIZE] = {0,};
+static char ssh_cmd[MAX_STRING_SIZE] = {0,};
static void replay_barrier()
{
static void replay_barrier()
{
void usage(const char *cmd)
{
printf("Usage: \t%s --target mdsnid:/mdsname/profile -s mds_hostname "
void usage(const char *cmd)
{
printf("Usage: \t%s --target mdsnid:/mdsname/profile -s mds_hostname "
- "-b \"barrier cmd\" -f \"failover cmd\"\n", cmd);
+ "-b \"barrier cmd\" -f \"failover cmd\" --ssh \"ssh_cmd\"\n", cmd);
printf(" \t%s --dumpfile dumpfile -s mds_hostname -b \"barrier cmd\" "
printf(" \t%s --dumpfile dumpfile -s mds_hostname -b \"barrier cmd\" "
- "-f \"failover cmd\"\n", cmd);
+ "-f \"failover cmd\" --ssh \"ssh_cmd\"\n", cmd);
exit(-1);
}
void test_ssh()
{
exit(-1);
}
void test_ssh()
{
+ char cmd[MAX_STRING_SIZE];
- sprintf(cmd, "ssh %s cat /dev/null", mds_server);
+ sprintf(cmd, "%s %s cat /dev/null", ssh_cmd, mds_server);
- printf("ssh can't access server node: %s\n", mds_server);
+ printf("Can't access server node: %s using method: %s\n", mds_server, ssh_cmd);
static struct option long_opts[] = {
{"target", 1, 0, 0},
{"dumpfile", 1, 0, 0},
static struct option long_opts[] = {
{"target", 1, 0, 0},
{"dumpfile", 1, 0, 0},
setenv(ENV_LUSTRE_MNTTGT, optarg, 1);
} else if (!strcmp(long_opts[opt_index].name, "dumpfile")) {
setenv(ENV_LUSTRE_DUMPFILE, optarg, 1);
setenv(ENV_LUSTRE_MNTTGT, optarg, 1);
} else if (!strcmp(long_opts[opt_index].name, "dumpfile")) {
setenv(ENV_LUSTRE_DUMPFILE, optarg, 1);
+ } else if (!strcmp(long_opts[opt_index].name, "ssh")) {
+ safe_strncpy(ssh_cmd, optarg, MAX_STRING_SIZE);
} else
usage(argv[0]);
break;
}
case 's':
} else
usage(argv[0]);
break;
}
case 's':
- strcpy(mds_server, optarg);
+ safe_strncpy(mds_server, optarg, MAX_STRING_SIZE);
- strcpy(barrier_script, optarg);
+ safe_strncpy(barrier_script, optarg, MAX_STRING_SIZE);
- strcpy(failover_script, optarg);
+ safe_strncpy(failover_script, optarg, MAX_STRING_SIZE);
break;
default:
usage(argv[0]);
break;
default:
usage(argv[0]);
!strlen(failover_script))
usage(argv[0]);
!strlen(failover_script))
usage(argv[0]);
+ /* default to using ssh */
+ if (!strlen(ssh_cmd)) {
+ safe_strncpy(ssh_cmd, "ssh", MAX_STRING_SIZE);
+ }
+
test_ssh();
/* prepare remote command */
test_ssh();
/* prepare remote command */
- sprintf(barrier_cmd, "ssh %s \"%s\"", mds_server, barrier_script);
- sprintf(failover_cmd, "ssh %s \"%s\"", mds_server, failover_script);
+ sprintf(barrier_cmd, "%s %s \"%s\"",
+ ssh_cmd, mds_server, barrier_script);
+ sprintf(failover_cmd, "%s %s \"%s\"",
+ ssh_cmd, mds_server, failover_script);
setenv(ENV_LUSTRE_TIMEOUT, "10", 1);
setenv(ENV_LUSTRE_TIMEOUT, "10", 1);
#define PAGE_SIZE (4096)
#define _npages (2048)
#define PAGE_SIZE (4096)
#define _npages (2048)
+#define MAX_PATH_LENGTH 4096
+
static int _buffer[_npages][PAGE_SIZE/sizeof(int)];
/* pos: i/o start from
static int _buffer[_npages][PAGE_SIZE/sizeof(int)];
/* pos: i/o start from
void t11()
{
char *base="/mnt/lustre";
void t11()
{
char *base="/mnt/lustre";
- char path[4096], path2[4096];
+ char path[MAX_PATH_LENGTH], path2[MAX_PATH_LENGTH];
int i, j, level = 5, nreg = 5;
ENTRY("deep tree");
int i, j, level = 5, nreg = 5;
ENTRY("deep tree");
+ safe_strncpy(path, base, MAX_PATH_LENGTH);
for (i = 0; i < level; i++) {
for (j = 0; j < nreg; j++) {
for (i = 0; i < level; i++) {
for (j = 0; j < nreg; j++) {
}
for (i = level; i > 0; i--) {
}
for (i = level; i > 0; i--) {
+ safe_strncpy(path, base, MAX_PATH_LENGTH);
for (j = 1; j < i; j++)
strcat(path, "/dir");
for (j = 1; j < i; j++)
strcat(path, "/dir");
+
+char *safe_strncpy(char *dst, char *src, int max_size)
+{
+ int src_size;
+ src_size=strlen(src);
+ if (src_size >= max_size) {
+ src_size=max_size-1;
+ }
+ memcpy(dst, src, src_size);
+ dst[src_size]=0;
+
+ return(dst);
+}
void t_grep_v(const char *path, char *str);
void t_ls(int fd, char *buf, int size);
void t_grep_v(const char *path, char *str);
void t_ls(int fd, char *buf, int size);
+char *safe_strncpy(char *dst, char *src, int max_size);
+