#include <stdio.h>
#include "nmrpd.h"
-#define NMRPFLASH_SET_REGION
-
int verbosity = 0;
void usage(FILE *fp)
"C:\\> nmrpflash.exe -i net0 -f firmware.bin\n"
#endif
"\n"
- "When using -c, the environment variables IP, NETMASK and MAC are\n"
- "set to the device IP address, subnet mask and MAC address.\n"
+ "When using -c, the environment variables IP, PORT, NETMASK\n"
+ "and MAC are set to the device IP address, TFTP port, subnet\n"
+ "mask and MAC address, respectively.\n"
"\n"
"nmrpflash %s, Copyright (C) 2016 Joseph C. Lehner\n"
"nmrpflash is free software, licensed under the GNU GPLv3.\n"
void require_admin()
{
SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;
- PSID adminGroup = NULL;
- BOOL success = AllocateAndInitializeSid(
+ PSID group = NULL;
+ BOOL admin, success = AllocateAndInitializeSid(
&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
- 0, 0, 0, 0, 0, 0, &adminGroup
+ 0, 0, 0, 0, 0, 0, &group
);
if (success) {
- if (CheckTokenMembership(NULL, adminGroup, &success)) {
- if (!success) {
+ success = CheckTokenMembership(NULL, group, &admin);
+ FreeSid(group);
+ if (success) {
+ if (!admin) {
fprintf(stderr, "Error: must be run as administrator\n");
exit(1);
} else {
return;
}
}
- FreeSid(adminGroup);
}
fprintf(stderr, "Warning: failed to check administrator privileges\n");
}
+
+void show_exit_prompt()
+{
+ DWORD pid;
+ HWND win = GetConsoleWindow();
+ if (!win || !GetWindowThreadProcessId(win, &pid)) {
+ return;
+ }
+
+ if (GetCurrentProcessId() == pid) {
+ printf("Press any key to exit\n");
+ getch();
+ }
+}
#else
void require_admin()
{
char *windir = NULL;
WSADATA wsa;
+ atexit(&show_exit_prompt);
+
val = WSAStartup(MAKEWORD(2, 2), &wsa);
if (val != 0) {
win_perror2("WSAStartup", val);
case 'L':
list = 1;
break;
- goto out;
case 'h':
usage(stdout);
val = 0;
return 1;
}
+#ifndef NMRPFLASH_FUZZ
if (!list && ((!args.file_local && !args.tftpcmd) || !args.intf /*|| !args.ipaddr*/)) {
usage(stderr);
return 1;
}
- require_admin();
+ if (!list) {
+ require_admin();
+ }
+#endif
val = !list ? nmrp_do(&args) : ethsock_list_all();
out: