[DRBD-cvs] user by phil; Missing stuff. for last commit.

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Thu, 29 Apr 2004 16:48:25 +0200 (CEST)


DRBD CVS committal

Author  : phil
Project : drbd
Module  : user

Dir     : drbd/user


Modified Files:
      Tag: rel-0_7-branch
	drbdadm_main.c drbdsetup.c 


Log Message:
Missing stuff. for last commit.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/Attic/drbdadm_main.c,v
retrieving revision 1.1.2.45
retrieving revision 1.1.2.46
diff -u -3 -r1.1.2.45 -r1.1.2.46
--- drbdadm_main.c	26 Apr 2004 08:36:29 -0000	1.1.2.45
+++ drbdadm_main.c	29 Apr 2004 14:48:20 -0000	1.1.2.46
@@ -355,12 +355,12 @@
 
   pid = fork();
   if(pid == -1) {
-    fprintf(stderr,"Can not fork");
+    fprintf(stderr,"Can not fork\n");
     exit(E_exec_error);
   }
   if(pid == 0) {
     execv(argv[0],argv);
-    fprintf(stderr,"Can not exec");
+    fprintf(stderr,"Can not exec\n");
     exit(E_exec_error);
   }
 
@@ -596,44 +596,13 @@
   exit(E_usage);
 }
 
-int m_shell_match(const char *subcmd, const char *pattern)
-{
-  int ex, pid;
-  char *cmd = NULL;
-
-#ifdef DEBUG
-  ex = asprintf(&cmd, "[[ `%s` == %s ]]", subcmd, pattern);
-#else
-  ex = asprintf(&cmd, "[[ `%s` == %s ]] &>/dev/null", subcmd, pattern);
-#endif
-  if (ex < 0) { perror("asprintf"); exit(E_thinko); }
-
-  pid = fork();
-  if (pid == -1) { fprintf(stderr, "Can not fork"); exit(E_exec_error); }
-  if (pid == 0) {
-    execl("/bin/bash", progname,
-#ifdef DEBUG
-	"-vxc",
-#else
-	"-c",
-#endif
-	cmd, NULL);
-    fprintf(stderr, "Can not exec");
-    exit(E_exec_error);
-  }
-  waitpid(pid, &ex, 0);
-  free(cmd);
-  return ex;
-}
-
 /* if not verifyable, prints a message to stderr,
  * and sets config_valid = 0 if INVALID_IP_IS_INVALID_CONF is defined */
 void verify_ips(struct d_resource* res)
 {
-  char *cmd = NULL;
-  char *pat = NULL;
   char *my_ip = NULL;
   char *his_ip = NULL;
+  char *argv[] = { "/bin/bash", "-c", NULL, "drbdadm:verify_ips", NULL };
   int ex;
 
   if (!(res && res->me   && res->me->address
@@ -643,13 +612,22 @@
   }
   my_ip  = res->me->address;
   his_ip = res->peer->address;
-  ex = asprintf(&cmd, "/sbin/ip -o addr show scope global to %s", my_ip);
-  if (ex < 0) { perror("asprintf"); exit(E_thinko); }
-  ex = asprintf(&pat, "*inet\\ %s/*", my_ip);
+
+  ex = asprintf(&argv[2],
+	"IP=%s; IP=${IP//./\\\\.};"
+	"LANG=; PATH=/sbin/:$PATH;"
+	"if   type -p ip       ; then"
+	"  ip addr show | grep -qE 'inet '$IP/;"
+	"elif type -p ifconfig ; then"
+	"  ifconfig | grep -qE ' inet addr:'$IP' ';"
+	"else"
+	"  echo >&2 $0: 'neither ip nor ifconfig found!';"
+	"fi",
+	my_ip);
   if (ex < 0) { perror("asprintf"); exit(E_thinko); }
-  ex = m_shell_match(cmd, pat);
-  free(cmd); cmd = NULL;
-  free(pat); pat = NULL;
+  ex = m_system(1,argv);
+  free(argv[2]); argv[2] = NULL;
+
   if (ex != 0) {
     ENTRY e, *ep;
     e.key = e.data = ep = NULL;
@@ -664,13 +642,21 @@
     free(e.key);
     return;
   }
-  asprintf(&cmd, "/sbin/ip -o route get to %s", his_ip);
-  if (ex < 0) { perror("asprintf"); exit(E_thinko); }
-  asprintf(&pat, "%s\\ dev*src\\ %s\\ \\\\*", his_ip, my_ip);
+
+  ex = asprintf(&argv[2],
+	"IP=%s; IPQ=${IP//./\\\\.};"
+	"peerIP=%s; peerIPQ=${peerIP//./\\\\.};"
+	"LANG=; PATH=/sbin/:$PATH;"
+	"if type -p ip ; then "
+	"  ip -o route get to $peerIP 2>/dev/null |"
+	"    grep -qE $peerIPQ' dev .* src '$IPQ' ';"
+	"else"
+	"  echo >&2 $0: 'cannot check route to peer';"
+	"fi",
+	my_ip,his_ip);
   if (ex < 0) { perror("asprintf"); exit(E_thinko); }
-  ex = m_shell_match(cmd, pat);
-  free(cmd); cmd = NULL;
-  free(pat); pat = NULL;
+  ex = m_system(1,argv);
+  free(argv[2]); argv[2] = NULL;
   if (ex != 0) {
     ENTRY e, *ep;
     e.key = e.data = ep = NULL;
@@ -678,12 +664,11 @@
     ep = hsearch(e, FIND);
     fprintf(stderr, "%s:%d: in resource %s:\n\tNo route from me (%s) to peer (%s).\n",
 	    config_file,(int) ep->data,res->name, my_ip, his_ip);
-#ifdef INVALID_IP_IS_INVALID_CONF
+# ifdef INVALID_IP_IS_INVALID_CONF
     config_valid = 0;
-#endif
+# endif
     return;
   }
-
   return;
 }
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/user/drbdsetup.c,v
retrieving revision 1.54.2.30
retrieving revision 1.54.2.31
diff -u -3 -r1.54.2.30 -r1.54.2.31
--- drbdsetup.c	26 Apr 2004 08:36:29 -0000	1.54.2.30
+++ drbdsetup.c	29 Apr 2004 14:48:20 -0000	1.54.2.31
@@ -855,7 +855,7 @@
       err=errno;
       perror("ioctl() failed");
       if(err==EINPROGRESS)
-	fprintf(stderr,"Only in 'Connected' cstate possible.");
+	fprintf(stderr,"Only in 'Connected' cstate possible.\n");
       return 20;
     }
   return 0;
@@ -871,7 +871,7 @@
       err=errno;
       perror("ioctl() failed");
       if(err==EINPROGRESS)
-	fprintf(stderr,"Only in 'Connected' cstate possible.");
+	fprintf(stderr,"Only in 'Connected' cstate possible.\n");
       return 20;
     }
   return 0;