diff --git a/src/scontrol/scontrol.c b/src/scontrol/scontrol.c index 6e395a526315563d360ca5f01171fd93adb904cd..27a60eb2299882cc7c8e2c49288fa9bf0a46144e 100644 --- a/src/scontrol/scontrol.c +++ b/src/scontrol/scontrol.c @@ -46,6 +46,8 @@ void print_node (char *node_name, node_info_msg_t *node_info_ptr); void print_node_list (char *node_list); void print_part (char *partition_name); int process_command (int argc, char *argv[]); +int strcmp_i (const char *s1, const char *s2); +int strncmp_i (const char *s1, const char *s2, int len); int update_it (int argc, char *argv[]); int update_job (int argc, char *argv[]); int update_node (int argc, char *argv[]); @@ -233,69 +235,69 @@ print_build (char *build_param) old_slurm_ctl_conf_ptr = slurm_ctl_conf_ptr; if (build_param == NULL || - strcmp (build_param, "BACKUP_INTERVAL") == 0) + strcmp_i (build_param, "BACKUP_INTERVAL") == 0) printf ("BACKUP_INTERVAL = %u\n", slurm_ctl_conf_ptr->backup_interval); if (build_param == NULL || - strcmp (build_param, "BACKUP_LOCATION") == 0) + strcmp_i (build_param, "BACKUP_LOCATION") == 0) printf ("BACKUP_LOCATION = %s\n", slurm_ctl_conf_ptr->backup_location); if (build_param == NULL || - strcmp (build_param, "BACKUP_MACHINE") == 0) + strcmp_i (build_param, "BACKUP_MACHINE") == 0) printf ("BACKUP_MACHINE = %s\n", slurm_ctl_conf_ptr->backup_machine); if (build_param == NULL || - strcmp (build_param, "CONTROL_DAEMON") == 0) + strcmp_i (build_param, "CONTROL_DAEMON") == 0) printf ("CONTROL_DAEMON = %s\n", slurm_ctl_conf_ptr->control_daemon); if (build_param == NULL || - strcmp (build_param, "CONTROL_MACHINE") == 0) + strcmp_i (build_param, "CONTROL_MACHINE") == 0) printf ("CONTROL_MACHINE = %s\n", slurm_ctl_conf_ptr->control_machine); if (build_param == NULL || - strcmp (build_param, "CONTROLLER_TIMEOUT") == 0) + strcmp_i (build_param, "CONTROLLER_TIMEOUT") == 0) printf ("CONTROLLER_TIMEOUT = %u\n", slurm_ctl_conf_ptr->controller_timeout); if (build_param == NULL || - strcmp (build_param, "EPILOG") == 0) + strcmp_i (build_param, "EPILOG") == 0) printf ("EPILOG = %s\n", slurm_ctl_conf_ptr->epilog); if (build_param == NULL || - strcmp (build_param, "FAST_SCHEDULE") == 0) + strcmp_i (build_param, "FAST_SCHEDULE") == 0) printf ("FAST_SCHEDULE = %u\n", slurm_ctl_conf_ptr->fast_schedule); if (build_param == NULL || - strcmp (build_param, "HASH_BASE") == 0) + strcmp_i (build_param, "HASH_BASE") == 0) printf ("HASH_BASE = %u\n", slurm_ctl_conf_ptr->hash_base); if (build_param == NULL || - strcmp (build_param, "HEARTBEAT_INTERVAL") == 0) + strcmp_i (build_param, "HEARTBEAT_INTERVAL") == 0) printf ("HEARTBEAT_INTERVAL = %u\n", slurm_ctl_conf_ptr->heartbeat_interval); if (build_param == NULL || - strcmp (build_param, "INIT_PROGRAM") == 0) + strcmp_i (build_param, "INIT_PROGRAM") == 0) printf ("INIT_PROGRAM = %s\n", slurm_ctl_conf_ptr->init_program); if (build_param == NULL || - strcmp (build_param, "KILL_WAIT") == 0) + strcmp_i (build_param, "KILL_WAIT") == 0) printf ("KILL_WAIT = %u\n", slurm_ctl_conf_ptr->kill_wait); if (build_param == NULL || - strcmp (build_param, "PRIORITIZE") == 0) + strcmp_i (build_param, "PRIORITIZE") == 0) printf ("PRIORITIZE = %s\n", slurm_ctl_conf_ptr->prioritize); if (build_param == NULL || - strcmp (build_param, "PROLOG") == 0) + strcmp_i (build_param, "PROLOG") == 0) printf ("PROLOG = %s\n", slurm_ctl_conf_ptr->prolog); if (build_param == NULL || - strcmp (build_param, "SERVER_DAEMON") == 0) + strcmp_i (build_param, "SERVER_DAEMON") == 0) printf ("SERVER_DAEMON = %s\n", slurm_ctl_conf_ptr->server_daemon); if (build_param == NULL || - strcmp (build_param, "SERVER_TIMEOUT") == 0) + strcmp_i (build_param, "SERVER_TIMEOUT") == 0) printf ("SERVER_TIMEOUT = %u\n", slurm_ctl_conf_ptr->server_timeout); if (build_param == NULL || - strcmp (build_param, "SLURM_CONF") == 0) + strcmp_i (build_param, "SLURM_CONF") == 0) printf ("SLURM_CONF = %s\n", slurm_ctl_conf_ptr->slurm_conf); if (build_param == NULL || - strcmp (build_param, "TMP_FS") == 0) + strcmp_i (build_param, "TMP_FS") == 0) printf ("TMP_FS = %s\n", slurm_ctl_conf_ptr->tmp_fs); } @@ -542,8 +544,8 @@ process_command (int argc, char *argv[]) { int error_code; - if ((strcmp (argv[0], "exit") == 0) || - (strcmp (argv[0], "quit") == 0)) { + if ((strcmp_i (argv[0], "exit") == 0) || + (strcmp_i (argv[0], "quit") == 0)) { if (argc > 1) fprintf (stderr, "too many arguments for keyword:%s\n", @@ -551,7 +553,7 @@ process_command (int argc, char *argv[]) exit_flag = 1; } - else if (strcmp (argv[0], "help") == 0) { + else if (strcmp_i (argv[0], "help") == 0) { if (argc > 1) fprintf (stderr, "too many arguments for keyword:%s\n", @@ -559,7 +561,7 @@ process_command (int argc, char *argv[]) usage (); } - else if (strcmp (argv[0], "quiet") == 0) { + else if (strcmp_i (argv[0], "quiet") == 0) { if (argc > 1) fprintf (stderr, "too many arguments for keyword:%s\n", @@ -567,7 +569,7 @@ process_command (int argc, char *argv[]) quiet_flag = 1; } - else if (strncmp (argv[0], "reconfigure", 7) == 0) { + else if (strncmp_i (argv[0], "reconfigure", 7) == 0) { if (argc > 2) fprintf (stderr, "too many arguments for keyword:%s\n", @@ -578,7 +580,7 @@ process_command (int argc, char *argv[]) error_code); } - else if (strcmp (argv[0], "show") == 0) { + else if (strcmp_i (argv[0], "show") == 0) { if (argc > 3) { if (quiet_flag != 1) fprintf (stderr, @@ -591,25 +593,25 @@ process_command (int argc, char *argv[]) "too few arguments for keyword:%s\n", argv[0]); } - else if (strncmp (argv[1], "build", 3) == 0) { + else if (strncmp_i (argv[1], "build", 3) == 0) { if (argc > 2) print_build (argv[2]); else print_build (NULL); } - else if (strncmp (argv[1], "jobs", 3) == 0) { + else if (strncmp_i (argv[1], "jobs", 3) == 0) { if (argc > 2) print_job (argv[2]); else print_job (NULL); } - else if (strncmp (argv[1], "nodes", 3) == 0) { + else if (strncmp_i (argv[1], "nodes", 3) == 0) { if (argc > 2) print_node_list (argv[2]); else print_node_list (NULL); } - else if (strncmp (argv[1], "partitions", 3) == 0) { + else if (strncmp_i (argv[1], "partitions", 3) == 0) { if (argc > 2) print_part (argv[2]); else @@ -622,7 +624,7 @@ process_command (int argc, char *argv[]) } } - else if (strcmp (argv[0], "update") == 0) { + else if (strcmp_i (argv[0], "update") == 0) { if (argc < 2) { fprintf (stderr, "too few arguments for %s keyword\n", argv[0]); @@ -631,7 +633,7 @@ process_command (int argc, char *argv[]) update_it ((argc - 1), &argv[1]); } - else if (strcmp (argv[0], "verbose") == 0) { + else if (strcmp_i (argv[0], "verbose") == 0) { if (argc > 1) { fprintf (stderr, "too many arguments for %s keyword\n", @@ -640,7 +642,7 @@ process_command (int argc, char *argv[]) quiet_flag = -1; } - else if (strcmp (argv[0], "version") == 0) { + else if (strcmp_i (argv[0], "version") == 0) { if (argc > 1) { fprintf (stderr, "too many arguments for %s keyword\n", @@ -670,15 +672,15 @@ update_it (int argc, char *argv[]) error_code = 0; /* First identify the entity to update */ for (i=0; i<argc; i++) { - if (strncmp (argv[i], "NodeName=", 9) == 0) { + if (strncmp_i (argv[i], "NodeName=", 9) == 0) { error_code = update_node (argc, argv); break; } - else if (strncmp (argv[i], "PartitionName=", 14) == 0) { + else if (strncmp_i (argv[i], "PartitionName=", 14) == 0) { error_code = update_part (argc, argv); break; } - else if (strncmp (argv[i], "JobId=", 6) == 0) { + else if (strncmp_i (argv[i], "JobId=", 6) == 0) { error_code = update_job (argc, argv); break; } @@ -726,9 +728,9 @@ update_node (int argc, char *argv[]) node_msg.node_names = NULL; node_msg.node_state = (uint16_t) NO_VAL; for (i=0; i<argc; i++) { - if (strncmp(argv[i], "NodeName=", 9) == 0) + if (strncmp_i(argv[i], "NodeName=", 9) == 0) node_msg.node_names = &argv[i][9]; - else if (strncmp(argv[i], "State=", 6) == 0) { + else if (strncmp_i(argv[i], "State=", 6) == 0) { state_val = (uint16_t) NO_VAL; for (j = 0; j <= NODE_STATE_END; j++) { if (strcmp (node_state_string(j), "END") == 0) { @@ -740,7 +742,7 @@ update_node (int argc, char *argv[]) fprintf (stderr, "\n"); return EINVAL; } - if (strcmp (node_state_string(j), &argv[i][6]) == 0) { + if (strcmp_i (node_state_string(j), &argv[i][6]) == 0) { state_val = (uint16_t) j; break; } @@ -781,23 +783,23 @@ update_part (int argc, char *argv[]) part_msg.nodes = NULL; part_msg.allow_groups = NULL; for (i=0; i<argc; i++) { - if (strncmp(argv[i], "PartitionName=", 14) == 0) + if (strncmp_i(argv[i], "PartitionName=", 14) == 0) part_msg.name = &argv[i][14]; - else if (strncmp(argv[i], "MaxTime=", 8) == 0) { - if (strcmp(&argv[i][8],"INFINITE") == 0) + else if (strncmp_i(argv[i], "MaxTime=", 8) == 0) { + if (strcmp_i(&argv[i][8],"INFINITE") == 0) part_msg.max_time = INFINITE; else part_msg.max_time = (uint32_t) strtol(&argv[i][8], (char **) NULL, 10); } - else if (strncmp(argv[i], "MaxNodes=", 9) == 0) - if (strcmp(&argv[i][9],"INFINITE") == 0) + else if (strncmp_i(argv[i], "MaxNodes=", 9) == 0) + if (strcmp_i(&argv[i][9],"INFINITE") == 0) part_msg.max_nodes = INFINITE; else part_msg.max_nodes = (uint32_t) strtol(&argv[i][9], (char **) NULL, 10); - else if (strncmp(argv[i], "Default=", 8) == 0) { - if (strcmp(&argv[i][8], "NO") == 0) + else if (strncmp_i(argv[i], "Default=", 8) == 0) { + if (strcmp_i(&argv[i][8], "NO") == 0) part_msg.default_part = 0; - else if (strcmp(&argv[i][8], "YES") == 0) + else if (strcmp_i(&argv[i][8], "YES") == 0) part_msg.default_part = 1; else { fprintf (stderr, "Invalid input: %s\n", argv[i]); @@ -805,10 +807,10 @@ update_part (int argc, char *argv[]) return EINVAL; } } - else if (strncmp(argv[i], "Key=", 4) == 0) { - if (strcmp(&argv[i][4], "NO") == 0) + else if (strncmp_i(argv[i], "Key=", 4) == 0) { + if (strcmp_i(&argv[i][4], "NO") == 0) part_msg.key = 0; - else if (strcmp(&argv[i][4], "YES") == 0) + else if (strcmp_i(&argv[i][4], "YES") == 0) part_msg.key = 1; else { fprintf (stderr, "Invalid input: %s\n", argv[i]); @@ -816,12 +818,12 @@ update_part (int argc, char *argv[]) return EINVAL; } } - else if (strncmp(argv[i], "Shared=", 7) == 0) { - if (strcmp(&argv[i][7], "NO") == 0) + else if (strncmp_i(argv[i], "Shared=", 7) == 0) { + if (strcmp_i(&argv[i][7], "NO") == 0) part_msg.shared = SHARED_NO; - else if (strcmp(&argv[i][7], "YES") == 0) + else if (strcmp_i(&argv[i][7], "YES") == 0) part_msg.shared = SHARED_YES; - else if (strcmp(&argv[i][7], "FORCE") == 0) + else if (strcmp_i(&argv[i][7], "FORCE") == 0) part_msg.shared = SHARED_FORCE; else { fprintf (stderr, "Invalid input: %s\n", argv[i]); @@ -829,10 +831,10 @@ update_part (int argc, char *argv[]) return EINVAL; } } - else if (strncmp(argv[i], "State=", 6) == 0) { - if (strcmp(&argv[i][6], "DOWN") == 0) + else if (strncmp_i(argv[i], "State=", 6) == 0) { + if (strcmp_i(&argv[i][6], "DOWN") == 0) part_msg.state_up = 0; - else if (strcmp(&argv[i][6], "UP") == 0) + else if (strcmp_i(&argv[i][6], "UP") == 0) part_msg.state_up = 1; else { fprintf (stderr, "Invalid input: %s\n", argv[i]); @@ -840,9 +842,9 @@ update_part (int argc, char *argv[]) return EINVAL; } } - else if (strncmp(argv[i], "Nodes=", 6) == 0) + else if (strncmp_i(argv[i], "Nodes=", 6) == 0) part_msg.nodes = &argv[i][6]; - else if (strncmp(argv[i], "AllowGroups=", 12) == 0) + else if (strncmp_i(argv[i], "AllowGroups=", 12) == 0) part_msg.allow_groups = &argv[i][12]; else { fprintf (stderr, "Invalid input: %s\n", argv[i]); @@ -876,3 +878,60 @@ usage () { printf (" verbose enable detailed logging.\n"); printf (" version display tool version number.\n"); } + +/* strcmp_i - case insensitive version of strcmp */ +int +strcmp_i (const char *s1, const char *s2) +{ + int i; + int c1, c2; + + for (i=0; ; i++) { + if (isupper(s1[i])) + c1 = tolower(s1[i]); + else + c1 = s1[i]; + + if (isupper(s2[i])) + c2 = tolower(s2[i]); + else + c2 = s2[i]; + + if (c1 == c2) { + if (c1 == '\0') + return 0; + continue; + } + else + return 1; + } +} + +/* strncmp_i - case insensitive version of strncmp */ +int +strncmp_i (const char *s1, const char *s2, int len) +{ + int i; + int c1, c2; + + for (i=0; i<len; i++) { + if (isupper(s1[i])) + c1 = tolower(s1[i]); + else + c1 = s1[i]; + + if (isupper(s2[i])) + c2 = tolower(s2[i]); + else + c2 = s2[i]; + + if (c1 == c2) { + if (c1 == '\0') + return 0; + continue; + } + else + return 1; + } + return 0; +}