Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
gnome-keyring
gnome-keyring-pam-auto-start-if.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-keyring-pam-auto-start-if.patch of Package gnome-keyring
Index: gnome-keyring-2.24.1/pam/gkr-pam-module.c =================================================================== --- gnome-keyring-2.24.1.orig/pam/gkr-pam-module.c +++ gnome-keyring-2.24.1/pam/gkr-pam-module.c @@ -205,6 +205,39 @@ write_string (int fd, const char* buf) return 0; } +/* Check for list match. */ +static int +evaluate_inlist (const char *needle, const char *haystack) +{ + const char *item; + const char *remaining; + + remaining = haystack; + + while (1) { + item = strstr (remaining, needle); + if (item == NULL) + break; + + /* is it really the start of an item in the list? */ + if (item == haystack || *(item - 1) == ',') { + item += strlen (needle); + /* is item really needle? */ + if (*item == '\0' || *item == ',') + return PAM_SUCCESS; + } + + remaining = strchr (item, ','); + if (remaining == NULL) + break; + + /* skip ',' */ + ++remaining; + } + + return PAM_AUTH_ERR; +} + /* ----------------------------------------------------------------------------- * DAEMON MANAGEMENT */ @@ -732,16 +765,30 @@ prompt_password (pam_handle_t *ph) } static uint -parse_args (int argc, const char **argv) +parse_args (pam_handle_t *ph, int argc, const char **argv) { uint args = 0; - + const void *svc; + int i; + + svc = NULL; + if (pam_get_item(ph, PAM_SERVICE, &svc) != PAM_SUCCESS) + svc = NULL; + /* Parse the arguments */ - for (; argc-- > 0; ++argv) { - if (strcmp (argv[0], "auto_start") == 0) + for (i = 0; i < argc; i++) { + if (strcmp (argv[i], "auto_start") == 0) args |= ARG_AUTO_START; - else - syslog (GKR_LOG_WARN, "gkr-pam: invalid option: %s", argv[0]); + else if (strncmp (argv[i], + "auto_start_if=", + strlen ("auto_start_if=")) == 0) { + if (svc && + evaluate_inlist (svc, + &argv[i][strlen ("auto_start_if=")]) == PAM_SUCCESS) + args |= ARG_AUTO_START; + + } else + syslog (GKR_LOG_WARN, "gkr-pam: invalid option: %s", argv[i]); } return args; @@ -757,7 +804,7 @@ pam_sm_authenticate (pam_handle_t *ph, i uint args; int ret; - args = parse_args (argc, argv); + args = parse_args (ph, argc, argv); /* Figure out and/or prompt for the user name */ ret = pam_get_user (ph, &user, NULL); @@ -822,7 +869,7 @@ pam_sm_open_session (pam_handle_t *ph, i const char *user = NULL, *password = NULL; struct passwd *pwd; int ret; - uint args = parse_args (argc, argv); + uint args = parse_args (ph, argc, argv); int started_daemon; /* Figure out the user name */ @@ -987,7 +1034,7 @@ pam_sm_chauthtok (pam_handle_t *ph, int uint args; int ret; - args = parse_args (argc, argv); + args = parse_args (ph, argc, argv); /* Figure out and/or prompt for the user name */ ret = pam_get_user (ph, &user, NULL);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor