示例#1
0
void clean_keyfile(int number)
{
   char path[MAX_PATH_LEN+1];
   get_keyfile_path(path, sizeof(path), number);
   unlink(path);
   debug_printf("Cleaned keyfile %s\n", path);
}
示例#2
0
void create_keyfile(int number)
{
   char path[MAX_PATH_LEN+1];
   int key_fd, result;
   int bytes_written;
   char *last_slash;
   struct stat buf;
   unsigned char key[KEY_SIZE_BYTES];

   create_key(key, sizeof(key));
   
   get_keyfile_path(path, sizeof(path), number);
   
   last_slash = strrchr(path, '/');
   *last_slash = '\0';
   if (stat(path, &buf) == -1 && errno == ENOENT) {
      debug_printf("Creating directory for keyfile: %s\n", path);
      result = mkdir(path, 0700);
      if (result == -1) {
         fprintf(stderr, "Failed to create directory for spindle key: %s\n", path);
         exit(-1);
      }
   }
   *last_slash = '/';

   debug_printf("Creating keyfile at %s\n", path);
   key_fd = open(path, O_CREAT|O_EXCL|O_WRONLY, 0600);
   if (key_fd == -1) {
      fprintf(stderr, "Failed to create security keyfile %s: %s\n", path, strerror(errno));
      exit(-1);
   }

   bytes_written = 0;
   do {
      result = write(key_fd, key + bytes_written, sizeof(key) - bytes_written);
      if (result == -1 && errno == EINTR)
         continue;
      if (result <= 0) {
         fprintf(stderr, "Failed to write key to %s: %s\n", path, strerror(errno));
         close(key_fd);
         clean_keyfile(number);
         exit(-1);
      }
      bytes_written += result;
   } while (bytes_written < sizeof(key));
   
   result = close(key_fd);
   if (result == -1) {
      clean_keyfile(number);
      fprintf(stderr, "Failed to close key file %s: %s\n", path, strerror(errno));
      exit(-1);
   }

   debug_printf("Finished creating keyfile\n");
}
void
nautilus_desktop_set_metadata_stringv (NautilusFile *file,
                                       const char *name,
                                       const char *key,
                                       const char * const *stringv)
{
	gchar *keyfile_filename;

	keyfile_filename = get_keyfile_path ();

	nautilus_keyfile_metadata_set_stringv (file, keyfile_filename,
	                                       name, key, stringv);

	g_free (keyfile_filename);
}
gboolean
nautilus_desktop_update_metadata_from_keyfile (NautilusFile *file,
					       const gchar *name)
{
	gchar *keyfile_filename;
	gboolean result;

	keyfile_filename = get_keyfile_path ();

	result = nautilus_keyfile_metadata_update_from_keyfile (file,
	                                                        keyfile_filename,
	                                                        name);

	g_free (keyfile_filename);
	return result;
}