X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fpapd%2Fsession.c;h=6e1cfd783a15538f70387ccea3cdb0f0c4fd1fa7;hb=ecfc96169ab669b578e53fa8e13592934fe37788;hp=7c19aebecc5f78fd8a2e135d5f2e888d1cdcf830;hpb=767548a01151cdb331d341f299c6f58b58b4ab12;p=netatalk.git diff --git a/etc/papd/session.c b/etc/papd/session.c index 7c19aebe..6e1cfd78 100644 --- a/etc/papd/session.c +++ b/etc/papd/session.c @@ -1,5 +1,5 @@ /* - * $Id: session.c,v 1.8 2001-08-03 22:13:28 srittau Exp $ + * $Id: session.c,v 1.15 2005-04-28 20:49:49 bfernhomberg Exp $ * * Copyright (c) 1990,1994 Regents of The University of Michigan. * All Rights Reserved. See COPYRIGHT. @@ -9,10 +9,17 @@ #include "config.h" #endif /* HAVE_CONFIG_H */ +#ifdef HAVE_SYS_ERRNO_H +#include +#endif /* HAVE_SYS_ERRNO_H */ +#ifdef HAVE_ERRNO_H +#include +#endif /* HAVE_ERRNO_H */ + #include #include #include -#include +#include #include #include #include @@ -67,7 +74,7 @@ int session( atp, sat ) char cbuf[ 578 ]; int i, cc, timeout = 0, readpending = 0; u_int16_t seq = 0, rseq = 1, netseq; - u_char readport; + u_char readport; /* uninitialized, OK 310105 */ infile.pf_state = PF_BOT; infile.pf_bufsize = 0; @@ -95,7 +102,7 @@ int session( atp, sat ) atpb.atp_sreqto = 5; /* retry timer */ atpb.atp_sreqtries = -1; /* infinite retries */ if ( atp_sreq( atp, &atpb, oquantum, ATP_XO )) { - syslog( LOG_ERR, "atp_sreq: %m" ); + LOG(log_error, logtype_papd, "atp_sreq: %m" ); return( -1 ); } @@ -112,13 +119,18 @@ int session( atp, sat ) FD_ZERO( &fds ); FD_SET( atp_fileno( atp ), &fds ); - if (( cc = select( FD_SETSIZE, &fds, 0, 0, &tv )) < 0 ) { - syslog( LOG_ERR, "select: %m" ); - return( -1 ); + do { /* do list until success or an unrecoverable error occurs */ + if (( cc = select( FD_SETSIZE, &fds, 0, 0, &tv )) < 0 ) + LOG(log_error, logtype_papd, "select: %m" ); /* log all errors */ + } while (( cc < 0 ) && (errno == 4)); + + if ( cc < 0 ) { + LOG(log_error, logtype_papd, "select: Error is unrecoverable" ); + return( -1 ); } if ( cc == 0 ) { if ( timeout++ > 2 ) { - syslog( LOG_ERR, "connection timed out" ); + LOG(log_error, logtype_papd, "connection timed out" ); lp_cancel(); return( -1 ); } @@ -135,7 +147,7 @@ int session( atp, sat ) atpb.atp_sreqto = 0; /* best effort */ atpb.atp_sreqtries = 1; /* try once */ if ( atp_sreq( atp, &atpb, 0, 0 )) { - syslog( LOG_ERR, "atp_sreq: %m" ); + LOG(log_error, logtype_papd, "atp_sreq: %m" ); return( -1 ); } continue; @@ -150,12 +162,12 @@ int session( atp, sat ) atpb.atp_rreqdata = cbuf; atpb.atp_rreqdlen = sizeof( cbuf ); if ( atp_rreq( atp, &atpb ) < 0 ) { - syslog( LOG_ERR, "atp_rreq: %m" ); + LOG(log_error, logtype_papd, "atp_rreq: %m" ); return( -1 ); } /* sanity */ if ( (unsigned char)cbuf[ 0 ] != connid ) { - syslog( LOG_ERR, "Bad ATP request!" ); + LOG(log_error, logtype_papd, "Bad ATP request!" ); continue; } @@ -196,7 +208,7 @@ int session( atp, sat ) atpb.atp_sresiov = niov; atpb.atp_sresiovcnt = 1; if ( atp_sresp( atp, &atpb ) < 0 ) { - syslog( LOG_ERR, "atp_sresp: %m" ); + LOG(log_error, logtype_papd, "atp_sresp: %m" ); exit( 1 ); } return( 0 ); @@ -205,7 +217,7 @@ int session( atp, sat ) case PAP_TICKLE : break; default : - syslog( LOG_ERR, "Bad PAP request!" ); + LOG(log_error, logtype_papd, "Bad PAP request!" ); } break; @@ -218,20 +230,20 @@ int session( atp, sat ) atpb.atp_rresiov = niov; atpb.atp_rresiovcnt = oquantum; if ( atp_rresp( atp, &atpb ) < 0 ) { - syslog( LOG_ERR, "atp_rresp: %m" ); + LOG(log_error, logtype_papd, "atp_rresp: %m" ); return( -1 ); } /* sanity */ if ( ((unsigned char *)niov[ 0 ].iov_base)[ 0 ] != connid || ((char *)niov[ 0 ].iov_base)[ 1 ] != PAP_DATA ) { - syslog( LOG_ERR, "Bad data response!" ); + LOG(log_error, logtype_papd, "Bad data response!" ); continue; } for ( i = 0; i < atpb.atp_rresiovcnt; i++ ) { append( &infile, - niov[ i ].iov_base + 4, niov[ i ].iov_len - 4 ); + (char *)niov[ i ].iov_base + 4, niov[ i ].iov_len - 4 ); if (( infile.pf_state & PF_EOF ) == 0 && ((char *)niov[ 0 ].iov_base)[ 2 ] ) { infile.pf_state |= PF_EOF; @@ -240,7 +252,7 @@ int session( atp, sat ) /* move data */ if ( ps( &infile, &outfile, sat ) < 0 ) { - syslog( LOG_ERR, "parse: bad return" ); + LOG(log_error, logtype_papd, "parse: bad return" ); return( -1 ); /* really? close? */ } @@ -258,7 +270,7 @@ int session( atp, sat ) atpb.atp_sreqto = 5; /* retry timer */ atpb.atp_sreqtries = -1; /* infinite retries */ if ( atp_sreq( atp, &atpb, oquantum, ATP_XO )) { - syslog( LOG_ERR, "atp_sreq: %m" ); + LOG(log_error, logtype_papd, "atp_sreq: %m" ); return( -1 ); } break; @@ -267,7 +279,7 @@ int session( atp, sat ) break; default : - syslog( LOG_ERR, "atp_rsel: %m" ); + LOG(log_error, logtype_papd, "atp_rsel: %m" ); return( -1 ); } @@ -292,7 +304,7 @@ int session( atp, sat ) } niov[ i ].iov_len = 4 + cc; - memcpy( niov[ i ].iov_base + 4, outfile.pf_data, cc ); + memcpy( (char *)niov[ i ].iov_base + 4, outfile.pf_data, cc ); CONSUME( &outfile, cc ); if ( outfile.pf_datalen == 0 ) { i++; @@ -304,7 +316,7 @@ int session( atp, sat ) atpb.atp_sresiov = niov; atpb.atp_sresiovcnt = i; /* reported by stevebn@pc1.eos.co.uk */ if ( atp_sresp( atp, &atpb ) < 0 ) { - syslog( LOG_ERR, "atp_sresp: %m" ); + LOG(log_error, logtype_papd, "atp_sresp: %m" ); return( -1 ); } readpending = 0;