From 926c6d30f684656dd8074904aad0c4cce60d378d Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Apr 07 2011 20:15:47 +0000 Subject: - add a way to set the default $TMPDIR at compile-time, or using an environment variable --- diff --git a/configure.ac b/configure.ac index 0fe9696..b762f07 100644 --- a/configure.ac +++ b/configure.ac @@ -268,6 +268,20 @@ if test x$withnss != xno ; then LDFLAGS="$savedLDFLAGS" fi +AC_ARG_WITH(tmpdir, +AS_HELP_STRING([--with-tmpdir=NONE],[directory to use for temporary storage]), +mytmpdir=$withval, +mytmpdir=) +mytmpdir=`eval echo $mytmpdir | sed "s,NONE,$prefix,g"` +mytmpdir=`eval echo $mytmpdir | sed "s,NONE,$ac_default_prefix,g"` +mytmpdir=`eval echo $mytmpdir | sed "s,NONE,,g"` +CM_TMPDIR="$mytmpdir" +AC_DEFINE_UNQUOTED(CM_TMPDIR,"$CM_TMPDIR",[Define to the default location to be used for storing temporary files.]) +CM_TMPDIR_ENV="${UPCASE_PACKAGE_NAME}_TMPDIR" +AC_DEFINE_UNQUOTED(CM_TMPDIR_ENV,"${CM_TMPDIR_ENV}",[Define to the default location to be used for storing temporary files.]) +AC_SUBST(CM_TMPDIR) +AC_SUBST(CM_TMPDIR_ENV) + AC_DEFINE_UNQUOTED(CM_DEFAULT_KEY_STORAGE_TYPE,cm_key_storage_nssdb,[Define to the default type of storage used for keys.]) AC_DEFINE_UNQUOTED(CM_DEFAULT_KEY_STORAGE_LOCATION,"/etc/pki/nssdb",[Define to the default location of storage used for keys.]) AC_DEFINE_UNQUOTED(CM_DEFAULT_KEY_TOKEN,NULL,[Define to the default token used for holding keys.]) diff --git a/src/certmonger.8.in b/src/certmonger.8.in index 8f03f4e..aa3dd1d 100644 --- a/src/certmonger.8.in +++ b/src/certmonger.8.in @@ -39,10 +39,15 @@ Store the daemon's process ID in the named file. The set of certificates being monitored or signed is tracked using files stored under \fI@CM_STORE_REQUESTS_DIRECTORY@\fR, or in a directory named by the \fI@CM_STORE_REQUESTS_DIRECTORY_ENV@\fR environment variable. + The set of known CAs is tracked using files stored under \fI@CM_STORE_CAS_DIRECTORY@\fR, or in a directory named by the \fI@CM_STORE_CAS_DIRECTORY_ENV@\fR environment variable. +Temporary files will be stored in "\fI@CM_TMPDIR@\fR", or in the directory +named by the \fI@CM_TMPDIR_ENV@\fR environment variable if that value was +not given at compile time. + .SH BUGS Please file tickets for any that you find at https://fedorahosted.org/certmonger/ diff --git a/src/env-session.c b/src/env-session.c index b3d7837..680f550 100644 --- a/src/env-session.c +++ b/src/env-session.c @@ -18,6 +18,7 @@ #include "config.h" #include +#include #include #include #include @@ -118,6 +119,20 @@ cm_env_ca_dir(void) } char * +cm_env_tmp_dir(void) +{ + char *ret; + ret = getenv(CM_TMPDIR_ENV); + if ((ret == NULL) || (strlen(ret) == 0)) { + ret = getenv("TMPDIR"); + if ((ret == NULL) || (strlen(ret) == 0)) { + ret = _PATH_VARTMP; + } + } + return ret; +} + +char * cm_env_whoami(void) { return "certmonger-session"; diff --git a/src/env-system.c b/src/env-system.c index a22d691..2f9f0c0 100644 --- a/src/env-system.c +++ b/src/env-system.c @@ -17,6 +17,7 @@ #include "config.h" +#include #include #include @@ -62,6 +63,23 @@ cm_env_ca_dir(void) } char * +cm_env_tmp_dir(void) +{ + char *ret; + ret = getenv(CM_TMPDIR_ENV); + if ((ret == NULL) || (strlen(ret) == 0)) { + ret = CM_TMPDIR; + if ((ret == NULL) || (strlen(ret) == 0)) { + ret = getenv("TMPDIR"); + if ((ret == NULL) || (strlen(ret) == 0)) { + ret = _PATH_VARTMP; + } + } + } + return ret; +} + +char * cm_env_whoami(void) { return "certmonger"; diff --git a/src/env.h b/src/env.h index b7ddc0f..4b17fd7 100644 --- a/src/env.h +++ b/src/env.h @@ -23,6 +23,7 @@ char *cm_env_config(const char *subdir, const char *subfile); char *cm_env_lock_file(void); char *cm_env_request_dir(void); char *cm_env_ca_dir(void); +char *cm_env_tmp_dir(void); char *cm_env_whoami(void); enum cm_tdbus_type cm_env_default_bus(void); dbus_bool_t cm_env_default_fork(void); diff --git a/src/main.c b/src/main.c index 98e1180..1ea74b6 100644 --- a/src/main.c +++ b/src/main.c @@ -56,6 +56,7 @@ main(int argc, char **argv) pid_t pid; FILE *pfp; const char *pidfile = NULL; + char *tmpdir; dbus_bool_t dofork; bus = cm_env_default_bus(); @@ -71,7 +72,8 @@ main(int argc, char **argv) } if ((cm_env_config_dir() == NULL) || (cm_env_request_dir() == NULL) || - (cm_env_ca_dir() == NULL)) { + (cm_env_ca_dir() == NULL) || + (cm_env_tmp_dir() == NULL)) { printf("%s: unable to determine storage locations\n", cm_env_whoami()); exit(1); @@ -116,6 +118,17 @@ main(int argc, char **argv) cm_log_set_method(dofork ? cm_log_syslog : cm_log_stderr); cm_log(3, "Starting up.\n"); + tmpdir = malloc(8 + strlen(cm_env_tmp_dir())); + if (tmpdir == NULL) { + fprintf(stderr, "Out of memory.\n"); + exit(1); + } + sprintf(tmpdir, "TMPDIR=%s", cm_env_tmp_dir()); + if (putenv(tmpdir) != 0) { + printf("internal error: %s\n", strerror(errno)); + exit(1); + } + ec = tevent_context_init(NULL); if (ec == NULL) { fprintf(stderr, "Error initializing tevent.\n");