identification: parse identities having a "@@" prefix as ID_RFC822_ADDR
authorMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 14:45:10 +0000 (16:45 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 14:45:10 +0000 (16:45 +0200)
Original patch by Gerald Richter.

src/libstrongswan/utils/identification.c

index 06ec533..5df3e5f 100644 (file)
@@ -1000,23 +1000,23 @@ identification_t *identification_create_from_string(char *string)
        {
                if (*string == '@')
                {
-                       if (*(string + 1) == '#')
+                       string++;
+                       if (*string == '#')
                        {
                                this = identification_create(ID_KEY_ID);
-                               string += 2;
-                               this->encoded = chunk_from_hex(
-                                                                       chunk_create(string, strlen(string)), NULL);
+                               this->encoded = chunk_from_hex(chunk_from_str(string + 1), NULL);
+                               return &this->public;
+                       }
+                       else if (*string == '@')
+                       {
+                               this = identification_create(ID_USER_FQDN);
+                               this->encoded = chunk_clone(chunk_from_str(string + 1));
                                return &this->public;
                        }
                        else
                        {
                                this = identification_create(ID_FQDN);
-                               string += 1;
-                               this->encoded.len = strlen(string);
-                               if (this->encoded.len)
-                               {       /* if we only got an @ */
-                                       this->encoded.ptr = strdup(string);
-                               }
+                               this->encoded = chunk_clone(chunk_from_str(string));
                                return &this->public;
                        }
                }
@@ -1093,4 +1093,3 @@ identification_t *identification_create_from_sockaddr(sockaddr_t *sockaddr)
                }
        }
 }
-