tools/xenstored: add helpers for filename handling

Add some helpers for handling filenames which might need different
implementations between stubdom and daemon environments:

- expansion of relative filenames (those are not really defined today,
  just expand them to be relative to /var/lib/xen/xenstore)
- expansion of xenstore_daemon_rundir() (used e.g. for saving the state
  file in case of live update - needs to be unchanged in the daemon
  case, but should result in /var/lib/xen/xenstore for stubdom)

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jason Andryuk <jandryuk@gmail.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
Juergen Gross authored and Andrew Cooper committed 2024-02-23 17:43:06 +00:00
1 parent 297a2587e6
commit 93892648ff
5 files changed
+31 -6

No files matched your search

+13 -2
View File
@@ -63,7 +63,7 @@ char **orig_argv;
LIST_HEAD(connections);
int tracefd = -1;
bool keep_orphans = false;
char *tracefile = NULL;
const char *tracefile = NULL;
static struct hashtable *nodes;
unsigned int trace_flags = TRACE_OBJ | TRACE_IO;
@@ -137,6 +137,17 @@ void trace_destroy(const void *data, const char *type)
trace("obj: DESTROY %s %p\n", type, data);
}
/*
* Return an absolute filename.
* In case of a relative filename given as input, prepend XENSTORE_LIB_DIR.
*/
const char *absolute_filename(const void *ctx, const char *filename)
{
if (filename[0] != '/')
return talloc_asprintf(ctx, XENSTORE_LIB_DIR "/%s", filename);
return talloc_strdup(ctx, filename);
}
void close_log(void)
{
if (tracefd >= 0)
@@ -2759,7 +2770,7 @@ int main(int argc, char *argv[])
#endif
if (tracefile)
tracefile = talloc_strdup(NULL, tracefile);
tracefile = absolute_filename(NULL, tracefile);
#ifndef NO_LIVE_UPDATE
/* Read state in case of live update. */
+4 -1
View File
@@ -341,7 +341,7 @@ void close_log(void);
extern int orig_argc;
extern char **orig_argv;
extern char *tracefile;
extern const char *tracefile;
extern int tracefd;
/* Trace flag values must be kept in sync with trace_switches[] contents. */
@@ -405,6 +405,9 @@ void set_socket_fd(int fd);
void mount_9pfs(void);
#endif
const char *xenstore_rundir(void);
const char *absolute_filename(const void *ctx, const char *filename);
/* Close stdin/stdout/stderr to complete daemonize */
void finish_daemonize(void);
+2 -2
View File
@@ -24,7 +24,7 @@ void lu_get_dump_state(struct lu_dump_state *state)
state->size = 0;
state->filename = talloc_asprintf(NULL, "%s/state_dump",
xenstore_daemon_rundir());
xenstore_rundir());
if (!state->filename)
barf("Allocation failure");
@@ -65,7 +65,7 @@ FILE *lu_dump_open(const void *ctx)
int fd;
filename = talloc_asprintf(ctx, "%s/state_dump",
xenstore_daemon_rundir());
xenstore_rundir());
if (!filename)
return NULL;
+5
View File
@@ -128,3 +128,8 @@ void mount_9pfs(void)
{
create_thread("mount-9pfs", mount_thread, NULL);
}
const char *xenstore_rundir(void)
{
return XENSTORE_LIB_DIR;
}
+7 -1
View File
@@ -326,9 +326,10 @@ void early_init(bool live_update, bool dofork, const char *pidfile)
{
reopen_log();
/* Make sure xenstored directory exists. */
/* Make sure xenstored directories exist. */
/* Errors ignored here, will be reported when we open files */
mkdir(xenstore_daemon_rundir(), 0755);
mkdir(XENSTORE_LIB_DIR, 0755);
if (dofork) {
openlog("xenstored", 0, LOG_DAEMON);
@@ -406,3 +407,8 @@ void set_socket_fd(int fd)
{
sock = fd;
}
const char *xenstore_rundir(void)
{
return xenstore_daemon_rundir();
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.