From owner-p4-projects@FreeBSD.ORG Sat Jun 23 09:48:04 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A855816A468; Sat, 23 Jun 2007 09:48:04 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5254916A400 for ; Sat, 23 Jun 2007 09:48:04 +0000 (UTC) (envelope-from karma@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 3F3B213C447 for ; Sat, 23 Jun 2007 09:48:04 +0000 (UTC) (envelope-from karma@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l5N9m43T005839 for ; Sat, 23 Jun 2007 09:48:04 GMT (envelope-from karma@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l5N9m36g005836 for perforce@freebsd.org; Sat, 23 Jun 2007 09:48:03 GMT (envelope-from karma@FreeBSD.org) Date: Sat, 23 Jun 2007 09:48:03 GMT Message-Id: <200706230948.l5N9m36g005836@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to karma@FreeBSD.org using -f From: Alexey Mikhailov To: Perforce Change Reviews Cc: Subject: PERFORCE change 122196 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 23 Jun 2007 09:48:05 -0000 http://perforce.freebsd.org/chv.cgi?CH=122196 Change 122196 by karma@karma_ez on 2007/06/23 09:47:03 Initial hacking around distribute logging user-space library Affected files ... .. //depot/projects/soc2007/karma_audit/dlog/config.h#2 edit .. //depot/projects/soc2007/karma_audit/dlog/lib/Makefile#2 edit .. //depot/projects/soc2007/karma_audit/dlog/lib/libdlogd.c#2 edit .. //depot/projects/soc2007/karma_audit/dlog/lib/libdlogd.h#2 edit Differences ... ==== //depot/projects/soc2007/karma_audit/dlog/config.h#2 (text+ko) ==== ==== //depot/projects/soc2007/karma_audit/dlog/lib/Makefile#2 (text+ko) ==== ==== //depot/projects/soc2007/karma_audit/dlog/lib/libdlogd.c#2 (text+ko) ==== @@ -1,0 +1,160 @@ +#include "../config.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUF_SIZE PATH_MAX+KEYWORD_MAX+2 + +static int timeout = 1000; + +static int dlogd_send (int fd, const char * buf, size_t len); +static int dlogd_connect (); + +/* Submit log file + + On success: 0 returned +*/ + +int +dlogd_submit (const char * pathname, const char * keyword) +{ + int fd, rc; + size_t len; + char buf[BUF_SIZE]; + + if (strlen(pathname) > PATH_MAX) + { + return (-1); + } + else if (strlen(keyword) > KEYWORD_MAX) + { + return (-1); + } + + if ((fd = dlogd_connect()) < 0) + { + return fd; + } + + snprintf(buf, BUF_SIZE, "%s\n%s\n", keyword, pathname); + len = strlen(buf); + + rc = dlogd_send(fd, buf, len); + + if (rc < 0) + return rc; + + /* TODO: write dlogd_receive and wait for server's reply */ + + return 0; +} + +/* Send buf through fd descriptor + + On success: 0 returned + + On failure: -1 returned +*/ + +static int +dlogd_send (int fd, const char * buf, size_t len) +{ + struct pollfd fds; + int rc, bytes; + + fds.fd = fd; + fds.events = POLLOUT; + + while (len) + { + fds.revents = 0; + rc = poll(&fds, 1, timeout * 1000); + if (rc == 0) + return (-1); /* timeout */ + else if (rc < 0) + { + if (errno == EINTR || errno == EAGAIN) + continue; + else + return (-1); + } + + if (!fds.revents) + return (-1); + + bytes = write(fd,buf,len); + + if (bytes < 0) + { + if (errno == EINTR) + continue; + else + return (-1); + } + + len -= bytes; + buf += bytes; + } + + return 0; +} + +/* Connect to local daemon through PF_LOCAL socket. + + On success: descriptor returned + + On failure: -1 -- can't create socket + -2 -- can't bind + -3 -- can't chmod + -4 -- can't connect +*/ + +static int +dlogd_connect () +{ + int fd, len; + struct sockaddr_un un; + + if ((fd = socket(AF_UNIX, SOCK_STREAM,0)) < 0) + return (-1); /* can't create socket */ + + bzero(&un, sizeof(un)); + un.sun_family = AF_UNIX; + sprintf(un.sun_path, "%sdlog.%05d", DL_SOCKET_DIR, getpid()); + len = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path); + unlink(un.sun_path); + + if (bind(fd, (struct sockaddr *) &un, len) < 0) + { + close (fd); + return (-2); /* can't bind */ + } + + if (chmod(un.sun_path, S_IRWXU) < 0) + { + close (fd); + return (-3); /* can't chmod */ + } + + bzero(&un, sizeof(un)); + un.sun_family = AF_UNIX; + strcpy(un.sun_path, DL_SOCKET); + len = offsetof(struct sockaddr_un, sun_path) + strlen(DL_SOCKET); + if (connect(fd, (struct sockaddr *) &un, len) < 0) + { + close(fd); + return (-4); /* can't connect */ + } + + return fd; + +} ==== //depot/projects/soc2007/karma_audit/dlog/lib/libdlogd.h#2 (text+ko) ==== @@ -1,0 +1,6 @@ +#ifndef DLOG_LIB_H +#define DLOG_LIB_H + +int dlogd_submit(const char * pathname, const char * keyword); + +#endif