示例#1
0
文件: homedir.c 项目: codebam/gnupg
/* Set up the default home directory.  The usual --homedir option
   should be parsed later. */
const char *
default_homedir (void)
{
  const char *dir;

#ifdef HAVE_W32_SYSTEM
  /* For a portable application we only use the standard homedir.  */
  w32_rootdir ();
  if (w32_portable_app)
    return standard_homedir ();
#endif /*HAVE_W32_SYSTEM*/

  dir = getenv ("GNUPGHOME");
#ifdef HAVE_W32_SYSTEM
  if (!dir || !*dir)
    {
      static const char *saved_dir;

      if (!saved_dir)
        {
          if (!dir || !*dir)
            {
              char *tmp;

              tmp = read_w32_registry_string (NULL,
                                              GNUPG_REGISTRY_DIR,
                                              "HomeDir");
              if (tmp && !*tmp)
                {
                  xfree (tmp);
                  tmp = NULL;
                }
              if (tmp)
                saved_dir = tmp;
            }

          if (!saved_dir)
            saved_dir = standard_homedir ();
        }
      dir = saved_dir;
    }
#endif /*HAVE_W32_SYSTEM*/
  if (!dir || !*dir)
    dir = GNUPG_DEFAULT_HOMEDIR;
  else if (!is_gnupg_default_homedir (dir))
    non_default_homedir = 1;

  return dir;
}
示例#2
0
文件: keydb.c 项目: Distrotech/gnupg
static void
try_make_homedir (const char *fname)
{
  const char *defhome = standard_homedir ();

  /* Create the directory only if the supplied directory name is the
     same as the default one.  This way we avoid to create arbitrary
     directories when a non-default home directory is used.  To cope
     with HOME, we do compare only the suffix if we see that the
     default homedir does start with a tilde.  */
  if ( opt.dry_run || opt.no_homedir_creation )
    return;

  if (
#ifdef HAVE_W32_SYSTEM
      ( !compare_filenames (fname, defhome) )
#else
      ( *defhome == '~'
        && (strlen(fname) >= strlen (defhome+1)
            && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
      || (*defhome != '~'  && !compare_filenames( fname, defhome ) )
#endif
      )
    {
      if (gnupg_mkdir (fname, "-rwx"))
        log_info (_("can't create directory '%s': %s\n"),
                  fname, strerror(errno) );
      else if (!opt.quiet )
        log_info (_("directory '%s' created\n"), fname);
    }
}
示例#3
0
文件: openfile.c 项目: 0ndorio/gnupg
void
try_make_homedir (const char *fname)
{
  const char *defhome = standard_homedir ();

  /* Create the directory only if the supplied directory name is the
     same as the default one.  This way we avoid to create arbitrary
     directories when a non-default home directory is used.  To cope
     with HOME, we do compare only the suffix if we see that the
     default homedir does start with a tilde.  */
  if ( opt.dry_run || opt.no_homedir_creation )
    return;

  if (
#ifdef HAVE_W32_SYSTEM
      ( !compare_filenames (fname, defhome) )
#else
      ( *defhome == '~'
        && (strlen(fname) >= strlen (defhome+1)
            && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
      || (*defhome != '~'  && !compare_filenames( fname, defhome ) )
#endif
      )
    {
      if (gnupg_mkdir (fname, "-rwx"))
        log_fatal ( _("can't create directory '%s': %s\n"),
                    fname, strerror(errno) );
      else if (!opt.quiet )
        log_info ( _("directory '%s' created\n"), fname );

      /* Note that we also copy a dirmngr.conf file here.  This is
         because gpg is likely the first invoked tool and thus creates
         the directory.  */
      copy_options_file (fname, DIRMNGR_NAME);
      if (copy_options_file (fname, GPG_NAME))
        log_info (_("WARNING: options in '%s'"
                    " are not yet active during this run\n"),
                  fname);
    }
}
示例#4
0
文件: homedir.c 项目: FMayzek/gnupg
/* Set up the default home directory.  The usual --homedir option
   should be parsed later. */
const char *
default_homedir (void)
{
  const char *dir;

  dir = getenv ("GNUPGHOME");
#ifdef HAVE_W32_SYSTEM
  if (!dir || !*dir)
    {
      static const char *saved_dir;

      if (!saved_dir)
        {
          if (!dir || !*dir)
            {
              char *tmp;

              tmp = read_w32_registry_string (NULL, "Software\\GNU\\GnuPG",
                                              "HomeDir");
              if (tmp && !*tmp)
                {
                  xfree (tmp);
                  tmp = NULL;
                }
              if (tmp)
                saved_dir = tmp;
            }

          if (!saved_dir)
            saved_dir = standard_homedir ();
        }
      dir = saved_dir;
    }
#endif /*HAVE_W32_SYSTEM*/
  if (!dir || !*dir)
    dir = GNUPG_DEFAULT_HOMEDIR;

  return dir;
}