diff options
author | Steve Langasek <vorlon@debian.org> | 2007-09-03 21:58:44 +0000 |
---|---|---|
committer | Steve Langasek <vorlon@debian.org> | 2007-09-03 21:58:44 +0000 |
commit | 04171b8d2b2fbc2c216a427c3b60aabc9725ebc2 (patch) | |
tree | 60c2fb42089a5c375f4c9692cd74750673bd1d67 /modules/pam_limits/pam_limits.c | |
parent | 379e1f36401db2137b55382a3ad544069279e93d (diff) | |
download | pam-04171b8d2b2fbc2c216a427c3b60aabc9725ebc2.tar.gz pam-04171b8d2b2fbc2c216a427c3b60aabc9725ebc2.tar.bz2 pam-04171b8d2b2fbc2c216a427c3b60aabc9725ebc2.zip |
Relevant BUGIDs: Debian bug #331278
Purpose of commit: bugfix/cleanup
Commit summary:
---------------
2007-09-03 Steve Langasek <vorlon@debian.org>
* modules/pam_limits/pam_limits.c: remove a number of unnecessary
string manipulations, including a strncpy() that was acting on
overlapping memory.
Diffstat (limited to 'modules/pam_limits/pam_limits.c')
-rw-r--r-- | modules/pam_limits/pam_limits.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/modules/pam_limits/pam_limits.c b/modules/pam_limits/pam_limits.c index 961a7ad0..d65e64bf 100644 --- a/modules/pam_limits/pam_limits.c +++ b/modules/pam_limits/pam_limits.c @@ -465,8 +465,6 @@ static int parse_config_file(pam_handle_t *pamh, const char *uname, int ctrl, return PAM_SERVICE_ERR; } - /* init things */ - memset(buf, 0, sizeof(buf)); /* start the show */ while (fgets(buf, LINE_LENGTH, fil) != NULL) { char domain[LINE_LENGTH]; @@ -475,46 +473,40 @@ static int parse_config_file(pam_handle_t *pamh, const char *uname, int ctrl, char value[LINE_LENGTH]; int i; size_t j; - char *tptr; + char *tptr,*line; - tptr = buf; + line = buf; /* skip the leading white space */ - while (*tptr && isspace(*tptr)) - tptr++; - strncpy(buf, tptr, sizeof(buf)-1); - buf[sizeof(buf)-1] = '\0'; + while (*line && isspace(*line)) + line++; /* Rip off the comments */ - tptr = strchr(buf,'#'); + tptr = strchr(line,'#'); if (tptr) *tptr = '\0'; /* Rip off the newline char */ - tptr = strchr(buf,'\n'); + tptr = strchr(line,'\n'); if (tptr) *tptr = '\0'; /* Anything left ? */ - if (!strlen(buf)) { - memset(buf, 0, sizeof(buf)); + if (!strlen(line)) continue; - } - memset(domain, 0, sizeof(domain)); - memset(ltype, 0, sizeof(ltype)); - memset(item, 0, sizeof(item)); - memset(value, 0, sizeof(value)); + domain[0] = ltype[0] = item[0] = value[0] = '\0'; - i = sscanf(buf,"%s%s%s%s", domain, ltype, item, value); + i = sscanf(line,"%s%s%s%s", domain, ltype, item, value); D(("scanned line[%d]: domain[%s], ltype[%s], item[%s], value[%s]", i, domain, ltype, item, value)); for(j=0; j < strlen(ltype); j++) ltype[j]=tolower(ltype[j]); - for(j=0; j < strlen(item); j++) - item[j]=tolower(item[j]); - for(j=0; j < strlen(value); j++) - value[j]=tolower(value[j]); if (i == 4) { /* a complete line */ + for(j=0; j < strlen(item); j++) + item[j]=tolower(item[j]); + for(j=0; j < strlen(value); j++) + value[j]=tolower(value[j]); + if (strcmp(uname, domain) == 0) /* this user have a limit */ process_limit(pamh, LIMITS_DEF_USER, ltype, item, value, ctrl, pl); else if (domain[0]=='@') { @@ -560,7 +552,7 @@ static int parse_config_file(pam_handle_t *pamh, const char *uname, int ctrl, return PAM_IGNORE; } } else { - pam_syslog(pamh, LOG_WARNING, "invalid line '%s' - skipped", buf); + pam_syslog(pamh, LOG_WARNING, "invalid line '%s' - skipped", line); } } fclose(fil); |