* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: amindexd.c,v 1.106 2006/07/25 18:27:57 martinea Exp $
+ * $Id: amindexd.c,v 1.106.2.2 2006/09/27 12:04:09 martinea Exp $
*
* This is the server daemon part of the index client/server system.
* It is assumed that this is launched from inetd instead of being
static size_t reply_buffer_size = 1;
static char *reply_buffer = NULL;
static char *amandad_auth = NULL;
+static FILE *cmdin;
+static FILE *cmdout;
static void reply(int, char *, ...)
__attribute__ ((format (printf, 2, 3)));
len = vsnprintf(reply_buffer, reply_buffer_size, fmt, args);
arglist_end(args);
- if (len > -1 && (size_t)len < reply_buffer_size)
+ if (len > -1 && (size_t)len < reply_buffer_size-1)
break;
reply_buffer_size *= 2;
reply_buffer = alloc(reply_buffer_size);
}
- if (printf("%03d %s\r\n", n, reply_buffer) < 0)
+ if (fprintf(cmdout,"%03d %s\r\n", n, reply_buffer) < 0)
{
dbprintf(("%s: ! error %d (%s) in printf\n",
debug_prefix_time(NULL), errno, strerror(errno)));
uncompress_remove = remove_files(uncompress_remove);
exit(1);
}
- if (fflush(stdout) != 0)
+ if (fflush(cmdout) != 0)
{
dbprintf(("%s: ! error %d (%s) in fflush\n",
debug_prefix_time(NULL), errno, strerror(errno)));
len = vsnprintf(reply_buffer, reply_buffer_size, fmt, args);
arglist_end(args);
- if (len > -1 && (size_t)len < reply_buffer_size)
+ if (len > -1 && (size_t)len < reply_buffer_size-1)
break;
reply_buffer_size *= 2;
reply_buffer = alloc(reply_buffer_size);
}
- if (printf("%03d-%s\r\n", n, reply_buffer) < 0)
+ if (fprintf(cmdout,"%03d-%s\r\n", n, reply_buffer) < 0)
{
dbprintf(("%s: ! error %d (%s) in printf\n",
debug_prefix_time(NULL), errno, strerror(errno)));
uncompress_remove = remove_files(uncompress_remove);
exit(1);
}
- if (fflush(stdout) != 0)
+ if (fflush(cmdout) != 0)
{
dbprintf(("%s: ! error %d (%s) in fflush\n",
debug_prefix_time(NULL), errno, strerror(errno)));
len = vsnprintf(reply_buffer, reply_buffer_size, fmt, args);
arglist_end(args);
- if (len > -1 && (size_t)len < reply_buffer_size)
+ if (len > -1 && (size_t)len < reply_buffer_size-1)
break;
reply_buffer_size *= 2;
reply_buffer = alloc(reply_buffer_size);
}
- if (printf("%03d-%s\r\n", n, reply_buffer) < 0)
+ if (fprintf(cmdout,"%03d-%s\r\n", n, reply_buffer) < 0)
{
dbprintf(("%s: ! error %d (%s) in printf\n",
debug_prefix_time(NULL), errno, strerror(errno)));
remote_hostname = newstralloc(remote_hostname, fp);
s[-1] = (char)ch;
amfree(fp);
+ cmdout = stdout;
+ cmdin = stdin;
}
else {
cmdfdout = DATA_FD_OFFSET + 0;
printf("\n");
fflush(stdin);
fflush(stdout);
- if ((dup2(cmdfdout, fileno(stdout)) < 0)
- || (dup2(cmdfdin, fileno(stdin)) < 0)) {
- error("amandad: Failed to setup stdin or stdout");
+ fclose(stdin);
+ fclose(stdout);
+
+ cmdout = fdopen(cmdfdout, "a");
+ if (!cmdout) {
+ error("amindexd: Can't fdopen(cmdfdout): %s", strerror(errno));
+ /*NOTREACHED*/
+ }
+
+ cmdin = fdopen(cmdfdin, "r");
+ if (!cmdin) {
+ error("amindexd: Can't fdopen(cmdfdin): %s", strerror(errno));
/*NOTREACHED*/
}
}
{
/* get a line from the client */
while(1) {
- if((part = agets(stdin)) == NULL) {
+ if((part = agets(cmdin)) == NULL) {
if(errno != 0) {
dbprintf(("%s: ? read error: %s\n",
debug_prefix_time(NULL), strerror(errno)));