diff options
author | Jan Friedel <Jan.Friedel@Sun.COM> | 2010-07-27 14:38:47 +0200 |
---|---|---|
committer | Jan Friedel <Jan.Friedel@Sun.COM> | 2010-07-27 14:38:47 +0200 |
commit | f89940742f5d14dde79b69b98a414dd7b7f585c7 (patch) | |
tree | 4ee3607a7fa5f68806f2e15326b561943bfdc420 /usr/src/lib/libsecdb/common | |
parent | 7a0c1e298cab158fe4113f2e75e46140eb4825e9 (diff) | |
download | illumos-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-vers | 1 | ||||
-rw-r--r-- | usr/src/lib/libsecdb/common/secdb.c | 99 |
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 */ |