/* -*-c-*-
*
- * $Id: ident.c,v 1.1 1999/10/04 21:41:58 mdw Exp $
+ * $Id: ident.c,v 1.6 2004/04/08 01:36:11 mdw Exp $
*
* Nonblocking RFC931 client
*
* (c) 1999 Mark Wooding
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of the mLib utilities library.
*
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
- *
+ *
* mLib is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Library General Public
* License along with mLib; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: ident.c,v $
- * Revision 1.1 1999/10/04 21:41:58 mdw
- * Added ident client from `fw'.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include <ctype.h>
/* --- @line@ --- *
*
* Arguments: @char *s@ = pointer to string from ident server
+ * @size_t len@ = length of the line
* @void *p@ = pointer to my request block
*
* Returns: ---
* Use: Handles a string from an ident server.
*/
-static void line(char *s, void *p)
+static void line(char *s, size_t len, void *p)
{
ident_request *rq = p;
rq->state = IDENT_DONE;
- selbuf_disable(&rq->b);
close(rq->b.reader.fd);
if (!s)
rq->func(0, rq->p);
parse(s, &i);
rq->func(&i, rq->p);
}
+ selbuf_destroy(&rq->b);
}
/* --- @connected@ --- *
conn_kill(&rq->c);
break;
case IDENT_READ:
- selbuf_disable(&rq->b);
close(rq->b.reader.fd);
+ selbuf_destroy(&rq->b);
break;
}
}
int opt;
/* --- Create the socket I'll use --- */
-
+
if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
goto fail_0;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(113);
sin.sin_addr = rq->remote.sin_addr;
- conn_init(&rq->c, rq->s, fd, (struct sockaddr *)&sin, sizeof(sin),
- connected, rq);
+ if (conn_init(&rq->c, rq->s, fd, (struct sockaddr *)&sin, sizeof(sin),
+ connected, rq))
+ goto fail_1;
/* --- Finish off initializing the block --- */
void ident(ident_request *rq, sel_state *s,
const struct sockaddr_in *local,
- const struct sockaddr_in *remote,
+ const struct sockaddr_in *remote,
void (*func)(ident_reply */*i*/, void */*p*/),
void *p)
{
void (*func)(ident_reply */*i*/, void */*p*/),
void *p)
{
- int sinsz;
+ size_t sinsz;
if ((sinsz = sizeof(struct sockaddr_in),
getsockname(sk, (struct sockaddr *)&rq->local, &sinsz)) ||
(sinsz = sizeof(struct sockaddr_in),