# HG changeset patch # User František Kučera # Date 1479594587 -3600 # Node ID 6ec32ee08feb8e438fe3266ced698fb5627b8edd # Parent 0a06481eec13142df6f6493aa4803b374a427b64 libevent: print_socket_info() -- vypíše pid, uid, gid diff -r 0a06481eec13 -r 6ec32ee08feb c++/domain-socket-bridge/domain-socket-bridge.c --- a/c++/domain-socket-bridge/domain-socket-bridge.c Sat Nov 19 22:30:02 2016 +0100 +++ b/c++/domain-socket-bridge/domain-socket-bridge.c Sat Nov 19 23:29:47 2016 +0100 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -23,8 +24,7 @@ static void conn_write_cb(struct bufferevent *, void *); static void conn_event_cb(struct bufferevent *, short, void *); static void signal_cb(evutil_socket_t, short, void *); - -static char rot13_char(char); +static void print_socket_info(int); int main(int argc, char **argv) { struct event_base *base; @@ -99,11 +99,14 @@ fprintf(stderr, "Unable to accept(): %d", fd); return; } else if (fd > FD_SETSIZE) { + // FD_SETSIZE = 1024 -- Proč? Co když bude spojení víc? close(fd); return; } evutil_make_socket_nonblocking(fd); + + print_socket_info(fd); bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE); if (!bev) { @@ -159,7 +162,7 @@ static void conn_event_cb(struct bufferevent *bev, short events, void *user_data) { printf("conn_event_cb: user_data = '%s'\n", (char*) user_data); - + if (events & BEV_EVENT_EOF) { printf("Connection closed.\n"); } else if (events & BEV_EVENT_ERROR) { @@ -178,3 +181,12 @@ event_base_loopexit(base, &delay); } + +static void print_socket_info(int fd) { + struct ucred cr; + unsigned int cl = sizeof (cr); + + if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl) == 0) { + printf("připojený klient: pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid); + } +} \ No newline at end of file