Revision: 432
http://vde.svn.sourceforge.net/vde/?rev=432&view=rev
Author: shammash
Date: 2010-07-20 11:15:12 +0000 (Tue, 20 Jul 2010)
Log Message:
-----------
vde_switch: datasock ctl_socket cleanup
Put path resolution and ctl_socket assignment/tests in a single place.
This also fixes bug #3031623 , a regression introduced by revision 427 .
Signed-off-by: Luca Bigliardi <[email protected]>
Revision Links:
--------------
http://vde.svn.sourceforge.net/vde/?rev=427&view=rev
Modified Paths:
--------------
trunk/vde-2/src/vde_switch/datasock.c
Modified: trunk/vde-2/src/vde_switch/datasock.c
===================================================================
--- trunk/vde-2/src/vde_switch/datasock.c 2010-07-04 14:34:42 UTC (rev
431)
+++ trunk/vde-2/src/vde_switch/datasock.c 2010-07-20 11:15:12 UTC (rev
432)
@@ -43,8 +43,8 @@
static unsigned int wd_type;
static unsigned int data_type;
-static char real_ctl_socket[PATH_MAX];
-static char *ctl_socket = real_ctl_socket;
+static char *rel_ctl_socket = NULL;
+static char ctl_socket[PATH_MAX];
static int mode = -1;
static int dirmode = -1;
@@ -308,6 +308,10 @@
int test_fd;
if (fd < 0) {
+ if (!strlen(ctl_socket)) {
+ /* ctl_socket has not been created yet */
+ return;
+ }
if((test_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0){
printlog(LOG_ERR,"socket %s",strerror(errno));
}
@@ -363,17 +367,10 @@
struct group *grp;
switch (c) {
case 's':
- if (((mkdir(optarg, 0777) < 0) && (errno != EEXIST))) {
- fprintf(stderr,"Cannot create ctl directory
'%s': %s\n",
- optarg, strerror(errno));
+ if (!(rel_ctl_socket = strdup(optarg))) {
+ fprintf(stderr, "Memory error while parsing
'%s'\n", optarg);
exit(1);
}
- ctl_socket = vde_realpath(optarg, real_ctl_socket);
- if (!ctl_socket) {
- fprintf(stderr,"Cannot resolve ctl dir path
'%s': %s\n",
- optarg, strerror(errno));
- exit(1);
- }
break;
case 'm':
sscanf(optarg,"%o",&mode);
@@ -439,8 +436,21 @@
printlog(LOG_ERR,"Could not set O_NONBLOCK on connection fd %d:
%s", connect_fd, strerror(errno));
return;
}
- /* ctl_socket dir is created while parsing to provide an existing path
- * to vde_realpath() */
+ /* resolve ctl_socket, eventually defaulting to standard paths */
+ if (rel_ctl_socket == NULL) {
+ rel_ctl_socket = (geteuid()==0)?VDESTDSOCK:VDETMPSOCK;
+ }
+ if (((mkdir(rel_ctl_socket, 0777) < 0) && (errno != EEXIST))) {
+ fprintf(stderr,"Cannot create ctl directory '%s': %s\n",
+ rel_ctl_socket, strerror(errno));
+ exit(-1);
+ }
+ if (!vde_realpath(rel_ctl_socket, ctl_socket)) {
+ fprintf(stderr,"Cannot resolve ctl dir path '%s': %s\n",
+ rel_ctl_socket, strerror(errno));
+ exit(1);
+ }
+
if(chown(ctl_socket,-1,grp_owner) < 0) {
rmdir(ctl_socket);
printlog(LOG_ERR, "Could not chown socket '%s': %s",
sun.sun_path, strerror(errno));
@@ -498,7 +508,6 @@
void start_datasock(void)
{
- ctl_socket = (geteuid()==0)?VDESTDSOCK:VDETMPSOCK;
modfun.modname=swmi.swmname=MODULENAME;
swmi.swmnopts=Nlong_options;
swmi.swmopts=long_options;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
vde-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vde-users