aboutsummaryrefslogtreecommitdiff
path: root/modules/pam_faillock/faillock.c
diff options
context:
space:
mode:
authorSam Hartman <hartmans@debian.org>2024-12-02 09:55:34 -0700
committerSam Hartman <hartmans@debian.org>2024-12-02 09:55:34 -0700
commit4f3cfaf827bfa42a239c255092a128a3a02198bf (patch)
treeeac7f023f043739b79b2a51bd68c3006acb12964 /modules/pam_faillock/faillock.c
parent6408d4b1baff9a7e58fd66e1d1c0871be0823777 (diff)
parent7c9fb6472dcfae34ddbf4fbc9ecfafae2cf173c3 (diff)
downloadpam-4f3cfaf827bfa42a239c255092a128a3a02198bf.tar.gz
pam-4f3cfaf827bfa42a239c255092a128a3a02198bf.tar.bz2
pam-4f3cfaf827bfa42a239c255092a128a3a02198bf.zip
Update upstream source from tag 'upstream/1.7.0'
Update to upstream version '1.7.0' with Debian dir 0b3cd490884352e14273caeca2f05c6a525499fa
Diffstat (limited to 'modules/pam_faillock/faillock.c')
-rw-r--r--modules/pam_faillock/faillock.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/modules/pam_faillock/faillock.c b/modules/pam_faillock/faillock.c
index 091f253a..92484747 100644
--- a/modules/pam_faillock/faillock.c
+++ b/modules/pam_faillock/faillock.c
@@ -36,42 +36,39 @@
#include "config.h"
#include <string.h>
+#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
-#include <sys/stat.h>
#include <fcntl.h>
#include <security/pam_modutil.h>
#include "faillock.h"
-#define ignore_return(x) if (1==((int)x)) {;}
+#define ignore_return(x) if (1==((int)(x))) {;}
int
open_tally (const char *dir, const char *user, uid_t uid, int create)
{
char *path;
int flags = O_RDWR;
- int fd;
+ int fd, r;
if (dir == NULL || strstr(user, "../") != NULL)
/* just a defensive programming as the user must be a
* valid user on the system anyway
*/
return -1;
- path = malloc(strlen(dir) + strlen(user) + 2);
- if (path == NULL)
+ if (*dir && dir[strlen(dir) - 1] != '/')
+ r = asprintf(&path, "%s/%s", dir, user);
+ else
+ r = asprintf(&path, "%s%s", dir, user);
+ if (r < 0)
return -1;
- strcpy(path, dir);
- if (*dir && dir[strlen(dir) - 1] != '/') {
- strcat(path, "/");
- }
- strcat(path, user);
-
if (create) {
flags |= O_CREAT;
if (access(dir, F_OK) != 0) {