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); }
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; }