Comment changes.
[gnupg.git] / g10 / misc.c
index a9d4f05..8cc63ba 100644 (file)
@@ -1,6 +1,6 @@
 /* misc.c - miscellaneous functions
  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- *               2008 Free Software Foundation, Inc.
+ *               2008, 2009 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -121,7 +121,9 @@ register_secured_file (const char *fname)
   sf->dev = buf.st_dev;
   sf->next = secured_files;
   secured_files = sf;
-#endif /*ENABLE_SELINUX_HACKS*/
+#else /*!ENABLE_SELINUX_HACKS*/
+  (void)fname;
+#endif /*!ENABLE_SELINUX_HACKS*/
 }
 
 /* Remove a file registered as secure. */
@@ -152,7 +154,9 @@ unregister_secured_file (const char *fname)
           return;
         }
     }
-#endif /*ENABLE_SELINUX_HACKS*/
+#else /*!ENABLE_SELINUX_HACKS*/
+  (void)fname;
+#endif /*!ENABLE_SELINUX_HACKS*/
 }
 
 /* Return true if FD is corresponds to a secured file.  Using -1 for
@@ -182,7 +186,9 @@ is_secured_file (int fd)
       if (sf->ino == buf.st_ino && sf->dev == buf.st_dev)
         return 1; /* Yes.  */
     }
-#endif /*ENABLE_SELINUX_HACKS*/
+#else /*!ENABLE_SELINUX_HACKS*/
+  (void)fd;
+#endif /*!ENABLE_SELINUX_HACKS*/
   return 0; /* No. */
 }
 
@@ -217,7 +223,9 @@ is_secured_filename (const char *fname)
       if (sf->ino == buf.st_ino && sf->dev == buf.st_dev)
         return 1; /* Yes.  */
     }
-#endif /*ENABLE_SELINUX_HACKS*/
+#else /*!ENABLE_SELINUX_HACKS*/
+  (void)fname;
+#endif /*!ENABLE_SELINUX_HACKS*/
   return 0; /* No. */
 }
 
@@ -332,7 +340,7 @@ print_digest_algo_note( int algo )
 /* Map OpenPGP algo numbers to those used by Libgcrypt.  We need to do
    this for algorithms we implemented in Libgcrypt after they become
    part of OpenPGP.  */
-static int
+int
 map_cipher_openpgp_to_gcry (int algo)
 {
   switch (algo)
@@ -392,15 +400,6 @@ openpgp_cipher_test_algo( int algo )
   if ( algo < 0 || algo > 110 || algo == 5 || algo == 6 )
     return gpg_error (GPG_ERR_CIPHER_ALGO);
 
-  /* Camellia is not yet defined for OpenPGP thus only allow it if
-     requested.  */
-#ifndef USE_CAMELLIA
-  if (algo == CIPHER_ALGO_CAMELLIA128 
-      || algo == CIPHER_ALGO_CAMELLIA192
-      || algo == CIPHER_ALGO_CAMELLIA256)
-    return gpg_error (GPG_ERR_CIPHER_ALGO);
-#endif
-
   return gcry_cipher_test_algo (map_cipher_openpgp_to_gcry (algo));
 }
 
@@ -1207,39 +1206,16 @@ parse_options(char *str,unsigned int *options,
 }
 
 
-/* Return a new malloced string by unescaping the string S.  Escaping
-   is percent escaping and '+'/space mapping.  A binary nul will
-   silently be replaced by a 0xFF. */
-char *
-unescape_percent_string (const unsigned char *s)
-{
-  char *buffer, *d;
-
-  buffer = d = xmalloc (strlen (s)+1);
-  while (*s)
-    {
-      if (*s == '%' && s[1] && s[2])
-        { 
-          s++;
-          *d = xtoi_2 (s);
-          if (!*d)
-            *d = '\xff';
-          d++;
-          s += 2;
-        }
-      else if (*s == '+')
-        {
-          *d++ = ' ';
-          s++;
-        }
-      else
-        *d++ = *s++;
-    }
-  *d = 0; 
-  return buffer;
-}
-
-
+/* Check whether the string has characters not valid in an RFC-822
+   address.  To cope with OpenPGP we ignore non-ascii characters
+   so that for example umlauts are legal in an email address.  An
+   OpenPGP user ID must be utf-8 encoded but there is no strict
+   requirement for RFC-822.  Thus to avoid IDNA encoding we put the
+   address verbatim as utf-8 into the user ID under the assumption
+   that mail programs handle IDNA at a lower level and take OpenPGP
+   user IDs as utf-8.  Note that we can't do an utf-8 encoding
+   checking here because in keygen.c this function is called with the
+   native encoding and native to utf-8 encoding is only done  later.  */
 int
 has_invalid_email_chars (const char *s)
 {
@@ -1249,8 +1225,8 @@ has_invalid_email_chars (const char *s)
 
   for ( ; *s; s++ ) 
     {
-      if ( *s & 0x80 )
-        return 1;
+      if ( (*s & 0x80) )
+        continue; /* We only care about ASCII.  */
       if ( *s == '@' )
         at_seen=1;
       else if ( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) )