mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-07 00:01:49 -04:00
sw-collector: strip arch suffix from package names
This commit is contained in:
parent
5b1dbc3a8d
commit
cab4cc3a10
@ -518,7 +518,7 @@ static int migrate(sw_collector_info_t *info, sw_collector_db_t *db)
|
|||||||
sw_collector_dpkg_t *dpkg;
|
sw_collector_dpkg_t *dpkg;
|
||||||
|
|
||||||
char *package, *arch, *version;
|
char *package, *arch, *version;
|
||||||
char package_arch[BUF_LEN];
|
char package_filter[BUF_LEN];
|
||||||
int res, count = 0;
|
int res, count = 0;
|
||||||
int status = EXIT_SUCCESS;
|
int status = EXIT_SUCCESS;
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
@ -532,15 +532,11 @@ static int migrate(sw_collector_info_t *info, sw_collector_db_t *db)
|
|||||||
enumerator = dpkg->create_sw_enumerator(dpkg);
|
enumerator = dpkg->create_sw_enumerator(dpkg);
|
||||||
while (enumerator->enumerate(enumerator, &package, &arch, &version))
|
while (enumerator->enumerate(enumerator, &package, &arch, &version))
|
||||||
{
|
{
|
||||||
if (streq(arch, "all"))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Concatenate package and architecture strings */
|
/* Look for package names with architecture suffix */
|
||||||
snprintf(package_arch, BUF_LEN, "%s:%s", package, arch);
|
snprintf(package_filter, BUF_LEN, "%s:%%", package);
|
||||||
|
|
||||||
res = db->update_package(db, package, package_arch);
|
res = db->update_package(db, package_filter, package);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
{
|
{
|
||||||
status = EXIT_FAILURE;
|
status = EXIT_FAILURE;
|
||||||
@ -549,7 +545,7 @@ static int migrate(sw_collector_info_t *info, sw_collector_db_t *db)
|
|||||||
else if (res > 0)
|
else if (res > 0)
|
||||||
{
|
{
|
||||||
count += res;
|
count += res;
|
||||||
DBG2(DBG_IMC, "replaced '%s' by '%s'", package, package_arch);
|
DBG2(DBG_IMC, "%s: removed arch suffix %d times", package, res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
|
@ -231,13 +231,13 @@ METHOD(sw_collector_db_t, update_sw_id, bool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
METHOD(sw_collector_db_t, update_package, int,
|
METHOD(sw_collector_db_t, update_package, int,
|
||||||
private_sw_collector_db_t *this, char *package, char *package_new)
|
private_sw_collector_db_t *this, char *package_filter, char *package)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
count = this->db->execute(this->db, NULL,
|
count = this->db->execute(this->db, NULL,
|
||||||
"UPDATE sw_identifiers SET package = ? "
|
"UPDATE sw_identifiers SET package = ? WHERE package LIKE ?",
|
||||||
"WHERE package = ?", DB_TEXT, package_new, DB_TEXT, package);
|
DB_TEXT, package, DB_TEXT, package_filter);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
{
|
{
|
||||||
DBG1(DBG_IMC, "unable to update package name in database");
|
DBG1(DBG_IMC, "unable to update package name in database");
|
||||||
|
@ -120,12 +120,12 @@ struct sw_collector_db_t {
|
|||||||
/**
|
/**
|
||||||
* Update the package name
|
* Update the package name
|
||||||
*
|
*
|
||||||
* @param package Package name to be changed
|
* @param package_filter Package name[s] to be changed
|
||||||
* @param package_new New package name
|
* @param package New package name
|
||||||
* @return TRUE if update successful
|
* @return TRUE if update successful
|
||||||
*/
|
*/
|
||||||
int (*update_package)(sw_collector_db_t *this, char *package,
|
int (*update_package)(sw_collector_db_t *this, char *package_filter,
|
||||||
char *package_new);
|
char *package);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enumerate over all collected [installed] software identities
|
* Enumerate over all collected [installed] software identities
|
||||||
|
@ -110,7 +110,7 @@ static void free_package(package_t *this)
|
|||||||
static package_t* extract_package(chunk_t item, sw_collector_info_t *info,
|
static package_t* extract_package(chunk_t item, sw_collector_info_t *info,
|
||||||
sw_collector_history_op_t op)
|
sw_collector_history_op_t op)
|
||||||
{
|
{
|
||||||
chunk_t package, version, old_version;
|
chunk_t package, package_stripped, version, old_version;
|
||||||
package_t *p;
|
package_t *p;
|
||||||
|
|
||||||
/* extract package name */
|
/* extract package name */
|
||||||
@ -121,6 +121,12 @@ static package_t* extract_package(chunk_t item, sw_collector_info_t *info,
|
|||||||
}
|
}
|
||||||
item = chunk_skip(item, 1);
|
item = chunk_skip(item, 1);
|
||||||
|
|
||||||
|
/* strip architecture suffix if present */
|
||||||
|
if (extract_token(&package_stripped, ':', &package))
|
||||||
|
{
|
||||||
|
package = package_stripped;
|
||||||
|
}
|
||||||
|
|
||||||
/* extract versions */
|
/* extract versions */
|
||||||
version = old_version = chunk_empty;
|
version = old_version = chunk_empty;
|
||||||
|
|
||||||
@ -371,7 +377,6 @@ METHOD(sw_collector_history_t, merge_installed_packages, bool,
|
|||||||
private_sw_collector_history_t *this)
|
private_sw_collector_history_t *this)
|
||||||
{
|
{
|
||||||
uint32_t sw_id, count = 0;
|
uint32_t sw_id, count = 0;
|
||||||
char package_arch[BUF_LEN];
|
|
||||||
char *package, *arch, *version, *v1, *name, *n1;
|
char *package, *arch, *version, *v1, *name, *n1;
|
||||||
bool installed, success = FALSE;
|
bool installed, success = FALSE;
|
||||||
sw_collector_dpkg_t *dpkg;
|
sw_collector_dpkg_t *dpkg;
|
||||||
@ -439,13 +444,6 @@ METHOD(sw_collector_history_t, merge_installed_packages, bool,
|
|||||||
|
|
||||||
if (!sw_id)
|
if (!sw_id)
|
||||||
{
|
{
|
||||||
/* Package name is stored with appended architecture */
|
|
||||||
if (!streq(arch, "all"))
|
|
||||||
{
|
|
||||||
snprintf(package_arch, BUF_LEN, "%s:%s", package, arch);
|
|
||||||
package = package_arch;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* new sw identifier - create with state 'installed' */
|
/* new sw identifier - create with state 'installed' */
|
||||||
sw_id = this->db->set_sw_id(this->db, name, package, version,
|
sw_id = this->db->set_sw_id(this->db, name, package, version,
|
||||||
this->source, TRUE);
|
this->source, TRUE);
|
||||||
|
@ -93,15 +93,9 @@ METHOD(sw_collector_info_t, get_os, char*,
|
|||||||
METHOD(sw_collector_info_t, create_sw_id, char*,
|
METHOD(sw_collector_info_t, create_sw_id, char*,
|
||||||
private_sw_collector_info_t *this, char *package, char *version)
|
private_sw_collector_info_t *this, char *package, char *version)
|
||||||
{
|
{
|
||||||
char *pos, *sw_id;
|
char *sw_id;
|
||||||
size_t len;
|
|
||||||
|
|
||||||
/* Remove architecture from package name */
|
if (asprintf(&sw_id, "%s__%s-%s%s%s", this->tag_creator, this->os,
|
||||||
pos = strchr(package, ':');
|
|
||||||
len = pos ? (pos - package) : strlen(package);
|
|
||||||
|
|
||||||
/* Build software identifier */
|
|
||||||
if (asprintf(&sw_id, "%s__%s-%.*s%s%s", this->tag_creator, this->os, len,
|
|
||||||
package, strlen(version) ? "-" : "", version) == -1)
|
package, strlen(version) ? "-" : "", version) == -1)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user