multipath: make reservation_key print out correctly
authorBenjamin Marzinski <bmarzins@redhat.com>
Sat, 12 Jan 2013 06:04:50 +0000 (00:04 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sat, 12 Jan 2013 12:36:51 +0000 (13:36 +0100)
This patch fixes the reservation_key print functions, so they print
it out like it was in the configuration file.  Also, it keeps
cli_getprstatus() from writing over random memory.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
libmultipath/dict.c
multipathd/cli_handlers.c

index 788ffae..a54dda9 100644 (file)
@@ -2052,8 +2052,22 @@ snprint_mp_prio_args(char * buff, int len, void * data)
 static int
 snprint_mp_reservation_key (char * buff, int len, void * data)
 {
+       int i;
+       unsigned char *keyp;
+       uint64_t prkey = 0;
        struct mpentry * mpe = (struct mpentry *)data;
-       return snprintf(buff, len, "%s" , mpe->reservation_key);
+
+       if (!mpe->reservation_key)
+               return 0;
+       keyp = (unsigned char *)mpe->reservation_key;
+       for (i = 0; i < 8; i++) {
+               if (i > 0)
+                       prkey <<= 8;
+               prkey |= *keyp;
+               keyp++;
+       }
+
+       return snprintf(buff, len, "0x%" PRIx64, prkey);
 }
 
        static int
@@ -2721,7 +2735,20 @@ snprint_def_wwids_file (char * buff, int len, void * data)
 static int
 snprint_def_reservation_key(char * buff, int len, void * data)
 {
-       return snprintf(buff, len, "%s", conf->reservation_key);
+       int i;
+       unsigned char *keyp;
+       uint64_t prkey = 0;
+
+       if (!conf->reservation_key)
+               return 0;
+       keyp = (unsigned char *)conf->reservation_key;
+       for (i = 0; i < 8; i++) {
+               if (i > 0)
+                       prkey <<= 8;
+               prkey |= *keyp;
+               keyp++;
+       }
+       return snprintf(buff, len, "0x%" PRIx64, prkey);
 }
 
 static int
index 6053b5a..4df37fe 100644 (file)
@@ -947,7 +947,7 @@ cli_getprstatus (void * v, char ** reply, int * len, void * data)
 
 
        sprintf(*reply,"%d",mpp->prflag);
-       *reply[1]='\0';
+       (*reply)[1]='\0';
 
 
        condlog(3, "%s: reply = %s", param, *reply);