X-Git-Url: https://iam.tj/gitweb/gitweb.cgi?p=cfe_generate_password.git;a=blobdiff_plain;f=cfe_generate_password.c;h=927b9e64b4634c9c1c430e573f1ad50d7ffa1d30;hp=47a4ba8ffa27d91b31fbbc84e2d9e67251ffa7e1;hb=91408173b276846e676cf803cced45448ef3f590;hpb=ed0120009fcdc809c1e1e6c81385d7009b3e9006 diff --git a/cfe_generate_password.c b/cfe_generate_password.c index 47a4ba8..927b9e6 100644 --- a/cfe_generate_password.c +++ b/cfe_generate_password.c @@ -5,7 +5,7 @@ Licenced on the terms of the GNU General Public Licence version 3 To build: - + gcc -o cfe_gen_pass cfe_generate_password.c Or: @@ -20,7 +20,7 @@ Broadcom Common Firmware Environment (CFE) bootbase which has a debug mode that is enabled using the "ATEN 1 XXXXXXXX" command, where XXXXXXXX is an eight digit hexadecimal 'password'. - + It is NOT necessary to have the device generate a 'seed' using "ATSE [MODEL-ID]" because this tool can generate the seed from the device's first (base) MAC address *provided* the "ATSE" command has NOT been executed since the device last booted. @@ -60,11 +60,12 @@ #include #include -static const float VERSION = 1.0f; +static const float VERSION = 1.1f; static const size_t TIMESTAMP_SIZE = 6; static const size_t SEED_SIZE = 12; static const size_t PASSWORD_SIZE = 8; static const size_t MESSAGE_SIZE = 128; +static const size_t MAC_ADDR_SIZE = 17; static void pr_usage() @@ -85,18 +86,18 @@ static void pr_error_exit(unsigned int usage, const char *error, ...) { va_list args; - char error_message[MESSAGE_SIZE]; + char error_message[MESSAGE_SIZE + 1]; if (!error) return; va_start(args, error); - (void) vsnprintf(error_message, MESSAGE_SIZE, error, args); + (void) vsnprintf(error_message, MESSAGE_SIZE + 1, error, args); va_end(args); fprintf(stderr, "Error: %s\n", error_message); if (usage) pr_usage(); - exit(EXIT_FAILURE); + exit(EXIT_FAILURE); } static const unsigned int passwords[8] = { @@ -114,13 +115,13 @@ static unsigned int generate_seed(char *mac, char *timestamp, char *seed) { unsigned int result = 0; - if (mac && strlen(mac) == 17) { + if (mac && strlen(mac) == MAC_ADDR_SIZE) { size_t i; char *mac_ptr = mac + 9; size_t ts_len = strlen(timestamp); - for (i = 0; i <= SEED_SIZE; ++i) { + for (i = 0; i < SEED_SIZE; ++i) { /* if no timestamp assume CFE get_time() returned 0 and CFE g_pw_timestamp == 0x00000000 */ - if (i < 6) + if (i < 6) seed[i] = ts_len ? timestamp[i] : '0'; else { if (*mac_ptr == ':' || *mac_ptr == '-') @@ -130,7 +131,7 @@ generate_seed(char *mac, char *timestamp, char *seed) } result = 1; } else - pr_error_exit(0, "MAC-ADDR should be 17 characters, e.g: 00:01:02:03:04:05"); + pr_error_exit(0, "MAC-ADDR should be %d characters, e.g: 00:01:02:03:04:05", MAC_ADDR_SIZE); return result; } @@ -140,7 +141,7 @@ generate_pass(char *seed, char *password) { unsigned int result = 0; - if (seed && strlen(seed) == 12) { + if (seed && strlen(seed) == SEED_SIZE) { unsigned int timestamp, byte, key, pass; timestamp = byte = 0; if(! sscanf(seed, "%06x", ×tamp)) @@ -200,7 +201,7 @@ main(int argc, char **argv, char **env) } else if (opt_pass == 1 && opt_seed == 0) { if (arg_len != SEED_SIZE) pr_error_exit(1, "seed length must be %d characters", SEED_SIZE); - + strncpy(seed, argv[arg], SEED_SIZE); ++opt_pass; } else if (opt_ts == 1) { @@ -230,7 +231,8 @@ main(int argc, char **argv, char **env) if (! generate_pass(seed, password)) pr_error_exit(0, "unable to generate password"); - printf("MAC address: %s Timestamp: %s Seed: %s Password: %s\n", MAC_ADDR, timestamp, seed, password); + if (opt_seed || opt_pass) + printf("MAC address: %s Timestamp: %s Seed: %s Password: %s\n", MAC_ADDR, timestamp, seed, password); } return result;