ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
homedir.h File Reference

Temporary GPG homedir management for isolated key operations. More...

Go to the source code of this file.

Typedefs

typedef struct gpg_homedir gpg_homedir_t
 Opaque handle to a temporary GPG homedir.

Functions

gpg_homedir_t * gpg_homedir_create (void)
 Create a temporary GPG homedir for isolated key operations.
const char * gpg_homedir_path (const gpg_homedir_t *homedir)
 Get the homedir path for use in GPG commands.
void gpg_homedir_destroy (gpg_homedir_t *homedir)
 Destroy a temporary GPG homedir and clean up all files.

Detailed Description

Temporary GPG homedir management for isolated key operations.

Provides utilities for creating and managing temporary GPG homedirs to isolate key operations (import, decrypt, sign) without polluting the user's main GPG keyring.

Using a temporary homedir provides:

  • Isolation from user's keys (no risk of deleting wrong keys)
  • Automatic cleanup (just delete the directory)
  • Better error handling and race condition avoidance
  • Cleaner, more maintainable code

Example usage:

if (homedir == NULL) {
return SET_ERRNO(ERROR_CRYPTO_KEY, "Failed to create GPG homedir");
}
// Use homedir.path in gpg commands
char cmd[1024];
snprintf(cmd, sizeof(cmd), "gpg --homedir '%s' --batch --import '%s'",
homedir->path, key_file);
int status = system(cmd);
#define SET_ERRNO(code,...)
@ ERROR_CRYPTO_KEY
Definition error_codes.h:94
void gpg_homedir_destroy(gpg_homedir_t *homedir)
Destroy a temporary GPG homedir and clean up all files.
Definition homedir.c:59
gpg_homedir_t * gpg_homedir_create(void)
Create a temporary GPG homedir for isolated key operations.
Definition homedir.c:24
struct gpg_homedir gpg_homedir_t
Opaque handle to a temporary GPG homedir.
Definition homedir.h:45
char path[4096]
Definition homedir.c:21

Definition in file homedir.h.

Typedef Documentation

◆ gpg_homedir_t

typedef struct gpg_homedir gpg_homedir_t

Opaque handle to a temporary GPG homedir.

Definition at line 45 of file homedir.h.

Function Documentation

◆ gpg_homedir_create()

gpg_homedir_t * gpg_homedir_create ( void )

Create a temporary GPG homedir for isolated key operations.

Creates a new temporary directory configured for GPG use. The directory is isolated from the user's main GPG keyring.

Returns
Pointer to homedir handle on success, NULL on failure Caller must destroy with gpg_homedir_destroy()
Note
The directory is created in the system temp location (TMPDIR, /tmp, etc.)

Definition at line 24 of file homedir.c.

24 {
26 if (!homedir) {
27 log_error("Failed to allocate memory for GPG homedir handle");
28 return NULL;
29 }
30
31 /* Create temporary directory using platform abstraction */
32 if (platform_mkdtemp(homedir->path, sizeof(homedir->path), "ascii-chat-gpg") != 0) {
33 log_error("Failed to create temporary GPG homedir");
34 return NULL;
35 }
36
37 defer_named(temp_directory, platform_rmdir_recursive(homedir->path));
38
39 /* Restrict permissions to owner only (mode 0700) using platform abstraction */
40 if (platform_chmod(homedir->path, 0700) != 0) {
41 log_warn("Failed to set permissions on GPG homedir, attempting cleanup");
42 return NULL;
43 }
44
45 log_debug("Created temporary GPG homedir: %s", homedir->path);
46 defer_cancel(temp_directory);
47 gpg_homedir_t *result = homedir;
48 homedir = NULL;
49 return result;
50}
#define SAFE_MALLOC_DEFER_FREE(name, size, cast)
Definition common.h:386
#define log_warn(...)
Log a WARN message.
Definition log/log.h:621
#define log_error(...)
Log an ERROR message.
Definition log/log.h:634
#define log_debug(...)
Log a DEBUG message.
Definition log/log.h:595

References log_debug, log_error, log_warn, and SAFE_MALLOC_DEFER_FREE.

◆ gpg_homedir_destroy()

void gpg_homedir_destroy ( gpg_homedir_t * homedir)

Destroy a temporary GPG homedir and clean up all files.

Recursively deletes the temporary directory and all its contents. Safe to call on NULL pointer (no-op).

Parameters
homedirHandle from gpg_homedir_create() (can be NULL)

Definition at line 59 of file homedir.c.

59 {
60 if (!homedir) {
61 return;
62 }
63
64 /* Recursively delete the entire directory and all contents using platform abstraction */
65 if (platform_rmdir_recursive(homedir->path) != 0) {
66 log_warn("Failed to completely clean up GPG homedir: %s", homedir->path);
67 } else {
68 log_debug("Cleaned up temporary GPG homedir: %s", homedir->path);
69 }
70
71 SAFE_FREE(homedir);
72}
#define SAFE_FREE(ptr)
Definition common.h:377

References log_debug, log_warn, gpg_homedir::path, and SAFE_FREE.

◆ gpg_homedir_path()

const char * gpg_homedir_path ( const gpg_homedir_t * homedir)

Get the homedir path for use in GPG commands.

Returns the filesystem path of the temporary homedir. This path should be used with gpg's –homedir flag.

Parameters
homedirHandle from gpg_homedir_create()
Returns
Pointer to path string (valid until gpg_homedir_destroy() is called) Returns NULL if homedir is invalid

Definition at line 52 of file homedir.c.

52 {
53 if (!homedir) {
54 return NULL;
55 }
56 return homedir->path;
57}

References gpg_homedir::path.