diff -r d163c8917af7 ii.c --- a/ii.c Mon Oct 31 21:35:12 2011 +0100 +++ b/ii.c Fri Jun 15 11:43:59 2012 -0400 @@ -457,7 +457,7 @@ } int main(int argc, char *argv[]) { - int i; + int i, keyidx = -1; unsigned short port = SERVER_PORT; struct passwd *spw = getpwuid(getuid()); char *key = NULL, *fullname = NULL; @@ -477,7 +477,7 @@ case 's': host = argv[++i]; break; case 'p': port = strtol(argv[++i], NULL, 10); break; case 'n': snprintf(nick,sizeof(nick),"%s", argv[++i]); break; - case 'k': key = argv[++i]; break; + case 'k': keyidx = ++i; break; case 'f': fullname = argv[++i]; break; default: usage(); break; } @@ -490,7 +490,20 @@ create_dirtree(path); add_channel(""); /* master channel */ + /* mask key in argv */ + if(0 <= keyidx) { + size_t keylen = strlen(argv[keyidx]); + key = calloc(keylen + 1, sizeof (char)); + if(!key) { + fputs("ii: failed to allocate space to copy key\n", +stderr); + exit(EXIT_FAILURE); + } + memcpy(key, argv[keyidx], keylen); + memset(argv[keyidx], ' ', keylen); + } login(key, fullname); + free(key); run(); return EXIT_SUCCESS;