summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorLibravatar smitsohu <smitsohu@gmail.com>2018-11-11 16:28:14 +0100
committerLibravatar smitsohu <smitsohu@gmail.com>2018-11-11 16:28:14 +0100
commitfed26d4fb7a726b1f6e2ddeef75be749fd172701 (patch)
treec283682e12e69bf590dd3bbf25e768b3422f3da2 /src/lib
parentfix the fix: ff6612fac86e1a79ba264167f0263ff12f62f346 (diff)
downloadfirejail-fed26d4fb7a726b1f6e2ddeef75be749fd172701.tar.gz
firejail-fed26d4fb7a726b1f6e2ddeef75be749fd172701.tar.zst
firejail-fed26d4fb7a726b1f6e2ddeef75be749fd172701.zip
user database: improve error strings and checks
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/firejail_user.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/lib/firejail_user.c b/src/lib/firejail_user.c
index 03aaa3b4e..4dbbcee2a 100644
--- a/src/lib/firejail_user.c
+++ b/src/lib/firejail_user.c
@@ -29,6 +29,7 @@
29#include "../include/firejail_user.h" 29#include "../include/firejail_user.h"
30#include <sys/types.h> 30#include <sys/types.h>
31#include <pwd.h> 31#include <pwd.h>
32#include <errno.h>
32 33
33#define MAXBUF 4098 34#define MAXBUF 4098
34 35
@@ -113,15 +114,22 @@ int firejail_user_check(const char *name) {
113 114
114 // check file existence 115 // check file existence
115 char *fname = get_fname(); 116 char *fname = get_fname();
117 assert(fname);
116 if (access(fname, F_OK)) { 118 if (access(fname, F_OK)) {
117 free(fname); 119 if (errno == ENOENT) { // assume the user doesn't care about access checking
118 return 1; // assume the user doesn't care about access checking 120 free(fname);
121 return 1;
122 }
123 else { // for example no search permission on SYSCONFDIR
124 fprintf(stderr, "Error: cannot access %s\n", fname);
125 perror("access");
126 exit(1);
127 }
119 } 128 }
120 129
121 FILE *fp = fopen(fname, "r"); 130 FILE *fp = fopen(fname, "r");
122 if (!fp) { 131 if (!fp) {
123 fprintf(stderr, "Error: cannot open %s for reading. " 132 fprintf(stderr, "Error: cannot read %s\n", fname);
124 "See \"man firejail-users\" for more information about this file.\n", fname);
125 perror("fopen"); 133 perror("fopen");
126 exit(1); 134 exit(1);
127 } 135 }
@@ -166,6 +174,7 @@ void firejail_user_add(const char *name) {
166 if (access(fname, F_OK) == 0) { 174 if (access(fname, F_OK) == 0) {
167 if (firejail_user_check(name)) { 175 if (firejail_user_check(name)) {
168 printf("User %s already in the database\n", name); 176 printf("User %s already in the database\n", name);
177 free(fname);
169 return; 178 return;
170 } 179 }
171 } 180 }