+Greg Kroah-Hartman's patch, dated 8 Jan 2001.
+diff -aur apache_1.3.14/src/support/htdigest.c apache_1.3.14-mkstemp/src/support/htdigest.c
+--- apache_1.3.14/src/support/htdigest.c Tue Jan 25 23:36:53 2000
++++ apache_1.3.14-mkstemp/src/support/htdigest.c Tue Jan 9 20:42:42 2001
+@@ -93,7 +93,7 @@
+
+ #define MAX_STRING_LEN 256
+
+-char *tn;
++char tn[MAX_STRING_LEN];
+
+
+ static void getword(char *word, char *line, char stop)
+@@ -156,7 +156,7 @@
+ ap_getpass("Re-type new password: ", pwv, sizeof(pwv));
+ if (strcmp(pwin, pwv) != 0) {
+ fprintf(stderr, "They don't match, sorry.\n");
+- if (tn) {
++ if (strlen(tn)) {
+ unlink(tn);
+ }
+ exit(1);
+@@ -187,7 +187,7 @@
+ static void interrupted(void)
+ {
+ fprintf(stderr, "Interrupted.\n");
+- if (tn)
++ if (strlen(tn))
+ unlink(tn);
+ exit(1);
+ }
+@@ -215,8 +215,9 @@
+ char x[MAX_STRING_LEN];
+ char command[MAX_STRING_LEN];
+ int found;
++ int tfd;
+
+- tn = NULL;
++ strcpy (tn, "/tmp/htdigest-XXXXXX");
+ signal(SIGINT, (void (*)(int)) interrupted);
+ if (argc == 5) {
+ if (strcmp(argv[1], "-c"))
+@@ -235,8 +236,12 @@
+ else if (argc != 4)
+ usage();
+
+- tn = tmpnam(NULL);
+- if (!(tfp = fopen(tn, "w"))) {
++ tfd = mkstemp (tn);
++ if (tfd == -1) {
++ fprintf(stderr, "Could not open temp file.\n");
++ exit(1);
++ }
++ if (!(tfp = fdopen(tfd, "w"))) {
+ fprintf(stderr, "Could not open temp file.\n");
+ exit(1);
+ }
+diff -aur apache_1.3.14/src/support/htpasswd.c apache_1.3.14-mkstemp/src/support/htpasswd.c
+--- apache_1.3.14/src/support/htpasswd.c Thu Jun 1 19:42:33 2000
++++ apache_1.3.14-mkstemp/src/support/htpasswd.c Tue Jan 9 20:41:36 2001
+@@ -125,7 +125,7 @@
+ * This needs to be declared statically so the signal handler can
+ * access it.
+ */
+-static char *tempfilename;
++static char tempfilename[MAX_STRING_LEN];
+ /*
+ * If our platform knows about the tmpnam() external buffer size, create
+ * a buffer to pass in. This is needed in a threaded environment, or
+@@ -285,7 +285,7 @@
+ static void interrupted(void)
+ {
+ fprintf(stderr, "Interrupted.\n");
+- if (tempfilename != NULL) {
++ if (strlen(tempfilename) > 0) {
+ unlink(tempfilename);
+ }
+ exit(ERR_INTERRUPTED);
+@@ -377,8 +377,10 @@
+ int noninteractive = 0;
+ int i;
+ int args_left = 2;
++ int tfd;
++
++ memset (tempfilename, 0x00, sizeof(tempfilename));
+
+- tempfilename = NULL;
+ signal(SIGINT, (void (*)(int)) interrupted);
+
+ /*
+@@ -560,8 +562,9 @@
+ * to add or update. Let's do it..
+ */
+ errno = 0;
+- tempfilename = tmpnam(tname_buf);
+- if ((tempfilename == NULL) || (*tempfilename == '\0')) {
++ strcpy(tempfilename, "/tmp/htpasswd-XXXXXX");
++ tfd = mkstemp(tempfilename);
++ if (tfd == -1) {
+ fprintf(stderr, "%s: unable to generate temporary filename\n",
+ argv[0]);
+ if (errno == 0) {
+@@ -570,7 +573,7 @@
+ perror("tmpnam");
+ exit(ERR_FILEPERM);
+ }
+- ftemp = fopen(tempfilename, "w+");
++ ftemp = fdopen(tfd, "w+");
+ if (ftemp == NULL) {
+ fprintf(stderr, "%s: unable to create temporary file '%s'\n", argv[0],
+ tempfilename);