summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsecdb/common
diff options
context:
space:
mode:
authorJan Friedel <Jan.Friedel@Sun.COM>2010-07-27 14:38:47 +0200
committerJan Friedel <Jan.Friedel@Sun.COM>2010-07-27 14:38:47 +0200
commitf89940742f5d14dde79b69b98a414dd7b7f585c7 (patch)
tree4ee3607a7fa5f68806f2e15326b561943bfdc420 /usr/src/lib/libsecdb/common
parent7a0c1e298cab158fe4113f2e75e46140eb4825e9 (diff)
downloadillumos-joyent-f89940742f5d14dde79b69b98a414dd7b7f585c7.tar.gz
PSARC/2009/636 Obsolete getacinfo(3bsm)
PSARC/2009/642 audit_control(4) EOL and removal PSARC/2010/218 Audit subsystem Rights Profiles PSARC/2010/220 svc:/system/auditset service 6875456 Solaris Audit configuration in SMF - phase 2 (PSARC/2009/636, PSARC/2009/642) 6942035 audit_binfile(5) leaves unfinished audit logs. 6942041 auditd(1) says "auditd refreshed" on startup. 6943275 audit_remote(5) leaks memory on audit service refresh 6955077 adt_get_mask_from_user() should regard _SC_GETPW_R_SIZE_MAX 6955117 $SRC/lib/libbsm/common/audit_ftpd.c shouldn't hardcode the lenght of usernames (8) 6956169 adt_audit_state() returns non-boolean values --HG-- rename : usr/src/cmd/auditconfig/auditconfig_impl.h => usr/src/lib/libbsm/common/audit_policy.h rename : usr/src/cmd/auditconfig/audit_scf.c => usr/src/lib/libbsm/common/audit_scf.c rename : usr/src/cmd/auditconfig/audit_scf.h => usr/src/lib/libbsm/common/audit_scf.h
Diffstat (limited to 'usr/src/lib/libsecdb/common')
-rw-r--r--usr/src/lib/libsecdb/common/mapfile-vers1
-rw-r--r--usr/src/lib/libsecdb/common/secdb.c99
2 files changed, 60 insertions, 40 deletions
diff --git a/usr/src/lib/libsecdb/common/mapfile-vers b/usr/src/lib/libsecdb/common/mapfile-vers
index b184473b9e..76b2a3692d 100644
--- a/usr/src/lib/libsecdb/common/mapfile-vers
+++ b/usr/src/lib/libsecdb/common/mapfile-vers
@@ -81,6 +81,7 @@ SYMBOL_VERSION SUNWprivate_1.1 {
_kva2str;
_kva_dup;
_kva_free;
+ _kva_free_value;
_new_kva;
_str2kva;
_enum_profs;
diff --git a/usr/src/lib/libsecdb/common/secdb.c b/usr/src/lib/libsecdb/common/secdb.c
index 0c8f9da2f2..e012d95ce0 100644
--- a/usr/src/lib/libsecdb/common/secdb.c
+++ b/usr/src/lib/libsecdb/common/secdb.c
@@ -49,7 +49,7 @@ kva_match(kva_t *kva, char *key)
kv_t *data;
if (kva == NULL || key == NULL) {
- return ((char *)NULL);
+ return (NULL);
}
data = kva->data;
for (i = 0; i < kva->length; i++) {
@@ -58,7 +58,7 @@ kva_match(kva_t *kva, char *key)
}
}
- return ((char *)NULL);
+ return (NULL);
}
/*
@@ -89,6 +89,32 @@ _kva_free(kva_t *kva)
}
/*
+ * _kva_free_value(): Free up memory (value) for all the occurrences of
+ * the given key.
+ */
+void
+_kva_free_value(kva_t *kva, char *key)
+{
+ int ctr;
+ kv_t *data;
+
+ if (kva == NULL) {
+ return;
+ }
+
+ ctr = kva->length;
+ data = kva->data;
+
+ while (ctr--) {
+ if (strcmp(data->key, key) == 0 && data->value != NULL) {
+ free(data->value);
+ data->value = NULL;
+ }
+ data++;
+ }
+}
+
+/*
* new_kva(): Allocate a key-value array.
*/
kva_t *
@@ -97,11 +123,11 @@ _new_kva(int size)
kva_t *new_kva;
if ((new_kva = (kva_t *)calloc(1, sizeof (kva_t))) == NULL) {
- return ((kva_t *)NULL);
+ return (NULL);
}
if ((new_kva->data = (kv_t *)calloc(1, (size*sizeof (kv_t)))) == NULL) {
free(new_kva);
- return ((kva_t *)NULL);
+ return (NULL);
}
return (new_kva);
@@ -132,7 +158,7 @@ _str2kva(char *s, char *ass, char *del)
*s == '\0' ||
*s == '\n' ||
(strlen(s) <= 1)) {
- return ((kva_t *)NULL);
+ return (NULL);
}
p = s;
while ((p = _strpbrk_escape(p, ass)) != NULL) {
@@ -147,12 +173,12 @@ _str2kva(char *s, char *ass, char *del)
size = m * KV_ADD_KEYS;
}
if ((nkva = _new_kva(size)) == NULL) {
- return ((kva_t *)NULL);
+ return (NULL);
}
data = nkva->data;
nkva->length = 0;
if ((buf = strdup(s)) == NULL) {
- return ((kva_t *)NULL);
+ return (NULL);
}
pair = _strtok_escape(buf, del, &last_pair);
do {
@@ -172,43 +198,34 @@ _str2kva(char *s, char *ass, char *del)
* (buf). Use delimeter (del) to separate pairs. Use assignment character
* (ass) to separate keys and values.
*
- * Return Values: 0 Success 1 Buffer too small 2 Out of memory
+ * Return Values: 0 Success 1 Buffer too small
*/
int
_kva2str(kva_t *kva, char *buf, int buflen, char *ass, char *del)
{
int i;
- int length = 0;
- char *tmp;
+ int len;
+ int off = 0;
kv_t *data;
if (kva == NULL) {
return (0);
}
+
+ buf[0] = '\0';
data = kva->data;
+
for (i = 0; i < kva->length; i++) {
if (data[i].value != NULL) {
- length += 2 + strlen(data[i].value);
- }
- }
- if (length > buflen) {
- return (1);
- }
- (void) memset(buf, 0, buflen);
- if ((tmp = (char *)malloc(buflen)) == NULL) {
- return (2);
- }
- for (i = 0; i < kva->length; i++) {
- if (data[i].value != NULL) {
- if (snprintf(tmp, buflen, "%s%s%s%s",
- data[i].key, ass, data[i].value, del) >= buflen) {
- free((void *)tmp);
- return (0);
+ len = snprintf(buf + off, buflen - off, "%s%s%s%s",
+ data[i].key, ass, data[i].value, del);
+ if (len < 0 || len + off >= buflen) {
+ return (1);
}
- (void) strcat(buf, tmp);
+ off += len;
}
}
- free((void *)tmp);
+
return (0);
}
@@ -240,15 +257,15 @@ _kva_dup(kva_t *old_kva)
int size;
kv_t *old_data;
kv_t *new_data;
- kva_t *nkva = (kva_t *)NULL;
+ kva_t *nkva = NULL;
if (old_kva == NULL) {
- return ((kva_t *)NULL);
+ return (NULL);
}
old_data = old_kva->data;
size = old_kva->length;
if ((nkva = _new_kva(size)) == NULL) {
- return ((kva_t *)NULL);
+ return (NULL);
}
new_data = nkva->data;
nkva->length = old_kva->length;
@@ -309,10 +326,10 @@ _argv_to_csl(char **strings)
{
int len = 0;
int i = 0;
- char *newstr = (char *)NULL;
+ char *newstr = NULL;
if (strings == NULL)
- return ((char *)NULL);
+ return (NULL);
for (i = 0; strings[i] != NULL; i++) {
len += strlen(strings[i]) + 1;
}
@@ -325,7 +342,7 @@ _argv_to_csl(char **strings)
newstr[len-1] = NULL;
return (newstr);
} else
- return ((char *)NULL);
+ return (NULL);
}
@@ -335,10 +352,10 @@ _csl_to_argv(char *csl)
int len = 0;
int ncommas = 0;
int i = 0;
- char **spc = (char **)NULL;
- char *copy = (char *)NULL;
+ char **spc = NULL;
+ char *copy = NULL;
char *pc;
- char *lasts = (char *)NULL;
+ char *lasts = NULL;
len = strlen(csl);
for (i = 0; i < len; i++) {
@@ -346,7 +363,7 @@ _csl_to_argv(char *csl)
ncommas++;
}
if ((spc = (char **)malloc((ncommas + 2) * sizeof (char *))) == NULL) {
- return ((char **)NULL);
+ return (NULL);
}
copy = strdup(csl);
for (pc = strtok_r(copy, ",", &lasts), i = 0; pc != NULL;
@@ -378,12 +395,14 @@ print_kva(kva_t *kva)
kv_t *data;
if (kva == NULL) {
- printf(" (empty)\n");
+ (void) printf(" (empty)\n");
return;
}
data = kva->data;
for (i = 0; i < kva->length; i++) {
- printf(" %s = %s\n", data[i].key, data[i].value);
+ (void) printf(" %s = %s\n",
+ data[i].key != NULL ? data[i].key : "NULL",
+ data[i].value != NULL ? data[i].value : "NULL");
}
}
#endif /* DEBUG */