da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * syslog implementation
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "default", 0,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * open /dev/(fdp|tcp|udp)/HOST/SERVICE for read
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define htons(x) (x)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define htonl(x) (x)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * convert s to sockaddr_in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * -1 returned on error
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstr2inet(register char* s, char* prot, struct sockaddr_in* addr)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int c;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int v;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long a = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short p = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (!isdigit(*s))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!hp || hp->h_addrtype != AF_INET || hp->h_length > sizeof(struct in_addr))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin a = (unsigned long)((struct in_addr*)hp->h_addr)->s_addr;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = e + 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (++n <= 4)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (n <= 5)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * call this after open fails to see if path is a socket
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((ul = strlen(buf)) < sizeof(ua.sun_path) && !stat(buf, &st) && S_ISSOCK(st.st_mode))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((fd = socket(AF_INET, buf[5] == 't' ? SOCK_STREAM : SOCK_DGRAM, 0)) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register Namval_t* p;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*(s = p->name) != '/' && !(s = pathpath(buf, s, "", PATH_REGULAR|PATH_READ)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((log.fd = open(s, O_WRONLY|O_APPEND|O_NOCTTY)) < 0 && (log.fd = sockopen(s)) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int c;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((c = LOG_SEVERITY(priority)) < elementsof(log_severity))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((c = LOG_FACILITY(priority)) < elementsof(log_facility))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*log.host && gethostname(log.host, sizeof(log.host)-1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*log.ident)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*log.ident)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((s = sfstrseek(sp, 0, SEEK_CUR)) && *(s - 1) != '\n')