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))) {