summaryrefslogtreecommitdiffstats
path: root/pki/base/tps
diff options
context:
space:
mode:
authorvakwetu <vakwetu@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-10-01 04:54:26 +0000
committervakwetu <vakwetu@c9f7a03b-bd48-0410-a16d-cbbf54688b0b>2010-10-01 04:54:26 +0000
commitaf1b75a4cef58c147915b61688850cbdc439ec0d (patch)
tree8594b17d1cb968942b0c977ca658422ba04e0fdb /pki/base/tps
parentdada0e735e718f2c4f69566045ec7b8b75d4a969 (diff)
downloadpki-af1b75a4cef58c147915b61688850cbdc439ec0d.tar.gz
pki-af1b75a4cef58c147915b61688850cbdc439ec0d.tar.xz
pki-af1b75a4cef58c147915b61688850cbdc439ec0d.zip
Bugzilla Bug 637824 - TPS UI: Profile state in CS.cfg is Pending Approval after agent approve and Enable
git-svn-id: svn+ssh://svn.fedorahosted.org/svn/pki/trunk@1327 c9f7a03b-bd48-0410-a16d-cbbf54688b0b
Diffstat (limited to 'pki/base/tps')
-rw-r--r--pki/base/tps/src/engine/RA.cpp17
-rw-r--r--pki/base/tps/src/include/main/ConfigStore.h2
-rw-r--r--pki/base/tps/src/main/ConfigStore.cpp31
-rw-r--r--pki/base/tps/src/main/RA_pblock.cpp2
-rw-r--r--pki/base/tps/src/modules/tokendb/mod_tokendb.cpp45
-rw-r--r--pki/base/tps/src/processor/RA_Enroll_Processor.cpp4
-rw-r--r--pki/base/tps/src/processor/RA_Processor.cpp2
7 files changed, 87 insertions, 16 deletions
diff --git a/pki/base/tps/src/engine/RA.cpp b/pki/base/tps/src/engine/RA.cpp
index 50910c438..8d9e335fa 100644
--- a/pki/base/tps/src/engine/RA.cpp
+++ b/pki/base/tps/src/engine/RA.cpp
@@ -2102,6 +2102,9 @@ loser:
TPS_PUBLIC void RA::SetFlushInterval(int interval)
{
char interval_str[512];
+ int status;
+ char error_msg[512];
+
RA::Debug("RA::SetFlushInterval", "Setting flush interval to %d seconds", interval);
m_flush_interval = interval;
@@ -2114,13 +2117,19 @@ TPS_PUBLIC void RA::SetFlushInterval(int interval)
PR_snprintf((char *) interval_str, 512, "%d", interval);
m_cfg->Add(CFG_AUDIT_FLUSH_INTERVAL, interval_str);
- m_cfg->Commit(false);
+ status = m_cfg->Commit(false, error_msg, 512);
+ if (status != 0) {
+ RA::Debug("RA:SetFlushInterval", error_msg);
+ }
}
TPS_PUBLIC void RA::SetBufferSize(int size)
{
char * new_buffer;
char size_str[512];
+ int status;
+ char error_msg[512];
+
RA::Debug("RA::SetBufferSize", "Setting buffer size to %d bytes", size);
PR_EnterMonitor(m_audit_log_monitor);
@@ -2136,7 +2145,11 @@ TPS_PUBLIC void RA::SetBufferSize(int size)
PR_snprintf((char *) size_str, 512, "%d", size);
m_cfg->Add(CFG_AUDIT_BUFFER_SIZE, size_str);
- m_cfg->Commit(false);
+
+ status = m_cfg->Commit(false, error_msg, 512);
+ if (status != 0) {
+ RA::Debug("RA:SetFlushInterval", error_msg);
+ }
}
diff --git a/pki/base/tps/src/include/main/ConfigStore.h b/pki/base/tps/src/include/main/ConfigStore.h
index 429122fbf..d34e0ce7b 100644
--- a/pki/base/tps/src/include/main/ConfigStore.h
+++ b/pki/base/tps/src/include/main/ConfigStore.h
@@ -85,7 +85,7 @@ class ConfigStore
bool GetConfigAsBool(const char *key);
TPS_PUBLIC bool GetConfigAsBool(const char *key, bool def);
TOKENDB_PUBLIC const char *GetConfigAsString(const char *key, const char *def);
- TPS_PUBLIC int Commit(const bool backup);
+ TPS_PUBLIC int Commit(const bool backup, char* error_msg, int len);
TPS_PUBLIC const char *GetConfigAsString(const char *key);
TPS_PUBLIC const char *GetOrderedList();
/**
diff --git a/pki/base/tps/src/main/ConfigStore.cpp b/pki/base/tps/src/main/ConfigStore.cpp
index fb422a0b5..e526b4039 100644
--- a/pki/base/tps/src/main/ConfigStore.cpp
+++ b/pki/base/tps/src/main/ConfigStore.cpp
@@ -741,16 +741,19 @@ TPS_PUBLIC const char* ConfigStore::GetOrderedList()
/**
* Commits changes to the config file
*/
-TPS_PUBLIC int ConfigStore::Commit(const bool backup)
+TPS_PUBLIC int ConfigStore::Commit(const bool backup, char *error_msg, int len)
{
char name_tmp[256], cdate[256], name_bak[256], bak_dir[256];
char basename[256], dirname[256];
PRFileDesc *ftmp = NULL;
PRExplodedTime time;
PRTime now;
+ PRStatus status;
- if (m_cfg_file_path == NULL)
+ if (m_cfg_file_path == NULL) {
+ PR_snprintf(error_msg, len, "ConfigStore::Commit(): m_cfg_file_path is NULL!");
return 1;
+ }
if (strrchr(m_cfg_file_path, '/') != NULL) {
PR_snprintf((char *) basename, 256, "%s", strrchr(m_cfg_file_path, '/') +1);
@@ -773,6 +776,7 @@ TPS_PUBLIC int ConfigStore::Commit(const bool backup)
ftmp = PR_Open(name_tmp, PR_WRONLY| PR_CREATE_FILE, 00400|00200);
if (ftmp == NULL) {
// unable to create temporary config file
+ PR_snprintf(error_msg, len, "ConfigStore::Commit(): unable to create temporary config file");
return 1;
}
@@ -812,9 +816,28 @@ TPS_PUBLIC int ConfigStore::Commit(const bool backup)
if (PR_Access(bak_dir, PR_ACCESS_EXISTS) != PR_SUCCESS) {
PR_MkDir(bak_dir, 00770);
}
- PR_Rename(m_cfg_file_path, name_bak);
+ status = PR_Rename(m_cfg_file_path, name_bak);
+ if (status != PR_SUCCESS) {
+ // failed to back up CS.cfg
+ }
+ }
+ if (PR_Access(m_cfg_file_path, PR_ACCESS_EXISTS) == PR_SUCCESS) {
+ // backup is false, or backup failed
+ status = PR_Delete(m_cfg_file_path);
+ if (status != PR_SUCCESS) {
+ // failed to delete old CS.cfg file
+ PR_snprintf(error_msg, len, "ConfigStore::Commit(): unable to delete old CS.cfg file");
+ return 1;
+ }
+ }
+
+ status = PR_Rename(name_tmp, m_cfg_file_path);
+ if (status != PR_SUCCESS) {
+ // failed to move tmp to CS.cfg
+ // major badness - we now have only tmp file, no CS.cfg
+ PR_snprintf(error_msg, len, "ConfigStore::Commit(): failed to move tmp file to CS.cfg");
+ return 1;
}
- PR_Rename(name_tmp, m_cfg_file_path);
return 0;
}
diff --git a/pki/base/tps/src/main/RA_pblock.cpp b/pki/base/tps/src/main/RA_pblock.cpp
index bea84363a..e59e4c7f1 100644
--- a/pki/base/tps/src/main/RA_pblock.cpp
+++ b/pki/base/tps/src/main/RA_pblock.cpp
@@ -156,7 +156,7 @@ void RA_pblock::free_pblock()
}
if( m_nvs[i]->value_s ) {
- delete( m_nvs[i]->value_s );
+ PL_strfree( m_nvs[i]->value_s );
m_nvs[i]->value_s = NULL;
}
diff --git a/pki/base/tps/src/modules/tokendb/mod_tokendb.cpp b/pki/base/tps/src/modules/tokendb/mod_tokendb.cpp
index 28c56bd33..30d87a2ae 100644
--- a/pki/base/tps/src/modules/tokendb/mod_tokendb.cpp
+++ b/pki/base/tps/src/modules/tokendb/mod_tokendb.cpp
@@ -2824,6 +2824,7 @@ void get_config_state_timestamp(char *type, char *name, char **pstate, char **pt
bool commit_needed = false;
const char *tmp_state = NULL;
const char *tmp_timestamp = NULL;
+ int status;
PRLock *config_lock = RA::GetConfigLock();
PR_Lock(config_lock);
@@ -2852,7 +2853,11 @@ void get_config_state_timestamp(char *type, char *name, char **pstate, char **pt
PR_Unlock(config_lock);
if (commit_needed) {
- RA::GetConfigStore()->Commit(false);
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(false, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
}
}
@@ -4962,7 +4967,11 @@ mod_tokendb_handler( request_rec *rq )
remove_config_state_timestamp(ptype, pname);
tokendbDebug("Committing delete ..");
- RA::GetConfigStore()->Commit(true);
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(true, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
PR_snprintf(oString, 512, "%s", pname);
PR_snprintf(pLongString, 4096, "%s;;%s", configname, new_value);
@@ -5126,6 +5135,12 @@ mod_tokendb_handler( request_rec *rq )
goto agent_change_config_state_cleanup;
}
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(false, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
+
PR_snprintf( injection, MAX_INJECTION_SIZE,
"%s%s%s%s%s%s%s%s%s%s%s%s%s%s", JS_START,
"var uriBase = \"", uri, "\";\n",
@@ -5559,6 +5574,12 @@ mod_tokendb_handler( request_rec *rq )
return_done=1;
goto confirm_config_changes_cleanup;
}
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(false, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
+
PR_snprintf(flash, 512, "Configuration Parameters have been submitted for Agent Approval");
} else {
PR_snprintf(flash, 512, "The data displayed is up-to-date. No changes need to be saved.");
@@ -5708,8 +5729,20 @@ mod_tokendb_handler( request_rec *rq )
}
if ((PL_strlen(added_str) != 0) || (PL_strlen(deleted_str) != 0) || (PL_strlen(changed_str) != 0)) {
- RA::GetConfigStore()->Commit(true);
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(true, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
+
RA::Audit(EV_CONFIG, AUDIT_MSG_CONFIG, userid, "Admin", "Success", "", "", "config changes committed to filesystem");
+ } else {
+ // commit state changes
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(false, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
}
PR_snprintf( injection, MAX_INJECTION_SIZE,
@@ -7229,7 +7262,11 @@ mod_tokendb_handler( request_rec *rq )
if (need_update == 1) {
tokendbDebug("Updating signed audit events in CS.cfg");
- RA::GetConfigStore()->Commit(true);
+ char error_msg[512];
+ status = RA::GetConfigStore()->Commit(true, error_msg, 512);
+ if (status != 0) {
+ tokendbDebug(error_msg);
+ }
}
PR_snprintf(injection, MAX_INJECTION_SIZE,
diff --git a/pki/base/tps/src/processor/RA_Enroll_Processor.cpp b/pki/base/tps/src/processor/RA_Enroll_Processor.cpp
index fc03c0bcf..66e724718 100644
--- a/pki/base/tps/src/processor/RA_Enroll_Processor.cpp
+++ b/pki/base/tps/src/processor/RA_Enroll_Processor.cpp
@@ -1176,9 +1176,7 @@ bool RA_Enroll_Processor::CheckAndUpgradeApplet(
PR_snprintf((char *)configname, 256, "%s.%s.update.applet.enable", OP_PREFIX, a_tokenType);
if (RA::GetConfigStore()->GetConfigAsBool(configname, 0)) {
PR_snprintf((char *)configname, 256, "%s.%s.update.applet.requiredVersion", OP_PREFIX, a_tokenType);
- if (g_applet_target_version == NULL) {
- g_applet_target_version = RA::GetConfigStore()->GetConfigAsString(configname);
- }
+ g_applet_target_version = RA::GetConfigStore()->GetConfigAsString(configname);
if (g_applet_target_version == NULL) {
RA::Error(FN, "upgrade.version not found");
o_status = STATUS_ERROR_MISCONFIGURATION;
diff --git a/pki/base/tps/src/processor/RA_Processor.cpp b/pki/base/tps/src/processor/RA_Processor.cpp
index 98f2b5371..3daa252ee 100644
--- a/pki/base/tps/src/processor/RA_Processor.cpp
+++ b/pki/base/tps/src/processor/RA_Processor.cpp
@@ -2415,7 +2415,7 @@ int RA_Processor::ComputeRandomData(Buffer &data_out, int dataSize, const char
if(dstr) {
data_out = *decodedRandomData;
- delete dstr;
+ delete [] dstr;
dstr = NULL;
}
if(decodedRandomData) {