/*
- * $Id: zip.c,v 1.7 2001-08-15 01:39:39 srittau Exp $
+ * $Id: zip.c,v 1.12 2005-04-28 20:49:47 bfernhomberg Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include <sys/param.h>
#include <sys/types.h>
-#include <sys/syslog.h>
+#include <atalk/logger.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/time.h>
}
}
if ( l == 0 ) {
- syslog( LOG_ERR, "zonecheck: %.*s not in zone list", czt->zt_len,
+ LOG(log_error, logtype_atalkd, "zonecheck: %.*s not in zone list", czt->zt_len,
czt->zt_name );
return( -1 ); /* configured zone not found in net zones */
}
;
if ( cztcnt != ztcnt ) {
- syslog( LOG_ERR, "zonecheck: %d configured zones, %d zones found",
+ LOG(log_error, logtype_atalkd, "zonecheck: %d configured zones, %d zones found",
cztcnt, ztcnt );
return( -1 ); /* more net zones than configured zones */
}
struct atphdr ah;
struct interface *iface;
struct gate *gate;
- struct rtmptab *rtmp;
+ struct rtmptab *rtmp = NULL;
struct list *l;
struct ziptab *zt;
u_short firstnet, lastnet, index, nz;
end = data + len;
if ( data >= end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
switch( *data++ ) {
case DDPTYPE_ZIP :
if ( data + sizeof( struct ziphdr ) > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
memcpy( &zh, data, sizeof( struct ziphdr ));
if ( sendto( ap->ap_fd, packet, reply - packet, 0,
(struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip reply sendto: %m" );
+ LOG(log_error, logtype_atalkd, "zip reply sendto: %s",
+ strerror(errno) );
}
reply = packet + 3;
if ( sendto( ap->ap_fd, packet, reply - packet,
0, (struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip reply sendto: %m" );
+ LOG(log_error, logtype_atalkd, "zip reply sendto: %s",
+ strerror(errno) );
}
reply = packet + 3;
if ( sendto( ap->ap_fd, packet, reply - packet, 0,
(struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip reply sendto: %m" );
+ LOG(log_error, logtype_atalkd, "zip reply sendto: %s",
+ strerror(errno) );
}
reply = packet + 3;
if ( sendto( ap->ap_fd, packet, reply - packet, 0,
(struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip reply sendto: %m" );
+ LOG(log_error, logtype_atalkd, "zip reply sendto: %s",
+ strerror(errno) );
}
}
break;
}
}
if ( gate == NULL ) {
- syslog( LOG_INFO, "zip reply from non-gateway %u.%u",
+ LOG(log_info, logtype_atalkd, "zip reply from non-gateway %u.%u",
ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
return 1;
}
do {
if ( data + sizeof( u_short ) + 1 > end ) { /* + strlen */
- syslog( LOG_INFO, "zip reply short (%d)", len );
+ LOG(log_info, logtype_atalkd, "zip reply short (%d)", len );
return 1;
}
memcpy( &firstnet, data, sizeof( u_short ));
/* XXX */
if ( rtmp->rt_gate == NULL &&
zonecheck( rtmp, gate->g_iface ) != 0 ) {
- syslog( LOG_ERR, "zip_packet seed zonelist mismatch" );
+ LOG(log_error, logtype_atalkd, "zip_packet seed zonelist mismatch" );
return -1;
}
rtmp->rt_flags &= ~RTMPTAB_ZIPQUERY;
zlen = *data++;
if ( zlen > 32 || zlen <= 0 ) {
- syslog( LOG_INFO, "zip reply bad packet" );
+ LOG(log_info, logtype_atalkd, "zip reply bad packet" );
return 1;
}
if ( data + zlen > end ) {
- syslog( LOG_INFO, "zip reply short (%d)", len );
+ LOG(log_info, logtype_atalkd, "zip reply short (%d)", len );
return 1;
}
memcpy( zname, data, zlen );
* telling us about the entry.
*/
if ( rtmp == 0 ) {
- syslog( LOG_INFO, "zip skip reply %u from %u.%u (no rtmp)",
+ LOG(log_info, logtype_atalkd, "zip skip reply %u from %u.%u (no rtmp)",
ntohs( firstnet ), ntohs( from->sat_addr.s_net ),
from->sat_addr.s_node );
/*
* no good if rtmp is the interface's route).
*/
} else if ( rtmp->rt_iprev == NULL && rtmp->rt_prev != NULL ) {
- syslog( LOG_INFO,
+ LOG(log_info, logtype_atalkd,
"zip skip reply %u-%u from %u.%u (rtmp not in use)",
ntohs( rtmp->rt_firstnet ),
ntohs( rtmp->rt_lastnet ),
* net to verify our interface's zone(s).
*/
} else if (( rtmp->rt_flags & RTMPTAB_ZIPQUERY ) == 0 ) {
- syslog( LOG_INFO,
+ LOG(log_info, logtype_atalkd,
"zip skip reply %u-%u from %u.%u (no query)",
ntohs( rtmp->rt_firstnet ),
ntohs( rtmp->rt_lastnet ),
from->sat_addr.s_node );
} else {
if (addzone( rtmp, zlen, zname ) < 0) {
- syslog(LOG_ERR, "zip_packet: addzone");
+ LOG(log_error, logtype_atalkd, "zip_packet: addzone");
return -1;
}
rtmp->rt_flags |= RTMPTAB_HASZONES;
/* XXX */
if ( rtmp->rt_gate == 0 &&
zonecheck( rtmp, gate->g_iface ) != 0 ) {
- syslog( LOG_ERR, "zip_packet seed zonelist mismatch" );
+ LOG(log_error, logtype_atalkd, "zip_packet seed zonelist mismatch" );
return -1;
}
rtmp->rt_flags &= ~RTMPTAB_ZIPQUERY;
}
}
if ( gate == NULL ) {
- syslog( LOG_INFO, "zip ereply from non-gateway %u.%u",
+ LOG(log_info, logtype_atalkd, "zip ereply from non-gateway %u.%u",
ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
return 1;
}
* at the top of the do-while loop, below.
*/
if ( data + sizeof( u_short ) + 1 > end ) { /* + strlen */
- syslog( LOG_INFO, "zip ereply short (%d)", len );
+ LOG(log_info, logtype_atalkd, "zip ereply short (%d)", len );
return 1;
}
memcpy( &firstnet, data, sizeof( u_short ));
}
}
if ( rtmp == NULL ) {
- syslog( LOG_INFO, "zip ereply %u from %u.%u (no rtmp)",
+ LOG(log_info, logtype_atalkd, "zip ereply %u from %u.%u (no rtmp)",
ntohs( firstnet ), ntohs( from->sat_addr.s_net ),
from->sat_addr.s_node );
return 1;
}
if ( rtmp->rt_iprev == 0 ) {
- syslog( LOG_INFO,
+ LOG(log_info, logtype_atalkd,
"zip ereply %u-%u from %u.%u (rtmp not in use)",
ntohs( rtmp->rt_firstnet ),
ntohs( rtmp->rt_lastnet ),
}
if (( rtmp->rt_flags & RTMPTAB_ZIPQUERY ) == 0 ) {
- syslog( LOG_INFO, "zip ereply %u-%u from %u.%u (no query)",
+ LOG(log_info, logtype_atalkd, "zip ereply %u-%u from %u.%u (no query)",
ntohs( rtmp->rt_firstnet ),
ntohs( rtmp->rt_lastnet ),
ntohs( from->sat_addr.s_net ),
* a big deal, and it makes the end condition cleaner.
*/
if ( data + sizeof( u_short ) + 1 > end ) { /* + strlen */
- syslog( LOG_INFO, "zip ereply short (%d)", len );
+ LOG(log_info, logtype_atalkd, "zip ereply short (%d)", len );
return 1;
}
memcpy( &firstnet, data, sizeof( u_short ));
/* check route */
if ( firstnet != rtmp->rt_firstnet ) {
- syslog( LOG_INFO, "zip ereply with multiple nets" );
+ LOG(log_info, logtype_atalkd, "zip ereply with multiple nets" );
return 1;
}
zlen = *data++;
if ( zlen > 32 || zlen <= 0 ) {
- syslog( LOG_INFO, "zip ereply bad zone length (%d)", zlen );
+ LOG(log_info, logtype_atalkd, "zip ereply bad zone length (%d)", zlen );
return 1;
}
if ( data + zlen > end ) {
- syslog( LOG_INFO, "zip ereply short (%d)", len );
+ LOG(log_info, logtype_atalkd, "zip ereply short (%d)", len );
return 1;
}
memcpy( zname, data, zlen );
data += zlen;
if (addzone( rtmp, zlen, zname ) < 0) {
- syslog(LOG_ERR, "zip_packet: addzone");
+ LOG(log_error, logtype_atalkd, "zip_packet: addzone");
return -1;
}
} while ( data < end );
/* XXX */
if ( rtmp->rt_gate == 0 &&
zonecheck( rtmp, gate->g_iface ) != 0 ) {
- syslog( LOG_ERR, "zip_packet seed zonelist mismatch" );
+ LOG(log_error, logtype_atalkd, "zip_packet seed zonelist mismatch" );
return -1;
}
rtmp->rt_flags &= ~RTMPTAB_ZIPQUERY;
}
if ( zh.zh_zero != 0 || data + 2 * sizeof( u_short ) > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
memcpy( &lastnet, data, sizeof( u_short ));
data += sizeof( u_short );
if ( firstnet != 0 || lastnet != 0 || data >= end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
zlen = *data++;
if ( zlen < 0 || zlen > 32 ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
memcpy( zname, data, zlen );
/* multicast */
*data++ = 6; /* sizeof ??? */
if (zone_bcast(zt) < 0) {
- syslog(LOG_ERR, "zip_packet: zone_bcast");
+ LOG(log_error, logtype_atalkd, "zip_packet: zone_bcast");
return -1;
}
memcpy(data, zt->zt_bcast, 6);
if ( sendto( ap->ap_fd, packet, data - packet, 0,
(struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip gni sendto %u.%u: %m",
- ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
+ LOG(log_error, logtype_atalkd, "zip gni sendto %u.%u: %s",
+ ntohs( from->sat_addr.s_net ), from->sat_addr.s_node,
+ strerror(errno) );
return 1;
}
break;
/*
* Ignore ZIP GNIReplys which are either late or unsolicited.
*/
- syslog( LOG_DEBUG, "zip gnireply from %u.%u (%s %x)",
+ LOG(log_debug, logtype_atalkd, "zip gnireply from %u.%u (%s %x)",
ntohs( from->sat_addr.s_net ), from->sat_addr.s_node,
iface->i_name, iface->i_flags );
if (( iface->i_flags & ( IFACE_CONFIG|IFACE_PHASE1 )) ||
( iface->i_flags & IFACE_ADDR ) == 0 ) {
- syslog( LOG_DEBUG, "zip ignoring gnireply" );
+ LOG(log_debug, logtype_atalkd, "zip ignoring gnireply" );
return 1;
}
if ( data + 2 * sizeof( u_short ) > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
memcpy( &firstnet, data, sizeof( u_short ));
* default zone is.
*/
if ( data >= end || data + *data > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
if ( *data++ != 0 ) {
- syslog( LOG_INFO, "zip_packet unsolicited zone" );
+ LOG(log_info, logtype_atalkd, "zip_packet unsolicited zone" );
return 1;
}
/* skip multicast (should really check it) */
if ( data >= end || data + *data > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
data += *data + 1;
if ( data >= end || data + *data > end ) {
- syslog( LOG_INFO, "zip_packet malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip_packet malformed packet" );
return 1;
}
if ( iface->i_czt->zt_len != *data ||
strndiacasecmp( iface->i_czt->zt_name,
data + 1, *data ) != 0 ) {
- syslog( LOG_ERR, "default zone mismatch on %s",
+ LOG(log_error, logtype_atalkd, "default zone mismatch on %s",
iface->i_name );
- syslog( LOG_ERR, "%.*s != %.*s",
+ LOG(log_error, logtype_atalkd, "%.*s != %.*s",
iface->i_czt->zt_len, iface->i_czt->zt_name,
*data, data + 1 );
- syslog( LOG_ERR, "Seed error! Exiting!" );
+ LOG(log_error, logtype_atalkd, "Seed error! Exiting!" );
return -1;
}
}
if (addzone( iface->i_rt, *data, data + 1 ) < 0) {
- syslog(LOG_ERR, "zip_packet: addzone");
+ LOG(log_error, logtype_atalkd, "zip_packet: addzone");
return -1;
}
if ( firstnet != iface->i_rt->rt_firstnet ||
lastnet != iface->i_rt->rt_lastnet ) {
if ( iface->i_flags & IFACE_SEED ) {
- syslog( LOG_ERR, "netrange mismatch on %s",
+ LOG(log_error, logtype_atalkd, "netrange mismatch on %s",
iface->i_name );
- syslog( LOG_ERR, "%u-%u != %u-%u",
+ LOG(log_error, logtype_atalkd, "%u-%u != %u-%u",
ntohs( firstnet ), ntohs( lastnet ),
ntohs( iface->i_rt->rt_firstnet ),
ntohs( iface->i_rt->rt_lastnet ));
- syslog( LOG_ERR, "Seed error! Exiting!" );
+ LOG(log_error, logtype_atalkd, "Seed error! Exiting!" );
return -1;
}
/* add addr to loopback route */
if ( looproute( iface, RTMP_ADD )) { /* -1 or 1 */
- syslog( LOG_ERR,
- "zip_packet: can't route %u.%u to loopback: %m",
+ LOG(log_error, logtype_atalkd,
+ "zip_packet: can't route %u.%u to loopback: %s",
ntohs( iface->i_addr.sat_addr.s_net ),
- iface->i_addr.sat_addr.s_node );
+ iface->i_addr.sat_addr.s_node,
+ strerror(errno) );
return -1;
}
- syslog( LOG_INFO, "zip_packet configured %s from %u.%u",
+ LOG(log_info, logtype_atalkd, "zip_packet configured %s from %u.%u",
iface->i_name, ntohs( from->sat_addr.s_net ),
from->sat_addr.s_node );
iface->i_flags |= IFACE_CONFIG;
break;
default :
- syslog( LOG_INFO, "zip_packet bad zip op from %u.%u\n",
+ LOG(log_info, logtype_atalkd, "zip_packet bad zip op from %u.%u",
ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
}
break;
case DDPTYPE_ATP :
if ( data + sizeof( struct atphdr ) > end ) {
- syslog( LOG_INFO, "zip atp malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip atp malformed packet" );
return 1;
}
memcpy( &ah, data, sizeof( struct atphdr ));
data += sizeof( struct atphdr );
if ( ah.atphd_ctrlinfo != ATP_TREQ ) {
- syslog( LOG_INFO, "zip atp bad control" );
+ LOG(log_info, logtype_atalkd, "zip atp bad control" );
return 1;
}
ah.atphd_ctrlinfo = ATP_TRESP | ATP_EOM;
if ( ah.atphd_bitmap != 1 ) {
- syslog( LOG_ERR, "zip atp bad bitmap" );
+ LOG(log_error, logtype_atalkd, "zip atp bad bitmap" );
return 1;
}
ah.atphd_bitmap = 0;
data += sizeof( u_short );
index = ntohs( index );
if ( data != end ) {
- syslog( LOG_INFO, "zip atp malformed packet" );
+ LOG(log_info, logtype_atalkd, "zip atp malformed packet" );
return 1;
}
switch ( zipop ) {
case ZIPOP_GETMYZONE :
if ( index != 0 ) {
- syslog( LOG_INFO, "zip atp gmz bad index" );
+ LOG(log_info, logtype_atalkd, "zip atp gmz bad index" );
return 1;
}
}
zt = (struct ziptab *)iface->i_rt->rt_zt->l_data;
if ( data + 1 + zt->zt_len > end ) {
- syslog( LOG_INFO, "zip atp gmz reply too long" );
+ LOG(log_info, logtype_atalkd, "zip atp gmz reply too long" );
return 1;
}
*data++ = zt->zt_len;
break;
default :
- syslog( LOG_INFO, "zip atp bad option" );
+ LOG(log_info, logtype_atalkd, "zip atp bad option" );
return 1;
}
if ( sendto( ap->ap_fd, packet, data - packet, 0,
(struct sockaddr *)from,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip atp sendto %u.%u: %m",
- ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
+ LOG(log_error, logtype_atalkd, "zip atp sendto %u.%u: %s",
+ ntohs( from->sat_addr.s_net ), from->sat_addr.s_node,
+ strerror(errno) );
return 1;
}
}
break;
default :
- syslog( LOG_INFO, "zip_packet bad ddp type from %u.%u\n",
+ LOG(log_info, logtype_atalkd, "zip_packet bad ddp type from %u.%u",
ntohs( from->sat_addr.s_net ), from->sat_addr.s_node );
return 1;
}
char *data, packet[ 40 ];
u_short net;
- syslog( LOG_INFO, "zip_getnetinfo for %s", iface->i_name );
+ LOG(log_info, logtype_atalkd, "zip_getnetinfo for %s", iface->i_name );
for ( ap = iface->i_ports; ap; ap = ap->ap_next ) {
if ( ap->ap_packet == zip_packet ) {
}
}
if ( ap == 0 ) {
- syslog( LOG_ERR, "zip_getnetinfo can't find zip socket!" );
+ LOG(log_error, logtype_atalkd, "zip_getnetinfo can't find zip socket!" );
return -1;
}
if ( sendto( ap->ap_fd, packet, data - packet, 0, (struct sockaddr *)&sat,
sizeof( struct sockaddr_at )) < 0 ) {
- syslog( LOG_ERR, "zip_getnetinfo sendto: %m" );
+ LOG(log_error, logtype_atalkd, "zip_getnetinfo sendto: %s", strerror(errno) );
return -1;
}
return 0;
}
}
if (( l = (struct list *)malloc( sizeof( struct list ))) == NULL ) {
- syslog( LOG_ERR, "add_list malloc: %m" );
+ LOG(log_error, logtype_atalkd, "add_list malloc: %s", strerror(errno) );
return -1;
}
}
if ( zt == NULL ) {
if (( zt = newzt( len, zone )) == NULL ) {
- syslog( LOG_ERR, "addzone newzt: %m" );
+ LOG(log_error, logtype_atalkd, "addzone newzt: %s", strerror(errno) );
return -1;
}
if ( ziptab == NULL ) {
if (cc) {
if ( !exists ) {
- syslog( LOG_ERR, "addzone corrupted route/zone mapping" );
+ LOG(log_error, logtype_atalkd, "addzone corrupted route/zone mapping" );
return -1;
}
/*
return 0;
}
if ( exists ) {
- syslog( LOG_ERR, "addzone corrupted zone/route mapping" );
+ LOG(log_error, logtype_atalkd, "addzone corrupted zone/route mapping" );
return -1;
}
return 0;