aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-08-15 22:22:31 +0300
committerSergey Poznyakoff <gray@gnu.org>2018-08-15 22:22:31 +0300
commit7a40b7873bd666809183cdd952d6e2a8f1870981 (patch)
tree0ae71532dc78f597b717152b564d6681d1ad832a
parent988b8e27f5df26d7e9f6fd7984677873ca1c40cb (diff)
downloadpam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.gz
pam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.bz2
Major cleanup
* lib/graypam.h (gray_pam_init) (gray_raise,gray_malloc,gray_zalloc,gray_calloc) (gray_realloc,gray_strdup): Remove. (gray_slist_err,gray_slist_clrerr): New functions. (gray_slist_append,gray_slist_append_char): Return ssize_t. (gray_slist_coalesce): Likewise. (gray_slist_grow_backslash_num) (gray_slist_grow_backslash): Return int. (errno_to_pam): New function. (gray_set_transform_expr): Return int. * lib/mem.c (gray_raise,gray_malloc,gray_zalloc,gray_calloc) (gray_realloc,gray_strdup): Remove. (gray_2nrealloc): Rewrite. * lib/base64.c: Check return from gray_slist_append_char * lib/env.c: Check return values from gray_slist functions * lib/ldappass.c: Likewise. * lib/slist.c (gray_slist_bucket) <ec>: New member. (gray_slist_err,gray_slist_clrerr): New functions. (gray_slist_append,gray_slist_append_char): Return ssize_t. (gray_slist_coalesce): Likewise. (gray_slist_grow_backslash_num) (gray_slist_grow_backslash): Return int. * lib/transform.c: Use standard memory allocation functions. * pam_ldaphome/pam_ldaphome.c: Likewise. * pam_innetgr/pam_innetgr.c: Likewise. * pam_log/pam_log.c: Likewise. * pam_regex/pam_regex.c: Likewise. * pam_sql/pam_mysql.c: Likewise. * pam_sql/pam_pgsql.c: Likewise.
-rw-r--r--lib/base64.c20
-rw-r--r--lib/env.c66
-rw-r--r--lib/graypam.h50
-rw-r--r--lib/ldappass.c107
-rw-r--r--lib/mem.c81
-rw-r--r--lib/slist.c127
-rw-r--r--lib/transform.c244
-rw-r--r--pam_groupmember/pam_groupmember.c1
-rw-r--r--pam_innetgr/pam_innetgr.c1
-rw-r--r--pam_ldaphome/pam_ldaphome.c306
-rw-r--r--pam_log/pam_log.c48
-rw-r--r--pam_regex/pam_regex.c26
-rw-r--r--pam_sql/pam_mysql.c14
-rw-r--r--pam_sql/pam_pgsql.c18
-rw-r--r--pam_sql/pam_sql.c81
-rw-r--r--pam_sql/pam_sql.h5
-rw-r--r--pam_umotd/pam_umotd.c49
17 files changed, 788 insertions, 456 deletions
diff --git a/lib/base64.c b/lib/base64.c
index 85b974a..9d0191e 100644
--- a/lib/base64.c
+++ b/lib/base64.c
@@ -51,19 +51,25 @@ gray_base64_decode(gray_slist_t slist, const char *iptr, size_t isize)
51 } 51 }
52 } 52 }
53 53
54 /* I have a entire block of data 32 bits get the output 54 /* I have a entire block of data 32 bits get the output
55 data. */ 55 data. */
56 if (i == 4) { 56 if (i == 4) {
57 gray_slist_append_char(slist, 57 if (gray_slist_append_char(slist,
58 (data[0] << 2) | ((data[1] & 0x30) >> 4)); 58 (data[0] << 2) | ((data[1] & 0x30) >> 4)) != 1)
59 gray_slist_append_char(slist, 59 return -1;
60 ((data[1] & 0xf) << 4) | ((data[2] & 0x3c) >> 2)); 60 if (gray_slist_append_char(slist,
61 gray_slist_append_char(slist, 61 ((data[1] & 0xf) << 4) | ((data[2] & 0x3c) >> 2))
62 ((data[2] & 0x3) << 6) | data[3]); 62 != 1)
63 return -1;
64 if (gray_slist_append_char(slist,
65 ((data[2] & 0x3) << 6) | data[3]) != 1)
66 return -1;
63 nbytes += 3 - pad; 67 nbytes += 3 - pad;
64 } else 68 } else {
69 errno = EILSEQ;
65 return -1; 70 return -1;
71 }
66 i = 0; 72 i = 0;
67 } 73 }
68 return nbytes; 74 return nbytes;
69} 75}
diff --git a/lib/env.c b/lib/env.c
index 83152e4..b1da177 100644
--- a/lib/env.c
+++ b/lib/env.c
@@ -91,34 +91,45 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap)
91 if (!fp) { 91 if (!fp) {
92 _pam_log(LOG_ERR, "cannot open configuration file `%s': %s", 92 _pam_log(LOG_ERR, "cannot open configuration file `%s': %s",
93 file_name, strerror (errno)); 93 file_name, strerror (errno));
94 return 1; 94 return 1;
95 } 95 }
96 96
97 while (p = fgets(buf, sizeof buf, fp)) { 97 while ((p = fgets(buf, sizeof buf, fp))) {
98 int len; 98 int len;
99 struct gray_env *env; 99 struct gray_env *env;
100 100
101 line++; 101 line++;
102 while (*p && isspace(*p)) 102 while (*p && isspace(*p))
103 p++; 103 p++;
104 len = strlen(p); 104 len = strlen(p);
105 if (len == 0) 105 if (len == 0)
106 continue; 106 continue;
107 if (p[len-1] != '\n') { 107 if (p[len-1] != '\n') {
108 if (!slist) 108 if (!slist) {
109 slist = gray_slist_create(); 109 slist = gray_slist_create();
110 gray_slist_append(slist, p, len); 110 if (!slist) {
111 while (p = fgets(buf, sizeof buf, fp)) { 111 rc = errno;
112 break;
113 }
114 }
115 if (gray_slist_append(slist, p, len) != len) {
116 rc = errno;
117 break;
118 }
119 while ((p = fgets(buf, sizeof buf, fp))) {
112 len = strlen(p); 120 len = strlen(p);
113 gray_slist_append(slist, p, len); 121 gray_slist_append(slist, p, len);
114 if (p[len - 1] == '\n') 122 if (p[len - 1] == '\n')
115 break; 123 break;
116 } 124 }
117 gray_slist_append_char(slist, 0); 125 if (gray_slist_append_char(slist, 0) != 1
118 p = gray_slist_finish(slist); 126 || (p = gray_slist_finish(slist)) == NULL) {
127 rc = errno;
128 break;
129 }
119 len = strlen(p); 130 len = strlen(p);
120 } 131 }
121 132
122 p[len-1] = 0; 133 p[len-1] = 0;
123 len = gray_trim_ws(p); 134 len = gray_trim_ws(p);
124 135
@@ -126,16 +137,25 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap)
126 continue; 137 continue;
127 138
128 if (p[len-1] == '\\') { 139 if (p[len-1] == '\\') {
129 int err = 0; 140 int err = 0;
130 141
131 /* Collect continuation lines */ 142 /* Collect continuation lines */
132 if (!slist) 143 if (!slist) {
133 slist = gray_slist_create(); 144 slist = gray_slist_create();
145 if (!slist) {
146 rc = errno;
147 break;
148 }
149 }
134 do { 150 do {
135 gray_slist_append(slist, p, len - 1); 151 if (gray_slist_append(slist, p, len - 1)
152 != len - 1) {
153 rc = errno;
154 break;
155 }
136 p = fgets (buf, sizeof buf, fp); 156 p = fgets (buf, sizeof buf, fp);
137 if (!p) 157 if (!p)
138 break; 158 break;
139 line++; 159 line++;
140 len = strlen(p); 160 len = strlen(p);
141 if (len == 0) 161 if (len == 0)
@@ -147,32 +167,39 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap)
147 err = 1; 167 err = 1;
148 break; 168 break;
149 } 169 }
150 p[len-1] = 0; 170 p[len-1] = 0;
151 len = gray_trim_ws(p); 171 len = gray_trim_ws(p);
152 } while (p[len-1] == '\\'); 172 } while (p[len-1] == '\\');
153 if (len) 173 if (rc)
154 gray_slist_append(slist, p, len); 174 break;
155 gray_slist_append_char(slist, 0); 175 if (len) {
156 p = gray_slist_finish(slist); 176 if (gray_slist_append(slist, p, len) != len) {
177 rc = errno;
178 break;
179 }
180 }
181 if (gray_slist_append_char(slist, 0) != 1
182 || (p = gray_slist_finish(slist)) == NULL) {
183 rc = errno;
184 break;
185 }
157 if (err) 186 if (err)
158 continue; 187 continue;
159 } 188 }
160 189
161 env = malloc(sizeof *env); 190 env = malloc(sizeof *env);
162 if (!env) { 191 if (!env) {
163 _pam_log(LOG_EMERG, "not enough memory"); 192 rc = errno;
164 rc = 1;
165 break; 193 break;
166 } 194 }
167 195
168 env->name = strdup(p); 196 env->name = strdup(p);
169 if (!env->name) { 197 if (!env->name) {
170 _pam_log(LOG_EMERG, "not enough memory"); 198 rc = errno;
171 free(env); 199 free(env);
172 rc = 1;
173 break; 200 break;
174 } 201 }
175 202
176 for (p = env->name; *p && !isspace(*p); p++) 203 for (p = env->name; *p && !isspace(*p); p++)
177 ; 204 ;
178 if (*p) 205 if (*p)
@@ -192,13 +219,18 @@ gray_env_read_tr(const char *file_name, struct gray_env **penv, char **trmap)
192 env->next = config_env; 219 env->next = config_env;
193 config_env = env; <