Module Name: src Committed By: pooka Date: Fri Nov 5 14:23:45 UTC 2010
Modified Files: src/lib/librumpuser: sp_common.c Log Message: Implement support for unix domain sockets (important especially for testing since we don't want to depend on global resources such as tcp ports). To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/lib/librumpuser/sp_common.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/librumpuser/sp_common.c diff -u src/lib/librumpuser/sp_common.c:1.1 src/lib/librumpuser/sp_common.c:1.2 --- src/lib/librumpuser/sp_common.c:1.1 Thu Nov 4 20:54:07 2010 +++ src/lib/librumpuser/sp_common.c Fri Nov 5 14:23:45 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sp_common.c,v 1.1 2010/11/04 20:54:07 pooka Exp $ */ +/* $NetBSD: sp_common.c,v 1.2 2010/11/05 14:23:45 pooka Exp $ */ /* * Copyright (c) 2010 Antti Kantee. All Rights Reserved. @@ -34,6 +34,7 @@ #include <sys/types.h> #include <sys/mman.h> #include <sys/socket.h> +#include <sys/un.h> #include <arpa/inet.h> #include <netinet/in.h> @@ -329,6 +330,31 @@ return 0; } +static int +unix_parse(const char *addr, struct sockaddr **sa, int allow_wildcard) +{ + struct sockaddr_un sun; + + if (strlen(addr) > sizeof(sun.sun_path)) + return ENAMETOOLONG; + + /* + * The pathname can be all kinds of spaghetti elementals, + * so meek and obidient we accept everything. + */ + memset(&sun, 0, sizeof(sun)); + sun.sun_family = AF_LOCAL; + strlcpy(sun.sun_path, addr, sizeof(sun.sun_path)); + sun.sun_len = SUN_LEN(&sun); + + *sa = malloc(sun.sun_len); + if (*sa == NULL) + return errno; + memcpy(*sa, &sun, sun.sun_len); + + return 0; +} + /*ARGSUSED*/ static int notsupp(void) @@ -352,7 +378,7 @@ connecthook_fn connhook; } parsetab[] = { { "tcp", PF_INET, tcp_parse, tcp_connecthook }, - { "unix", PF_LOCAL, (addrparse_fn)notsupp, (connecthook_fn)success }, + { "unix", PF_LOCAL, unix_parse, (connecthook_fn)success }, { "tcp6", PF_INET6, (addrparse_fn)notsupp, (connecthook_fn)success }, }; #define NPARSE (sizeof(parsetab)/sizeof(parsetab[0]))