From 04171b8d2b2fbc2c216a427c3b60aabc9725ebc2 Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Mon, 3 Sep 2007 21:58:44 +0000 Subject: Relevant BUGIDs: Debian bug #331278 Purpose of commit: bugfix/cleanup Commit summary: --------------- 2007-09-03 Steve Langasek * modules/pam_limits/pam_limits.c: remove a number of unnecessary string manipulations, including a strncpy() that was acting on overlapping memory. --- modules/pam_limits/pam_limits.c | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'modules/pam_limits') 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); -- cgit v1.2.3