/* -*-c-*-
*
- * $Id: pixie.c,v 1.10 2001/02/21 20:03:54 mdw Exp $
+ * $Id$
*
* Passphrase pixie for Catacomb
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: pixie.c,v $
- * Revision 1.10 2001/02/21 20:03:54 mdw
- * Handle select errors (by bombing out). Cosmetic tweak.
- *
- * Revision 1.9 2001/02/03 16:06:44 mdw
- * Don't set a handler for @SIGINT@ if it's ignored at startup. Add some
- * error handling for the @select@ loop.
- *
- * Revision 1.8 2001/01/25 22:19:31 mdw
- * Make flags be unsigned.
- *
- * Revision 1.7 2000/12/06 20:33:27 mdw
- * Make flags be macros rather than enumerations, to ensure that they're
- * unsigned.
- *
- * Revision 1.6 2000/10/08 12:06:46 mdw
- * Change size passed to socket function to be a @size_t@. Insert missing
- * type name for flag declaration.
- *
- * Revision 1.5 2000/07/29 22:05:22 mdw
- * Miscellaneous tidyings:
- *
- * * Change the timeout to something more appropriate for real use.
- *
- * * Check assumptions about object types when binding the socket. In
- * particular, don't zap the socket if it's really something else.
- *
- * * In @p_request@, return a failure if the shell command returned
- * nonzero. Fix a bug in @p_get@ which incorrectly passes on a success
- * code when this happens.
- *
- * * Dispose of the locked memory in client mode to avoid being
- * antisocial.
- *
- * * Also in client mode, don't report closure from the server if we're
- * running noninteractively.
- *
- * * Insert a missing option letter into the usage string.
- *
- * * Change to the root directory after forking in daemon mode.
- *
- * Revision 1.4 2000/06/17 11:50:53 mdw
- * New pixie protocol allowing application to request passphrases and send
- * them to the pixie. Use the secure arena interface for the input
- * buffer. Extend the input buffer. Other minor fixes.
- *
- * Revision 1.3 1999/12/22 22:14:40 mdw
- * Only produce initialization message if verbose.
- *
- * Revision 1.2 1999/12/22 22:13:42 mdw
- * Fix bug in passphrase flushing loop.
- *
- * Revision 1.1 1999/12/22 15:58:41 mdw
- * Passphrase pixie support.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include "config.h"
d.len += strftime(d.buf, d.sz, "%Y-%m-%d %H:%M:%S ", tm);
}
va_start(ap, p);
- dstr_vputf(&d, p, ap);
+ dstr_vputf(&d, p, &ap);
va_end(ap);
if (flags & F_SYSLOG)
{
if (p->t)
sel_rmtimer(&p->timer);
- free(p->tag);
+ xfree(p->tag);
l_free(&lm, p->p);
p->next->prev = p->prev;
p->prev->next = p->next;
va_list ap;
va_start(ap, p);
- dstr_vputf(&d, p, ap);
+ dstr_vputf(&d, p, &ap);
write(px->fd, d.buf, d.len);
va_end(ap);
dstr_destroy(&d);
/* --- @pixserv_line@ --- *
*
* Arguments: @char *s@ = pointer to the line read
+ * @size_t len@ = length of the line
* @void *p@ = pointer to server block
*
* Returns: ---
* Use: Handles a line read from the client.
*/
-static void pixserv_line(char *s, void *p)
+static void pixserv_line(char *s, size_t len, void *p)
{
pixserv *px = p;
char *q, *qq;
if (mode != SEL_READ)
return;
if ((nfd = accept(fd, (struct sockaddr *)&sun, &sunsz)) < 0) {
- if (verbose)
+ if (verbose && errno != EAGAIN && errno != EWOULDBLOCK &&
+ errno != ECONNABORTED && errno != EPROTO && errno != EINTR)
log("new connection failed: %s", strerror(errno));
return;
}
/* --- Line handler functions --- */
-static void c_uline(char *s, void *p)
+static void c_uline(char *s, size_t len, void *p)
{
- size_t sz;
if (!s) {
selbuf_destroy(&c_client);
shutdown(c_server.reader.fd, 1);
c_flags |= cf_uclose;
} else {
- sz = strlen(s);
- s[sz++] = '\n';
- write(c_server.reader.fd, s, sz);
+ s[len++] = '\n';
+ write(c_server.reader.fd, s, len);
}
}
-static void c_sline(char *s, void *p)
+static void c_sline(char *s, size_t len, void *p)
{
if (!s) {
selbuf_destroy(&c_server);
chdir("/");
setsid();
- if (fork() >= 0)
+ if (fork() != 0)
_exit(0);
}