stoddard 99/03/08 12:14:06
Modified: src/support htpasswd.c Log: Fix for argument math in htpasswd. Submitted by: Ryan Bloom Revision Changes Path 1.21 +17 -8 apache-1.3/src/support/htpasswd.c Index: htpasswd.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/support/htpasswd.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- htpasswd.c 1999/02/03 16:22:34 1.20 +++ htpasswd.c 1999/03/08 20:14:05 1.21 @@ -214,6 +214,8 @@ int found; int use_md5 = 0; int newfile = 0; + int currarg = 1; + int filearg; tn = NULL; signal(SIGINT, (void (*)(int)) interrupted); @@ -225,9 +227,6 @@ if (argc < 3) { usage(); } - else { - strcpy(filename, argv[argc - 2]); - } /* I would rather use getopt, but Windows and UNIX seem to handle getopt * differently, so I am doing the argument checking by hand. @@ -235,14 +234,24 @@ if (!strcmp(argv[1],"-c") || !strcmp(argv[2],"-c")) { newfile = 1; + currarg++; } if (!strcmp(argv[1],"-m") || !strcmp(argv[2],"-m")) { use_md5 = 1; + currarg++; } if (!strcmp(argv[1], "-cm") || !strcmp(argv[2], "-mc")) { use_md5 = 1; newfile = 1; + currarg++; + } + + strcpy(filename, argv[currarg]); + filearg = currarg++; + + if (argc <= filearg + 1) { + usage(); } #ifdef WIN32 @@ -258,8 +267,8 @@ perror("fopen"); exit(1); } - printf("Adding password for %s.\n", argv[argc-1]); - add_password(argv[argc - 1], tfp, use_md5); + printf("Adding password for %s.\n", argv[currarg]); + add_password(argv[currarg], tfp, use_md5); fclose(tfp); return(0); } @@ -270,15 +279,15 @@ exit(1); } - if (!(f = fopen(argv[argc - 2], "r+"))) { + if (!(f = fopen(argv[filearg], "r+"))) { fprintf(stderr, "Could not open password file %s for reading.\n", - argv[argc - 2]); + argv[filearg]); fprintf(stderr, "Use -c option to create a new one\n"); fclose(tfp); unlink(tn); exit(1); } - strcpy(user, argv[argc - 1]); + strcpy(user, argv[currarg]); found = 0; while (!(getline(line, MAX_STRING_LEN, f))) {