diff options
author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2002-03-05 13:49:56 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2002-03-05 13:49:56 +0000 |
commit | 4579d22cac62b140f99be77fe99c614e9d8d070f (patch) | |
tree | 1435317b57611a50e1b3cf878a8256c67e69f519 /contrib/openpam/lib/openpam_set_option.c | |
parent | 46acc3702698ba19936598ab0b2bcb79d0541e14 (diff) | |
download | src-4579d22cac62b140f99be77fe99c614e9d8d070f.tar.gz src-4579d22cac62b140f99be77fe99c614e9d8d070f.zip |
Vendor import of OpenPAM Celandine.vendor/openpam/CELANDINE
Notes
Notes:
svn path=/vendor/openpam/dist/; revision=91684
svn path=/vendor/openpam/CELANDINE/; revision=91686; tag=vendor/openpam/CELANDINE
Diffstat (limited to 'contrib/openpam/lib/openpam_set_option.c')
-rw-r--r-- | contrib/openpam/lib/openpam_set_option.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/contrib/openpam/lib/openpam_set_option.c b/contrib/openpam/lib/openpam_set_option.c index 4e2033bf9f93..76ddd875e5d0 100644 --- a/contrib/openpam/lib/openpam_set_option.c +++ b/contrib/openpam/lib/openpam_set_option.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $P4: //depot/projects/openpam/lib/openpam_set_option.c#3 $ */ #include <sys/param.h> @@ -72,10 +72,20 @@ openpam_set_option(pam_handle_t *pamh, (cur->optv[i][len] == '\0' || cur->optv[i][len] == '=')) break; } + if (value == NULL) { + /* remove */ + if (i == cur->optc) + return (PAM_SUCCESS); + for (free(cur->optv[i]); i < cur->optc; ++i) + cur->optv[i] = cur->optv[i + 1]; + cur->optv[i] = NULL; + return (PAM_SUCCESS); + } if ((opt = malloc(len + strlen(value) + 2)) == NULL) return (PAM_BUF_ERR); sprintf(opt, "%.*s=%s", (int)len, option, value); if (i == cur->optc) { + /* add */ optv = realloc(cur->optv, sizeof(char *) * (cur->optc + 2)); if (optv == NULL) { free(opt); @@ -85,6 +95,10 @@ openpam_set_option(pam_handle_t *pamh, optv[i + 1] = NULL; cur->optv = optv; ++cur->optc; + } else { + /* replace */ + free(cur->optv[i]); + cur->optv[i] = opt; } return (PAM_SUCCESS); } |