Date: Sat, 23 Jun 2007 09:48:03 GMT From: Alexey Mikhailov <karma@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 122196 for review Message-ID: <200706230948.l5N9m36g005836@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 <stdio.h> +#include <strings.h> +#include <string.h> +#include <stddef.h> +#include <errno.h> +#include <unistd.h> +#include <sys/poll.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/syslimits.h> +#include <sys/un.h> + +#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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706230948.l5N9m36g005836>